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

最新文章

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

IT DevOps/ 2012-03-11 22:09:56 / 累计浏览 3,212

Linux TASK_IO_ACCOUNTING功能以及如何使用

这篇讲的是Linux内核如何提供进程级别的IO统计能力,以及如何启用和利用它。作者从我们熟悉但粒度有限的iostat工具说起,指出在Linux 2.6.20版本之前,要获取单个进程或线程发起的IO量是相当困难的,通常只能借助systemtap等专业工具。文章介绍的TASK_IO_ACCOUNTING内核功能,正是为了解决这一痛点而诞生的。 文章核心在于阐述这个内核选项的作用机制:开启后,内核会为每个任务维护详细的IO读写字节计数。作者不仅解释了如何在内核配置或启动参数中启用它,还展示了启用后如何通过/proc/[pid]/io文件查看具体数值,以及如何使用disktop等工具进行聚合和可视化。这对于需要进行精细化IO性能分析和故障定位的开发者与系统管理员来说,提供了从理论到实践的完整路径。

本机暂存
IT 后端/ 2012-03-11 22:08:54 / 累计浏览 7,343

说说lighttpd的fastcgi

这篇讲的是lighttpd这款Web服务器中FastCGI模块的独特实现与适用场景。 作者将lighttpd与Apache、Nginx等常见服务器并列,聚焦于它们在FastCGI进程管理上的不同哲学。核心对比点在于lighttpd采用了“单进程异步模型”来驱动FastCGI进程。具体来说,lighttpd本身并不像Nginx那样预先生成多个worker进程,而是通过其核心事件循环,用一个轻量级的管理进程去管理和通信多个独立的FastCGI后端进程。这种架构让lighttpd本身资源占用极低,但在处理高并发动态请求时,其异步特性可以带来显著的性能优势,尤其适合API网关或微服务前端这类场景。 不过,文章也坦诚地指出了另一面:这种设计意味着FastCGI进程的生命周期和健康检查需要更精细的手动配置与监控,配置和排错的门槛相对更高。相比之下,Nginx等服务器的进程池模型虽然在某些极端情况下可能消耗更多资源,但其“开箱即用”的稳定性和简便性对大多数常规Web应用更友好。因此,选择lighttpd的FastCGI,本质上是在用配置与运维的复杂性,去换取特定架构下的极致轻量与性能潜力。

本机暂存
IT DevOps/ 2012-03-11 22:07:08 / 累计浏览 2,239

Iostat看不到设备统计信息的原因分析

这篇讲的是一个让不少运维同学头疼的实际问题:在使用iostat监控磁盘性能时,新上的高速SSD或NVRAM设备却悄无声息,统计信息里完全找不到它们的身影。 作者从实际玩设备时发现的这个“异常”出发,没有停留在表面,而是深入系统层进行了剖析。核心在于,Linux的iostat依赖于内核的块层统计框架,而一些超高速或新型的存储设备(如某些NVMe设备或通过特殊方式暴露的NVRAM),可能没有正确注册或使用标准的统计接口,导致它们从iostat的“观测雷达”上消失了。文章拆解了其中的机制,指出了从设备驱动到内核统计计数器之间的关键环节可能存在的问题。 搞清楚“为什么看不到”之后,作者也给出了排查的思路和可行的解决方向,比如检查特定内核参数或使用更底层的工具来绕过限制。对于正在折腾高性能存储或遇到类似诡异情况的工程师来说,这篇分析提供了一次从现象到根因的完整排查路径。

本机暂存
IT 前端/ 2012-03-11 22:04:39 / 累计浏览 2,656

迁户口实录(深圳集体户到杭州个户)

这篇讲的是作者历时近三个月,将户口从深圳集体户迁至杭州个人户的全过程记录。整个办理从2011年12月19日开始,到2012年3月9日才最终完成,耗时远超预期。 问题主要出在户籍迁移流程缺乏足够的透明度。作者发现,由于对每次办理所需的具体材料准备不足,导致了多次往返和反复折腾。这其实也是许多人面对跨城迁户口时的共同痛点——环节多、要求细,官方指引往往不够详尽。 为了解决这个问题,作者完整记录了迁移中的每一步、所需文件以及遇到的具体障碍。这份“实录”的价值正在于它的细节性:它把一个看似简单的流程拆解成了具体可感的操作步骤,指出了哪些地方容易出错,哪些材料需要提前确认。对于同样面临户口迁移,特别是涉及集体户转个人户的同学来说,这份过来人的详细指南,或许能帮你省去许多不必要的奔波,让办理过程顺畅很多。

