IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

最新文章

采集自各技术站点的近期文章。

IT DevOps/ 2019-08-11 11:31:51 / 累计浏览 2,436

系统工程师的自我修养- sed篇

这篇文章系统地梳理了传统UNIX环境下的sed工具,从底层原理讲起,特别强调了其基于pattern space逐行处理的核心机制,与GNU版本做了区分。作者清晰地界定了sed与awk的适用场景:sed长于行内的强大替换与编辑,适合做“文本编辑器”;而awk更擅长列的提取与格式化,是“信息处理器”。 文章没有堆砌所有命令,而是直接从实战出发。在讲解了如何用SELECTION(行号、正则)精确选取目标文本后,通过一系列电话簿、路径、配置文件的示例,演示了打印(-p)、插入(i)、追加(a)和替换(c)这些最常用的操作。作者的讲解紧密结合了sed“读取-处理-输出”的工作流程,比如在解释`-n`选项时,就回溯到默认输出pattern space的原理,让读者知其然更知其所以然。 整体来看,这是一篇不求大而全,但求小而精的实践指南。它把sed的核心骨架和最实用的“几把刷子”清晰地呈现出来,非常适合想要快速掌握sed行处理精髓的系统工程师作为入门和速查参考。

本机暂存
IT 后端/ 2019-08-11 11:29:22 / 累计浏览 2,776

阿里巴巴的发展史 - 读《阿里铁军》

这篇讲的是作者读完《阿里铁军》后,对阿里巴巴早期发展史的梳理与思考。 文章首先勾勒了阿里的关键发展历程:从1999年创立、获得孙正义投资,到遭遇互联网泡沫时账上仅剩700万美元的生死危机。正是在绝境中诞生的“中国供应商”地推业务,凭借对出口经济窗口期的把握和一丝不苟的“陌拜”与复盘文化,意外成为了阿里的造血命脉。随后,马云在2003年力排众议布局淘宝与支付宝,以及2005年接管雅虎中国以获取关键技术人才,都被视为决定公司走向的战略节点。 作者将2001年的绝地求生和2003年的电商与支付双线布局,称为阿里的两个“创世时刻”。其核心观点在于,阿里的成功不仅是运气,更是将地推执行力、快速迭代的工作方式与坚韧的价值观(如“客户第一”)相结合的结果。文章通过分析孙正义投资、港股上市融得17亿美元为淘宝输血等具体事件,展现了资本、战略与业务执行之间的深刻互动。 对读者而言,这篇文章不仅是一部企业史,更揭示了在技术浪潮中,如何识别关键转折点、构建组织韧性,以及在“向管理要绩效”与“以业务代管理”之间寻找平衡的现实挑战。

本机暂存
IT 算法/ 2019-08-10 22:41:13 / 累计浏览 2,119

风投是如何进行投资判断的

从腾讯投资部转身投入一线创业公司,资深投资人 Annie 的职业选择背后,藏着一个被无数创业者追问的问题:风投机构究竟如何判断一个项目?这篇文章借由她的亲身观察,为我们拆解了投资决策中那些“看不见的标尺”。 Annie 在普林斯顿大学的学术背景与在腾讯投资部的实战经验,让她练就了一套犀利的评估框架。当她深入猿辅导这家数据表现堪称优异的公司后,她发现投资判断远非数据报表那么简单。文章的核心观点在于,顶尖风投的决策往往是理性计算与感性洞察的结合体——既会严谨分析公司的增长曲线、单位经济模型与市场天花板,也会深度拷问创始团队的愿景、韧性与进化能力。 这对读者最大的启发在于,无论是创业者准备融资,还是从业者想理解资本逻辑,都不能只停留在“把故事讲好”或“把数据做漂亮”的层面。真正打动投资人的,往往是团队对业务本质的深刻理解,以及在不确定性中持续找到正确方向的证明。投资判断的本质,是在当下数据与未来可能性之间做出一道高风险的权衡题。

本机暂存
IT 开发者/ 2019-08-10 22:33:13 / 累计浏览 5,620

OKR 工作法简介

