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

最新文章

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

IT 后端/ 2013-03-04 14:22:02 / 累计浏览 6,775

并发框架Disruptor译文

这篇讲的是Martin Fowler撰文推荐的高性能并发框架Disruptor,它正是LMAX交易系统能实现每秒600万订单的核心引擎。作者从“为什么会这么快”切入,剖析了传统锁机制的缺点,然后详细拆解了Disruptor的几大“魔法”:通过精心的缓存行填充避免伪共享、利用内存屏障保证无锁操作的正确性,并深入讲解了RingBuffer这个核心数据结构如何实现高效的读写。 文章不仅解释了原理,还提供了具体的使用指南,涵盖了从RingBuffer读取、写入到版本演进的完整路径。最后,通过LMAX架构和实际处理百万TPS的案例,展示了它在解决高并发、低延迟场景下的巨大价值。对于想理解无锁编程和设计高性能内存队列的开发者,这组系统性的译文提供了从理论到实践的清晰线索。

本机暂存
IT 开发者/ 2013-03-04 14:19:59 / 累计浏览 6,474

是是非非本寻常,我们要不要跳槽

这篇讲的是作者从个人跳槽经历出发,对“要不要跳槽”这个职场难题的深度思考。他以自己因高管承诺未兑现而冲动加入阿里、反而获得快速成长的经历为引,提出了一个核心观点:许多跳槽源于职场中的“不爽”与误解,但逆境才是真正塑造能力的环境。 作者指出,个人价值往往由直接上级决定,向上沟通和客观自省至关重要。他冷静分析了跳槽的隐性成本:不仅包括脱离熟悉环境的投入,更涉及机会与风险的对等博弈——高薪挖角可能伴随“无法着陆”的风险。他特别强调,“剩者为王”,在平台中日耕月耘的积累,其长期回报可能远超频繁跳槽带来的短期薪资涨幅。 最终,文章给出了务实的建议:在能力与火候未到时,不必主动求职,好的机会自会找上门;而转行则需极其谨慎,应在现有领域深耕后再做考量。文章将个人选择与平台价值紧密关联,为身处职业十字路口的人提供了一套理性决策的思考框架。

本机暂存
IT 设计/ 2013-03-04 14:19:25 / 累计浏览 1,668

JJ Ying:勇于尝试

这篇访谈围绕设计师JJ Ying的个人成长与行业洞察展开。从2006年赢得GUI设计大赛起步,他坦诚自己是“脸熟程度大过实际能力”的设计探索者。他详细分享了从物理专业转向GUI设计的学习路径——强调从软件“术”到设计“艺”的转变,关键在于结合实际项目解决需求,而非单纯临摹。 采访深入探讨了设计热情维持的挑战。JJ Ying认为,在市场环境、工作内容与预期存在落差时,找到自己的“high点”至关重要。他以亲身经历为例,通过追踪用户反馈来获取持续干劲。文章还对比了在惠普与百度迥异的设计氛围:前者流程细致、周期长达数年,后者则追求极速迭代,产品从需求到上线可能仅需五天。 在资源推荐部分,他不仅分享了Sidebar、Dribbble等必看网站,更指出学习的关键是开拓眼界、保持危机感。对于中文字体限制等现实问题,他将其视为聚焦布局与基础设计元素的机会。访谈最后,他对WebOS、Metro等设计风格的评价,展现了他对行业历史与设计哲学的深刻思考。整篇对话为从业者提供了从学习方法、心态调整到行业观察的多层次实用见解。

本机暂存
IT 数据库/ 2013-03-04 14:12:15 / 累计浏览 3,053

关于blockrecover 解决坏块相关测试与总结

