摘要:
本文继续从二分搜索出发,推导出另一种平衡树结构:跳表。跳表是一种简单而精巧的数据结构,和红黑树具备同等时间复杂度的同时,保持了足够的简单性——这种简单性的关键是通过概率决定索引层数。 阅读全文
摘要:
本文从二叉搜索树倾斜的原因(自上而下生长)出发,推出维持树形数据结构平衡性的关键:自下而上裂变式生长,进而引出裂变式生长的理论模型:2-3 树。由于 2-3 树实现上的复杂性,引出其实现上的替代品:红黑树。最后,我们讨论如何通过左旋、右旋以及颜色翻转这“三板斧”来维护红黑树插入和删除元素后的动态平衡。 阅读全文
摘要:
本文从二分搜索思想推导出二叉搜索树,以阐释二叉搜索树的本质,以及有序数组、链表和二叉搜索树之间的关联。 阅读全文

摘要:
你有没有这样的经验:用个软件,隔三岔五弹个框:系统异常!无论作为用户还是程序员,一见到“系统异常”四个大字,我整个人都不好了。 阅读全文
摘要:
技术管理真正的挑战在于,虽然”人非机器“是管理的因,但管理的果却不是把人变成机器(流水线生产)。在技术管理领域,机器化管理或许能提升当前的效能,却不利于未来的产出。 阅读全文

摘要:
我们小学就学过矩形的面积等于长乘以宽。但活了几十年,你有没有想过:矩形面积为啥等于长乘以宽?它跟程序员有什么关系? 阅读全文
摘要:
讲个有趣的算法:如何快速求 ,其中 n 和 m 都是整数 阅读全文

摘要:
本文从众所周知的 setnx 命令开始实现一个简单的 Redis 锁,在实际应用中逐步揭示其面临的问题并给出解决方案,循序渐进地讲解分布式锁需要解决的诸多问题(被动释放、属主、锁等待、保活等),让人知其然且知其所以然。另外本文指出分布式锁并不是银弹,有些问题虽然能用分布式锁解决,但其实有其他更好的方案。 阅读全文

摘要:
写可用的系统容易,写可靠的系统很难。编程真正难的在对失败场景的处理上。本篇通过分析储值卡扣款这么个“简单”的场景,你会发现其实它一点也不简单。 阅读全文

摘要:
万维网是超文本与互联网的联姻,它的出现基于如下诉求:由知识生产大分工带来的信息大爆炸与传统的信息管理模式之间越来越不匹配,人类需要一种新的信息组织和检索方式 阅读全文
摘要:
你不可能仅通过看书成为编程高手,也不可能仅通过没完没了地做项目成为行业专家 阅读全文

摘要:
很多人开发接口的时候,往往仅关注功能实现,但接口质量恰恰取决于非功能性方面,主要包括:幂等性、鲁棒性和安全性。本文详细讲解开发接口(以及系统)时在这三方面需要考虑的细节问题。 阅读全文

摘要:
任何设计模式都是用来解决软件设计的复杂性问题,追求设计上的稳定性。工厂模式属于创建者模式之一,用来解决对象创建的复杂性。 阅读全文

摘要:
在前面文章《字符集编码(中):Unicode》中我们聊了 Unicode 标准并提到其有三种实现形式:UTF-16、UTF-8 和 UTF-32,本篇我们就具体聊聊这三种 UTF 是怎么实现的。 阅读全文

摘要:
上世纪九十年代前各厂商为了应对多语言文字的编码需求而设计了各种互不兼容的编码标准,这使得开发商在处理多语言环境时相当棘手。为了解决各自为政的乱象,利益相关公司走到一起试图设计一种新型的、可囊括全世界所有字符的统一编码标准。 阅读全文

摘要:
在聊 Unicode 之前先讲讲设计层面的东西。编码模型是字符集编码的设计指导框架,有助于我们更好更透彻地理解各具体的编码标准。 阅读全文

摘要:
字符集编码的历史出乎意料地复杂而有趣,打算花三个章节讲讲字符集编码的来龙去脉。本篇讲讲 Unicode 出现之前字符集编码领域的混沌与秩序 阅读全文

摘要:
网络层是整个网络分层体系里面最复杂的部分,不仅涉及到技术,还涉及到运营商之间的博弈。 阅读全文

摘要:
DNS 对于大部分技术人员来说即熟悉又陌生,说熟悉是因为它就是一个简单的目录服务,将域名映射为 IP;说陌生是因为这个全世界互联网的底层设施不但实现起来及其复杂,甚至还涉及到政治因素,大部分人对这些并不了解。 阅读全文

摘要:
很多人搞不明白 REST(Representational State Transfer 表述性状态转移)原因在于一开始就是把它当做设计风格而不是架构风格来理解,因而一上来就大谈特谈什么 RESTful API,结果是只见树木不见森林。 仅从设计的角度去理解 REST(仅把它作为 API 设计原则) 阅读全文