2k 2 分钟

# LSM 树 # 什么是 LSM 树 LSM 树具有以下 3 个特点: 将索引分为内存和磁盘两部分,并在内存达到阈值时启动树合并(Merge Trees); 用批量写入代替随机写入,并且用预写日志 WAL 技术(Write AheadLog,预写日志技术)保证内存数据,在系统崩溃后可以被恢复; 数据采取类似日志追加写的方式写入(Log Structured)磁盘,以顺序写的方式提高写 入效率。 LSM 树的这些特点,使得它相对于 B+ 树,在写入性能上有大幅提升。所以,许多 NoSQL 系统都使用 LSM 树作为检索引擎,而且还对 LSM 树进行了优化以提升检索性能。 LSM...
1.6k 1 分钟

# B + 树 # 什么是 B + 树 B +...
1.6k 1 分钟

# 字典树 # 什么是字典树 Trie 树(又叫「前缀树」或「字典树」)是一种用于快速查询「某个字符串 / 字符前缀」是否存在的数据结构。 根节点(Root)不包含字符,除根节点外的每一个节点都仅包含一个字符; 从根节点到某一节点路径上所经过的字符连接起来,即为该节点对应的字符串; 任意节点的所有子节点所包含的字符都不相同; # 字典树的构造 构建 Trie 树的过程,需要扫描所有的字符串,时间复杂度是 O (n)(n 表示所有字符串的长度和)。 字典树非常耗费内存。 用数组来存储一个节点的子节点的指针。如果字符串中包含从 a 到 z 这 26 个字符,那每个节点都要存储一个长度为 26...
4.4k 4 分钟

# Markdown 极简教程 # 目录 # 标题 Markdown 支持六个级别的标题。 语法: # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 # 文本样式 💡 粗体、斜体、删除线可以混合使用。 在 Markdown 中,粗体文本、斜体文本可以使用 * 或 _ 符号标记。建议统一风格,始终只用一种符号。 语法 效果 普通文本 普通文本 *斜体文本* _斜体文本_ 斜体文本 斜体文本 **粗体文本** __粗体文本__ 粗体文本 粗体文本 ~~删除文本~~ 删除文本 ***粗斜体文本***...
2k 2 分钟

# 跳表 # 什么是跳表 对于一个有序数组,可以使用高效的二分查找法,其时间复杂度为 O(log n) 。 但是,即使是有序的链表,也只能使用低效的顺序查找,其时间复杂度为 O(n) 。 如何提高链表的查找效率呢? 我们可以对链表加一层索引。具体来说,可以每两个结点提取一个结点到上一级,我们把抽出来的那一级叫作索引或索引层。索引节点中通过一个 down 指针,指向下一级结点。通过这样的改造,就可以支持类似二分查找的算法。我们把改造之后的数据结构叫作跳表(Skip...
1.3k 1 分钟

# 面向过程和面向对象 # 面向过程思想概述 面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。 # 面向对象思想概述 当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始思索,能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。面向对象是基于面向过程的编程思想。 # 面向对象特征 抽象 封装 继承 多态 #...
7.9k 7 分钟

读了代码整洁之道,觉得这本书写的很好,所以就将里面自己觉得很经典的内容记录下来,作为自己以后写代码的标准和准则。同时也为那些曾经困惑过的人一点参考吧! # 一、在正式开始之前,我们先思考几个几个问题: # 1. 需求与代码哪个重要? 答:并不是所有的产品都能提出合理的需求,当你面对一个提出不合理需求的产品的时候,你需要坚持自己的原则,不能妥协。 # 2. 易读和易懂是一回事吗? 答:易读的代码和易懂的代码是有区别的,不是易读的代码就是易懂的代码。 # 3....
3.4k 3 分钟

# 树和二叉树 # 树 # 什么是树 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由 n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 它具有以下的特点: 每个节点都只有有限个子节点或无子节点。 树有且仅有一个根节点。 根节点没有父节点;非根节点有且仅有一个父节点。 每个非根节点可以分为多个不相交的子树。 树里面没有环路。 #...
3.1k 3 分钟

# 红黑树 # 平衡二叉树 平衡二叉树的严格定义是这样的:二叉树中任意一个节点的左右子树的高度相差不能大于 1。 完全二叉树、满二叉树其实都是平衡二叉树,但是非完全二叉树也有可能是平衡二叉树。 平衡二叉查找树中 “平衡” 的意思,其实就是让整棵树左右看起来比较 “对称”、比较 “平衡”,不要出现左子树很高、右子树很矮的情况。这样就能让整棵树的高度相对来说低一些,相应的插入、删除、查找等操作的效率高一些。 # 什么是红黑树 红黑树的英文是 “Red-Black Tree”,简称 R-B...
5.9k 5 分钟

# 数组和链表 数组和链表分别代表了连续空间和不连续空间的存储方式,它们是线性表(Linear List)的典型代表。其他所有的数据结构,比如栈、队列、二叉树、B+ 树等,实际上都是这两者的结合和变化。 # 数组 数组用 连续 的内存空间来存储数据。 # 数组的访问 数组元素的访问是以行或列索引的单一下标表示。 在上面的例子中,数组 a 中有 5 个元素。 也就是说 ,a 的长度是 6 。我们可以使用 a [0] 来表示数组中的第一个元素。因此,a [0] = A 。类似地,a [1] = B,a [2] = C,依此类推。 # 数组的插入 # 数组的删除 #...