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

最新文章

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

IT 后端/ 2013-07-08 22:53:02 / 累计浏览 3,103

kmemcache源码浅析

这篇讲的是memcache的Linux内核移植版kmemcache的源码实现。作者深入分析了这个不走寻常路的高性能缓存项目,重点剖析了它如何摒弃了常见的epoll通知机制,转而利用网络数据包 skb 的回调函数,实现了更细粒度的 packet 级调度。 文章的核心在于揭示kmemcache独特的网络模型设计:一个dispatcher(调度器)与多个worker(工作线程)协同工作。其中dispatcher专门负责处理TCP和Unix域套接字,并将新建的连接分配给特定的worker;而所有的UDP请求也由这些worker直接处理。 在实现细节上,文章拆解了用户态守护进程umemcached与内核模块kmemcache.ko之间,如何通过Netlink机制完成启动参数传递等关键交互。作者结合具体的代码结构(如cn_entry、cn_queue),清晰地展示了“请求-应答”的同步通信流程,以及其中涉及的序列号管理和回调处理等巧妙设计。 整体来看,这是一篇扎实的内核级源码剖析,它不仅解释了kmemcache“做了什么”,更细致地拆解了它是“怎么做到的”,对于想理解Linux内核网络子系统优化或高性能缓存实现的读者来说,提供了非常具体的参考。

本机暂存
IT AI/ 2013-07-08 22:51:41 / 累计浏览 4,309

浅析十三种常用的数据挖掘的技术

这篇讲的是数据挖掘领域里十三种核心的技术方法,作者没有停留在抽象概念,而是系统地梳理了从统计、关联规则到神经网络、模糊集等每种技术的底层逻辑。比如,统计技术的核心是先假设一个概率模型再进行挖掘;而关联规则旨在发现变量间隐藏的规律性,其生成的规则带有可信度。 文章特别适合想快速建立技术全景图的读者。它清晰区分了各类技术的特点:决策树用于展示条件规则;神经网络通过输入层、隐含层和输出层的复杂连接来建模;粗糙集处理不精确的数据分类;差别分析则专注于发现异常模式。这些技术并非孤立存在,它们共同支撑起从分类预测、聚类分析到异常检测等数据挖掘的核心任务。 对于技术实践者而言,这篇文章的价值在于将众多方法置于统一框架下进行说明,帮助读者理解每种技术解决哪类问题、其基本假设是什么。结尾也点明了数据挖掘作为一门交叉学科,融合了机器学习、统计学、数据库等多个领域的精华,其发展最终旨在将海量数据转化为可用知识。

本机暂存
IT 后端/ 2013-07-08 22:49:01 / 累计浏览 2,544

scribe的生产实践总结

作者结合两年生产实践,分享了对Facebook开源日志系统Scribe的应用总结。Scribe以精简稳定著称,作者团队在线上运行超过两年,未曾遭遇其自身进程崩溃。 文章核心聚焦于生产环境中Scribe的关键运维实践。针对Master节点宕机,标准配置是Primary接Secondary文件,故障时日志本地缓存,恢复后自动补发,并可通过一行脚本监控积压。为防止Scribe进程意外阻塞业务,建议采用异步线程写日志。而最棘手的情况是网络拥塞导致日志追送困难,作者提到一项压缩传输的改造尝试。文章最后将Scribe与LinkedIn开源的Kafka进行对比:Scribe如同“激流勇进”的冲锋舟,简单可靠;Kafka则似“航空母舰”,以集群和去中心化设计,对单点故障的容忍度更高。作者认为,对于中心化的日志收集场景,两者各有适用之处。

本机暂存
IT 开发者/ 2013-07-08 22:48:09 / 累计浏览 4,321

论“重复造轮子”

这篇文章从一个常见的技术讨论入手,探讨了“重复造轮子”这一现象。作者指出,它看似是个人偏好或技术问题,实则普遍存在于个人、团队甚至公司层面,往往导致资源浪费。 文章深入剖析了其出现的几个核心原因:程序员之间相互轻视,觉得不如自己写的顺手;因版权协议限制而不得不自研;以及部门间因进度紧张、沟通不畅而放弃代码复用。作者还提到了一种“战略级”的造轮子,并以自己前公司的实践(如自研类似Hadoop的系统)为例,分析了其与拥抱开源路线在业务发展上的不同结果。 作者的核心观点是,重复造轮子在大多数情况下并不值得,除非是为了有意义的创新或受限于客观条件。他特别对创业公司提出务实建议:应尽可能采用开源技术,将有限的精力聚焦于业务本身,避免陷入研发底层框架的“奢侈”消耗中。文章通过具体案例和经验,为技术决策提供了清晰的参考视角。

