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

最新文章

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

IT 前端/ 2013-07-28 15:45:50 / 累计浏览 2,031

合理设置响应式设计的响应点【译】

这篇讲的是如何为响应式设计设置合理的“响应点”。传统的做法要么依据流行设备尺寸,要么在布局“被打破”时才调整,但作者认为这缺乏根本依据。他主张回归内容可读性的经典理论:当一行文字的长度偏离了便于阅读的范围(如45至75个字符)时,就是设置响应点的合理时机。 作者进一步考虑了语言、字体等实际因素。他举例说,同样是10个单词,用Verdana字体的德语宽度是38.5ems,而用Georgia字体的英语只有22ems,差异巨大。因此,响应点必须根据具体内容来定义,而不是一个固定数值。 在实践中,文章演示了从一个小屏开始的过程:默认使用16px字号,确保内容区宽度不小于45字符。当屏幕宽度增加,内容区超过这个最佳范围时,就引入第二栏、第三栏,通过媒体查询改变布局。所有这些变化都是基于`em`单位计算,使得布局能弹性适应字体大小的变化。 文章的最终结论是,一个健壮的响应式设计应当从内容出发,优先定义默认样式,然后让布局随着内容的“舒适度”自然生长,而不是生硬地适配某个具体的设备或尺寸。这种方法更具逻辑性,也更能适应未来的屏幕变化。

本机暂存
IT 安全/ 2013-07-28 15:43:45 / 累计浏览 5,637

TCP洪水攻击(SYN Flood)的诊断和处理

这篇讲的是作者团队如何应对一场猛烈的SYN Flood攻击。当网站业务曲线大跌、Web服务器CPU高企、SSH登录困难时,他们从系统日志的“possible SYN flooding”警告和netstat命令中高达数万的SYN_RECV连接状态,迅速锁定了TCP洪水攻击这一元凶。 文章没有停留在原理层面,而是给出了从应急到根治的实战路径。初期用iptables粗暴封禁IP段是救火但易误伤;借助F5设备让客户端先完成三次握手再转发后端,被证明效果显著。但作者更分享了无需昂贵设备的内核参数调优方案:将tcp_synack_retries从默认的5次改为0,能让“半连接”的保持时间从180秒骤降至3秒,避免资源耗尽。同时配合调大tcp_max_syn_backlog、文件句柄数等参数,实测后即使在攻击下服务也能保持响应。 这是一篇典型的“踩坑”复盘,它清晰地展示了从发现问题、诊断根因,到尝试不同解决方案并最终沉淀出一套可用参数配置的全过程。对于运维和后端开发者而言,文中关于网络状态的判断命令和sysctl.conf的具体配置具有很高的参考价值。

本机暂存
IT 后端/ 2013-07-28 15:38:48 / 累计浏览 3,512

YARN ResourceManager调度器的分析

这篇深度剖析了YARN ResourceManager中三种核心调度器:FifoScheduler、CapacityScheduler与FairScheduler的设计逻辑与差异。文章从ResourceManager作为资源调度中心的架构出发,详细拆解了调度器的事件处理机制与异步分配模型——即调度器如何通过响应节点心跳、应用提交等六类事件,在内存中维护队列、应用与Container的关系,并最终完成资源匹配。 文章的核心价值在于清晰的对比分析。FifoScheduler结构最简单,适合小规模场景;CapacityScheduler通过树状队列与容量限制,旨在最大化集群整体吞吐与利用率;而FairScheduler则侧重于多用户间的资源公平共享,支持动态队列创建与资源抢占。除了基础模型,作者还深入解读了本地优化与延迟调度机制:调度器会优先匹配与数据本地性一致的Container,若不匹配则“延迟”等待机会,以此平衡网络开销与调度效率。 文末提供了与调度器紧密相关的集群参数配置解读,帮助读者将理论理解落地。对于需要根据实际业务需求(如多租户隔离、公平性或高吞吐)选型与调优YARN调度器的工程师而言,这是一篇逻辑清晰、细节扎实的参考。

