文章分类 - 极客时间
摘要:你好,我是微扰君。 上一讲我们一起学习了布隆过滤器,它可以帮助我们用更低的存储成本、更高效地判断某个元素是否在一个集合中出现,当然代价是一定的误判率。总的来说,布隆过滤器特别适合用来解决Redis中缓存穿透的问题。 今天,我们同样来讨论一个在Redis中发挥巨大作用的数据结构:跳表。如果你有一定的R
阅读全文
摘要:你好,我是微扰君。 上一讲我们学习了如何基于bitmap,使用少量内存,对大量密集数据高效地去重和排序,本质就是通过一个长长的二进制01序列,来维护每个元素是否出现过这样的二值状态,这个数据结构非常重要,日常工作中有很多应用,比如我们今天要学习的布隆过滤器,就建立在相似的数据结构之上。 那什么是布隆
阅读全文
摘要:你好,我是微扰君。 今天我们从一道非常经典的面试题开始说起,看看你能否用之前学过的知识回答出来,题目是这样的:QQ,相信你肯定用过,假设QQ号(也就是用户的ID)是一个10位以内的数字,用一个长整型是可以存储得下的。 现在,有一个文件里存储了很多个QQ号,但可能会有一定的重复,如果让你遍历一边文件,
阅读全文
摘要:你好,我是微扰君。 过去两讲,我们学习了数据库中查询优化的一个重要手段——索引,通过空间换时间的思想,从数据结构查询本身的时间复杂度和IO开销两个角度,去提高查询的速度。除此之外,查询能做的优化其实还有很多,比如同样的语句在采用不同查询计划的情况下,查询效率可能也是差距很大的。 今天我们就从业务开发
阅读全文
摘要:你好,我是微扰君。 上一节我们学习了数据库中非常常用的索引数据结构——B+树,在过去很多年里它都是数据库索引的首选实现方式,但是这种数据结构也并不是很完美。 因为,每次修改数据都很有可能破坏B+树的约束,我们需要对整棵树进行递归的合并、分裂等调整操作,而不同节点在磁盘上的位置很可能并不是连续的,这就
阅读全文
摘要:你好,我是微扰君。 过去几讲我们学习了一些经典的分布式算法,主要涉及多个节点之间的协作方式,在现在的业务场景下,它们更多被封装在各种中间件或者类库中,直接供我们使用,不过背后的很多思想还是很值得好好学习体悟的。 从今天开始,我们将更加贴近日常业务开发,剖析常用中间件里用到的、单机上的一些算法,帮助自
阅读全文
摘要:你好,我是微扰君。 上一讲我们学习了在分布式系统中,生成全局唯一ID的两种方式,既可以通过引入独立组件远程调用申请ID,也可以通过约定的方式让各个节点独立生成唯一ID。 那对于有多个节点的服务,其他服务或者客户端在访问这个服务的时候,具体应该访问哪一个节点呢? 负载均衡问题 大部分情况下,我们都希望
阅读全文
摘要:你好,我是微扰君。 今天我们来聊一聊在生产环境中非常常用的一个算法——全局唯一ID生成算法,也就是我们通常说的UUID。 就和我们在社会中都有自己的身份证号作为自己的唯一标示一样,在互联网的应用中,很多时候,我们需要能生成一个全局唯一的ID,去区别不同业务场景下的不同数据,比如消息ID、用户ID、微
阅读全文
摘要:你好,我是微扰君。 今天我们要来谈一谈分布式系统中一个非常重要的问题:分布式共识问题,也就是一致性问题。 我们知道,分布式系统的诞生,主要是为了提供单机无法进行的计算和存储、提高吞吐量、增加容错性等。而在现在的互联网架构下,分布式系统由于大量使用廉价的商用机器,节点故障是不可避免的。 在这种情况下,
阅读全文
摘要:你好,我是微扰君。 上一讲我们学习了谷歌三架马车之一 MapReduce。建立在Google File System的基础上,MapReduce很好地解决了谷歌当时的大规模分布式计算问题,让业务工程师不再需要处理和分布式计算相关的容错、数据分发、计算调度等复杂的技术细节,而把精力放在业务问题本身。
阅读全文
摘要:你好,我是微扰君。 从今天开始,我们就真正开始学习算法在工业界应用了。和前面的章节不同,分布式系统篇的很多算法,一般都是由工程师们提出来的,为了解决一些大规模网络应用中的实际问题,比如为了解决海量网页排名而发明的pagerank算法、为了解决分布式系统中共识问题的Raft算法、常用的负载均衡算法一致
阅读全文
摘要:你好,我是微扰君。 过去几讲,我们一起讨论了最短路算法在网络中的应用,学习了从Dijkstra算法思想发展而来的链路状态选路算法,以及从Bellman-Ford算法思想发展而来的距离矢量算法。 链路状态算法的每个节点,通过通信,都构建了完整的网络拓扑图,然后根据Dijkstra算法独立地计算最短路径
阅读全文
摘要:你好,我是微扰君。今天,我们一起来学习一种新的解决最短路问题的思路——Bellman-Ford算法,以及基于它发展出来的距离矢量算法。 动态路由问题相信你已经理解了,上两讲我们也一起学习了解决这个问题的一种经典选路算法——基于Dijkstra算法思想的链路状态算法,核心就是每个节点,通过通信收集全部
阅读全文
摘要:你好,我是微扰君。 上一讲,我们介绍了网络中选路算法的背景和单源最短路问题的经典算法Dijkstra算法,还记得为什么网络中需要选路算法吗? 计算机网络很复杂,但核心作用就是把不同的节点连接在一起,交换信息、共享资源,每个节点自己会维护一张路由表,选路算法所做的事情就是:构建出一张路由表,选择出到目
阅读全文
摘要:你好,我是微扰君。 在掌握操作系统中的一些经典算法之后,我们来学习计算机的另一大基础课——计算机网络中的算法。计算机网络,当然也是一个历史悠久的科研方向,可以说之所以现在计算机世界如此繁荣,计算机网络发挥着巨大的作用,是整个互联网世界的基石。 复杂的计算机网络中自然也产生了许多算法问题,比如许多经典
阅读全文
摘要:你好,我是微扰君。 今天我们就来聊一聊操作系统最常见的外存——磁盘的问题。我们知道计算机的内存一旦断电,数据就会全部丢失,所以如果需要持久化一些数据,磁盘就是必不可少的硬件,甚至在计算机上运行的整个操作系统的大部分代码逻辑,其实也是存储在磁盘中的。 计算机要和磁盘打交道,就需要用到文件系统。 文件系
阅读全文
摘要:你好,我是微扰君。 今天我们继续讲解操作系统中另一个常用的算法, LRU算法(Least recently used),也就是最近最少使用页面置换算法。这是操作系统中常用的内存置换策略之一,在内存有限的情况下,需要有一种策略帮助我们把此刻要用到的外存中的数据置换到内存里。该算法也同样适用于许多类似的
阅读全文
摘要:你好,我是微扰君。 之前我们已经学习了大部分常用的数据结构和一些经典的算法思想,从今天开始,我们将正式迈入算法在真实世界的应用,感受计算机先辈们在解决实际问题时天马行空的智慧之光。希望带给你思维乐趣的同时,也能给你解决实际工作里的问题带来一些启示。 就让我们从操作系统开始说起,作为计算机软件的基石,
阅读全文
摘要:你好,我是微扰君。 HTTP 是当今最广为使用的互联网传输协议,我们都听说过HTTP/1.0、HTTP/2.0、SPDY、HTTP/3.0等概念,但是对这几者之间的区别能如数家珍的同学却不多,比如 HTTP/2.0 在编码方面做了什么样的改进,比HTTP/1.1 的传输更快呢? 我们今天就来学习一下
阅读全文
摘要:你好,我是微扰君。 Webpack是现在最流行的前端构建工具,见证了前端工程化在过去十年里的繁荣发展。如果你是前端工程师,相信你在日常工作中应该会经常使用到。 Webpack让我们可以模块化地进行现代Web应用的前端开发,并基于我们的简单配置,从入口开始,递归地自动构建出复杂的依赖关系图,最终把所有
阅读全文