本机暂存
IT 后端/ 2013-07-08 22:45:40 / 累计浏览 2,780

剖析网页字符集的设置顺序

这篇讲的是作者从一次电商网站数据迁移中遇到的顽固乱码问题出发,深入排查并最终厘清了网页字符集设置的优先级顺序。问题根源在于,影响浏览器字符集解读的因素不止一个,而开发者往往不清楚它们之间的覆盖关系。 作者通过实际测试,逐一验证了五种设置方式:文件编码、Apache2默认配置、PHP.ini配置、PHP脚本中的header函数以及HTML的meta标签。他设计了一个清晰的对比实验,例如同时设置header为gb2312、meta为utf8,观察显示结果,从而确定了基本的优先级。 最关键的发现在于,当服务器端的PHP.ini或Apache配置介入后,情况会变得更复杂。测试表明,php.ini中的默认字符集设置优先级最高,它会覆盖header函数的输出;而Apache2的默认设置优先级则高于meta标签,但低于header函数。 最终,文章得出了一个非常实用的优先级排序:php.ini默认设置 > header函数设置 > Apache2默认设置 > meta标签设置。搞清楚这个顺序,对于彻底解决因字符集配置冲突导致的乱码问题,提供了明确的排查路径。

本机暂存
IT 前端/ 2013-07-08 22:43:51 / 累计浏览 3,203

javascript函数的throttle和debounce

这篇讲的是JavaScript开发中两个常用的性能优化技巧:函数节流(throttle)与函数去抖(debounce)。文章从一个常见的性能优化问题——频繁触发的 `window.resize` 和 `scroll` 事件——切入,形象地将这些持续触发的事件比喻为“机关枪扫射”,而节流就像控制射击频率的扳机。 作者明确指出了两者的核心差异:throttle 是控制函数在连续调用时,按固定时间间隔执行(例如每隔400ms执行一次),适合处理鼠标移动、窗口拖拽等持续触发的场景;而 debounce 则是控制函数在连续调用结束后,必须等待一段指定的空闲时间才执行,特别适用于文本输入、搜索自动补全等场景,能有效过滤掉用户的“快速连续操作”。 文章不仅解释了概念,还提供了原生的 setTimeout 实现思路作为节流示例,并附上了一个通用且实用的函数代码,通过传递参数同时实现了节流和去抖功能。文末提供的在线 Demo 和扩展阅读链接,让读者可以直观体验效果并深入学习。对于前端开发者而言,理解并正确运用这两个技巧,对提升页面交互性能至关重要。

本机暂存
IT DevOps/ 2013-07-07 22:21:02 / 累计浏览 2,795

集群资源调度系统简介与galaxy资源调度系统简介

这篇讲的是集群资源调度系统,它为什么重要,以及内部的一个具体实践。 随着公司集群规模扩大,资源利用率低和部署运维复杂成了迫切需要解决的问题。文章从IaaS的角度切入,指出资源调度系统的核心价值在于实现资源共享、弹性管理与自动化运维。作者从谷歌Omega论文出发,梳理了三代调度架构的演进:从结构简单但扩展性差的中央式调度器,到支持大规模集群和多框架混部的双层调度器(以Mesos为代表),再到通过全局共享状态和乐观锁提升并发性能的第三代架构。文中以Mesos的“Resource Offer”机制为例,清晰展示了资源如何分配给具体应用。 文章后半部分将视角转向内部实践。为了支撑“万”级别流计算任务并解决现有引擎在大集群、多租户下的瓶颈,galaxy平台设计了一套轻量级的双层调度系统,目标是实现多集群间的资源共享与任务隔离。这篇不仅梳理了技术脉络,也展示了如何从通用架构中汲取灵感,解决实际业务中的资源调度挑战。

本机暂存
IT 安全/ 2013-07-07 22:18:54 / 累计浏览 3,011

SSH简介

这篇讲解SSH基础知识的文章,从“什么是SSH”直接切入,梳理了这项安全协议从诞生到普及的简要历程,重点则落在了实际操作与安全原理上。 文章系统梳理了SSH的核心用法:从最基础的远程登录命令,到端口参数修改。它详细拆解了SSH保障安全的关键——公钥加密验证流程,并分别阐述了两种登录方式:“口令登录”与“公钥登录”。对于后者,文章不仅解释了免密原理,还一步步指导读者如何生成密钥对、使用`ssh-copy-id`上传公钥,以及如何排查服务端配置问题。 特别值得注意的是,文中对公钥指纹验证、`known_hosts`文件的作用,以及`authorized_keys`文件的具体操作都有细致说明。这些细节对于理解SSH建立信任链的过程至关重要,也为实际配置提供了清晰路线图。对于需要安全远程管理的开发者或运维人员,这是一篇扎实的入门指南。