本机暂存
IT 后端/ 2013-07-28 15:37:51 / 累计浏览 2,836

HAProxy的event_accept函数源码分析

这篇讲的是HAProxy核心组件event_accept函数的源码深度剖析。面对HAProxy复杂庞大的代码库,作者直接指出其函数动辄数百上千行的“代码风格问题”,并选择以event_accept函数为例,通过主动重构来拆解分析,让逻辑脉络清晰起来。 文章将函数执行流程系统性地拆解为六个关键步骤:从接收连接后,首先检查连接数与文件描述符是否超限;接着设置客户端socket的非阻塞、TCP优化等属性;然后从内存池分配新会话(session)并初始化状态;再分配处理任务(task)并绑定回调函数;最后分别配置会话的客户端与服务端流接口(stream interface),为后续数据转发做好准备。 作者不仅逐步解读了每个步骤的代码逻辑,更通过调整代码顺序和重组变量,呈现了一个更清晰、更模块化的实现思路。这种分析方式让读者能跳过原始代码的冗余,直接抓住HAProxy处理新连接时,在资源分配、状态初始化与任务绑定方面的核心设计逻辑。

本机暂存
IT 后端/ 2013-07-28 15:36:38 / 累计浏览 2,695

UCMQ简介

这篇技术分享的主角是UCMQ,一个由UC Web开源的轻量级HTTP消息队列。作者坦诚,项目的初衷是改进类似HTTPSQS的方案,解决其底层TC存储因数据膨胀导致的内存与性能瓶颈。 UCMQ的核心设计思路是“去TC化”。它摒弃了传统的TC存储,转而采用更高效的日志文件存储方式。其关键在于数据被顺序写入内存映射的文件中,且缓存区域随读写指针移动,这种设计既大幅节省了内存开销,又保证了出色的读写性能。在特性上,它支持标准HTTP协议与长连接,单实例支持多队列动态管理,并能实时监控队列状态。 性能测试数据直观展示了其效果:在配备多核CPU和千兆网卡的环境下,无论是长连接还是短连接,其入队列、出队列速度均能稳定超过10000次/秒。文中也详细介绍了其包含控制模块、网络驱动、队列管理和存储模块的内部架构。尽管作者谦虚地称之为“拙劣的开端”,但文中扎实的架构图解与性能数据,已清晰勾勒出这款高性能HTTP MQ的轮廓。

本机暂存
IT 移动开发/ 2013-07-28 15:34:09 / 累计浏览 2,369

利用三轴加速器的计步测算方法

这篇讲的是如何让没有GPS的设备也能准确计步。目前大部分手机计步都依赖GPS,但在室内或无信号场景下就失灵了。作者提出直接利用设备内置的三轴加速器,通过分析x、y、z三轴的加速度数据来捕捉行走特征。 人的步行会在垂直和前进方向产生周期性加速度变化,轨迹近似正弦曲线。算法的核心在于对这条曲线进行峰值检测——当检测到加速度方向由正转负,即经过一个波峰时,就判定为一步。为了应对设备在手中或口袋里方向不定的问题,算法先计算三轴加速度的合矢量长度,确保无论设备怎么放都能得到稳定的曲线。 另一个关键是过滤干扰,比如手抖或故意摇晃设备产生的无效信号。文章给出了两个巧妙的过滤机制:一是设置最小步频阈值,人体最快步行频率约5Hz,间隔小于0.2秒的信号会被舍弃;二是设定加速度幅度阈值,过小的波动不计入有效步伐。 除了计步,这个基于加速度的方案还能扩展成测距、测速工具,甚至用于检测老人摔倒。它为移动健康监测提供了更灵活、不受环境限制的技术基础。

本机暂存
IT 前端/ 2013-07-28 15:33:22 / 累计浏览 8,697

使用渐进式JPEG来提升用户体验

