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

最新文章

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

IT 前端/ 2014-12-06 20:40:13 / 累计浏览 2,569

JavaScript原型之路

这篇文章探讨了JavaScript中两种对象创建方式的差异与选择:传统的构造函数方法与更纯粹的原型(OLOO)方法。 作者从Frontend Masters的教程和一篇经典博文出发,对比了这两种路径。标准方法通过构造函数和原型链建立继承,是目前大多数教程和框架(如Angular)所要求的。而纯原型方法则利用`Object.create()`直接克隆对象,语法上更接近IO这类原生原型语言,显得更直接和动态。 然而,文章指出一个关键的现实考量:性能。测试显示,纯原型的实现在某些操作上可能比构造函数方式慢数十倍,这是JavaScript引擎优化导致的结果。此外,ES6引入的`class`语法本质上仍是构造函数的语法糖,并未改变原型的底层机制。 作者的结论反映了实践中的权衡:个人偏好纯原型的表现力和趣味性,但在追求性能的生产代码中,会继续采用构造函数方法,并期待未来能更广泛地使用ES6的类语法。

本机暂存
IT 前端/ 2014-12-06 20:39:06 / 累计浏览 2,912

CSS 设计理念

这篇讲的是CSS2.1规范背后的设计理念,梳理了其作为CSS2和CSS1后序版本的核心设计目标。文章开篇就点明了这些理念:向前和向后兼容,确保新旧用户代理都能优雅降级;作为结构化文档(如HTML)的补充,让样式易于修改而不影响内容;保持供应商、平台和设备无关,让文档适应各种环境;强调可维护性,通过外部样式表轻松管理全站外观。 此外,它还提到了CSS的简洁性、对网络性能的优化(比图片等资源体积小得多)、通过层叠机制提供的灵活性、丰富的渲染效果,以及为动态语言绑定和可访问性(如允许用户覆盖样式、支持盲文设备)所做的考量。这些理念奠定了现代CSS的基础,其中关于兼容性、结构分离和可访问性的思考,至今仍深刻影响着前端开发的实践。

本机暂存
IT 数据库/ 2014-12-06 20:38:08 / 累计浏览 1,968

B-树

这篇讲的是经典数据结构B-树的核心设计与操作逻辑。文章开篇就点明了B-树与平衡二叉树的关键差异:通过允许节点容纳更多元素(几十到几百个)来大幅降低树的高度,从而在数据无法全部载入内存时,显著减少访问磁盘的次数,提升效率。 作者详细拆解了B-树的严格定义,特别是倾向于使用奇数阶(如2n+1)的统一性,以避免处理偶数阶时可能出现的不平衡情况。随后,文章通过具体的查找和插入示例,生动展示了B-树的工作原理。查找过程强调了其多路搜索的特性,而插入部分的剖析尤为细致,清晰地说明了节点未满、分裂以及元素移动(如将中间元素上提至父节点)等不同情况下的处理逻辑,解释了如何通过分裂和平衡操作来维持所有叶子节点处于同一层的核心性质。 整个讲解围绕着B-树如何保持平衡与高效展开,为其在数据库索引和文件系统等场景中作为底层核心数据结构的重要性,提供了坚实的技术基础。

本机暂存
IT 后端/ 2014-12-06 20:32:08 / 累计浏览 2,163

关于时间、时区、系统时间和硬件时间

这篇讲的是时间体系中那些容易被混淆的基础概念,以及如何在Linux系统里看清它们的“真面目”。作者从格林威治标准时间(GMT)和世界协调时间(UTC)的历史渊源与精度差异入手,厘清了二者常被混用的原因。同时,也解释了夏日节约时间(DST)的由来,以及系统时间和硬件时间(BIOS时间)这两个在计算机中至关重要的区别:一个由操作系统管理和调用,另一个则依赖主板电池维系,是系统启动时的时间基准。 文章的一大实用亮点在于,它不仅解释概念,更手把手地展示了在Linux终端中查看这些时间的正确姿势。例如,用`date -u`获取UTC时间,而不仅仅是显示本地时间的`date`命令。特别提到了输出中的“CST”可能代表四种不同的时区(包括中国标准时间),这恰恰是很多技术人员会踩的一个小坑。最后,通过`hwclock`命令查看硬件时间,并提供了一个去除其输出中模糊“CST”标识的小技巧。 总的来说,这篇文章从原理到实操,清晰地梳理了时间管理中几个关键但又容易忽略的点,尤其适合那些需要在多时区环境或系统底层开发中与时间打交道的工程师。