这篇文章讲的是,当线上数据库因硬件故障(如小机意外掉电)出现大量坏块,甚至坏块中包含未提交事务时,如何使用Oracle的blockrecover命令进行恢复。作者从一个真实的故障场景出发,客户在IBM p系列小机更换电源后,数据库(9.2.0.8 RAC)出现了大量坏块和smon回滚报错。为了在减少业务影响的前提下解决问题,团队决定采用blockrecover方案。 为了验证该方案在复杂情况下的有效性,作者在10g环境下进行了完整的模拟测试。实验详细重现了从创建测试表、使用RMAN备份数据文件、切换归档日志,到人为模拟产生包含未提交事务的坏块的全过程。测试的关键在于,它不仅模拟了坏块,还通过后续的业务操作模拟,验证了blockrecover能否在不影响其他正常数据块的情况下,精准修复目标坏块并正确处理其中的事务。 最终的测试结果证实,blockrecover命令能够有效处理这类棘手的坏块问题。整个复现过程步骤清晰,对于遇到类似“坏块+事务回滚”故障的DBA来说,提供了一个极具参考价值的实战解决方案。

本机暂存
IT 移动开发/ 2013-03-04 14:09:13 / 累计浏览 2,915

微信的迭代

这是一篇关于产品迭代与市场策略的**事件复盘/观点类**文章。 这篇讲的是微信如何在早期激烈的竞争中,通过极快速的试错与迭代,最终找到核心功能并成长为国民应用。文章从战略角度回溯了微信的起点:为对抗KiK而在两个月内仓促推出的1.0版,因免费短信模式不符合国内运营商套餐环境而遇冷。随后,微信团队迅速调整,经历了1.2版图片分享的再次失利,才在2.0版押注语音通讯并初步获得市场回应。 真正的转折点发生在3.0版。在对手米聊拥有先发优势的情况下,微信没有跟风功能,而是依托资源推出了“查看附近的人”,这一LBS功能成为用户增长的爆发点,配合腾讯体系的强推,日增用户达到数十万级,迅速确立了优势。文章指出,4.0版“朋友圈”与开放平台的推出,标志着微信从通讯工具转向移动生活方式平台,彻底构筑了竞争壁垒。 作者的核心观点很清晰:没有对用户需求的精准把握和快速回正的能力,产品就可能失败;而一旦抓住核心价值,借助资源与平台化思维,则能构建难以撼动的生态。从一款功能单一的聊天工具到影响上亿用户的生活入口,这条道路的每一步都充满了对市场反应的冷静观察与果断调整。

本机暂存
IT 后端/ 2013-03-04 14:05:33 / 累计浏览 3,493

Nginx模块fastcgi_cache的几个注意点

这篇讲的是,作者在配置Nginx的fastcgi_cache模块时,明明参数都设对了,缓存却一直不生效、状态始终是MISS的诡异经历。通过strace工具抓包后,他发现是Discuz论坛程序默认返回的 `Cache-Control: no-cache` 响应头,直接导致Nginx放弃了缓存。 作者没有停留在表面,而是深入到Nginx源码层面,找到了关键的判断逻辑。他总结出:当fastcgi响应头中包含 `Set-Cookie`、`Expires` 时间过早或 `Cache-Control` 指向不缓存时,即使配置了cache,Nginx也会直接跳过。文章清晰地展示了从“配置无误却不生效”到“抓包定位干扰源”,再到“查阅源码验证规则”的完整排查链路。 对于实际运维或开发人员,这提醒我们:缓存是一个“端到端”的决策过程,上游应用的“不缓存”响应头拥有最高优先级。文末附带的Nginx配置示例和缓存状态头调试方法,也为快速定位类似问题提供了实用工具。

本机暂存
IT 后端/ 2013-03-04 13:58:51 / 累计浏览 4,723

VIM插件管理及python开发环境配置

这是一篇作者在公司内部做的技术分享,核心是解决新手面对VIM时无从下手、Python开发环境配置繁琐的痛点。文章没有停留在理论层面,而是直接提供了一套经过实践检验的“抄作业”方案。 作者首先建议备份原有配置,然后详细展示了自己的.vimrc文件配置过程。关键点在于使用Vundle这个插件管理器,通过几行命令即可自动安装和管理如jedi-vim(Python智能补全)、nerdtree(文件树)、ctrlp(模糊文件搜索)等一系列提升编码效率的必备插件。配置中还包含了实用的基本设置,比如用空格代替Tab、配置状态栏显示Git和语法检查状态等。 这套方案的目的很明确:让开发者能快速跳过繁琐的“造轮子”阶段,获得一个开箱即用的高效开发环境。对于希望利用VIM进行Python开发,但又被初始配置劝退的读者来说,这份可直接复用的配置清单和配套PPT提供了清晰的行动路径。

