摘要: 我们先来讨论一个经典的链表应用场景,那就是 LRU 缓存淘汰算法。 缓存的大小有限,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?这就需要缓存淘汰策略来决定。 常见的策略有三种: 先进先出策略 FIFO(First In,First Out)、最少使用策略 LFU(Least Freq 阅读全文
posted @ 2020-02-15 21:35 lakeslove 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 第二个是连续的内存空间和相同类型的数据。正是因为这两个限制,它才有了一个堪称“杀手锏”的特性:“随机访问”。但有利就有弊,这两个限制也让数组的很多操作变得非常低效,比如要想在数组中删除、插入一个数据,为了保证连续性,就需要做大量的数据搬移工作。 很多时候我们并不是要去死记硬背某个数据结构或者算法,而 阅读全文
posted @ 2020-02-15 20:38 lakeslove 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 最好情况时间复杂度(best case time complexity)、最坏情况时间复杂度(worst case time complexity)、平均情况时间复杂度(average case time complexity)、均摊时间复杂度(amortized time complexity)。 阅读全文
posted @ 2020-02-15 19:28 lakeslove 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 大 O 这种复杂度表示方法只是表示一种变化趋势。我们通常会忽略掉公式中的常量、低阶、系数,只需要记录一个最大阶的量级就可以了。所以,我们在分析一个算法、一段代码的时间复杂度的时候,也只关注循环执行次数最多的那一段代码就可以了。这段核心代码执行次数的 n 的量级,就是整段要分析代码的时间复杂度。 加法 阅读全文
posted @ 2020-02-15 19:03 lakeslove 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 基础知识就像是一座大楼的地基,它决定了我们的技术高度。而要想快速做出点事情,前提条件一定是基础能力过硬,“内功”要到位。 那技术人究竟都需要修炼哪些“内功”呢?我觉得,无外乎就是大学里的那些基础课程,操作系统、计算机网络、编译原理等等,当然还有数据结构和算法。 作为业务开发,我们会用到各种框架、中间 阅读全文
posted @ 2020-02-15 18:34 lakeslove 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 05 | 白话容器基础(一):从进程说开去 Linux Cgroups 就是 Linux 内核中用来为进程设置资源限制的一个重要功能。 一个正在运行的 Docker 容器,其实就是一个启用了多个 Linux Namespace 的应用进程,而这个进程能够使用的资源量,则受 Cgroups 配置的限制 阅读全文
posted @ 2020-02-15 16:50 lakeslove 阅读(511) 评论(0) 推荐(0) 编辑