20、滑动窗口:TCP是如何进行流量控制和拥塞控制的你好,我是微扰君。 过去几讲,我们一起讨论了最短路算法在网络中的应用,学习了从Dijkstra算法思想发展而来的链路状态选路算法,以及从Bellman-Ford算法思想发展而来的距离矢量算法。 链路状态算法的每个节点,通过通信,都构建了完整的网络拓扑...2025-12-08业务开发算法50讲
21、分而治之:MapReduce如何解决大规模分布式计算问题你好,我是微扰君。 从今天开始,我们就真正开始学习算法在工业界应用了。和前面的章节不同,分布式系统篇的很多算法,一般都是由工程师们提出来的,为了解决一些大规模网络应用中的实际问题,比如为了解决海量网页排名而发明的pagerank算法、为了解决分布式系...2025-12-08业务开发算法50讲
22、PageRank:谷歌是如何计算网页排名的你好,我是微扰君。 上一讲我们学习了谷歌三架马车之一 MapReduce。建立在Google File System的基础上,MapReduce很好地解决了谷歌当时的大规模分布式计算问题,让业务工程师不再需要处理和分布式计算相关的容错、数据分发、计算...2025-12-08业务开发算法50讲
23、Raft:分布式系统间如何达成共识你好,我是微扰君。 今天我们要来谈一谈分布式系统中一个非常重要的问题:分布式共识问题,也就是一致性问题。 我们知道,分布式系统的诞生,主要是为了提供单机无法进行的计算和存储、提高吞吐量、增加容错性等。而在现在的互联网架构下,分布式系统由于大量使用廉价...2025-12-08业务开发算法50讲
24、UUID:如何高效生成全局的唯一ID你好,我是微扰君。 今天我们来聊一聊在生产环境中非常常用的一个算法——全局唯一ID生成算法,也就是我们通常说的UUID。 就和我们在社会中都有自己的身份证号作为自己的唯一标示一样,在互联网的应用中,很多时候,我们需要能生成一个全局唯一的ID,去区别不...2025-12-08业务开发算法50讲
25、一致性哈希:如何在集群上合理分配流量你好,我是微扰君。 上一讲我们学习了在分布式系统中,生成全局唯一ID的两种方式,既可以通过引入独立组件远程调用申请ID,也可以通过约定的方式让各个节点独立生成唯一ID。 那对于有多个节点的服务,其他服务或者客户端在访问这个服务的时候,具体应该访问哪一...2025-12-08业务开发算法50讲
26、B+ Tree:PostgreSQL 的索引是如何建立的你好,我是微扰君。 过去几讲我们学习了一些经典的分布式算法,主要涉及多个节点之间的协作方式,在现在的业务场景下,它们更多被封装在各种中间件或者类库中,直接供我们使用,不过背后的很多思想还是很值得好好学习体悟的。 从今天开始,我们将更加贴近日常业务开发...2025-12-08业务开发算法50讲
27、LSM Tree:LevelDB的索引是如何建立的你好,我是微扰君。 上一节我们学习了数据库中非常常用的索引数据结构——B+树,在过去很多年里它都是数据库索引的首选实现方式,但是这种数据结构也并不是很完美。 因为,每次修改数据都很有可能破坏B+树的约束,我们需要对整棵树进行递归的合并、分裂等调整操作...2025-12-08业务开发算法50讲
28、MVCC:如何突破数据库并发读写性能瓶颈你好,我是微扰君。 过去两讲,我们学习了数据库中查询优化的一个重要手段——索引,通过空间换时间的思想,从数据结构查询本身的时间复杂度和IO开销两个角度,去提高查询的速度。除此之外,查询能做的优化其实还有很多,比如同样的语句在采用不同查询计划的情况下,...2025-12-08业务开发算法50讲
29、位图:如何用更少空间对大量数据进行去重和排序你好,我是微扰君。 今天我们从一道非常经典的面试题开始说起,看看你能否用之前学过的知识回答出来,题目是这样的:QQ,相信你肯定用过,假设QQ号(也就是用户的ID)是一个10位以内的数字,用一个长整型是可以存储得下的。 现在,有一个文件里存储了很多个Q...2025-12-08业务开发算法50讲