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

最新文章

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

IT 设计/ 2013-05-28 22:13:02 / 累计浏览 2,922

谈谈页面流程图(附案例)

这篇讲的是在产品设计早期,如何用页面流程图来理清思路、统一团队认知。作者从自己过去偏好业务流程图的习惯出发,指出业务流程图关注“谁在什么条件下做什么”,而页面流程图则进一步具体到用户在不同页面间的操作与跳转路径,帮助设计者系统性地规划交互逻辑,避免过早陷入单页面细节。 文章以“公益捐物网站”为虚拟案例,演示了从一个模糊想法到功能规划的过程。作者强调了页面流程图对产品经理和开发者的双重好处:对设计者,它能快速勾勒全局、评估工作量并聚焦用户任务;对开发者,它是评估工作量、开展编码和提供反馈的高效沟通工具。绘制前的关键步骤包括拷问idea的可行性(如目标用户、价值主张),并列出功能优先级。 通过这篇分享,读者能学到一个实用的工作方法:在画几十张线框图之前,先花几个小时画页面流程图,就能对整个项目心中有数,让后续设计和开发沟通更顺畅。

本机暂存
IT 前端/ 2013-05-28 22:09:46 / 累计浏览 3,740

现代浏览器中内置的几个可以等效替代jQuery的功能

这篇讲的是现代浏览器如何“内化”了部分jQuery的核心功能,从而为开发者提供更轻量的原生选择。作者从jQuery体积膨胀、对移动端不够友好这一普遍痛点出发,指出在现代浏览器中,完全可以用原生API等效替代许多jQuery特性。 文章具体拆解了三个关键点:一是使用`document.querySelector`和`querySelectorAll`来替代jQuery选择器,作者演示了如何将它们分别映射为`$`和`$$`,并提醒`querySelectorAll`返回的节点列表需要通过`Array.prototype.slice.call`进行转换才更易用;二是利用`classList`对象直接进行CSS类的`add`、`remove`和`contains`操作,这与jQuery的`addClass`、`removeClass`和`hasClass`功能对应。 除了功能替换,作者也坦率指出了局限:原生DOM操作无法实现jQuery的链式调用,且需注意不同浏览器的兼容性差异。文末附上了两种特性在各主流浏览器中的支持情况图表,让读者能快速评估技术选型。整体而言,文章为那些希望减少项目依赖、或进行移动端优化的开发者,提供了一份清晰的“去jQuery化”实用参考。

本机暂存
IT 前端/ 2013-05-28 22:08:10 / 累计浏览 3,489

Javascript中的delete操作符

这篇从JavaScript中一个看似简单的delete操作符切入,但探讨的问题却非常根本:变量和对象属性之间的微妙关系。作者首先指明,要理解delete的行为,必须先理清JavaScript执行引擎在幕后创建的Global对象(浏览器中即window对象)和Activation对象(函数执行上下文)。所有全局和局部变量,本质上都是这些对象的属性。 文章通过一个代码示例生动地说明了这一点:在全局作用域中声明变量 `global` 后,可以通过 `this.global` 访问,这直接证明了变量作为Global对象属性的存在。基于这个核心视角,文章随后便能清晰剖析delete操作符的实质——它针对的是对象的属性,而非传统意义上的“变量声明”。这也解释了为什么delete无法删除通过var声明的变量或函数声明,因为它们被标记为不可配置。 作者从底层对象模型出发,把一个操作符的行为讲得透彻且连贯。这不仅帮读者知其然,更知其所以然,对于深入理解JavaScript的作用域链和执行上下文机制也大有裨益。

本机暂存
IT 移动开发/ 2013-05-28 14:53:01 / 累计浏览 2,115

移动触屏的手指触发尺寸