这篇讲的是 OKR(目标与关键结果)工作法。作者从阅读《OKR 工作法》一书出发,结合实践经验,拆解了这个在硅谷流行、后引入国内的目标管理方法。 文章的核心在于阐明 OKR 的独特性:它设定有挑战性的目标(关键结果初始信心指数仅为 5/10),且**明确不与绩效挂钩**,旨在激发团队内驱力。作者详细介绍了其实践工具——一个包含目标、关键结果、本周重点及状态指标的四象限画布,以及每周讨论、更新的流程。 一个重点是 OKR 与 Scrum 的融合。作者认为,OKR(宏观战略)与 Scrum(微观战术)可以互补:在 Scrum 计划和回顾会议中,同步更新 OKR 画布,让日常迭代与长期目标对齐。文章也犀利地对比了 OKR 与 KPI:KPI 易导致数据造假等短视行为,而 OKR 通过断开与薪酬的关联、强调自组织讨论,来避免这一点。它真正替代的,是原本模糊的团队目标透明化机制。 最后,文章也指出了落地挑战,比如组织架构(需要业务型团队)和团队积极性。总的来说,OKR 不仅是团队管理工具,也适用于个人目标梳理,其价值在于将“要我做”转化为“我要做”的清晰路径。

本机暂存
IT 后端/ 2019-08-10 22:26:45 / 累计浏览 2,658

协程并发模型及使用感受

这篇讲的是协程并发模型在真实项目中的“两面性”。作者以一个Python项目为例,分享了使用gevent协程后的编程体验:它让并发模型变得简洁,一个协程对应一个任务,抛弃了传统的线程池。但文章重点剖析了在CPU资源受限的单核环境下,协程暴露的一系列生产陷阱。 文中指出的陷阱非常具体:协程中的间接死循环会导致其他协程被饿死;引入了未被“green化”的阻塞库(如MySQL-python)会阻塞整个事件循环,导致调度延迟;在单核CPU被压榨到80%-90%时,无法设定优先级的协程库会使高时延敏感的API协程与耗时任务协程争夺资源,影响服务质量。此外,程序员在自动切换环境下容易忽略协程挂起(如长时间sleep)对整个协程池吞吐量的影响。 作者最终的实践是,为了规避CPU瓶颈,项目还是演进到了多进程结构。文章总结道,协程在低CPU系统中能带来编程简便性,但当系统负载上去后,其资源管理和调试的复杂度可能会抵消甚至超过多线程模型。对于考虑引入协程的开发者而言,这篇经验分享提前点明了从理论便利走向工程现实时需要应对的挑战。

本机暂存
IT 开发者/ 2019-08-10 22:20:17 / 累计浏览 3,648

创业笔记 | 从0到1开公司是什么体验

这篇讲的是一位技术创业者从零开始注册公司的真实体验。作者从辞职创业后着手公司注册出发,详细记录了在深圳“自己动手”完成工商注册的全过程,并分享了其中遇到的坑与实用建议。 文章的核心是经验分享:从最初在上海找代理失败,到后来完全通过“广东政务服务网”等线上平台自助完成申请。作者具体介绍了核名查询、使用银行U盾进行PDF数字签名、最终免费获取营业执照的流程。在领取执照后,又自费完成了刻制公章、前往银行办理对公账户的步骤,期间还特别提醒了注册信息隐私泄露的风险——提交申请后不到2分钟,就接到了推销电话。 这篇笔记的价值在于其详实的“手把手”记录,覆盖了从线上申请到线下领取的完整链路,并提炼出使用备用手机号、了解定点刻章机构、准备齐全开户材料等关键注意事项,为准备创业的同行提供了一份接地气的流程指南和避坑参考。

本机暂存
IT 后端/ 2019-08-10 22:15:47 / 累计浏览 14,161

Go Reflect 性能