本机暂存
IT 算法/ 2013-03-03 23:45:16 / 累计浏览 2,265

不得不留意的STL string重载函数和隐式类型转换

这篇讲的是STL `std::string` 构造函数的性能差异,作者从360云引擎团队的一篇深入剖析文章出发,通过实测数据揭示了几个容易忽视的关键点。 文章在Linux GCC 4.1.2环境下,对多种`string`构造方式进行了万次循环计时。结果发现,利用拷贝构造函数`string(const string&)`最快,这得益于写时复制(COW)机制。而令人意外的是,最常用的`string(const char*)`构造方式耗时竟然最长,比其他需要分配内存的构造方式慢数倍。原因在于,若不预先提供字符串长度,构造函数内部必须先调用`strlen`遍历一次整个字符串以确定内存大小,而像`string(const char*, size_t)`这样直接给出长度的版本则省去了这步开销。 这提醒开发者,在已知字符串长度的情况下,显式传递`size_t`参数能带来显著的性能提升。同样,需要复制`string`时,直接使用拷贝构造函数也是更高效的选择。

本机暂存
IT DevOps/ 2013-03-03 23:41:07 / 累计浏览 11,889

Linux Used内存到底哪里去了?

这篇讲的是Linux运维中一个经典困惑:用`free`命令看到内存已用7-8G,但`ps aux`统计的进程RSS总和却不到30M,多出的内存到底去哪了? 作者从同事的实际问题出发,逐步拆解。先解释`free`输出的含义,指出buffer/cache虽被计入used但可回收;然后通过工具如nmon、top分析,发现进程RSS确实占了大头,但还有剩余。进一步揭示内核开销:slab缓存用于对象池,通过`slabinfo`计算消耗了约900MB;页表管理物理页面,从`/proc/meminfo`读取占了58MB;加上struct page等固定消耗。通过编写脚本累加进程RSS、页表和slab,结果与`free`的used基本吻合,但略多171MB,原因是RSS计算中共享库被重复计算。 文章最后澄清了内存计算的迷糊账,教会读者如何用`slabinfo`、`/proc/meminfo`等工具自查,理解Linux内存管理的底层细节。对于遇到类似问题的开发者,这是一次清晰的排查示范。

本机暂存
IT 移动开发/ 2013-03-03 23:39:18 / 累计浏览 3,668

TeamToy完全使用手册

这是一份姗姗来迟的TeamToy使用手册,作者从理念到实操完整梳理了这个为创新团队打造的效率工具。TeamToy的核心理念是“以事为核心”而非“以人为核心”,它将TODO列表设为默认界面,旨在提升团队效率而非增加干扰。文章详细阐述了其产品结构:核心功能聚焦于任务与多层次沟通,而插件体系则为项目管理、Bug追踪及各类服务整合提供了扩展空间。 技术上,TeamToy实现了全功能的接口化,并保持敏捷的更新节奏。它采用对非商业用户友好的GPL2开源协议,并强调用户可以完全自主掌控数据与部署。安装部分提供了清晰的路径:非技术团队可通过云商店快速部署,而自建服务器则需满足PHP、MySQL等特定环境要求,文中对配置文件修改等关键步骤给出了明确指引。 文章的后半部分转入“最佳实践”,以添加团队成员等操作为例,提供了具体、分步骤的图解说明。作者旨在帮助团队负责人快速建立自上而下的理解,避开常见问题,顺利启动并运用这个工具来优化协作流程。

本机暂存
IT 开发者/ 2013-03-03 23:37:17 / 累计浏览 4,416

GA SEO报告中的Not Provided和Not Set

