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

最新文章

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

IT DevOps/ 2013-03-07 13:56:01 / 累计浏览 7,450

nicstat 网络流量统计利器

这篇讲的是 nicstat 这个被称作“网络接口的 iostat”的流量监控工具。作者从 Brendan Gregg 的性能分析 PPT 引出它,详细说明了如何将这个原本在 Solaris 下的工具移植并安装到 Linux 环境中。文章核心对比了 nicstat 和常见的 netstat,指出其关键优势在于:能同时报告字节与数据包流量、将数据归一化为每秒速率、统计所有接口、并尝试估算网卡利用率(%Util)与饱和度(Sat)。这些特性让实时监控和诊断更直观。 文中展示了具体的安装过程(需针对64位系统修改编译参数)和多个使用示例,例如用 `enicstat -l` 查看网卡状态,用 `-M` 切换为兆比特单位显示,以及用 `-t` 获取 TCP 连接统计。特别值得注意的是,nicstat 通过读取 `/proc/net/dev`、`snmp` 等文件来获取数据,并提供了如重传率(%ReTX)、连接数等 TCP 层面信息,对排查网络问题很实用。文章最后也坦诚说明了在 Linux 下其饱和度统计的局限性,提示读者结合使用率和数据包速率进行综合判断。

本机暂存
IT 开发者/ 2013-03-07 13:54:53 / 累计浏览 4,016

实践中的重构

这篇讲的是,许多程序员对“重构”这件事怀有误解,而作者的核心观点是:重构绝非特殊阶段的“大工程”,而是贯穿日常编码的微习惯。 作者从日常工作切入,指出重构应和写代码、测试一样,是每个开发者的常规动作。他特别澄清了“重构”与“重写”的混淆——调整模块设计可能需要沟通技术债,但执行时仍需遵循重构原则。一个关键的前提是:“没有测试的重构就是耍流氓”,必须先为代码补足测试保障。 那么如何安全地重构?文章给出的标准是:能够“随时随地停下来,且不破坏任何测试”。这依赖于“小步重构”的实践——将大刀阔斧的修改拆解为一系列可验证的微小步骤。作者坦言,这需要刻意练习,与内心急于“一路劈杀”的冲动对抗。 重构易知难行,其精髓正在于将这种小步快跑的纪律,内化为肌肉记忆般的编码习惯。

本机暂存
IT 后端/ 2013-03-07 13:53:31 / 累计浏览 3,256

JVM内存分配与回收策略

这篇讲的是JVM中对象内存分配的“潜规则”,作者从最基础的规则出发,通过具体的代码示例和GC日志,带你看清内存分配的真实行为。 文章核心围绕三个关键策略展开:一是对象优先在Eden区分配,当Eden空间不足时就会触发Minor GC;二是大对象会绕过新生代,直接被“安置”在老年代,这可以通过`-XX:PretenureSizeThreshold`参数来控制;三是长期存活的对象会从新生代“晋升”到老年代,其阈值由`-XX:MaxTenuringThreshold`决定。 作者并没有停留在理论描述,而是为每个规则都准备了可运行的代码和对应的GC输出日志。比如,通过对比设置`MaxTenuringThreshold`为1和15时不同的GC结果,你能直观地看到对象年龄计数器如何影响晋升行为。这种用实验数据说话的方式,让这些抽象的内存管理机制变得非常具体和可验证。

本机暂存
IT 算法/ 2013-03-07 13:52:09 / 累计浏览 3,636

JVM垃圾收集算法

这篇系统梳理了JVM垃圾回收中几种核心算法的思路与权衡。文章从最基础的“标记-清除”算法切入,指出了它虽简单却有效率低下与内存碎片两大硬伤。为解决效率,“复制算法”以空间换时间,通过内存分区和存活对象拷贝来运行,但代价是内存减半;不过,结合新生代“98%对象朝生夕死”的特性,现代虚拟机巧妙调整了Eden与Survivor区的比例,将浪费降至10%。 针对老年代对象存活率高、无法浪费空间的场景,“标记-整理”算法则另辟蹊径:标记后让所有存活对象向一端移动,从而整理出连续内存空间。最后,文章点明了当今主流的做法——“分代收集”,它并非新算法,而是根据新生代与老年代的不同特点(对象存活率、空间担保需求等),灵活组合采用上述策略,以达到整体最优的回收效果。整篇文章对比清晰,从算法原理到工程实现,为理解JVM内存管理提供了扎实的脉络。

本机暂存
IT 开发者/ 2013-03-07 13:47:34 / 累计浏览 1,365

textmate常用快捷键备忘