本机暂存
IT DevOps/ 2014-12-06 20:30:27 / 累计浏览 4,404

Windows、RedHat、CentOS和Ubuntu操作系统生命周期

这篇从常被忽略但至关重要的“操作系统生命周期”视角出发,对比了Windows、RedHat、CentOS和Ubuntu四大主流系统的支持周期差异。 文章直接列出了具体数据:Windows XP曾拥有长达12年的生命周期,而后续版本的寿命标注为“X”,暗示其策略可能发生变化;RedHat Enterprise Linux(RHEL)则以稳定的7年周期作为企业级支持的标杆;Ubuntu方面,标准版仅提供9到18个月的短暂支持,但其LTS(长期支持)版本将支持期延长至5年,早期版本如8.04 LTS则为3年。 作者通过这些时间线清晰地揭示了核心差异:RedHat以最长的稳定周期服务于需要可预测性和长期维护的企业环境;Ubuntu的LTS版本在社区活跃度与长期支持之间取得了平衡;而Windows的生命周期策略则显得更为多变。对于运维人员和IT决策者而言,理解这些周期是进行系统规划、保障安全更新以及管理技术债务的关键依据。

本机暂存
IT 移动开发/ 2014-12-06 20:05:35 / 累计浏览 2,331

用吐槽的方式生产内容

这篇文章从网易造楼团和IT自媒体人三表的吐槽风格出发,深入探讨了“吐槽”这一表达形式如何演变为一种专业的内容生产模式。作者指出,与严肃的批判不同,吐槽式内容短小精悍、贴近受众,擅长在碎片化阅读场景中传递信息,因此被腾讯新闻哥、网易轻松一刻等移动端产品广泛采用。 文章的核心观点在于,这种看似轻松的“轻阅读”背后,实则有着相当的生产门槛。它不仅需要专业团队对信息进行提炼与再创作,更依赖于平台用户基数来支撑众包生产,形成“专业策划(PGC)+大众智慧(UGC)”的混合模式。尽管这种模式能有效吸引流量,但如何实现商业变现仍是一个待解的难题。 作者最终将吐槽式内容的兴起,视为传统门户网站在移动时代留住分散用户的一次重要尝试。在注意力日益稀缺的当下,这种用轻松姿态完成信息迁移的策略,为内容生产者提供了新的思路。

本机暂存
IT 后端/ 2014-12-06 20:00:12 / 累计浏览 2,825

Node.js 打造实时多人游戏框架

这篇讲的是作者在一个极客松的36小时高压环境下,如何利用Node.js从零打造一个名为“Spaceroom”的实时多人游戏框架。框架的核心目标是解决LAN Party场景下的低延迟同步问题,让身处同一局域网的玩家能够实时互动。 作者设计了以“房间”为单位的用户管理和一个基于“bucket”的指令同步算法。简单来说,服务器会将时间切分成固定的小片段(bucket),收集并广播各客户端的指令。客户端根据收到的bucket序列来更新状态,从而在理论上保持画面一致,将网络延迟的影响控制在约定范围内。 实现过程中并非一帆风顺。文章用相当的篇幅分享了一个典型的“踩坑”经历:他们发现Node.js在Windows平台下的`setTimeout(…, 1)`实际精度只有15.625ms左右,远达不到毫秒级计时的要求。通过测试和查阅资料,他们揭示了这是Windows系统计时器的固有特性,并最终给出了基于实际系统时间差进行补偿的解决方案。 总的来说,这篇文章不仅展示了一个具体技术方案的实现过程,也坦诚地分享了探索中的陷阱与排错思路,对于想用Node.js处理实时通信或游戏同步的开发者来说,很有参考价值。