用GA追踪SEO时,看到自然搜索流量里冒出来的“(not provided)”和“(not set)”总是让人一头雾水。这篇文章就专治这种困惑,作者从GA报告的具体路径入手,一步步拆解了它们的来龙去脉。 核心问题在于,(not provided)并非GA的故障,而是Google为保护已登录用户的隐私而采取的加密措施。当用户通过加密的HTTPS链接访问网站时,搜索关键词信息就被隐藏了,GA自然也就“无从得知”。这也解释了为什么付费广告数据通常不受影响——Google对广告主还是“网开一面”。而(not set)则更像是一个占位符,用于表示那些本身就没有关键词维度的流量来源,比如直接访问。 文章还指出了一个现实:随着浏览器安全策略的收紧,(not provided)的比例可能远超预期。既然精确获取关键词已无可能,作者建议利用GA的“二级维度”功能,通过分析对应的着陆页来间接推断用户意图。这篇分析把GA报告里一个看似技术性的小问题,讲透了背后的逻辑和应对思路。

本机暂存
IT 后端/ 2013-03-03 23:35:46 / 累计浏览 3,420

发布及其检查的自动化实践

这篇讲的是,一个服务实例超过35K的大型Dubbo注册中心,在频繁发布中遇到的棘手挑战及其实战解决方案。作者从一次因人工配置错误导致的严重事故出发,分享了如何通过持续的自动化改进,让发布过程从“危险重重”变得可靠。 文章聚焦四个具体痛点:数据库配置错乱、发布前后服务数据一致性核对、运行时状态报告集成,以及重启引发的动态数据风暴。针对每个问题,都给出了清晰的“解决方法”和提炼出的“原则”。例如,通过监控配置文件的值来防止环境错配;在发布脚本中集成数据Dump和Diff,实现Provider列表的自动核对;将关键状态汇总到一个URL,方便监控;并设计了“warm-up”机制来平滑重启过程。 作者强调,核心思路是将“人操作可能出错”的环节,逐步转化为可监控、可自动执行的脚本。最终目标是让发布回归极简,理想情况下仅需运行一条命令,而把异常情况下的排查留给必要的时候。整个过程体现了从发现问题、分析根因到工具化、自动化解决的工程化实践闭环。

本机暂存
IT 后端/ 2013-03-03 23:33:40 / 累计浏览 5,412

Sentry: 错误日志集中管理

这篇讲的是如何用Sentry搭建一个集中式的错误日志管理系统。Sentry本身是一个Python编写的开源项目,它能捕获程序运行中的错误详情,并提供一个清晰的Web界面进行查看和分析,支持Python、PHP、Ruby、iOS等多种语言。 文章的核心是手把手介绍如何部署和使用。作者从安装开始讲起,用`pip install sentry`即可启动安装流程,但也提到了实际过程中可能遇到依赖问题,比如Django版本不匹配,可能需要手动处理依赖或使用virtualenv来隔离环境。配置部分展示了如何生成配置文件并调整启动参数,例如设置为daemon模式后台运行。 配置完成后,只需一条`sentry start`命令就能启动服务。文章还以Django项目为例,说明了客户端如何集成——通过安装raven客户端并在配置中加入Sentry的DSN密钥,就能自动将应用异常上报到服务器。对于不想自建服务器的用户,作者也提及可以考虑使用Sentry的官方托管服务。 整个过程体现了Sentry的价值:把分散在各处的错误“一站式”管理起来,降低排查成本。对于团队协作和运维监控来说,是一个很实用的基础设施。

本机暂存
IT 算法/ 2013-03-03 23:32:34 / 累计浏览 2,142

社交网络的自我实现及社交要素