这篇讲的是TextMate编辑器的常用快捷键,堪称一份详尽的备忘录。文章直接按功能模块,列出了从视图切换、文件导航到代码编辑、查找替换等方方面面的高效操作方式。比如用“Cmd + T”快速定位项目文件,用“Cmd + /”一键注释代码,或是利用“Cmd + Option + A”进行多行同步编辑。 它不仅覆盖了通用操作,还特别整理了针对HTML和Rails开发者的Bundle快捷键,例如自动生成标签或在Controller、View、Model间快速跳转。对于列编辑模式这种特殊技巧也做了说明。对于使用TextMate的开发者而言,这篇文章就像一份随时可查的效率手册,把零散的操作技巧系统化地呈现出来,能有效帮助提升日常编码的流畅度。

本机暂存
IT 后端/ 2013-03-05 13:31:47 / 累计浏览 2,912

需不需要备案、应该怎么备案、备案应该找谁?(2013年版)

国内站长对备案常感困惑,政策复杂,难以理清。这篇文章就从这个常见痛点出发,通过大量实例,把备案的规则讲透了。 文章的核心观点非常明确:备案的本质不是备域名或主机,而是“备人”——即在中国境内提供web服务的网站所有者,需要向主管机关报备。理解这一点,是厘清所有问题的关键。 接着,文章通过“张三”、“李四”等不同角色的具体案例,清晰对比了何时需要备案、何时不需要。例如,使用境外或香港服务器则无需备案,而使用境内服务器就必须备案;即使是.cn域名,也可以通过申请“境外解析”来避免备案。这些例子让抽象的政策变得一目了然。 对于站长最关心的“找谁备案”问题,文章也给出了直接答案:备案必须通过接入商(主机商)进行,而域名注册商不提供此服务。所需资料因地区而异,个人通常需身份证和照片。 最后,文章还特别澄清了“大中华cn域名必须备案才能解析”的坊间传闻,指出注册者可以申请境外解析或非网站用途解析。

本机暂存
IT 设计/ 2013-03-05 13:29:18 / 累计浏览 2,153

移动产品设计书籍推荐

做移动产品设计该从哪本书读起?这篇作者从自己的实战经验出发,给出了一份扎实的书单。他认为,所有平台的官方设计指南(Guidelines)是绝对的基石,尤其iOS指南编写得最为完整规范,新入行者必须反复熟读,在此之前甚至无需旁骛。在此基础上,他推荐了《简约至上》作为产品设计思维入门,指出其核心是站在用户角度简化设计;《触动人心》则聚焦于从iPhone视角思考应用设计。对于想理解整个移动生态的读者,《移动应用的设计与开发》虽有些年头,但其生态系统概述仍有价值。最后,作为工具书,《移动应用UI设计模式》详细介绍了70种设计模式。文章还附赠了四个精选的APP截图与设计素材网站,方便设计师随时获取灵感。整篇文章剥离了空泛理论,全是从“哪些必须读”和“具体解决什么问题”出发的干货指南。

本机暂存
IT DevOps/ 2013-03-05 13:28:38 / 累计浏览 9,338

Linux常用性能调优工具索引

这篇盘点了Linux性能调优的“武器库”,源自Brendan Gregg经典的性能分析图谱。作者并未止步于理论图表,而是结合自身多年的运维与优化实践,将图中提到的数十款核心工具与自己的实战笔记一一关联。 从监控网络流量的nicstat,到剖析内核函数的perf与systemtap,再到排查I/O瓶颈的iotop和blktrace,文章为每一个工具都提供了可直达的深度解读链接。它更像一个精心整理的工具箱导览,涵盖了从宏观系统监控(如top、vmstat、dstat)到微观进程追踪(如strace、pidstat)的完整工具链。 对于系统工程师和开发者而言,这份索引省去了逐一搜寻的功夫,提供了按需取用的便利入口。当你在面对CPU、内存、磁盘或网络的性能谜题时,可以从这里快速找到那个最称手的工具。

本机暂存
IT 算法/ 2013-03-05 13:24:00 / 累计浏览 4,564

开源压缩算法Zopfli介绍

这篇讲的是谷歌近期推出的一款名为Zopfli的开源压缩算法。它本身是一款deflate格式的兼容性压缩器,灵感来源于WebP图像压缩中的无损压缩技术优化,因此能与广泛使用的zlib、gzip完全兼容,这意味着几乎所有浏览器和解压工具都能直接处理Zopfli生成的数据。 文章重点剖析了Zopfli的两个核心特点:一是压缩性能,其输出文件比gzip 9压缩的结果小约3.7%到8.3%;二是压缩速度,比gzip 9慢了81倍。这是一个典型的用时间换空间的权衡。 作者指出,这种“高压缩率、解压完全兼容”的特性,使其特别适合Web服务器的数据存储与分发。虽然单个文件压缩率的提升看似不大,但在海量数据的场景下(如大型网站、CDN),由此带来的带宽与存储成本节约将非常可观。文章末尾还附上了简要的命令行用法,方便读者快速上手测试。