这篇讲的是Go语言reflect包在带来便利的同时,所付出的性能代价。作者没有停留在理论层面,而是通过一组精心设计的基准测试,量化了不同反射操作与直接操作之间的性能差异。 测试以一个普通的struct类型为例,揭示了几个关键结论:通过反射创建对象比直接new慢约50%;而反射赋值的性能损耗则更为显著。有趣的是,使用FieldByName按字段名赋值比按索引Field赋值慢了近4倍,原因在于前者内部有额外的字段查找循环。 文章指出,反射在需要动态处理通用类型的场景(如json编解码、ORM框架)中不可或缺,但其带来的指令增加和interface{}装箱开销不容忽视。因此,在高性能敏感的场合,可以考虑采用代码生成等方式(如easyjson)来规避反射,实现性能优化。文章通过具体数据与源码示例,为开发者在“便利”与“性能”之间权衡提供了清晰的参考。

本机暂存
IT 开发者/ 2019-08-06 22:27:34 / 累计浏览 2,719

如何在终端显示图像缩略图

这篇讲的是如何在终端里直接预览图片缩略图。作者从之前介绍过的命令行图像查看器Fim出发,引出了一个更轻巧的新工具——lsix。 lsix是一个用Bash编写的命令行实用程序,它的工作方式很像我们常用的ls命令,但专门用来在终端中列出图像缩略图。它基于Sixel图形格式,能自动检测终端兼容性,并智能识别背景色以清晰显示图片。除了支持常见格式,它甚至能处理SVG、PDF等非位图文件。 文章一步步说明了安装过程:先确保系统装有ImageMagick,然后从GitHub下载lsix脚本并赋予执行权限即可。实际使用非常简单,直接运行`lsix`就能查看当前目录下的所有图片缩略图,也可以指定路径或使用通配符筛选特定文件。 作者特别提到,lsix需要终端支持Sixel格式(如以vt340模式运行的Xterm),但安装后会自动提示。最终生成的缩略图清晰度很高,完全不输图形界面查看器,非常适合需要在命令行环境下快速浏览图像的用户。

本机暂存
IT 后端/ 2019-07-26 14:09:47 / 累计浏览 1,658

使用 defer 还是不使用 defer?

这篇讲的是Go语言中defer语句的“爱恨情仇”——从最初赞赏它能简化资源清理代码,到发现其性能开销,再到最终理解其适用边界的全过程。 文章首先展示了defer的魅力:它能让锁的获取与释放成对出现,代码清晰且不易出错,因此在标准库中被广泛使用。然而,性能测试揭示了一个关键事实:使用defer释放锁(70.4 ns/op)比直接调用(19.3 ns/op)慢数倍,多个defer叠加时开销更大。这引出了核心矛盾:defer带来的代码简洁性,是以几十纳秒的性能损耗为代价的。 文章进一步探讨了Go官方对此的优化(如1.8版本的改进),并引用了实际案例(如Prometheus项目)。结论并非一刀切地否定defer,而是提出了务实的平衡点:对于大多数业务代码,defer的便利性远胜于其微小开销;但对于高并发下的“热路径”,通过pprof观察到defer成为瓶颈时,手动管理资源释放则是更优选择。简单说,defer并非免费,但它的代价在绝大多数场景下完全值得。

本机暂存
IT DevOps/ 2019-07-26 14:08:20 / 累计浏览 1,671

Mac下处理PC以^M结尾的文本

这篇文章解决的是在 Mac 系统下处理来自 Windows 的文本文件时,行尾出现多余 `^M` 字符(回车符)的常见问题。作者首先清晰地对比了不同系统的行末符差异:Unix/Linux 使用换行符 `\n`,老版本 Mac OS 使用回车符 `\r`,而 Windows 则使用回车换行组合符 `\r\n`。这种不匹配正是导致文本在 Mac 终端或编辑器中显示异常的根源。 文章接着提供了非常直接且实用的解决方案。作者引用 Stack Overflow 上的讨论,指出使用 `awk` 命令并指定记录分隔符 `RS` 为 `\r\n`,就能正确解析并处理这类文件,例如 `awk -v RS='\\r\\n' foo.log`。这个方法比手动替换字符更高效,也更精准。 对于开发者而言,理解这些底层差异并在处理跨平台数据时选择合适的工具,是提升效率、避免“踩坑”的关键。本文从现象到原理再到具体命令,提供了一次简明而完整的技术点拨。