作者从马斯洛的“自我实现”理论切入,结合自身经历,探讨了社交网络如何成为个人发现潜能、达成自我实现的重要场域。文章核心观点在于,实现自我的关键路径是“尝试”与“激励”——用户需要在平台中低成本试错、发现兴趣,并通过社区反馈获得持续动力。 作者以豆瓣和新浪博客为例进行了具体说明:豆瓣通过书籍指引与兴趣小组,帮助其找到了产品道路并积累了人脉;博客则通过读者的互动与认可,激发了其持续写作与分享的潜能。这些体验支撑了作者的判断:基于弱关系和兴趣连接的社区,更能有效支持用户的自我探索与成长。 在此基础上,文章进一步提炼了社区的三个核心要素。首先是“关系”,它决定了社区发展的方向与用户动力来源;其次是“文化”,一个社区的主流氛围会筛选并影响用户群体;最后是“工具”,包括内容创作、激励与秩序管理工具,它们赋予了用户行为发生的可能性,其中内容创作工具的设计(需平衡成本、表达性与学习性)尤为关键。 整体而言,这篇内容从个人体验出发,层层推导至产品设计逻辑,对理解社区产品的底层驱动力提供了具体的分析视角。

本机暂存
IT 移动开发/ 2013-03-03 23:28:33 / 累计浏览 5,103

IOS APP设计流程

这篇讲的是iOS应用从创意到上线的完整设计路径。作者将流程拆解为11个关键步骤,特别强调在App Store竞争激烈的环境下,必须首先验证创意的独特性与优化空间。 从定位开始,文章介绍了如何依据苹果的人机界面指南来确定应用特性,并通过“应用定义陈述”来聚焦核心功能。在进入视觉设计前,作者推荐先使用纸笔绘制产品草图,细致推敲使用场景与逻辑,再借助原型工具完成从低保真到高保真的演进,初期用黑白线条专注于布局与流程,后期再纠结细节。 设计阶段则提倡遵循iOS的质感仿真风格,注重简洁易用的信息呈现。文章也具体指出了ICON设计的尺寸要求与视觉一致性,并提醒开发者,若不自行编程,需制作详尽的设计指南与标注文件以供团队协作。整体流程从发散到收敛,为设计师提供了一个清晰的实操框架。

本机暂存
IT 设计/ 2013-03-03 23:13:14 / 累计浏览 3,399

产品新人的玻璃心

这是一篇关于产品新人职场成长困惑的深度探讨。文章以一位工作半年的产品助理的真实来信为起点,详细描述了他从商务接口、沟通不畅到参与测试却感觉“成长空白”的迷茫历程。 作者直面这种普遍心态,犀利地指出产品助理岗位的本质就是“打杂”,并批评了新人被动等待安排、认为琐事无价值的普遍误区。核心观点在于,所谓的“冷板凳”和基础工作——无论是协调发版、参与测试还是应用市场铺货——恰恰是近距离观察产品、验证想法的最佳实践场。例如,通过分析铺货数据可以了解渠道特性,通过测试用例能彻底吃透产品细节。 文章最终将焦点回归到新人的主观能动性上:是主动在每件小事中挖掘学习机会,还是被动抱怨终将被淘汰,答案决定了你是团队里的“宝”还是“草”。对于所有感觉“怀才不遇”的职场新人来说,这是一剂清醒剂,提醒他们机会往往藏在最不起眼的地方,需要自己主动创造而非等待。

本机暂存
IT 算法/ 2013-03-03 23:10:09 / 累计浏览 3,374

为什么算法渐进复杂度中对数的底数总为2

在分析算法时,我们常看到 O(log₂n) 或 O(n log₂n) 这样的复杂度表达,但很少有人深究:为什么对数的底总是 2?为什么不出现以 3 为底的情况?这篇文章从这个看似理所当然的细节出发,揭示了算法复杂度表示中一个容易被忽略的知识点。 作者以大家熟悉的归并排序为例,引出了“三分式归并排序”这个变体——即每次将数组三等分而非二等分进行递归。通过分析它的实际时间复杂度,文章直观地展示了一个关键事实:不同底数的对数之间只相差一个常数因子。在渐进复杂度的大 O 表示法中,这个常数会被忽略,因此 O(log₂n) 与 O(log₃n) 本质上是等价的。 既然如此,为何惯例上总是书写底数 2?文章指出,这主要源于直觉和历史习惯。因为二分法(每次问题规模减半)是计算机科学中最常见、最基础的分解方式,它直接对应了二叉树的结构和许多经典算法(如二分搜索)的核心思想。使用底数 2 能让人立刻联想到“将问题规模反复减半”的过程,这使得算法的逻辑与复杂度表达在直觉上形成了统一。 因此,底数的选择并非数学上的严格要求,而是一种服务于理解与沟通的工程约定。这篇文章的价值在于,它帮读者厘清了这一约定背后的原理,让我们在写下 O(log n) 时,能更清晰地理解其背后的计算图景。