本机暂存
IT 设计/ 2013-03-05 13:22:27 / 累计浏览 2,631

选3本书推荐给新入行的PM

这篇文章针对新入行的产品经理,推荐了三本分别覆盖设计、产品与运营核心能力的书籍,并补充了若干拓展读物。 作者从自身经验出发,认为PM的工作大致可拆解为设计、产品、运营三个维度。他首先推荐了《简约至上》,强调其核心在于用最简设计满足用户需求,是本需要反复阅读的交互设计经典。产品层面则首推《启示录》,称其为目前最好的产品设计入门书,内容涵盖需求分析到产品生命周期管理。运营方面,作者选取了以淘宝卖家为原型的《玩法变了》,指出虽聚焦特定领域,但能启发触类旁通的运营与品牌思考。 此外,文章还列举了《金字塔原理》《应需而变》《决策与判断》等书,分别从逻辑表达、同理心培养与心智模型分析等角度提供补充。作者最终点明,读书的关键不在数量,而在于能否启发思考、打通思路——初期可依赖专业书入门,之后则应广泛涉猎、融会贯通。

本机暂存
IT DevOps/ 2013-03-05 13:21:53 / 累计浏览 54,724

Git常用命令备忘

这篇讲的是Git的常用命令速查手册。作者把日常开发中最可能用到的Git操作,从基础配置到进阶使用,系统性地整理成了一份清晰的备忘录。 内容从配置用户信息和设置别名开始,快速上手。接着是文件操作的三板斧:用`git add`暂存修改,用`git commit`提交,以及用`git diff`查看差异,文中详细列举了各种diff比较场景。分支管理部分尤为实用,涵盖了创建、切换、合并分支,以及使用`git rebase`整理提交历史的命令。 文章还覆盖了几个非常实用的功能:通过生成和应用补丁在不同环境间同步修改;利用`git stash`临时保存工作进度,专注于紧急任务;以及远程协作的核心命令`git pull`和`git push`,包括如何跟踪远程分支和清理远程仓库。 这份清单的细致程度很高,甚至包含了如何使用`tig`这样的可视化工具,以及设置远程仓库HEAD指向等细节。对于不常使用Git,需要偶尔回顾命令的开发者来说,这份结构化的清单可以作为手边的速查手册,省去反复搜索文档的麻烦。

本机暂存
IT 前端/ 2013-03-05 13:17:59 / 累计浏览 4,275

jQuery选择器探讨进阶

这篇讲的是jQuery选择器表达式背后的性能玄机。作者深入剖析了jQuery底层的Sizzle引擎如何解析选择器,并重点对比了符合CSS标准的表达式与jQuery自定义伪类选择器(如`:eq()`、`:odd`)在性能上的显著差异。 文章核心发现是,现代浏览器中,Sizzle会优先调用高效的`querySelectorAll()`方法来处理CSS选择器,这使得像`input[type="text"]`这样的表达式比功能类似但写法为`input:text`的自定义选择器快上约一倍。原因在于后者无法被浏览器原生方法解析,只能退回到较慢的“循环与检验”遍历模式。作者通过具体性能测试图表直观展示了这一差距,并指出了一个关键陷阱:在IE7等老旧浏览器中,某些写法会因底层方法差异而直接导致选择器失效。 基于此,文章给出了三条实用优化建议:优先编写标准CSS选择器以利用`querySelectorAll`、将复杂筛选(如`:eq(1)`)移至链式方法调用(如`.eq(1)`),以及善用链式调用与变量缓存来减少重复查询。这不仅解释了“快慢”的区别,更提供了在实际开发中能直接应用的编写准则。

本机暂存
IT 前端/ 2013-03-05 13:16:08 / 累计浏览 4,266

jQuery事件编写进阶