本机暂存
IT 开发者/ 2013-07-07 22:17:51 / 累计浏览 3,665

编码风格不是编码规范

作者从程序员对代码格式的敏感体验切入,指出许多开发者容易将“编码风格”与“编码规范”混为一谈。文章明确区分了这两个概念:编码规范是一个更宽泛的集合,包含编码风格以及其他编程规则(如函数返回值的设计);而编码风格则专注于代码的格式化约定,例如缩进、空格、命名习惯等。 文章着重阐述了统一并遵守编码风格的三个核心好处:一是让代码更易维护,团队成员能快速通过约定的格式推断代码意图;二是促进代码的集体所有制,提升项目的“巴士因子”;三是能有效平息那些无休止的格式争论,让团队将精力集中在更重要的事情上。 最后,作者建议利用Eclipse、indent或uncrustify等工具来自动化地实施编码风格,将人力从重复的格式调整中解放出来。文章强调,风格的价值在于团队的共同遵守,而非个人喜好。

本机暂存
IT 前端/ 2013-07-07 22:17:10 / 累计浏览 2,812

HTML 5 的data-* 自定义属性

HTML5的data-*自定义属性为前端开发提供了一种标准化的数据存储方式。这篇文章从实际用法出发,清晰地对比了传统getAttribute/setAttribute方法与HTML5新增的dataset属性两种存取路径。前者兼容所有浏览器,但和非标准的自定义属性区别不大;后者则通过专属API提供了更简洁的对象式访问,并在属性名包含连字符时(如data-date-of-birth)自动转换为驼峰命名(dateOfBirth),但在部分旧版浏览器中尚未得到支持。 文章指出,data-*属性的更大价值在于其语义化及与CSS选择器、JavaScript的深度结合。开发者可以直接使用`[data-attr]`选择器来精准定位元素,或根据属性值设置样式,这为动态交互和组件化开发带来了便利。总体来看,文章在厘清基本概念的同时,也给出了兼顾兼容性与未来标准的实践建议。

本机暂存
IT 后端/ 2013-07-07 22:05:39 / 累计浏览 7,570

用unix socket加速php-fpm、mysql、redis的连接

这篇文章探讨了在单机环境下,如何通过unix socket来优化php-fpm、mysql和redis的连接性能。作者从图虫服务器的单机运行现状出发,指出即使使用127.0.0.1本地IP,连接仍需经过TCP/IP层,引入不必要的开销;对于像图虫这样单机日处理2000万+动态请求的服务,切换到unix socket能直接绕过网络栈,实现更快的本地通信。 文章通过一个简单测试展示了立竿见影的效果:200次redis请求耗时从38ms降至27ms,这10毫秒的差距在高并发场景下足以驱动优化。配置方法也被详细列出——对于mysql(PDO),需在DS

本机暂存
IT 设计/ 2013-07-07 21:52:04 / 累计浏览 4,112

那么明显,为什么用户看不见?

这篇讲的是一个典型的“灯下黑”设计问题:明明界面中有个核心按钮或提示,用户却视而不见。作者从一次线上用户反馈切入——某项关键功能的使用率远低于预期,尽管入口就摆在那里。 经过排查,团队发现问题根源并非功能本身或流量不足,而是界面中的视觉层级、色彩对比或周边元素的干扰,无意中“削弱”了这个明显入口的存在感。文章没有停留在表面批评,而是深入分析了用户浏览页面时的真实注意力路径,并对比了几种常见的视觉引导方案的实际效果。 作者最终提出,这类问题的解决不能只靠设计师的直觉,而需要结合眼动追踪数据和真实的A/B测试,验证哪些细微调整(比如改变图标色相、增加微动效、调整周边留白)能真正提升元素的“可发现性”。文章结尾回归到产品思维:设计决策应基于用户行为数据,而不仅仅是“我觉得这很明显”。

本机暂存
IT 前端/ 2013-07-07 21:49:46 / 累计浏览 8,661

jQuery的data()方法