本机暂存
IT 数据库/ 2012-03-11 22:03:21 / 累计浏览 2,807

DBA的亲们应该知道的RAID卡知识

这篇文章专为数据库管理员(DBA)和关心存储性能的技术人员准备,深入剖析了RAID卡这一硬件在突破数据库IOPS瓶颈中的关键作用。作者从数据库应用常面临的I/O性能困境切入,指出软件层面的优化手段存在局限,而硬件层面的RAID与SSD则是直接有效的突破口。 文章并未停留在概念层面,而是具体阐述了不同RAID级别(如RAID 0、1、5、10等)在数据库场景下的适用性差异。例如,它解释了为何对数据安全和写入性能要求苛刻的OLTP数据库,往往倾向于选择RAID 10;而对读密集型场景,RAID 5或6的经济性优势又在哪里。这种对比不仅讲清了技术点,更将选择逻辑与DBA的实际决策联系起来。 最终,文章将RAID卡定位为数据库基础设施中不可忽视的一环,帮助DBA在规划存储方案时,能够基于业务需求(读写比例、容量、安全性)做出更精准的硬件选型与配置判断,而非仅依赖默认设置。

本机暂存
IT 后端/ 2012-03-04 20:49:26 / 累计浏览 5,081

web开发框架的选择(bottle or flask)及为autumn增加多线程支持

这篇讲的是作者在 Python web 开发中,从 Django 转向轻量级框架 Bottle 后,针对项目 “autumn” 遇到的新挑战所进行的架构演进。作者在之前的实践中已为 Bottle 设计了合理的项目结构,但在后续运行中发现,单进程模型在处理耗时任务时会成为性能瓶颈。因此,本次实践的核心是为 autumn 系统增加多线程支持。 具体方案上,作者利用 Bottle 框架的灵活性,并未局限于其自带的开发服务器。通过引入 wsgiref 结合 threading 模块,为每个客户端请求创建并处理独立的线程,从而将 I/O 密集型或需要并行处理的任务解耦,避免阻塞主线程。文章详细记录了这一改造的实施过程与遇到的坑。 实验结果表明,这一调整显著提升了系统在并发场景下的吞吐能力和响应稳定性,使得 Bottle 这个原本极简的框架也能应对更复杂的生产环境需求。作者最终的结论是,在保持框架轻量优势的同时,通过合理的架构补充(如多线程),可以在灵活性和性能之间取得理想的平衡。

本机暂存
IT 后端/ 2012-03-04 20:48:28 / 累计浏览 5,864

Thrift简析

这篇文章从RPC技术的实现难点出发,介绍了Thrift这个由Facebook开源的跨语言高性能RPC框架。它直接切入了开发者在构建分布式系统时面临的一个核心问题:如何高效、可靠地让不同语言编写的服务进行通信。 作者重点解析了Thrift的技术内核。它提供了一套简洁的IDL(接口定义语言),允许你像写接口一样定义数据结构和服务契约,然后通过编译器自动生成多种语言(如Java、Python、C++等)的客户端和服务端骨架代码。这解决了跨语言调用的繁琐工作。文章还提到了它内置的二进制序列化协议(如TBinaryProtocol),这使得数据在网络传输时的体积和速度都优于传统的文本格式,这是其高性能的关键之一。 作为一款经过大规模生产环境考验的成熟框架,Thrift的实现细节,比如连接池、IO模型、线程模型等,也值得深入了解。这篇分析帮助读者理解,选择Thrift不仅是为了调用远程方法,更是选择了一套完整的、经过优化的服务间通信解决方案。

本机暂存
IT 前端/ 2012-03-04 20:47:39 / 累计浏览 3,879

反webkit之战