本机暂存
IT 前端/ 2014-12-06 19:46:14 / 累计浏览 3,553

关于工作效率的心得分享

这篇文章来自一位设计师的实战总结,分享了他从职场新人成长为团队“快刀手”的十年效率心得。作者以切身经历出发,坦诚效率曾是其长期痛点,并在PDI考核中被反复提及。 他提炼了十项核心原则:从“懂得整理需求”和“探究需求真相”这类思维层面,到“练好刀工”、“提取模版”等技能与流程优化;从“学会聚焦与屏蔽”应对干扰,到掌握“敏捷响应”处理紧急任务。其中既有关于决策必要性的管理思考,也包含了“当自己的事做”这种心态调整,最后不忘强调健康作息是一切的前提。 整篇文章没有空泛的理论,而是通过具体场景(如用整理术处理杂乱需求、28秒响应一个小修改)和生动比喻(如切土豆丝、一心多用的妈妈),让建议变得可感可循。它最终想传递的是:效率是可量化、可进阶的,通过系统性的方法与持续练习,每个人都能找到属于自己的工作节奏。

本机暂存
IT 数据库/ 2014-12-06 01:10:38 / 累计浏览 4,558

为什么长尾数据的翻页技术实现复杂

这篇讲的是长尾数据翻页的技术复杂性。作者从Key-list类型数据(如好友列表、评论ID列表)的翻页需求出发,指出大部分数据长度较短时,简单的LIMIT offset方案尚可应对,但当数据量达到百万级且访问深页码时,该方案性能会急剧下降。 文章核心对比了两种翻页实现:“扶梯方式”(只提供上一页/下一页)与“电梯方式”(支持精确跳转至任意页)。作者解释,扶梯方式通过记录最后一条ID实现O(log n)复杂度的高效查询;而电梯方式因依赖LIMIT offset,在MySQL中需扫描前所有行导致O(n)的复杂度,且难以缓存。 面对更大数据规模,文章进一步讨论了分布式数据分片策略。按用户uid分片可高效读取,但数据冷热不均导致存储成本高昂;引入时间维度分片虽缓解存储压力,却带来了数据滚动自动化难、需额外二级索引等新问题。作者最后指出,现有方案均非理想,为后续探讨更优的长尾翻页设计埋下了伏笔。

本机暂存
IT 设计/ 2014-12-06 00:50:46 / 累计浏览 3,097

产品文案风格指南

这篇指南详细梳理了产品团队如何建立并执行统一的文案风格规范。它从一个常见但容易被忽视的痛点切入:在发布会PPT或产品描述中,产品名称的大小写、空格等细节缺乏一致性,会悄然影响品牌的专业形象。作者将其类比为产品文案领域的《iOS Human Interface Guidelines》,强调规范对于提升团队协作效率和品牌形象统一性的价值。 文章的核心部分聚焦于具体的“书写规范”。它首先厘清了常被混淆的全角与半角概念,并围绕最基础也最易出错的“标点符号”与“空格”两大维度展开。在标点方面,它引用了国家标准《GB/T 15834—2011》等权威资料,并给出了“中文环境下使用全角标点”、“避免重复使用感叹号”等可立即操作的准则。在空格处理上,明确了“中英文、中文与数字之间需加空格”、“长串数字以三个为一组”等排版规则,同时指出了“数字与单位之间是否空格”等团队中可能存在的争议点。 通过引用国家标准和日常高频场景,这篇文章不仅提供了可落地的操作清单,更传递了一个核心观点:细微处的规范是产品专业度的无声代言人。它帮助产品与运营同学从“凭感觉”写作,转向有据可依的标准化输出。