本机暂存
IT 开发者/ 2019-06-28 13:45:05 / 累计浏览 2,306

图解python中赋值、浅拷贝、深拷贝的区别

这篇讲的是Python开发者经常遇到的“坑”:当你对一个列表或字典进行赋值、浅拷贝或深拷贝时,它们背后到底发生了什么?为什么修改一个会影响另一个,而有时又不会? 文章通过三段清晰的代码示例,逐步拆解了这三种操作的本质。赋值只是创建了同一个对象的另一个引用,两者完全绑定。浅拷贝会创建一个新容器,但容器内的元素仍然是原对象的引用,所以修改嵌套的可变对象(如内部的列表)依然会互相影响。而深拷贝则会递归地复制所有层级,创建出一个完全独立的副本,彻底切断了与原对象的关联。文章还特别指出了关键差异点:对于不可变类型(如字符串),修改会直接替换为新对象;而对于可变类型(如列表),修改操作在原对象上进行。此外,像数字、字符串这类非容器类型,实际上不存在拷贝操作。 作者通过内存地址的直观对比,把抽象的概念变得很具体。理解这些区别,能帮你避免在传递复杂数据结构时,因误操作而导致数据被意外修改的麻烦。

本机暂存
IT 后端/ 2019-06-28 13:38:28 / 累计浏览 2,645

10分钟看懂!基于Zookeeper的分布式锁

这篇讲的是如何用Zookeeper实现一个可靠的分布式锁。 作者从分布式系统协调的核心需求——分布式锁出发,直接对比了常见的数据库、Redis与Zookeeper三种方案,重点聚焦在Zookeeper的实现上。文章首先通俗地解释了Zookeeper是什么:一个提供配置管理、分布式协同等底层服务的中心化框架,其核心是一个类似文件系统的、保存在内存中的有序树状结构。 实现分布式锁的核心思路巧妙地利用了Zookeeper的几个关键特性:**有序节点**来排队,**临时节点**来防止客户端宕机导致的死锁,以及**事件监听**来高效地通知锁的释放。基本的算法是:客户端在指定根路径下创建临时有序子节点,序号最小的获得锁;否则就监听前一个节点的删除事件,从而实现公平的等待队列。 文章还深入讨论了两个关键优化。一是如何避免“羊群效应”,即每个客户端只监听自己前一个节点,而不是所有节点变更,这大大提升了性能。二是分析了Curator这个开源库如何将这些复杂逻辑封装成简单的 `acquire()` 和 `release()` API,让开发者能轻松使用。 总的来说,这篇文章没有停留在理论,而是深入到了算法细节与源码实现,把Zookeeper利用临时有序节点解决分布式锁的精髓讲得清晰透彻。

本机暂存
IT DevOps/ 2019-06-28 13:25:29 / 累计浏览 1,833

Linux 运维:系统服务管理

这篇讲的是Linux服务器运维中那些令人头疼的“重复学习”时刻——系统服务管理的方式总是随着技术演进而变迁。作者从自己给老款MacBook Pro安装Ubuntu 19.04桌面版出发,先吐槽了新版apt命令依然不够顺手,并演示了如何用aptitude替换掉默认的vim-tiny、补装net-tools这些桌面版缺失的基础工具。 文章的重点其实落在CentOS的服务管理上。作者并排展示了两种新老方式的实操命令:一边是逐渐被淘汰的SysV风格,用`chkconfig`查看、关闭或删除服务;另一边是主流的systemd,通过`systemctl`来列出、禁用服务状态。他甚至演示了如何暴力删除阿里云相关服务的残留文件,再用`reset-failed`清理干净——这恰恰是运维中常遇到的“清理战场”场景。 如果你正被服务器上那些幽灵般的服务困扰,或者面对不同发行版时对管理命令感到混乱,这篇文章给出的对比和具体步骤,就像一份可以直接“照着做”的速查手册。它不空谈理论,而是把折腾的过程和关键命令直接摊开,对实际排障很有参考价值。