这篇讲的是 WebKit 内核如何从备受赞誉的“现代浏览器标杆”,逐渐成为开发者与用户心中新的“兼容性噩梦”。作者敏锐地捕捉到了浏览器市场的这一轮回:在 IE6 的阴影终于散去后,WebKit(尤其是其移动版)因其垄断地位衍生的标准化滞后、私有特性泛滥以及性能瓶颈等问题,正承受着与当年 IE6 相似的批评浪潮。 文章梳理了 WebKit 从一家独大到争议四起的历程,具体点出其对新 Web 标准(如 Flexbox 布局早期版本、部分 API)的实现偏差、在移动端造成的渲染不一致问题,以及其庞大的代码库带来的维护挑战。核心观点指出,任何技术的垄断都可能反噬其自身发展,WebKit 目前面临的挑战正是这种循环的体现。 作者并未止于批判,而是将这场“反 WebKit 之战”视为 Web 平台走向更健康竞争的信号,最终将推动浏览器引擎(如 Blink、Gecko、WebKit)在良性竞争中共同解决根本问题。对于前端开发者而言,这既是一个理解平台演进复杂性的案例,也提醒我们持续关注标准实现与跨引擎兼容的重要性。

本机暂存
IT 前端/ 2012-03-04 20:47:33 / 累计浏览 3,824

延迟加载图片的jQuery插件-Lazy Load Plugin for JQuery

网页性能优化中,图片加载是个常见痛点,尤其对于图片密集的长页面来说。这篇介绍的是一个经典的jQuery插件——Lazy Load,它精准地解决了这个问题。 这个插件的核心思路很直接:只加载用户当前能看到的图片,当用户滚动页面时,再动态加载即将进入视口的新图片。这样就避免了一次性请求所有图片资源导致的页面卡顿和漫长等待,显著提升了首屏加载速度和整体用户体验。 实现上,它通过监听滚动事件来检查图片位置,巧妙地只对即将显示的图片发起请求。对于开发者来说,使用非常简单,只需引入脚本并初始化,几乎不需要修改原有代码。尽管现在有更现代的实现方式,但这种延迟加载的思想依然是性能优化的基石。

本机暂存
IT 设计/ 2012-03-04 20:46:37 / 累计浏览 2,680

基于axure的PRD协作

这篇讲的是如何通过axure来优化产品需求文档的协作效率。作者从PM与研发团队之间的沟通痛点出发,指出传统PRD文档与线框图、流程图分离,导致交付过程繁琐、信息不对称,增加了沟通成本和传递成本。核心方案是将所有这些元素整合到axure中统一输出,利用axure的交互功能,让文档、线框图和流程图在同一个平台上无缝结合。这样不仅简化了交付流程,还通过版本控制和实时注释,减少了版本混乱和误解的风险。 具体来说,作者基于一年多前的实践,展示了如何用axure创建集成的需求文档,其中线框图可以直接关联到文档描述,流程图则以动态形式呈现业务逻辑。效果上,团队反馈这种方法显著降低了沟通时间,提升了需求对齐的准确性,尤其在跨职能协作中表现出色。文章通过实际案例,为读者提供了可操作的步骤,强调了工具整合在提升研发效率中的关键作用。

本机暂存
IT 数据库/ 2012-03-04 20:46:13 / 累计浏览 1,492

人肉解析riak_admin join

这篇讲的是 Riak 数据库中一个常用命令 `riak_admin join` 的底层实现解析。作者没有停留在命令行使用层面,而是采用“人肉”的方式,直接追踪源码,一步步揭开这个命令背后发生了什么。 他发现 `riak_admin` 本质上只是一个 bash 脚本,当执行 `join` 操作时,脚本会调用 Riak 核心的 Erlang 代码,最终路由到 `riak_kv_console` 模块的 `join` 函数来完成集群节点加入的实际工作。文章清晰地展示了从用户敲下命令到系统执行核心逻辑的完整调用链。 这种深挖源码的分析,不仅让读者知其然,更知其所以然。它绕过了官方文档的简略说明,直接展示了 Riak 内部如何优雅地将命令行接口与核心业务逻辑解耦,对于想深入理解分布式数据库管理命令实现原理的工程师来说,提供了非常扎实的技术细节。

本机暂存
IT 安全/ 2012-03-04 20:44:12 / 累计浏览 4,603

浅谈Ddos攻击攻击与防御