这篇讲的是JPEG图片两种常见的存储方式之间的对比:标准型(Baseline)和渐进式(Progressive)。二者图像数据完全相同,核心区别在于解码显示的方式:标准型如同从上到下逐行扫描,图片一行行清晰显现;而渐进式则包含多次扫描,加载时会先呈现一个模糊的轮廓,随后逐渐变得清晰锐利。 这种差异直接影响用户体验,尤其在网络速度较慢时。渐进式JPEG能让用户在图片完全加载前就大致看到内容,心理上减少等待的焦虑感,这对于图片密集或用户网络环境不稳定的场景是明显的优化。不过,文章也提到,对于采用“瀑布流”布局的网站,传统标准型可能是更稳妥的选择。 另外,渐进式图片的体积并不比标准型大,有时甚至更小,但其解码过程会消耗稍多一点的CPU和内存资源,不过这在当今的设备上通常不成问题。文章的后半部分相当实用,直接给出了在Photoshop、Linux命令行、PHP、Python等多种环境下,如何将一张图片转换为渐进式JPEG的具体代码和命令。

本机暂存
IT 后端/ 2013-07-28 15:32:30 / 累计浏览 4,034

淘宝图片服务的学习

这篇讲的是淘宝如何用自研的TFS,解决承载90%以上流量的图片存储难题。 淘宝图片流量占比超过90%,且绝大多数是需要频繁读写的小文件。2007年前,依赖的商用存储系统无法应对如此海量的小文件和高并发访问,暴露出扩容成本高、性能瓶颈和单点故障等硬伤。为此,淘宝决定自主研发。 核心方案是淘宝文件系统TFS。它最大的特点是将元数据(如大小、位置信息)直接编码到图片的文件名中,抛弃了传统目录树,从而极大地简化了元数据结构,解放了管理节点的性能。从1.0到2.0版本,TFS不断演进,从使用EXT3到自建块设备文件系统,从RAID5到单进程管理单盘,通过一系列深度优化,最终支撑起了规模达1.8PB、存放286亿文件的图片集群,并实现了高性能与平滑扩容。 文章通过具体数据和架构演进,清晰地展示了淘宝从依赖商业软件到走出一条针对海量小文件存储的自研道路的全过程,对任何面临海量小文件存储挑战的团队来说,TFS从实践中打磨出的设计思路都值得参考。

本机暂存
IT 后端/ 2013-07-28 15:30:20 / 累计浏览 3,979

关于进程监控及自动启动

作者从自己将uWSGI更换为Gunicorn的实际经验出发,系统梳理了三种服务器进程监控与自动重启的方法。文章并非纸上谈兵,而是结合了腾讯内部实践与个人小团队部署的考量。 第一种方法是按进程名监控,实现简单直接。作者用Python脚本示例了如何通过`ps`和`grep`检测进程是否存在,并指出了其弊端:比如Gunicorn启动后进程名可能变为`master: [wsgi:app]`,其中的方括号需要转义,实际操作并不舒服。 第二种是按端口监控,作者认为这反而更为靠谱。同样附上了Python代码示例,通过尝试绑定目标端口来判断服务是否存活。作者也讨论了更深入的“黑盒”式连接监控(如模拟HTTP请求),但认为这更偏向监控宝一类的外部服务方案。 第三种方案则是借助Supervisor等外部管理工具。作者比较了Gunicorn文档中提及的Gaffer和更成熟的Supervisor,后者提供Web界面和用户验证,管理便捷。但代价是失去了直接使用`restart.sh`脚本的灵活性,需要适应其特定的命令。文章最终提供了一个Supervisor配置Gunicorn的示例配置片段,并开源了相关监控代码。整体上,作者为不同场景下的运维监控提供了具体可参考的实现对比。

本机暂存
IT 前端/ 2013-07-28 15:28:59 / 累计浏览 4,832

用 javascript 判断 IE 版本号