这篇讲的是移动端设计中一个常被忽视却至关重要的细节:触摸目标的尺寸。文章从苹果、微软、诺基亚等平台各自不同的设计指南出发,指出现有建议(如44px、28×28px)普遍偏小,与用户手指的实际尺寸存在差距。 这种差距会导致用户体验上的明显问题:用户不得不频繁切换手指的按压部位,或用指尖精确定位,这降低了操作效率;当按钮过于密集时,误触邻近目标的概率也大大增加,尤其使用较宽的拇指操作时问题更甚。 作者引用麻省理工学院触摸实验室的研究数据,给出了更符合人体工学的参考值:成年人的食指平均宽度对应45-57像素,而拇指更宽,约72像素。以这些尺寸设计,既能保证操作的精准性,也能提供清晰的交互反馈,这与费茨定律中“目标越大,命中时间越短”的原则一致。 当然,文章也理性地指出,完全按照手指尺寸设计在屏幕有限的手机上并不现实。设计师需要根据屏幕空间与核心功能进行权衡,有时精简导航、减少目标数量,是比单纯放大按钮更可行的方案。

本机暂存
IT 数据库/ 2013-05-28 14:51:20 / 累计浏览 3,194

C Mohan 讨论NoSQL的得与失

这篇文章是资深数据库专家 C Mohan 从历史演进的视角,对 NoSQL 运动兴起背景及其暴露问题的系统性梳理。他首先指出了传统关系数据库在应对 Web 2.0 时代需求时的力不从心,比如难以建模社交图谱、JSON 数据交换不便、扩展性与成本制约,以及 ACID 原则在实际业务中常需妥协等。 接着,作者结合自己在 System/38、Lotus Notes 乃至 DB2 等系统上的深刻教训,揭示了数据库内核设计的复杂性,例如锁粒度、崩溃恢复、集群支持等关键环节的挑战,为理解后续问题埋下了伏笔。 随后,他犀利地剖析了 NoSQL 方案普遍存在的“先天不足”:对并发控制与原子性等事务核心问题关注不够,索引设计过于简单,数据模型复杂却缺乏标准化工具,以及对分布式下一致性和可靠性的误判。文章并未全盘否定 NoSQL,而是强调无论是 MongoDB 的写锁、CouchBase 的文档复制粒度,还是对 ACID 的简化处理,都在高并发或复杂业务场景下可能遇到瓶颈。 最终,这篇讨论的启发在于:技术选型需回归具体场景的本质需求,无论是追求强一致的传统企业核心系统,还是需要灵活扩展的互联网应用,理解关系数据库与 NoSQL 各自的设计哲学和代价,才能避免盲目追随潮流,做出更务实的技术决策。

本机暂存
IT 设计/ 2013-05-28 14:49:35 / 累计浏览 1,894

那些宽衣解带的事

这篇讲的是设计师基于和家中长辈的真实互动,观察到并呼吁大家关注产品设计中常被忽视的“老友记”群体的真实需求。 文章从一个看似“宽衣解带”的标题切入,实际探讨的是衣物、日用品等设计对老年人的不友好。作者分享了陪奶奶买衣服的经历:设计师为了方便老人而设计的“假纽扣”套头衫,却因老年人头发稀疏、穿脱会弄乱精心打理的发型而遭到嫌弃;在购买内衣时,常见的背扣款式对老年人极其不友好,而能买到的前扣式“老人内衣”又难以在主流渠道获取。此外,带放大镜的指甲剪因老人腹部阻碍视线而无法使用;许多老人宁愿用伞也不愿拄拐杖,只为避免“无用”的标签,但普通伞的强度又带来安全隐患。 这些细节揭示了现有设计的一个通病:我们常常基于“衰老=能力不足”的刻板印象去简化需求,而非真正深入理解“老友记”们维护尊严、保持独立自主的核心渴望。文章最终发出温和而有力的呼吁:希望从事产品与设计工作的“儿女孙媳”们,在为大众设计时,能更多地将这些具体而微的、关乎体面与自主的需求纳入考量,做出更体贴的工业化产品。

本机暂存
IT 后端/ 2013-05-21 23:00:51 / 累计浏览 6,062

fatcache源码浅析