本机暂存
IT 后端/ 2014-12-06 00:39:59 / 累计浏览 2,236

慕课网——一组java数据带来的行业奇迹

5个月,5万人学同一门Java课,这个数字在在线教育行业里相当炸裂。这篇讲的是慕课网“Java入门第一季”如何成为行业首个学习人数破5万的单门课程。 文章深挖了这一现象背后的核心:课程采用了“视频讲解+在线编程”的混合式设计。这解决了自学者“眼高手低”的痛点,通过“讲、练、再讲”的闭环,让知识即时巩固。慕课网独家的在线编程平台支持多种语言、即时呈现运行结果,大幅降低了编程学习的实践门槛和成本。 课程的成功也源于精准的定位。它瞄准了Java人才市场需求巨大但合格者短缺的矛盾,内容由专业团队和一线技术大咖讲师打造,以企业实战需求为标尺,确保了学以致用。这种以“提升能力、助力就业”为明确目标的课程开发理念,使其在众多学习资源中脱颖而出。 对于想入门编程的学习者而言,这个案例证明了“学练结合”模式的有效性。慕课网的尝试表明,当课程设计能紧密围绕学习效果,并提供强有力的实践工具时,就能跨越入门门槛,甚至创造出行业性的学习热潮。

本机暂存
IT 移动开发/ 2014-12-04 13:51:39 / 累计浏览 9,124

让安卓手机通过代理翻墙的方法

这篇讲的是作者为解决小米3手机无法连接Google Play商店的问题,摸索出的一套安卓手机代理翻墙方案。作者的电脑一直通过PuTTY连接海外主机建立的SOCKS v5代理正常上网,他尝试让手机通过同一局域网内的这个代理上网,却发现只有Dolphin浏览器成功,谷歌Play商店等大量应用依然无法连接。 问题的根因在于,部分安卓系统应用和商店无法识别纯SOCKS代理。作者最终找到了DeleGate这款开源工具,用一行命令将电脑上的SOCKS代理转换为HTTP代理。具体方法是在电脑端运行指令,将本地7070端口的SOCKS代理映射到8080端口的HTTP代理,然后在手机WLAN的代理设置里指向电脑IP的8080端口。 验证效果是,完成这个转换后,手机上所有应用都能正常联网,谷歌Play商店恢复了应用下载和更新功能。文章记录了从遇到问题、排查到最终找到可行解决方案的完整折腾过程。

本机暂存
IT 后端/ 2014-12-04 13:31:54 / 累计浏览 3,421

Nginx缓存解决方案:SRCache

作者在优化PHP程序时,首先启用了Nginx内置的FastCGI Cache,但发现它不支持分布式缓存,在多服务器场景下存在资源浪费和数据一致性难题。这让他开始寻找更精细的解决方案。 这篇文章的核心就是介绍SRCache这个模块。它作为FastCGI Cache的补充,能实现更细粒度的缓存控制。作者展示了SRCache如何与Memc模块配合处理简单场景,而在需要动态计算缓存键等复杂需求时,则通过Lua脚本进行灵活扩展。 文章详细解读了这套方案的配置实践。通过自定义的Lua脚本,作者实现了对请求的智能判断:只有匹配特定规则的请求才会开启缓存,缓存键由请求方法、主机名和URI等信息动态生成。这种设计既避免了缓存的无效占用,也保证了缓存的精准命中。 整体来看,SRCache提供了一套从粗放式到精细化缓存管理的平滑升级路径。它通过开放的Lua集成,将缓存决策权交给了开发者,能有效应对复杂多变的生产环境需求。

本机暂存
IT 数据库/ 2014-12-04 13:29:25 / 累计浏览 8,074

Redis和Memcached的区别