本机暂存
IT 后端/ 2019-06-28 13:23:18 / 累计浏览 2,170

终端反编译字节码利器 CFR

这篇讲的是作者如何在终端下实现Java字节码的反编译。作者从个人对终端工作流的依赖出发,厌倦了JD-GUI这类图形化工具,转而寻找命令行解决方案,最终发现了CFR(Class File Reader)这款jar包工具。文章的核心在于展示CFR的实用命令:它可以单行反编译单个class文件,也能通过指定输出目录批量处理整个jar包。作者还贴心地将常用命令封装成了bash脚本,进一步简化操作。这种从需求出发、直接给出可运行命令的分享,让工具的上手路径非常清晰。对于习惯终端操作或需要快速、脚本化反编译场景的开发者来说,这是一个值得收录到工具箱的方案。

本机暂存
IT DevOps/ 2019-06-27 13:56:47 / 累计浏览 2,561

如何在 Linux 上复制文件/文件夹到远程系统?

这篇讲的是 Linux 用户日常一定会遇到的场景:怎么把本地的文件或文件夹高效地复制到远程服务器上。作者没有停留在只讲最常用的 `scp`,而是系统梳理了四种主流方案——`scp`、`rsync`、`pscp` 和 `prsync`,并详细解释了它们各自的设计思路和适用情况。 比如,`scp` 作为原生命令,安全可靠,适合快速单次传输;`rsync` 则胜在支持增量同步与断点续传,尤其适合大文件或经常变动的目录。而 `pscp` 和 `prsync` 是进阶工具,专门解决“同时把文件推送到多台服务器”的批量运维需求,提供了超时控制等实用特性。文章不仅列出了这些差异,还给出了可直接复制的命令行示例,从基础用法到多文件、多目录的复制场景都有覆盖。 作者强调这些方法都经过了实际环境的测试,确保读者拿来就能用。对于需要在不同生产环境中选择合适传输工具的开发者或运维人员来说,这份整理提供了一个清晰的决策参考。

本机暂存
IT 后端/ 2019-06-27 13:55:01 / 累计浏览 3,343

使用DNSPOD的API实现动态域名

这篇讲的是如何通过 DNSPOD 的 API,一步步搭建自己的动态域名解析(DDNS)服务。作者从实际操作出发,解决的是家庭网络等场景下,公网 IP 变动导致域名指向失效的问题。 文章的核心方案非常清晰:利用 DNSPOD 提供的 HTTP API,通过脚本自动获取当前外网 IP 并更新 A 记录。作者详细拆解了七个关键步骤,其中特别强调了容易踩坑的地方,比如生成的 Token 必须是 “ID,Token” 的组合格式,以及如何正确获取域名和子域名的 Record ID。 整个实现思路巧妙地结合了 `nc` 命令获取 IP 和 `curl` 调用 API,并最终封装成一个 Shell 脚本,配合 crontab 定时任务(例如每 15 分钟一次)即可实现全自动化。这为需要稳定域名指向动态 IP 的技术人员提供了一个轻量、可靠的自建方案。

本机暂存
IT DevOps/ 2019-05-01 20:02:20 / 累计浏览 1,956

系统管理员的 7 个 CI/CD 工具

这篇讲的是,当运维团队需要像开发一样熟练运用 CI/CD 时,该如何选择趁手的工具。作者从运维的视角出发,对比了七款主流工具的设计哲学与适用场景。 文章并没有停留在泛泛而谈,而是深入到具体工具的细节。例如,它指出 GitLab CI 凭借 YAML 声明式管道和 Auto DevOps 功能,在 Forrester 评估中名列前茅;GoCD 的杀手锏是“价值流视图”,适合需要串联多团队流水线的复杂组织;而像 Travis CI 这样的 SaaS 服务,则为开源项目提供了几乎零成本的起点。对于 Jenkins 这样的“元老”,文章既承认了其配置复杂的历史包袱,也点出了 Jenkins X 等项目向云原生转型的新方向。 作者的核心观点是,这些工具模型各异,但目标一致:通过自动化节省时间、提升可靠性。文章没有给出唯一答案,而是提供了一份详尽的“选型地图”。它帮助系统管理员理解,选择工具不仅要看功能列表,更要匹配团队的成熟度、协作流程以及对“基础设施即代码”的接纳程度。读完后,你可以根据自身团队的现状,找到那个能最快帮你“搭建起脚手架”的起点。