这篇讲的是Twitter开源的缓存服务fatcache,可以把它理解为一个“SSD版的Memcached”。作者从其源码出发,剖析了它如何用有限的内存索引,去管理大容量的SSD存储。 文章详细解读了fatcache的核心设计。它使用通用的队列(generic queue)来管理资源池,底层则采用了经典的slab allocator内存模型。作者拆解了slabclass、slab和item等关键结构,并说明了fatcache如何在内存中用哈希表快速索引key,而实际的value数据则可能存储在内存或磁盘的slab里。 最精巧的部分在于其读写与淘汰机制。为了适配SSD,fatcache设计了一套基于FIFO的淘汰策略。在写入时,它能将内存中的slab成片地交换到磁盘,巧妙地将随机写转化为顺序写,提升了IO效率。对于删除操作,它只在索引层面标记删除,而不立即修改SSD数据,等待后续自然淘汰,这种设计充分避免了不必要的随机写入。 整个设计体现了对硬件特性的深刻理解,用相对简单的队列和slab管理,在缓存层实现了高效的数据存取。

本机暂存
IT 前端/ 2013-05-21 22:59:57 / 累计浏览 4,628

项目中对模板和js,css文件进行压缩的处理类

这篇讲的是一个基于PHP的前端资源压缩方案,核心目标是减少HTML模板中的冗余空白字符以及对JS和CSS文件进行专业压缩,从而节省用户流量与服务器带宽。 作者提供了一个具体的PHP处理类,它分两步工作:首先,递归遍历模板源目录,通过`trim`函数去除每个文件行首尾的空格和换行符,再拼接输出,以此实现模板的“瘦身”;其次,它调用外部工具——Google Closure Compiler(用于JS)和YUIcompressor(用于CSS),为对应的文件生成压缩后的`.min.js`和`.min.css`版本。 整个实现的巧妙之处在于自动化。脚本能自动处理整个目录树,无需手动逐个操作,并且内置了`grep -v "min.js"`这样的逻辑来避免对已压缩文件的重复处理。作者也明确指出了所需的环境配置,即把对应的编译器JAR包放在同级目录即可。这是一个简单但实用的前端工程化小工具,尤其适合希望快速集成到部署流程中来实现基础资源优化的开发者。

本机暂存
IT 后端/ 2013-05-21 22:56:28 / 累计浏览 3,864

SNS 背后的技术: 消息流的推拉模式选择

这篇文章深入对比了SNS消息分发的推模式与拉模式,从技术实现、资源消耗到用户体验进行了全面剖析。 作者从传统通信的推模式(如短信)在SNS场景下遇到的挑战切入,引出了拉模式作为更节省存储的替代方案。文章的核心在于辩证地分析了两种模式的优劣:拉模式在存储效率上能实现百倍级节省,并更有利于处理垃圾信息、好友关系变更、隐私权限修改等复杂的“删除与修改”操作;而推模式在保证信息即时性、减少登录后延迟方面有理论优势,但面临巨大的缓存维护成本和一致性挑战。 文章并未止于理论推演,而是结合了对Twitter、Facebook、新浪微博、QQ空间等主流平台的公开信息与现象观察,指出了各平台在推拉选择上的实际权衡。例如,新浪微博的拉模式有助于快速应对大规模删帖需求,而Facebook对离线用户采用拉模式则体现在登录时News Feed的短暂加载上。 最后,文章通过具体的数据模型计算,直观展示了在不同用户规模和行为模式下,推拉模式对缓存资源和网络开销产生的巨大影响。作者犀利指出,推模式下频繁的缓存修改操作会“让cache痛不欲生”,而一个设计良好的拉模式配合临时缓存,往往能在性能、成本与灵活性上取得更好的平衡。

本机暂存
IT 开发者/ 2013-05-21 22:54:20 / 累计浏览 5,051

项目经理是干什么的

这篇讲的是职场新人小M在仰慕项目经理光环后,向资深S总深入请教“项目经理究竟是干什么的”的职业选择故事。它通过对话形式,清晰地拆解了这个常被向往却未必被理解的角色。 文章首先定义了项目经理是公司委派的、对项目全过程负责的直接领导者。S总总结了其核心职责是达成“铁三角”:按预期交付成果、让客户满意、让员工满意。具体到IT项目,任务贯穿售前支持、项目交付、收尾移交、干系人管理以及团队建设,项目经理因此被称作“推动者”与“协调者”。 更深入的是,文章重点探讨了“你是否适合”的问题。S总指出,性格特质和思维习惯比单纯技术能力更关键,他列举了领导力、责任心、积极主动和压力承受四大“先天赋予”的素质,并提供了一份具体的行为特点清单(如换位思考、遇事先找解决方法、懂得倾听等)供自检。这恰恰点明了转型的核心挑战:项目经理之路虽是“无悔路”,但对人的综合要求极高,近乎“迷你CEO”,需要慎重评估自身匹配度。 对于正在考虑技术转管理的读者,这篇文章从“是什么”、“做什么”到“需要怎样的人”,层层递进地提供了清晰的参考框架,尤其那份素质自测清单,能帮助你在迈入管理赛道前,进行一次冷静的自我对话。