这篇讲的是jQuery事件编程中一个核心却容易忽略的细节:如何正确选择事件委托方式。作者从源码层面对比了早已废弃的`.live()`和更推荐的`.delegate()`方法,清晰地揭示了两者本质区别——`.live()`默认将事件绑定到`document`,导致初始化时需扫描全DOM且冒泡路径过长,易引发性能问题;而`.delegate()`则直接绑定到最近的父元素,路径更短、控制更精准。 文章不仅指出了`.live()`的弊端,也探讨了其早期注册、避免DOM扫描的巧妙之处,并给出了通过设置`context`来改善性能的折中方案。对于jQuery 1.9+的用户,作者提供了基于`$(document).on()`的现代改写方法,延续了早期委托的思想。 后半部分更进一步,展示了如何利用`.event.special`将滚动延迟(throttled)这种常见优化模式封装成可复用的自定义事件,极大简化了业务代码。整篇文章从对比到优化再到架构思路,层层递进,对理解jQuery事件机制和编写高性能前端交互代码都很有启发。

本机暂存
IT 开发者/ 2013-03-05 13:13:54 / 累计浏览 2,666

GitHub 是怎么火起来的

这篇讲的是GitHub的早期发展史与技术传播逻辑。作者从2009年Ruby大会的亲身经历切入,指出GitHub在获得巨额融资引发大众关注前,早已在Ruby社区奠定了坚实基础。 文章的核心观点在于,Git和GitHub的爆发是技术需求驱动社区自然演进的结果。Ruby/Rails框架虽开发高效,但多人协作时面临传统版本控制系统(如CVN/SVN)的冲突痛点。Git的分布式与分支管理特性完美契合了这一场景,使得Ruby社区几乎全员迁移至Git生态。而GitHub正是诞生于这一浪潮,由湾区Ruby开发者为解决Git托管需求而创造。 更深层的传播链条清晰可见:Rails项目率先迁移到GitHub形成示范,社区内包管理工具Gem的全面接入形成网络效应,最终带动了关系紧密的JavaScript与iOS开发社区跟进。作者强调,这种由核心开发者社区向外扩散的“涟漪效应”,是GitHub增长的关键动力,而其高估值则更多源于云计算SaaS平台的商业模式。文章为我们提供了一个观察技术如何通过解决具体痛点、依托社区凝聚力实现指数级增长的经典案例。

本机暂存
IT DevOps/ 2013-03-05 12:45:31 / 累计浏览 6,572

记一次丢包网络故障

这篇讲的是一台Nginx/PHP服务器时不时出现HTTP服务卡住的排查故事。作者的排查思路很清晰:先从应用层入手,通过查看Nginx日志中PHP的响应时间与Strace跟踪,排除了PHP的嫌疑。接着转向Nginx本身,确认其默认已关闭Nagle算法。随后检查了Linux内核的tcp_timestamps等参数,也排除了配置问题。 在思路陷入僵局后,作者决定使用tcpdump抓包。面对原始日志的晦涩,他巧妙地借助Wireshark进行可视化分析,从中发现了大量“TCP Dup ACK”和“TCP Out-Of-Order”标志,这直接指向了网络层可能存在的丢包。最终,通过使用`ping -f`命令发起洪水请求,屏幕上不断出现的丢包点直观地证实了网络状况确实不佳。 文章将问题根源定位为网络丢包,但并未止步于此,而是将更底层的物理原因(如网线、网卡或带宽)留给了更专业的运维人员。整个排查过程层层递进,展示了从应用层到内核层再到网络层的完整诊断链条。

本机暂存
IT 开发者/ 2013-03-05 12:42:04 / 累计浏览 1,117

大公司的创新思考:基因延伸性创新

这篇讲的是大公司如何在新时代实现创新成功。作者从Scott的“新企业车库”时代论出发,提出了一套更细致的创新分类:基因延伸性创新与颠覆性创新。 作者认为,大公司依靠资源、规模和品牌取得的创新成功,本质上是一种“基因延伸性创新”。公司的“基因”——即其在核心竞争领域长期优化形成的独特优势——既是护城河,也可能成为拓展新领域的障碍。文章拆解了新浪微博和微信的成功案例,指出它们都精准地将母公司在媒体运营和通讯工具上的基因,延伸到了移动互联网新战场。 基因延伸性创新要成功,必须满足两个条件:一是创新方向必须符合公司基因,否则如Google+之于Google、新浪游戏之于新浪都难以成功;二是延伸的新领域必须有足够的市场空间,文章以Apple TV的有限市场想象空间作为反例。而另一种“颠覆性创新”由于会重构游戏规则,往往难以在大公司内部存活,更多由创业公司驱动。 最后,作者也提到通过收购来改变公司基因(如苹果收购NeXT)是大公司实现颠覆性创新的艰难但可能的路径。文章的结论是,未来将是大公司与创业公司各展所长的创新时代,而非一家独大。

本机暂存
IT 算法/ 2013-03-04 14:42:41 / 累计浏览 1,705