这篇讲的是DDoS这个老生常谈却又防不胜防的网络安全问题。作者从一个常见的攻击现象切入,对比了当前几种主流的DDoS攻击类型,比如消耗带宽的SYN Flood、UDP Flood,以及针对应用层、更隐蔽的CC攻击。文章没有停留在罗列概念上,而是分析了各类攻击的核心原理与识别特征。 在防御策略部分,作者同样进行了梳理。从架构层面的高防CDN、流量清洗,到应用层的规则过滤、源站隐藏,再到灾备与应急响应,文章对比了不同防御手段的优劣势和适用场景。例如,高防CDN适合抵御大流量攻击,而精细的规则过滤则对应用层CC攻击更有效。 最后,文章强调,没有一劳永逸的银弹方案。有效的防御依赖于对攻击流量的精准识别,以及多层次、动态调整的防御体系构建。理解攻击原理,是选择正确防御组合的关键。

本机暂存
IT 数据库/ 2012-03-04 20:40:44 / 累计浏览 6,757

mysql查询中利用索引的机制

这篇讲的是 MySQL 查询优化中一个典型的“索引陷阱”。作者从一次实际遇到的问题出发:明明数据表已经建立了合适的索引,EXPLAIN 执行计划也明确显示会使用该索引,但实际查询时却“言行不一”,最终还是扫描了全表,导致性能低下。 文章详细复盘了这个排查过程。关键在于,EXPLAIN 的预估仅仅是优化器的“想法”,而最终是否使用索引还会受到运行时数据分布、统计信息是否准确、查询条件与索引的匹配度等多个细节因素的影响。作者在文中一步步分析了可能的原因,并最终定位到了问题的症结所在。 对于经常与 SQL 性能打交道的开发者而言,这篇文章提供了一个鲜活的案例。它提醒我们,当“理论上应该走索引”而“实际没走索引”时,不能只看 EXPLAIN 的表面结果,更需要结合表结构、数据量和查询写法进行综合诊断,才能真正揪出性能瓶颈。

本机暂存
IT 后端/ 2012-03-04 20:40:29 / 累计浏览 3,145

Clojure世界:Http Client

这篇讲的是 Clojure 开发者如何选择合适的 HTTP 客户端库。文章从日常开发中最常见的提交表单、下载网页等任务切入,对比了三种各有特色的实现方案。 作者首先重点推荐了 clj-http,这是一个对 Apache HttpClient 进行 Clojure 封装的库。它的核心优势在于提供了清晰、同步的 API,上手简单,功能全面,非常适合快速完成常见的 HTTP 请求任务。文章不仅给出了库的主页和依赖配置,还明确了它在同步调用场景下的适用性。 除了 clj-http,文中还提到了另外两个 HTTP 客户端实现,形成了一个小范围的对比。这种介绍方式不是单纯罗列工具,而是基于作者的实际使用经验,指出了每个库的侧重点。对于需要处理 Clojure 中 HTTP 通信的开发者来说,这篇文章提供了清晰的选型参考:clj-http 是追求简单可靠的同步调用首选,而另外两个方案则可能在异步或特定场景下更具优势。

本机暂存
IT 设计/ 2012-03-04 20:39:48 / 累计浏览 2,756

什么是互联网产品经理

这篇讲的是互联网产品经理这个“熟悉又陌生”的角色。文章并没有停留在“画原型、写文档”的刻板印象上,而是从其核心价值出发:产品经理本质上是“问题的发现者”与“解决方案的权衡者”。 作者详细拆解了产品经理的日常工作流——从用户调研中挖掘真痛点,到将模糊的需求转化为清晰的产品逻辑,再到推动研发、设计团队协同上线。这里特别强调了“优先级管理”这一关键能力:面对海量需求,如何依据业务目标、资源与数据反馈做取舍,是区分普通执行与优秀策略的分水岭。 文章还对比了产品经理与技术经理、项目经理的常见职责边界。产品经理更专注于“为什么做”和“做什么”,为产品方向负责;而技术经理侧重“如何更好地实现”,项目经理则保障项目按时按质落地。三者需要紧密协作,但关注点有本质不同。 对于开发者或刚入行的产品人,这篇文章厘清了许多常见的职责误解,帮助读者理解产品经理如何在技术可行性与用户体验之间搭建桥梁,最终推动一个产品从0到1并持续成长。

本机暂存
IT 设计/ 2012-03-04 20:39:22 / 累计浏览 2,187

为设计Metro风格的应用准备着—Windows 8设计指南翻译