本机暂存
IT 移动开发/ 2013-05-21 22:52:11 / 累计浏览 2,369

Objective-C 的对象模型

作者从自己的C++开发经验出发,对Objective-C的对象模型进行了梳理和对比。文章指出,Objective-C的消息传递语法(如`[obj message:param]`)比C++的函数调用更强调可读性,参数名称与方法名融为一体,减少了参数写错或遗漏的风险。 在类与对象的设计上,两者差异显著。Objective-C通过`@property`简化实现,并支持运行时动态绑定,使用`id`类型可以向任何对象发送消息。而C++的RTTI则更偏向静态的类型识别。作者特别提到了Objective-C独有的Category机制,它允许在不改变类内存布局的前提下,将方法拆分到不同模块中,这比C++的友元(friend)机制使用起来更为优雅。此外,协议(`@protocol`)类似于接口,但支持`@optional`方法,提供了更灵活的契约检查。 文章认为,Objective-C在基础库整合和语言扩展方式(利用`@`符号)上比C++更为简洁一致,其动态模型带来的灵活性,如今已能通过先进的编译技术弥补性能损耗。整体来看,Objective-C牺牲了部分静态确定性,换来了运行时的动态能力,试图在性能与灵活性之间找到独特平衡点。

本机暂存
IT 算法/ 2013-05-20 23:30:33 / 累计浏览 3,014

算法分析中递推式的一般代数解法

这篇讲的是算法分析中一个关键但常被绕开的数学工具:如何用特征方程法,系统地求解递推关系式。文章作者直接切入,以经典的汉诺塔问题 T(n) = 2T(n-1) + 1 为例,演示了如何将这个递推式转化为封闭形式 T(n) = 2ⁿ - 1 的完整代数过程。 这种技巧是理解递归算法(如分治法)真实复杂度的基石。它超越了仅靠“主定理”快速查表的层面,让你能亲手推导并理解那些复杂度结论的由来。文章不仅给出了步骤,更重要的是展现了从递归定义到显式公式的逻辑链条,让你在遇到新的递推关系时,能有章可循地求解,而不仅仅是猜测或依赖现成结论。 对于需要分析自定义算法复杂度,或想更深入理解算法导论中数学原理的开发者来说,这篇文章提供了一套清晰、可操作的代数解法框架。

本机暂存
IT 设计/ 2013-05-20 23:28:01 / 累计浏览 4,463

关于原型设计的一些事

这篇讲的是原型设计的核心目标与实用心得。作者开宗明义,将原型定义为沟通最初产品设想的线框图,其核心作用在于呈现内容、结构与交互流程,而非视觉设计。文章重点探讨了原型的“精细程度”问题,认为业界主流推崇的“中保真”原型已足够让团队理解需求重点,并对耗费精力的“高保真”原型表达了审慎态度。 在工具选择上,作者结合实际项目经验,指出了一个常被忽视的真理:纸和笔(乃至白板)往往是最快捷高效的原型设计工具。文中还具体分享了使用Axure的实用建议,比如警惕复杂交互动作的陷阱、学会拆解表述复杂流程、建立个人控件库以提高效率,以及重视原型版本的存档管理。 整篇文章从实践视角出发,不仅厘清了原型的本质,更传递了一种敏捷、高效的协作思路,对于产品经理和交互设计师梳理自身工作流程很有启发。

本机暂存
IT 后端/ 2013-05-20 23:24:24 / 累计浏览 4,219

Tomcat内存溢出的原因