为什么互联网产品的成功率这么低

这篇文章回应了一位创业者的困惑,深入剖析了为何互联网新产品的存活率可能不足1%。作者从三个核心原因展开:首先是马太效应,互联网渠道扁平化和体验高度同质化导致赢家通吃,市场留给后来者的机会极少;其次是盈利模式单一,在国内尤其依赖大规模流量变现,逼迫产品涌入红海;最后是行业生态不成熟,团队几乎需要独立包揽从策划到运营的所有环节,对综合能力要求极高。 文章不仅分析了现象,更揭示了一个行业悖论:马太效应驱使产品创新需远离红海,但小团队又往往因生态支持不足而难以突破全能型挑战。最终,作者反思了“成功”的定义,提出对许多从业者而言,全心投入并装扮一个自己热爱的产品,所收获的历程本身,或许比追逐那1%的渺茫成功更为真实和重要。

本机暂存
IT 开发者/ 2013-03-04 14:42:06 / 累计浏览 4,549

代码审查:ThoughtBot官方给出的代码审查指导原则

这篇讲的是如何让代码审查变得更高效、更友好。作者从 ThoughtBot 的官方指南出发,总结了在 GitHub 上进行代码审查时,审查者和被审查者双方都应遵循的一系列核心原则。 文章为审查者提供了具体的沟通心法:要记住编程主张常是个人观点,因此应多提问少命令、请求说明而非指责、避免代码归属之争,并且绝不能人身攻击。审查评论应清晰谦逊,避免使用“总是”“从不”等夸张修辞。如果讨论过于深入,可以转到线下进行。 而对于被审查的代码作者,文章建议要主动感谢建议、理解对事不对人、解释代码背后的思考,并在一个独立的 push 提交中集中处理反馈。关键流程包括:基于反馈更新代码、注明审查链接、等待所有审查者退出后再合并,并确保持续集成测试通过。 此外,文章还提倡建立统一的代码风格指南。当出现分歧时,应在指南仓库中发起讨论,而非在审查评论中争论。这些具体而微的实践,旨在将代码审查从一场潜在的技术辩论,转变为一次促进团队学习和代码质量提升的协作。

本机暂存
IT DevOps/ 2013-03-04 14:33:23 / 累计浏览 4,622

Iowait的成因、对系统影响及对策

这篇技术文章深入剖析了Linux系统中iowait的产生机制,从现象追踪到内核源码,揭示了这一指标背后的完整逻辑。 文章首先厘清概念,指出iowait的产生需要同时满足两个条件:有进程因I/O阻塞,且当前CPU上没有其他可运行的进程,导致CPU只能执行空闲任务。随后,作者引导读者从`vmstat`命令看到的表象,深入到`/proc/stat`文件的数据来源,并一路追到内核代码。 核心亮点在于对内核函数`account_system_time`的分析。文章通过代码指出,只有当`rq->nr_iowait > 0`(有进程等待I/O)且`p == rq->idle`(当前CPU在空闲)时,这段CPU时间才会被计入iowait。而引发这一切的源头,则是`io_schedule`和`io_schedule_timeout`这两个函数。文章进一步使用SystemTap编写脚本进行实际验证,通过在高负载引擎服务上追踪这些函数的调用栈,清晰展示了I/O等待的具体发生场景。 作者通过理论分析与实战验证相结合的方式,完整展现了iowait从现象到根源的追踪过程,让抽象的概念变得具体可感。

本机暂存
IT 前端/ 2013-03-04 14:22:44 / 累计浏览 4,809

你需要知道的三个CSS技巧

随着浏览器竞争白热化,越来越多的设备能支持前沿的W3C标准,这让我们得以用更强大的CSS来编写简洁、易维护的前端代码。这篇文章就聚焦于此,分享了三个或许被你忽略但非常实用的CSS特性。 第一个是`attr()`函数,它能直接在CSS中读取HTML元素的属性值。比如,通过`:after`伪类,你可以在打印页面时自动为链接加上其`href`属性地址,无需额外JavaScript。第二个技巧是`counter()`,它允许你在CSS中实现自动编号,为`h4`标题或区块添加序号时,不再受限于`

    `标签,灵活性大增。第三个是`calc()`函数,它让CSS能直接进行算术运算,轻松创建宽度为父元素宽度减去固定像素的元素,避免了以往需要JS计算样式的麻烦。 作者通过具体代码示例,展示了这些功能如何简化日常工作。文章的核心观点是,成熟的CSS已在某些方面具备替代JavaScript的能力,掌握它们能显著提升开发效率。

    本机暂存