本机暂存
IT 前端/ 2013-03-03 23:05:26 / 累计浏览 3,860

CSS技巧荟萃:了解CSS页面布局和加载流程

这篇讲的是CSS页面布局中一个常被忽略但至关重要的基础:浏览器的文档加载与渲染流程。作者没有直接抛出花哨的技巧,而是从最根本的元素显示类型——`block`与`inline`——的区别与特性讲起。 文章清晰地对比了这两类元素的默认行为:`inline`元素如 `` 会在同一行排列,而 `block`元素如 `

` 则会强制换行。更重要的是,它解释了 `display` 属性如何改变这种默认规则,并指出了一个关键差异:对 `inline` 元素设置宽度和高度通常无效,但内边距和外边距的应用效果则与 `block` 元素不同。随后,文章引出了一个实用的折中方案:`inline-block`,它兼具两者的部分特性。 理解这些基础知识后,文章将视角提升到浏览器渲染的层面,解释了“正常文档流”的概念——即浏览器按从上到下的解析顺序来显示内容。掌握了这一点,再去做CSS布局,才能真正理解浮动、定位等技术背后的逻辑。文末还设计了一个使用HTML5标签和占位图的动手练习,让读者可以立刻实践文档流的概念,将理论落地。

本机暂存
IT AI/ 2013-03-03 23:01:41 / 累计浏览 5,293

给程序员推荐几部电影

这篇文章从程序员视角出发,推荐了六部与编程思维紧密相关的电影。作者的推荐逻辑并非基于票房或类型,而是精准地为每部作品提炼了一个核心编程概念作为关键词:例如《黑客帝国》的“矩阵”、《盗梦空间》的“虚拟化”、《云图》的“并行”,乃至《恐怖游轮》的“递归”与《源代码》的“重入”。 这种关联非常巧妙,它将电影中看似科幻或烧脑的情节,映射为开发者熟悉的抽象模型。比如《恐怖游轮》中不断循环的困局,正是递归函数调用自身直至基线条件的经典体现;而《源代码》里在有限时间切片中反复“重启”寻找答案的过程,则像极了重入操作。文章不仅提供了片单,更提供了一种用专业眼光解读故事的有趣视角。 对于程序员而言,这些电影或许能成为理解抽象概念的另类注解,或在下班后提供一种充满技术梗的放松方式。作者也将完整片单整理成了豆瓣列表,方便读者一键收藏,体现了社区分享精神。

本机暂存
IT 安全/ 2013-03-03 22:58:47 / 累计浏览 6,406

中间人攻击(man-in-the-middle attack):你和互联网中间的第三人

这篇从GitHub访问异常的事件谈起,具体解释了“中间人攻击”这一安全威胁。作者先用爱丽丝与鲍伯的通信故事,生动演示了攻击者如何在看似加密的通道中窃听并篡改信息,指出在公共Wi-Fi等场景下,密码和聊天记录都可能暴露。 文章进一步对比了主流浏览器对这类攻击的检测能力。现代浏览器在遇到伪造SSL证书时会持续发出醒目警告,而当时市场占有率很高的360安全浏览器,在第二次访问同一伪造站点时,竟弹出了“绿色网站认证”的提示,这与它的“安全”名称形成了鲜明反差。 作者基于此事件强调,中间人攻击具有隐蔽性和现实危害,那次针对GitHub的攻击就持续了约一小时。文章最后提供了一个可用于实时比对真假证书的工具,帮助读者在实践中加深理解。

本机暂存