生产环境中Tomcat内存设置不当容易引发各类溢出错误,这篇文章就系统总结了三种常见情况及其解决思路。 最典型的是Java heap space堆溢出,通常发生在98%时间用于GC且可用堆不足2%时。在无内存泄露的前提下,通过调整-Xms和-Xmx参数(建议设为相同值,如1024m)可解决,但需注意其上限受操作系统数据模型、虚拟内存及物理内存限制。 其次是PermGen space永久保存区域溢出,多因加载过多Class信息(如Hibernate、Spring框架动态生成类)导致。解决办法是加大-XX:PermSize与-XX:MaxPermSize参数,并需注意它们与-Xmx的总和不能超过系统最大JVM堆支持(如1.5G)。 第三种较为特殊,是unable to create new native thread无法创建新线程,这与JVM和系统内存分配比例有关。文章深入分析了JVM占用内存过多时,操作系统可用内存不足以创建更多物理线程的原理,并给出了线程数估算公式。此类问题需要同时调整操作系统与JVM参数。 作者从实际遇到的问题出发,不仅列出参数调整方案,还通过测试数据(如32位系统下堆大小限制)和原理分析(如线程创建机制)来支撑结论,强调需要根据不同溢出类型进行针对性诊断才能治本。

本机暂存
IT 开发者/ 2013-05-20 23:23:31 / 累计浏览 3,414

引导扇区实现

这篇讲的是如何从最底层实现一个操作系统启动的第一步:引导扇区。作者从BIOS加电自检后如何找到并执行启动代码讲起,解释了CPU进入实模式后的内存寻址机制,以及BIOS如何通过识别磁盘第一个扇区末尾的特定标志`0xaa55`来加载引导程序。 核心实现思路清晰:引导程序被加载到内存地址`0x7c00`处执行。文中给出了一段精简的汇编代码示例,演示了如何利用BIOS的`int 10h`中断,在屏幕上打印出“Hello,CB_OS!”字符串。这部分不仅展示了代码,还详细拆解了中断调用所需的参数设置,比如显示模式、字符长度和颜色属性。 巧妙之处在于,作者完整走通了从编写源码(`boot.asm`)、用`nasm`编译成二进制文件、再到通过`dd`命令写入磁盘镜像并使用bochs模拟器运行的整个流程。最终,在模拟器中成功看到输出,直观验证了引导扇区工作正常。文章从底层原理到可运行代码的完整路径,让操作系统启动这一抽象过程变得具体可感。

本机暂存
IT 数据库/ 2013-05-20 23:20:22 / 累计浏览 3,941

Ceph的现状

这篇详细拆解了Ceph这个统一分布式存储系统,它告诉我们,Ceph卓越的性能、可靠性和扩展性,都建立在一个名为RADOS的底层对象存储系统之上。而RADOS的核心,正是那个巧妙的CRUSH伪随机数据分布算法。这个算法是解决大规模集群中数据如何高效、均匀分布到成百上千节点的关键,它能在节点增减时最小化数据迁移,平衡了效率与扩展性这一对矛盾。 在RADOS基础之上,Ceph通过不同组件提供了三种存储接口:LIBRADOS提供了直接的对象操作API,RADOS Gateway兼容了S3和Swift,让对象存储更易用;RBD则将存储抽象为块设备,支持精简配置、快照等企业级特性;Ceph File System则直接提供POSIX接口,无缝对接传统文件应用。这真正体现了“统一”的价值。 文章同样关注了Ceph的“人”的生态。项目源于Sage Weil的博士论文,至今已积累24万行代码,近期开发活动依然活跃。更值得关注的是其完善的社区设施,从邮件列表、项目管理到详尽的文档和路线图,构成了一套健康、开放的运作体系,这为Ceph的长期发展和质量提供了坚实保障。

本机暂存
IT DevOps/ 2013-05-20 23:18:48 / 累计浏览 15,969

如何成为OpenStack工程师