这篇讲的是jQuery中data()方法如何优雅地管理HTML5的data-*自定义属性。它解决了一个实际问题:如何方便、安全地在DOM元素上绑定和读取各种类型的数据,同时避免循环引用可能导致的内存泄漏。 作者从基本用法切入,展示了四种调用方式,核心优势在于data()会智能处理数据类型——字符串值的"true"会被转为布尔值true,"43"会变成数字43,而符合JSON格式的对象或数组字符串也会被自动解析。这意味着你从HTML属性拿到的不再是笨重的原始字符串,而是可以直接使用的JavaScript值,省去了大量手动转换的代码。 更关键的是它的存储机制:data-*属性在首次读取后,数据便交由jQuery在内部缓存,后续操作都基于这个内存对象。这不仅性能更优,也保证了数据的一致性。需要注意的是,如果你想严格保持字符串形式,就该用attr()方法。 文章用一段简洁的示例演示了这种自动转换的直观效果,比如`$("div").data("options").name`直接就能获取到对象属性,非常适合需要在HTML标签上轻量级配置复杂参数的场景。

本机暂存
IT 算法/ 2013-07-07 21:46:52 / 累计浏览 2,319

通信复杂度问题:确定双方手中所有数的中位数

这篇讲的是通信复杂度中一个经典问题的算法设计:两地的两个人各自持有一个数字集合,他们想用尽可能少的通信来共同确定两个集合合并后的中位数,而不是笨拙地传输全部数据。 作者从问题背景出发,清晰地展示了从“暴力传输”到“极精巧算法”的优化路径。最初,A把全部数据传给B,通信量是O(n)比特;随后,通过在区间上进行多轮二分查找,算法被优化至O(log²n)。文章的高潮在于将复杂度降至O(logn)的精妙改进。核心思路是让双方比较各自数列的中位数a和b,根据大小关系丢弃一半不可能成为答案的数据。但关键在于,双方不需要完整传输a和b的数值,而是从高位到低位逐位比较并发送比特。一旦某一位不同就能立即停止本轮比较;同时,由于数据集在每轮都被减半,之前比过的公共前缀位在未来轮次中可以直接跳过。这种逐位比较与信息复用,将总通信量压到了O(logn)。 文章不仅给出了算法,还从信息论角度推导了Ω(logn)的下界,完整勾勒出问题的解空间。其价值在于,通过一个看似简单的游戏,生动展现了通信复杂度的理论力量与算法设计的艺术。

本机暂存
IT 设计/ 2013-07-07 21:44:34 / 累计浏览 2,009

用户流失原因调研四步经

这篇讲的是如何系统性地开展用户流失原因调研。文章直击产品经理常遇到的痛点——知道用户在流失,却不知从何入手,也不清楚如何将发现转化为实际行动。 作者将其总结为一套清晰的“四步经”。首先是明确调研目的,是为了防止现有用户流失,还是挽回已流失用户,目的不同,调研的侧重点也截然不同。接着,文章重点分享了挖掘真实流失原因的三种实用技巧:使用“5个WHY”法层层深挖用户表面说辞背后的真正动机;通过侧面对比用户使用的其他产品,激发其潜意识想法;以及在问卷调研中多分析用户行为数据,因为行为往往比主观原因更真实。文章用游戏用户因不知免费功能而流失、用户误以为“打工”能赚钱等具体案例,生动地展示了这些方法如何奏效。 后续步骤则引导调研者评估现有用户是否会继续流失,并探寻流失用户的回流条件。最终,文章引入GAP模型,帮助分析产品在认知、执行、传递等环节的具体缺口,从而设计出有的放矢的改善措施,让调研结论真正落地。整套方法从发现问题到解决问题,形成了一个完整的闭环。

本机暂存
IT 后端/ 2013-07-07 21:43:12 / 累计浏览 7,233

中间件和稳定性平台

这篇文章全景式地展示了阿里技术体系中,保障大规模分布式系统稳定运行的核心中间件与平台。它不是一个孤立方案的介绍,而是一张完整的技术地图。 文章从配置、消息、服务、数据到性能监控,分层介绍了多个关键组件。例如,用Diamond实现配置的动态推送与超高可用,用Notify(推模型)和Meta(拉模型)满足不同的消息需求,用HSF统一RPC调用,并依靠eagleeye进行链路跟踪。数据层则通过TDDL实现SQL路由,用精卫、愚公等工具解决数据迁移与扩容难题。最后,持续稳定性平台CSP与TProfiler、Hotspot等工具共同构成了保障系统高可用的“运维三件套”。 整篇文章的价值在于,它清晰地勾勒出了一套应对高并发、大数据挑战的、经过生产验证的全家桶方案。对于希望理解超大规模互联网系统底层基础设施的读者来说,这提供了一个非常直接且具体的参照系。

本机暂存
IT 开发者/ 2013-07-07 21:27:37 / 累计浏览 3,596

