后端早读课
文章平均质量分 87
欢迎大家关注微信公众号:后端早读课
人类观察所主任
你和你的酸奶,我舔我的瓶盖
展开
-
快速掌握 Redis 五种基本数据类型的原理
快速掌握 Redis 五种基本数据类型的原理文章目录快速掌握 Redis 五种基本数据类型的原理类型与编码类型编码类型与编码映射字符串 STRING1. int2. raw3. embstr转换对象共享列表对象 LIST1. ziplist2. linkedlist3. quicklist (Redis 3.2)哈希对象 HASH1. ziplist2. hashtable集合 SET1. intset2. hashtable有序集合 ZSET1. ziplist2. skiplist字符串类型内存空间预原创 2021-03-28 16:31:19 · 241 阅读 · 0 评论 -
树 Story —— LSM 日志结构合并树
LSM 不是 老色批LSM 树 (Log-Structured Merge-Tree) 即日志结构合并树。其实它并不属于一个具体的数据结构,它更多是一种数据结构的设计思想。大多 NoSQL 数据库核心思想都是基于 LSM 来做的,只是具体的实现不同。何为 LSM 树由于磁盘 IO 的开销是数据库效率瓶颈之一,因此产生了很多减少磁盘 IO 的方案。而 LSM 树就是为了解决频繁磁盘读写的方案之一。使用 B 树之类的多路查找树索引数据时,由于插入数据会导致进行再平衡,使插入的效率变低。同时,由于 B .原创 2021-02-23 13:25:01 · 507 阅读 · 0 评论 -
树 Story —— 多路查找树
- 树 Story 第四篇 - 多路查找树本文详细阐述了多路查找树原理,适合新手阅读,以及老手回顾。全文三千字,阅读时间 20 分钟。有别于二叉查找树,多路查找树的子节点不局限于 2 个,同时节点内的 key 不局限于 1个。下面我们以 2-3 树(最简单的多路查找树)为例来讲述。What ?!有人可能第一次听说「2-3」树这个说法。何为 2-3 树 ?2-3树是最简单的B-树(或-树)结构,其每个非叶节点都有两个或三个子女,而且所有叶都在统一层上。2-3树不是二叉树,其节点可拥有3个孩原创 2021-02-17 14:57:25 · 278 阅读 · 0 评论 -
树 Story —— 平衡二叉树
在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。二叉查找树查找、插入和删除在平均和最坏情况下的时间复杂度都是 O(log n)。AVL 树得名于它的发明者 G. M. Adelson-Velsky 和 Evgenii Landis,他们在1962年的论文《An algorithm for the organization of information》中公开了这一数据结构。平衡二叉树,又被称为「VL树」,且具有以下性质原创 2021-02-13 21:16:23 · 1017 阅读 · 0 评论 -
树 Story —— 二叉查找树
二叉查找树是一个有序的二叉树数据结构。1.若它的左子树不为空,则左子树上所有结点的值均小于等于根结点的值;2.若它的右子树不为空,则右子树上所有结点的值均大于等于根结点的值;3.它的左右子树均为二叉查找树。简而言之:左节点永远小于等于根节点,根节点永远小于等于右节点,并以此递归。二叉查找树是有序二叉树,所以当插入、删除节点的时候,都可能会引起排序变化。如果我们插入节点「3」,因为节点 3 小于节点 10,则在节点 10 的左子树查找。节点 2 小于节点 节点 5, 则在节点 5 的左子树查原创 2021-02-13 21:15:28 · 210 阅读 · 0 评论 -
树 Story —— 红黑树
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现「关联数组」。红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。 [2]红黑树是一种特化的 AVL 树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较.原创 2021-02-13 21:14:10 · 327 阅读 · 0 评论 -
Golang - 如何优雅地处理错误
- 后端早读课翻译计划 第二篇 -欢迎关注微信公众号: 后端早读课本文提供了一个优雅的处理 Golang 中错误的方法,解决了 Golang error 只有字符串信息的局限性,提供了上下文信息、错误类型判断的功能。尽管 go 具有一个简单的错误模型,但是乍一看,事情并没有那么容易。在本文中,提供了一个很好的处理错误的策略并克服您可能遇到的问题。首先,我们将分析 go 中的错误是什么。然后,我们再看错误创建和处理之间的流程,并分析有可能出现的漏洞。Go 的错误类型查看内建的错误类型,我们可以得原创 2020-10-23 00:07:07 · 1376 阅读 · 0 评论 -
Go 语言中 Unsafe 包的用法
- 后端早读课翻译计划 第三篇-- 翻译自: a-journey-with-go欢迎关注微信公众号: 后端早读课本文列举在 Golang 中 unsafe 的一般用法,以及提供给开发者的一些建议。ℹ️ 本文基于 Go 1.12 版本。这个 Package 的名字其实已经告诉了我们,我们不应该用它。为了弄清楚为什么用它会导致不安全,我们先看下文档里说的:Package unsafe 包含一些可以绕过类型安全的操作。导入 unsafe 的包可能是不可移植( non-portable) 的,而原创 2020-10-22 10:04:04 · 624 阅读 · 0 评论 -
Go 协程堆栈设计进化之旅
- 后端早读课翻译计划 第四篇-- 翻译自: a-journey-with-go欢迎关注微信公众号: 后端早读课本文详细讲述了 Golang 中,堆栈设计理念以及演变过程。描述了从 Segment Stack 到 Contiguous Stack 、初始堆栈大小从 8Kb 到 2Kb 的原因。ℹ️ 文章基于 Go 1.12.Go 提供了一个轻量且智能的协程管理机制。轻量是因为协程堆栈初始化只有 2Kb,智能是因为协程堆栈可以根据我们的需要自动增加 / 减少。堆栈的大小定义,我们可以在这里找原创 2020-10-22 09:57:33 · 721 阅读 · 0 评论