这是一篇为想成为OpenStack工程师的人绘制的成长地图。作者从“0级”的基础技能储备讲起,强调了Python、Linux、Git等工具的重要性,并给出了从入门到进阶的具体学习资源,比如《Python参考手册》、《鸟哥的Linux私房菜》以及Pro Git在线书。 接着,文章将视角转向“1级”的OpenStack专项学习。这部分详细拆解了从理解核心概念(Compute、Network、Object Storage)、动手使用平台(通过界面或命令行),到搭建开发环境(使用devstack、deb包或源码安装)的完整路径。它不仅仅是罗列资源,更像一个教练,指导读者如何通过stacklab.org实践、阅读管理员手册来逐步深入。 文章开篇点明的“态度开放、主动沟通”以及“自动化、流程化、文档化”的思维,也为整个技术学习之旅定下了基调。对于新手而言,这份清单清晰地指明了先打牢基础、再逐步攻破专业模块的可行路径,为后续的源码分析和实战打下了扎实的基础。

本机暂存
IT 开发者/ 2013-05-20 23:16:24 / 累计浏览 3,067

创业,你真的准备好了吗?

这篇文章从两位创业者的亲身经历出发,探讨了创业的本质与准备。作者“道哥”首先以自己早年运营一个安全论坛的经历为例,指出创业更像一种“感觉”——当你的产品虽不完美,却挡不住用户的热情时,你可能就走在了正确的路上。他后悔没有将那个社区坚持做下去,但也从后续的用户反馈中体会到了创造价值的满足感。 随后,文章引入了创业者周伟的分享。他结合自己创办天勤考研社区和高分笔记三年来的起伏,详细描述了创业者光鲜背后必须承受的孤独、委屈与磨难。周伟以自己曾遭竞品人身攻击、却最终凭借坚持获得成功的案例,强调了不放弃的重要性。他进而提出了创业者需要自省的三个问题:你是否容易放弃?执行力是否够强?创业目的是什么? 此外,文章还提炼了几个关键心得:你的产品需要构建让用户离不开的“护城河”;资源整合能力比个人能力更重要;以及领导者应学会放权,以从容心态解决问题。最后,作者呼吁创业者写下错误而非辉煌,以持续成长。

本机暂存
IT 移动开发/ 2013-05-20 23:14:49 / 累计浏览 2,991

使用xctool自动打包,测试xcode项目

这篇讲的是如何用Facebook开源的xctool命令行工具,来简化和优化Xcode项目的构建与测试流程。 作者开篇直接点明,xctool是用来替代苹果官方xcodebuild工具的利器。它的核心优势很清晰:一方面,它能像Xcode一样执行测试,但输出结果是结构化的,更适合自动化脚本解析;另一方面,它的编译输出带彩色高亮,可读性远超传统工具,能让你更快定位到构建错误。 文章随后给出了最实用的部分:通过`brew install xctool`即可轻松安装。而日常使用只需掌握三个核心命令——`archive`打包、`build`构建、`test`测试。每个命令都附带了明确的参数示例,指向工作区(.xcworkspace)和计划(Scheme),照着替换就能立即上手。 整体来看,这篇文章为iOS开发者提供了一个清晰的“工具升级”路径。它没有停留在功能介绍,而是快速引导你完成从安装到基本使用的全过程,有效降低了尝试新技术工具的门槛。

本机暂存
IT DevOps/ 2013-05-19 23:35:21 / 累计浏览 4,733

自动化运维之企业实际案例分析

这是一篇方案/架构类的实战分享,讲的是如何利用Puppet应对大规模服务器批量管理的挑战。 作者从一个具体场景出发:某公司新到500台服务器,后续需要批量修改100台机器的NTP时间同步配置。如果依赖手动登录或编写脚本逐一执行,效率极低且容易出错。文章核心展示了如何利用Puppet的`exec`资源,通过一行`sed`命令在几分钟内完成所有配置变更,直观体现了自动化运维的效率优势。 另一个案例则更为完整,涉及使用Puppet的`file`资源统一推送rsync脚本和密钥文件到客户端,并配合`exec`资源在文件变化时自动触发数据备份与同步。这完整演示了从配置分发到状态触发执行的Puppet工作流。 文章在结尾总结时并未停留在代码层面,而是抛出了几个值得深思的实际问题:如何对Puppet客户端进行高效分组、Master服务器性能如何横向扩展、以及如何与SVN等工具链集成。这些思考点明了从“会用”到“用好”自动化运维工具的关键进阶方向。

本机暂存