这篇讲的是Redis和Memcached这两种内存数据库的核心区别。文章从Redis作者的一个经典比较出发,清晰梳理了三者关键差异:首先,Redis支持String、Hash、List等更丰富的数据结构,可以在服务器端直接进行复杂操作,避免了Memcached需要将数据取回客户端修改的额外开销。其次,在内存效率上,若采用hash结构存储,Redis的组合压缩机制可能比Memcached更具优势。最后,性能表现各有特点:处理小数据时Redis的单核性能更优,而在100k以上的大数据场景中,Memcached的多核处理能力则略占上风。 文章随后深入剖析了Redis五种数据类型的实现原理,例如Hash内部如何根据成员数量自动转换存储结构,以及Set如何通过HashMap实现快速去重。这些细节不仅解释了差异背后的技术原因,也揭示了各自的设计考量。 总的来说,如果你的应用需要丰富的数据结构和复杂操作,Redis是更强大的选择;而如果是纯粹的、简单的大规模键值缓存,Memcached在内存利用和特定数据量级下的性能或许更合适。文章为技术选型提供了扎实的对比依据。

本机暂存
IT 后端/ 2014-12-04 13:27:46 / 累计浏览 3,530

短网址服务的构建

短网址服务从社交媒体兴起,核心是解决链接过长、不便传播的问题。这篇文章深入讲解了如何构建这样一个服务,其实质是一个将长URL映射为短字符串的函数。 作者首先澄清了核心原则:一个短码必须唯一对应一个长地址。随后,文章详细拆解了两种主流的生成方案。方案一利用数据库自增ID,通过精心设计的进制转换(剔除易混淆字符如L、I、0、O)将其编码为6位左右的短码,保证了可读性与生成效率。方案二则从URL的哈希值(如MD5)出发,通过位运算和字符映射将其截断、压缩成短串,提供了另一种无状态的思路。 文章不仅停留在理论层面,还给出了具体的算法代码片段。从设计考量到实现细节,完整展现了一个短网址服务背后的工程思维。

本机暂存
IT 后端/ 2014-12-04 13:21:22 / 累计浏览 3,981

当cpu飙升时,找出php中可能有问题的代码行

当PHP进程CPU占用率突然飙升至接近100%,如何在解释型语言中精确定位问题代码行?这篇内容深入Zend引擎内部,展示了如何通过调试工具直击PHP运行时状态。 文章的核心思路是,利用Zend引擎维护的全局数据结构(`executor_globals`)来获取执行现场。作者聚焦于其中关键的两个变量:`active_op_array`和`current_execute_data`。通过分析其C语言结构体定义,文章指出`active_op_array`中的`filename`和`function_name`记录了当前执行的文件与函数,而`current_execute_data`里的`opline`则指向了正在执行的操作码(opcode),其`lineno`字段直接对应源码行号。 实战演示部分极具操作性:编写一个包含死循环的PHP脚本,通过`gdb`附加到进程后,只需几条简单的打印命令,就能立即看到脚本正卡在第四行的`sleep(1)`上。文章还介绍了PHP源码附带的`.gdbinit`文件,其中的`zbacktrace`命令能一键生成完整的调用栈回溯,大大简化了调试流程。 这篇内容为PHP性能问题排查提供了一种底层的、引擎级的视角。它告诉我们,即使面对解释型语言,依然可以通过理解其底层实现(如Zend执行器),在应用层优化之外,找到更直接的故障诊断路径。

本机暂存
IT 后端/ 2014-12-04 13:20:25 / 累计浏览 2,445

HQueue:基于HBase的消息队列

这篇讲的是阿里一淘团队如何用HBase“搭积木”,造出一个叫HQueue的分布式消息队列。作者从时间序列存储、MapReduce数据输入输出等场景的实际需求出发,选择了站在HBase的肩膀上。 核心思路很巧妙:把消息直接存为HBase的KV对,利用HTable的多Region实现高并发,用Coprocessor来保证消息ID的唯一有序,并处理消息的持久化。这样一来,HBase本身的自动Region迁移、动态负载均衡和数据持久化能力,就直接变成了HQueue的“超能力”,实现了自动容错、消息不丢和性能优化。 文章还详细拆解了它的设计细节:比如用PartitionID+Timestamp+SequenceID组合成RowKey来保证消息全局有序,通过不同的Scanner支持灵活扫描,以及在0.3版本后引入的基于ZooKeeper的订阅推送机制。整体来看,这为需要可靠消息队列又已有HBase技术栈的团队,提供了一个无需额外组件、可随HBase无缝升级的解决方案。