Linux大棚版gtest官网教程译文

这篇译文系统介绍了谷歌C++测试框架(gtest)的入门教程。作者从“为何选择gtest”切入,阐明了它作为一款优秀测试框架的核心设计哲学:确保测试独立可重复、通过“test case”组织以清晰反映代码结构、支持跨平台以保持可迁移性,并能提供详尽的失败信息以便高效调试。文章强调,gtest能帮助开发者从繁琐工作中解脱,专注测试内容本身。 在介绍完这些关键特性后,译文逐步展开教程内容。它首先指导如何将gtest编译为库并链接到测试项目,随后深入讲解了“断言”这一基础概念,区分了致命与非致命失败,并引入了“测试用例”和“测试夹具”等组织测试的核心组件。译文表明,这套基于xUnit框架的体系,旨在让有JUnit等经验的开发者快速上手,也让新用户能迅速构建出结构清晰、高效可靠的测试程序。

本机暂存
IT 设计/ 2013-07-07 21:24:51 / 累计浏览 4,220

卡通手绘类风格网站设计欣赏

这篇文章汇集了众多采用卡通手绘风格的网站设计案例,它首先点明了这种风格的核心魅力:它跳出了传统框架式设计的规整与束缚,追求一种活泼、随性且自由的视觉表达,让整个页面充满跳跃感。 作者指出,这种风格最初常见于游戏和儿童社区网站,但其表现力早已溢出这些领域。如今,许多设计工作室和个人设计师也倾向于用手绘的笔触来展现自己的日常工作与生活哲学,为品牌赋予独特的亲和力与个性。文章还特别提到一个关键的技术结合点:当手绘风格与滚动视差(Parallax Scrolling)效果搭配时,能为静态的插画注入生动的动感与视觉亮点,极大地提升用户的浏览体验。 作为一份灵感图库,文章主体展示了超过二十个风格各异的优质案例。从 Francesco Mugnai 的个人站点到 Web Design Lab,从儿童在线社区 DIY.org 到游戏网站 Adventure World,这些作品共同勾勒出手绘风格在不同行业中的灵活应用。最后,文章提供了更多高清案例的集中画廊入口,方便读者按图索骥,深入探索这种充满手作温度的设计语言。

本机暂存
IT 后端/ 2013-07-07 18:00:54 / 累计浏览 4,878

如何设计一个优秀的API

这篇讲的是如何设计出经得起时间考验的优秀API。作者从两年API维护经验出发,直面了一个核心痛点:API一旦发布,修改成本极高,会直接影响用户信任与业务。因此,好的API设计至关重要。 文章提出了优秀API的几个关键特质:对用户而言要易学习、易使用且难误用;对开发者则要易阅读、易开发。要达到这些目标,作者总结了九条核心设计方法,比如面向用例设计、采用良好思路(如方法优于属性)、避免“必须漂亮”或“必须简单”等极端意见、进行有效评审、保证向后兼容以及把握API的生命周期。 其中,关于“向后兼容”的多层次实现和为API设定“分级”管理以实现平滑演进的观点,给出了非常具象的指导。文章最后还列举了Flickr、Ebay等实践良好的API案例作为参考。对于任何需要设计或维护接口的开发者来说,这篇基于实战的避坑与进阶指南都值得一读。

本机暂存
IT 开发者/ 2013-07-07 18:00:06 / 累计浏览 7,655

从C语言的Hello World说起

这篇讲的是,很多初学者虽然写过Hello World,但对背后的编译过程一头雾水。作者就从最简单的`printf("hello world\n");`出发,详细演示了如何在Linux下用GCC命令一步步将其变成可执行文件。 文章没有停留在“运行”层面,而是拆解了`gcc -g -Wall hello.c -o hello`这条命令里每个选项的具体含义:`-g`为调试留后路,`-Wall`让编译器“多嘴”以暴露问题,`-o`指定输出文件名。甚至讨论了从简陋的`main()`到规范的`int main()`并返回0的代码改进。 更硬核的部分在于,它图解并分步剖析了整个编译流水线:预处理如何把`#include`的头文件展开成一个巨大的.i文件;编译器又如何将C代码翻译成汇编语言;最后由汇编器和链接器生成最终的机器码。每一步都附有具体的GCC指令示例,比如用`gcc -E`单独查看预处理结果。 这文章相当于带读者重新走一遍当年可能只按了“运行”按钮就略过的路程,把“从源码到程序”的黑箱给拆开了看。对于想补上系统编程基础课的人来说,这种从Hello World切入的硬核拆解挺扎实。

本机暂存