这篇讲的是如何用一段巧妙的JavaScript代码来准确判断IE的版本号。作者从一个实际项目需求出发,发现jQuery 2.0已放弃版本检测转而推荐特性检测,但面对特定场景,版本号信息依然重要。 文章的核心亮点是分享了一段“以巧破力”的代码。它没有采用常规的解析User-Agent字符串的方法,而是利用了IE浏览器独有的“条件注释”特性。通过动态创建元素并循环写入特定条件注释,代码能够检测出当前IE的精确版本,且对不支持条件注释的现代浏览器能安全地返回`false`,兼容性极佳。 作者也解释了为何要绕开User-Agent检测——那些字符串(比如IE10和IE11的)早已被各厂商修改得杂乱无章,完全不可靠。相比之下,这段利用浏览器原生特性的检测方式,既简洁又稳健,避免了“猜谜”式的判断,为需要区分IE版本的场景提供了一个值得参考的解决方案。

本机暂存
IT 数据库/ 2013-07-28 15:27:54 / 累计浏览 1,450

perl查询空表引起的bug

这篇文章详细复盘了阿里集团内部数据采集系统(xxagent)中,一个由Perl查询空表引发的诡异Bug。问题现象是:当数据库表(如lijie)中没有记录时,Perl脚本通过DB模块查询,得到的日志显示矛盾结果——直接打印查询结果数组显示为0条,但数组的标量上下文却报告存在1条记录,导致数据采集逻辑异常。 问题的根因出在DB模块的`query`函数实现上。当底层数据库查询返回0条记录时,函数并没有正确地返回一个空数组给调用方,反而因为`scalar @res`为假,错误地进入了重连和重试的逻辑循环,最终函数没有显式返回值,造成了调用方接收到的状态不一致。 修复方案很直接:在`query`函数的循环外添加一个明确的返回语句,确保在重试耗尽后,能返回一个预先定义好的空数组`@nores`。修改后,空表查询的行为得到修正,日志输出恢复为一致的`0`条记录,监控逻辑也随之正常。这个案例提醒我们,即使是一个简单的数据库查询封装,也必须对空结果集等边界情况做严谨的处理,否则可能埋下难以排查的隐患。

本机暂存
IT AI/ 2013-07-26 13:41:13 / 累计浏览 2,853

利用新词统计特征进行中文分词

这篇讲的是如何改进中文分词模型以更好地适应新领域。作者指出,传统基于条件随机场(CRF)的分词模型主要依赖上下文特征,在面对训练数据未覆盖的新词(如跨领域的专业术语)时,分词准确率会明显下降。 为解决这个问题,作者在特征中引入了新词的统计表现特征,比如词频高、搭配稳定等,提出了增强的FCRF模型。在《SIGHAN Bakeoff 2005》语料上的测试表明:当训练和测试文本属于同一领域时,FCRF与传统CRF效果相当;但当跨领域测试时(例如用金融领域模型分词体育文本),FCRF的优势就凸显出来了,其F-score和未登录词召回率(Roov)均有大幅提升,证明新特征有效增强了模型的领域适应性。 文章还对比了FCRF与其他分词工具在金庸小说上的表现,并说明FCRF需要预先统计新领域的词频信息,这会略微牺牲分词速度,但换来了更好的新领域适应能力。

本机暂存
IT 安全/ 2013-07-26 13:40:37 / 累计浏览 4,141

请注意PHP程序里的敏感信息

在PHP开发中,数据库密码等配置信息如果直接硬编码在代码里,一旦代码仓库需要共享给第三方审查或合作开发,就会带来泄露风险。作者从这个常见的安全与协作矛盾出发,介绍了如何将敏感信息从代码中剥离出去。 核心方案是利用服务器环境来承载这些配置。一种常见做法是通过Nginx的`fastcgi_param`指令进行映射,代码中通过`$_SERVER`变量来读取。另一种方案是通过php-fpm的`env`指令设置,同样存放在`$_SERVER`中。文章特别指出,`env`配置必须写在php-fpm的主配置文件`php-fpm.conf`里才能生效。有经验的开发者(如@Laruence)也提示,使用Nginx方案会在每次请求时传输这些参数,可能带来开销,因此通过php-fpm或专用扩展(如hidef)来处理可能更为高效。 最终,通过将敏感信息从代码中剥离,代码变得更加干净,也更容易管理。剩下的安全职责转移到了服务器配置文件的权限控制上,而这通常比管理代码仓库的访问权限要简单得多。文章也顺带提到了一种兼容命令行环境的通用脚本思路。