本机暂存
IT DevOps/ 2019-05-01 19:57:21 / 累计浏览 2,242

Bash 中的 & 符号和文件描述符

这篇讲的是 Bash 中 `&` 符号和文件描述符的深入应用,远不止于用 `&` 把进程丢到后台那么简单。作者从大家熟悉的 `>` 重定向出发,点明了其背后的实质——文件描述符 `1`(标准输出)。接着,文章系统地梳理了 `0`(标准输入)、`1`(标准输出)和 `2`(标准错误)这三个标准文件描述符,并展示了如何用它们精准控制命令的输出流向。 文章的核心亮点在于剖析了文件描述符操作的“顺序陷阱”。例如,`find ... 1>services.txt 2>&1` 能成功将所有结果(包括错误)写入文件,但仅仅调换顺序变成 `2>&1 1>services.txt`,错误信息就会直接打印到终端。作者通过 Bash 从左到右的处理逻辑解释了其中的原因:文件描述符是“通道”,在打开 `1` 指向文件之后,再将 `2` 导向 `1`,错误才会正确流入文件。 最后,文章回归到 `&` 的另一个关键角色,介绍了 `&>` 这个简洁的语法糖,它等价于 `2>&1`,能一步到位地合并标准输出和标准错误。掌握文件描述符的工作原理,是写出健壮、可控的 Bash 脚本的重要一步。

本机暂存
IT 安全/ 2019-04-09 00:38:55 / 累计浏览 2,222

活动 Web 页面人机识别验证的探索与实践

这篇讲的是电商活动页面如何“静悄悄”地对抗机器人刷单。作者从一个现实痛点出发:营销活动页因Web环境透明,易被脚本直接调用API“薅羊毛”,损害用户体验与平台利益。 文章核心是介绍一套多层次的人机识别技术方案。它不依赖显眼的验证码,而是通过前端收集用户进入页面、停留、滚动、点击等行为数据,结合设备环境信息,形成“行为指纹”提交给风控服务校验。为确保这套机制不被破解,方案在通信安全和代码保护上做了深入设计:利用有时效的动态Token绑定会话,对传输数据进行对称加密,并通过代码混淆与反调试处理增加前端逻辑的反编译成本。 作者详细拆解了从基础风控拦截、Token下发、数据加密上报到最终业务处理的完整流程。这套组合拳的目标是在用户无感知的前提下,让安全验证像背景一样自然运行,既防住了作弊,又守住了活动体验。

本机暂存
IT DevOps/ 2019-04-09 00:36:55 / 累计浏览 2,852

一文入门 Makefile

这篇讲的是如何用一份清晰的指南,帮助开发者快速掌握 Makefile 这一经典工程工具。作者从企业项目多源文件编译的混乱场景切入,点明了 Makefile 作为“编译规则定义者”的核心角色——它决定了文件编译的先后顺序与触发条件,一个 `make` 命令就能管理整个构建流程。 文章没有堆砌所有特性,而是紧扣实用性,剖析了 Makefile 的三个核心优势:智能管理编译依赖、通过增量更新节省时间、以及编写一次长期有效的便利性。它详细拆解了“目标: 依赖 -> 规则”这一基本语法格式,并借助图解阐明了 Makefile “向下查找依赖、向上执行生成”的工作原理。 更进一步,文章介绍了提升编写效率的关键技巧,包括使用 `$@`、`$^` 等自动变量,以及利用 `wildcard` 和 `patsubst` 函数来批量处理文件。这些内容覆盖了从入门到进行常规项目配置所需的实用知识,对于理解 Linux 环境下的自动化构建思想很有帮助。

本机暂存