本机暂存
IT 后端/ 2014-12-04 13:18:23 / 累计浏览 3,570

构建C1000K的服务器(2) – 实现百万连接的comet服务器

这篇讲的是作者如何从零实现一个支持百万并发连接的Comet服务器。在解决了系统内核参数调整的基础问题后,文章将焦点转向了具体的应用实现。 作者选择用C/C++和libevent来构建核心,重点在于如何高效管理百万级的连接与通道。一个巧妙的设计是:服务器启动时便预先分配好100万个通道对象,而动态的订阅者则通过内存池管理,这使得初始内存占用控制在24MB。 最吸引人的是文章展示的实测数据。通过逐步增加连接数进行压力测试,结果非常直观:每个Comet连接大约只消耗2.7KB内存。最终,在支撑100万空闲连接时,进程总内存占用约2.7GB,而CPU使用率维持在0%。这清晰证明了该架构在高并发、低活跃度场景下的高效性。 项目的代码已在GitHub开源,文章提供的测试方法和详细数据,为需要构建类似长轮询服务的开发者提供了一个扎实的参考范例。

本机暂存
IT 后端/ 2014-12-04 13:17:16 / 累计浏览 4,198

构建C1000K的服务器(1) – 基础

当C10K问题已成为历史,作者将目光投向了更宏大的C1000K挑战。对于Twitter、微博这类需要维持千万级实时连接的平台,单机百万连接(C1000K)的能力能极大降低服务器集群规模。 这篇文章并没有直接给出某个框架或库的解决方案,而是从根源出发,剖析了限制C1000K实现的四大核心因素。作者以Linux为例,深入讲解了如何突破操作系统默认的“最大打开文件数”限制,给出了包括临时修改(ulimit)和永久配置(sysctl.conf, limits.conf)在内的具体方法与命令。文章还通过一个原始的C语言服务器程序,实际测量并验证了操作系统为维护百万连接所消耗的内存,将理论估算与实际开销结合起来分析。 作者强调,解决C1000K问题不能盲目追求新技术,而应先理清操作系统内核、内存分配与网络吞吐这些底层瓶颈。文中的系统参数配置和测试思路,为需要应对海量并发连接的开发者提供了切实可行的排查起点和优化依据。

本机暂存
IT 前端/ 2014-12-04 00:09:35 / 累计浏览 2,348

XSS 前端防火墙 —— 可疑模块拦截

这篇讲的是,如何为XSS前端防火墙增加对可疑脚本模块的主动拦截能力。作者从上一代系统的不足出发——虽然能防简单的内联代码,但面对站外脚本加载和代码混淆时束手无策——提出了一套基于DOM监视的“可疑模块跟踪系统”。 文章的核心探索,围绕着HTML5提供的MutationEvent接口(包括DOMNodeInserted事件与MutationObserver)展开。通过大量实测代码,作者验证了这套方案在检测层面的有效性:MutationObserver能批量捕获静态脚本,DOMNodeInserted则对动态创建的元素响应更及时。更进一步,实验证明利用MutationObserver甚至可以在脚本加载前将其从DOM中移除,实现对静态脚本的拦截,但在动态脚本和跨浏览器一致性上遇到了限制。 作者并未止步于事件监听,而是深入分析了动态脚本创建的全过程,尝试了在属性赋值阶段进行拦截的更高阶思路。整篇文章并非提供一个完满的最终方案,而是详实记录了一次充满实验与思考的技术攻坚过程,展现了在浏览器环境限制下,为前端安全“打补丁”的真实挑战与巧妙尝试。

本机暂存