本机暂存
IT 后端/ 2013-07-26 13:37:32 / 累计浏览 4,754

C语言全局变量那些事儿

这篇讲的是C语言全局变量多重定义的“危险”与“微妙”行为。作者从全局变量在不同视角(程序员、编译器、计算机)下的不同含义切入,通过三个递进的代码示例,深入剖析了编译链接器对“强符号”与“弱符号”的解析规则。 文章揭示了一个常被忽略的隐患:C语言实际上“允许”全局变量的多重定义(只要不是多个强符号),这可能导致内存被意外覆盖。示例中,同一个变量名在不同文件里可以是结构体或整型,却链接到同一块内存,其初始化值会发生覆盖。作者进一步展示了在多进程(fork)环境下,这种行为如何与操作系统的“写时拷贝”机制相互作用,使得不同进程的同一虚拟地址映射到不同的物理内存,从而产生隐蔽的状态差异。 最后,通过将代码编译为静态库链接,作者验证了这种行为在静态链接下依然存在。这篇文章的价值在于,它用具体而震撼的运行结果,将抽象的链接原理和潜在风险可视化,提醒开发者谨慎对待全局变量,尤其是非static限定的全局变量。

本机暂存
IT AI/ 2013-07-26 13:32:27 / 累计浏览 4,702

失败的人生

这篇观点类文章从一位观察者视角剖析了80后群体的普遍心态困境。作者指出,不少80后身上带有“失败者的气息”,具体表现为缺乏锐气、过度纠结、想法与行动分裂,以及既自足又抱怨的矛盾心理。 文章分析了这种心态的成因:他们成长于社会开放、经济高速发展的时代,却不幸遭遇了上下挤压的竞争环境,成功机会相对稀缺。作者承认社会结构性因素的影响,但更强调80后一代本质上聪明、有干劲,所缺的是耐心与把握机会的勇气。 核心观点在于对30岁“中年危机”叙事的反驳。作者认为,与前辈们30岁即拥有丰富经验的时代不同,今天的80后30岁征程才刚刚开始,不应过早摆出老成姿态或热衷总结。文章呼吁他们相信自己仍能拼搏,应身处一线发挥所长,而非寻求安逸。 对读者而言,这篇文章的启发在于:环境制约固然真实存在,但心态的年轻与行动的勇气是突破困境的关键。个人的奋斗周期应基于自身条件重新定义,而非困于他人的经验模板。

本机暂存
IT 设计/ 2013-07-26 13:30:59 / 累计浏览 3,117

类型的本质和函数式实现

这篇文章从一个具体的二叉树迭代器实现问题出发,引出了一个更深层的编程概念:类型的本质是什么?作者指出,许多人习惯于将“类型”等同于特定的数据结构(如Pair是一个包含两个字段的结构体),但这其实偏离了本质。 文章的核心观点是,**类型的本质是由它所定义的一组操作(Operation)以及这些操作必须满足的关系或不变式(Invariant)来刻画的**。作者通过Pair和Stack两个例子,清晰地展示了如何用形式化的“类型规范”来定义类型,并强调了基于规范进行测试(黑盒测试)与陷入实现细节(白盒测试)的区别。 理解了这一点,就能跳出“必须用某种结构存储数据”的定势。文章进一步对比了两种实现方式:一种是基于具体数据结构的传统实现,另一种是函数式编程中基于闭包(Closure)的实现。后者完全忠实于类型规范,直接用函数返回满足操作需求的对象,使得代码与规范高度对应,验证起来更直观。 最后,作者将这一思想应用到最初的问题上。如果将迭代器(Iterator)抽象为符合列表(List)规范的类型,那么为任何数据结构(包括二叉树)实现迭代器,就转变为:如何基于该数据结构的遍历算法,来实现List规范定义的`first`、`rest`等操作。这提供了一种从规范推导实现的通用思路。

本机暂存
IT 设计/ 2013-07-26 13:29:32 / 累计浏览 3,007

关于交互Demo设计的一些建议