这篇讲的是微软为Windows 8引入的全新Metro设计语言。文章详细翻译并解读了官方的《Windows 8 UX设计指南》,核心是帮助设计师和开发者理解并准备好迎接这个新平台。 Metro风格的设计原则与以往大不相同,它强调的是“内容胜于形式”、快速流畅的交互以及现代、简洁的视觉体验。文章从这些基本原则出发,拆解了排版、色彩、图标、布局以及动效等具体领域的规范。比如,指南会明确建议采用什么样的字体层级来组织信息,或者如何使用“活瓷贴”和实时更新来构建动态的界面。 对于正在或计划为Windows 8开发应用的团队来说,这篇译文是一份非常实用的前期资料。它系统性地梳理了新平台的设计思路和约束,能帮助团队在项目初期就确立正确的设计方向,避免因不熟悉新规范而走弯路。

本机暂存
IT 后端/ 2012-03-04 20:35:13 / 累计浏览 2,916

说说新浪微博的SNS化

这篇文章聚焦于2011年新浪微博启动的SNS化战略转型。作者从当时的行业背景与产品演进出发,对微博强化社交关系链的尝试提出了一个颇为尖锐的判断:他认为这一举措可能偏离了微博作为媒体平台的核心优势,甚至是一种“自寻死路”的冒险。 文章没有停留于表面批评,而是试图从产品逻辑、用户习惯和平台基因的角度进行剖析。作者指出,微博的成功建立在开放、快速的信息传播和公众议题的广场效应之上,而SNS化意味着要将重心转向熟人社交与私密互动,这可能导致用户关系的泛化与核心媒体价值的稀释。 尽管文章发表于转型初期,但其提出的问题至今仍有启示意义:任何平台的演进都必须审慎平衡“扩展”与“聚焦”的关系,盲目追逐热点模式而忽视自身的核心壁垒,往往会陷入战略迷思。作者对产品定位的深刻追问,比简单的结论更值得从事技术与产品的读者思考。

本机暂存
IT 后端/ 2012-03-04 20:33:00 / 累计浏览 3,440

无限递归导致 Segmentation fault

这篇讲的是一个看似莫名其妙的服务器故障。某台服务器上的定时任务——一个 shell 脚本周期性地调用 Java 程序——突然开始频繁报“Segmentation fault”。这个错误通常和底层内存访问有关,很容易让人以为是 JVM 本身或者硬件出了问题。 但作者没有停留在表面。他顺着线索一层层深挖,最终发现问题并不在 Java 虚拟机,也不在宿主环境,而是藏在了业务代码逻辑里。罪魁祸首竟然是代码中一个未能正确终止的无限递归调用。递归层层叠加,最终耗尽了线程栈内存,从而触发了操作系统的这个致命错误。 整个排查过程清晰地展示了如何从令人困惑的系统层错误日志入手,抽丝剥茧,最终定位到应用层的逻辑漏洞。它提醒我们,即使遇到像“Segmentation fault”这样底层、凶险的报错,排查的起点也永远应该是审视最上层的代码逻辑。

本机暂存
IT 前端/ 2012-03-04 18:21:23 / 累计浏览 4,761

[译]原生全屏Javascript API

这篇讲的是从HTML5 `

本机暂存
IT 安全/ 2012-03-04 18:20:36 / 累计浏览 4,369

验证码的几个常见漏洞

这篇讲的是验证码那些看似安全却实际脆弱的环节。作者从CAPTCHA(全自动区分计算机和人类的公开图灵测试)的初衷出发,剖析了几个常见漏洞:传统OCR识别技术如何绕过、自动化脚本如何批量攻击、以及那些扭曲字体和背景干扰对机器学习模型的有限防御效果。文章特别指出,许多网站仍依赖静态图像验证码,这几乎等于给攻击者开了后门。 更深入的分析揭示了逻辑漏洞,比如验证码参数在前端暴露、一次验证无限次复用、甚至通过简单的重放攻击就能绕过。作者没有停留在问题表面,而是给出了进阶的防御思路,强调真正的安全不能只靠验证码单打独斗,结合行为分析、设备指纹等多因素验证才是正道。 读完你会明白,验证码只是安全链条中的一环,开发者需要清醒认识其局限,并构建更纵深的防护体系。

本机暂存