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

最新文章

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

IT 前端/ 2013-07-08 22:43:51 / 累计浏览 3,201

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,009

SSH简介

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

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

编码风格不是编码规范

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

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

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,565

用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,111

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

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

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

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,314

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

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

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

用户流失原因调研四步经

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

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

中间件和稳定性平台

这篇文章全景式地展示了阿里技术体系中,保障大规模分布式系统稳定运行的核心中间件与平台。它不是一个孤立方案的介绍,而是一张完整的技术地图。 文章从配置、消息、服务、数据到性能监控,分层介绍了多个关键组件。例如,用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,217

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

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

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

如何设计一个优秀的API

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

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

从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切入的硬核拆解挺扎实。

本机暂存
IT 前端/ 2013-07-07 17:59:07 / 累计浏览 2,766

IE10 CSS Hack(顺便聊聊IE11的CSS Hack)

这篇来自CSS88的文章,聚焦于开发者在实际项目中遇到的IE10 CSS兼容性难题。作者从同事反馈页面在IE10(甚至IE9)下出现异常的问题出发,系统梳理了针对IE10的CSS Hack方案。 文章核心介绍了两种实用检测方法:一是利用IE私有的条件编译(@cc_on),结合条件注释,为IE10添加专属的class,从而编写隔离样式;二是通过JavaScript检测`document.documentMode`属性,动态判断IE版本。作者还分享了针对IE11预览版不支持@cc_on这一变化所作出的代码调整思路,体现了方案的延续性。 文末附有不同模式下的效果截图和具体代码示例,为处理类似浏览器兼容性问题提供了清晰、可操作的实用思路。

本机暂存
IT 数据库/ 2013-07-07 17:58:18 / 累计浏览 4,404

Oracle Database 12c架构图

这篇讲的是Oracle Database 12c的架构全景图。作者提供了两张高清图表,一张完整勾勒了12c的整体架构,清晰地展示了所有关键组件以及它们之间的关系,特别是那些在新版本中引入或调整的后台进程,并简要说明了它们的工作原理。另一张则专门聚焦于12c最引人注目的特性——多租户(Pluggable Database)架构。这张大图详细描绘了容器数据库(CDB)与可插拔数据库(PDB)之间的交互逻辑,将这种能大幅提升资源利用率和管理效率的新模式,以可视化的方式呈现得一目了然。对于需要快速理解Oracle 12c技术演进方向、或正在规划数据库升级的团队来说,这两张图提供了非常直接的架构参考。图文结合的方式,让抽象的数据库内核设计变得直观可感。

本机暂存
IT 算法/ 2013-07-07 17:56:41 / 累计浏览 2,657

与Google拼音的工程师聊聊中文滑行输入

这篇讲的是作者因Google拼音输入法新增中文滑行功能,与负责该产品的工程师在微博上展开的一场产品辩论。讨论从实际体验出发,核心聚焦于中文输入法的创新路径:是追求如“搜狗拼音”般能改变用户习惯的质变,还是应尊重既有输入习惯进行渐进优化。 作者认为,滑行输入若想取代根深蒂固的九宫格习惯,效率需有颠覆性提升(如两倍以上)。而工程师则澄清,滑行输入的目标用户是全键盘群体,并非为替代九宫格;创新的关键在于“在不彻底变革用户习惯的前提下,一小步提升效率”,并以QWERTY键盘沿用至今为例,说明习惯的顽固性。 这场对话生动展现了产品经理与用户视角的差异:前者关注现有用户群的体验优化与市场细分,后者则从颠覆性创新和新商业可能的角度出发。最终,双方都认同微博是收集真实反馈的宝贵渠道。这段交锋也让读者思考:技术功能迭代时,如何平衡提升效率与尊重用户固有习惯,这或许比单纯追求算法先进性更值得琢磨。

本机暂存
IT 后端/ 2013-07-07 17:55:03 / 累计浏览 3,899

回调还是消息队列

这篇文章从作者封装Hive socket库时遇到的一个具体问题切入:如何处理底层`poll` API产生的事件。直接注入回调函数虽然直接,但容易引发异常、重入等不可控问题,且会加剧C/Lua边界的性能负担。 作者提出的方案是将事件及数据一次性返回给Lua层处理。为优化此方案可能带来的GC压力,他采用了一个预先传入的消息队列(一个空的Lua table)作为接收结构。在C层,通过高效的`rawseti`操作将消息逐条写入这个结构,并巧妙地利用一个缓存池来复用存储每条消息参数的小table,从而在系统稳定后避免了临时构建大型Lua表。 文章最后,作者还附上了一段极简的Lua消息队列实现代码,展示了其优雅的实现思路。整体而言,文章分享了一个从具体问题出发,在性能与可控性间权衡并最终优化实现的技术决策过程。

本机暂存
IT 设计/ 2013-07-07 17:53:01 / 累计浏览 4,569

IoC/DIP其实是一种管理思想

这篇讲的是,作者如何从一个简单的技术概念出发,最终揭示其背后更普适的管理智慧。文章以“开关控制灯泡”的经典例子,解释了控制反转(IoC)和依赖倒置(DIP)的核心:让灯泡这类设备去依赖开关定义的标准电源接口,而非让开关去适配每一个具体的灯泡。 但作者并未止步于此。他将视角拉远,展示了这一思想在商业与管理中的广泛应用:银行在买卖双方间提供担保交易模型,是将对彼此的直接依赖反转到对标准接口的依赖;海尔通过制定分销商标准,让渠道反过来适应自己,而非疲于应对多变玩法。这些案例清晰地勾勒出,IoC/DIP超越了代码层面的设计模式,成为一种破解复杂协作、降低耦合的管理框架。 在文章后半部分,作者将这一思想具体带入技术团队的日常挑战中。无论是前端团队制定组件标准让后端接入,还是云平台要求底层资源遵循统一管控模型,抑或是订单系统通过插件化与工作流引擎来应对业务个性化需求,其内核都是一致的:**制定清晰的标准接口,将控制权和依赖方向进行“反转”**,让协作方基于共同认可的协议进行对接,而非陷入无止尽的需求适配与代码耦合中。 最后,作者借Amazon的SOA实践和个人项目经验再次强调,在跨团队工作中,克制过度的控制欲,学会通过制定标准来倒置依赖,不仅是一种高效的技术方案,更是一种组织协作的智慧。它能将混乱的依赖关系转化为有序的、可扩展的协作结构。

本机暂存