这篇讲的是交互Demo设计中如何平衡效率与质量的经验。作者从实际项目出发,对比了Axure、Balsamiq和Mockups等常见原型工具的特点——比如Axure功能全面适合高保真演示,Balsamiq的手绘风格则更适合快速构思方案。工具之外,文章的核心价值在于提出了几条非常具体的设计建议:制作Demo应保持“相对中保真”状态,避免耗费精力在过高视觉保真度上;必须遵守栅格规范以减少后续视觉设计的返工;不使用截图或色彩干扰视觉发挥;克制对复杂交互效果的追求。此外,建立个人控件库和善用Master模块化设计能显著提升效率,而坚持版本存档则对项目迭代至关重要。最后作者点明,工具和形式都应服务于清晰表达产品思路与交互逻辑这一根本目的。

本机暂存
IT DevOps/ 2013-07-26 13:25:46 / 累计浏览 4,329

服务器监控软件Zabbix初窥

这篇讲的是作者从工作中对服务器监控系统的兴趣出发,初次探索了开源监控软件Zabbix的体验。Zabbix始创于2001年,使用C语言和PHP开发,以GPL v2开源发布,经过十多年积累已形成成熟的解决方案。 作者详细描述了安装过程:从SourceForge下载源码包,按照官方Wiki配置后直接make install,整个过程出乎意料地简单顺畅,比以往编译其他软件轻松得多。前端安装也不复杂,类似WordPress的配置。文章接着解析了Zabbix的核心概念:通过host group分组管理主机,定义item监控属性(如CPU、内存、网络流量),设置trigger触发规则(例如CPU超过90%报警),并基于events触发通知,支持邮件、短信、微信等多种方式,逻辑严密且功能全面。 在对比层面,作者将Zabbix与所在公司的内部

本机暂存
IT 前端/ 2013-07-26 13:25:23 / 累计浏览 2,729

人人都能用的10条网站易用性技巧

这篇译文提炼了WebAIM团队提出的10条提升网站易用性的基础技巧,每一条都直指前端开发中容易忽略的细节。文章不仅列出做法,更点明了其背后的技术原理。 比如,它强调为logo添加alt或title属性,不仅是为了让屏幕阅读器“读懂”图片,在网速不佳图片加载失败时,也能为所有用户保留关键信息。又如,针对许多开发者喜欢移除浏览器默认的:focus焦点样式,文章明确反对这种做法,并给出了如何用自定义高亮样式的代码示例,因为这对键盘操作用户至关重要。 此外,文中还涉及使用ARIA Landmarks帮助读屏软件理解页面结构、用aria-required标记表单必填项、以及避免使用tabindex和“点击此处”这类对辅助技术不友好的模糊链接。作者用平实甚至带点幽默的语言(比如“把设计师的鼠标拿走一天”),将这些看似琐碎却影响深远的实践要点娓娓道来。 这些技巧虽然基础,但共同构成了构建一个包容性更强的Web环境的重要基石。

本机暂存
IT 开发者/ 2013-07-26 13:24:45 / 累计浏览 2,966

学习搭建Python2.7.5环境

作者从写PHP多年有些厌倦、想转学Python的角度出发,分享了在CentOS系统上从零搭建Python 2.7.5开发环境的全过程。文章并非枯燥的步骤罗列,而是带着个人学习动机,清晰地讲解了从下载源码、编译安装,到配置包管理工具和隔离环境的一套完整实践。 文中特别指出,原先流行的setuptools已被distribute取代,easy_install也被pip取代,并给出了具体的安装命令。核心环节是介绍virtualenv这个必备工具——它允许创建完全隔离的Python环境,避免不同项目间的依赖冲突。作者也演示了如何创建、激活和退出环境。 文章最后提醒,使用virtualenv管理多环境时,脚本里应使用`#!/usr/bin/env python`而非绝对路径以增强通用性,并推荐了pyenv等工具来管理不同Python版本。结尾以幽默的口吻表达了对“3P伟业”的憧憬,让技术分享多了几分生动。

本机暂存