摘要:
SkipList SkipList(跳表)首先是链表,但与传统链表相比有几点差异: 元素按照升序排列存储 节点可能包含多个指针,指针跨度不同(最多允许32级指针,跨度成倍数递增) SkipList的特点: 跳跃表是一个双向链表,每个节点都包含score和ele值 节点按照score值排序,score 阅读全文
摘要:
问题1:ZipList虽然节省内存,但申请内存必须是连续空间,如果内存占用较多,申请内存效率很低。怎么办? 为了缓解这个问题,我们必须限制ZipList的长度和entry大小。 问题2:但是我们要存储大量数据,超出了ZipList最佳的上限怎么办? 我们可以创建多个ZipList来分片存储数据。 问 阅读全文
摘要:
ZipList是一种特殊的“双端链表”,由一系列特殊编码的连续内存块组成。可以在任意一端进行压入/弹出操作,并且该操作的时间复杂度为O(1)。 ZipListEntry ZipList中的Entry并不像普通链表那样记录前后节点的指针,因为记录两个指针要占用16个字节,浪费内存。而是采用了下面的结构 阅读全文
摘要:
redis的键和值的映射关系是通过Dict来实现的。 Dict由三部分组成,分别是哈希表(DictHashTable)、哈希节点(DictEntry)、字典(Dict)。 size的大小总是2的N次方 sizemask的大小是size-1 used因为哈希的存储特性(不同元素相同的哈希值,即哈希冲突 阅读全文
摘要:
IntSet IntSet是redis中set集合的一种实现方式,基于整数数组来实现,并且具备长度可变、有序等特征。 可能会有疑惑,int8_t 的数组contents只有1个字节,怎么可能存的下数组,其实这里的contents存储的只是指向真正数组的指针。 IntSet的取值范围大小,实际上是由e 阅读全文
摘要:
字符串是redis最常见的数据结构,但redis并没有直接使用C语言的字符串,是因为C语言本身其实是没有字符串的,所谓的字符串其实是字符数组(Java语言中的字符串是一个对象),所以C语言的字符串有很多问题: ① 获取字符串长度需要通过运算 C语言的字符串数组都是以’\0’结尾,这是一个字符串的结束 阅读全文
摘要:
这样的变量,最好是直接生成,不要问为什么,问就是sonar提示的 public static String getRandom(int i) { int jjj = new Random().nextInt(9); // int suiJiShu = jjj.nextInt(9); if (i == 阅读全文
摘要:
都已经再finally了,就不要抛出异常了 阅读全文
摘要:
private void readTheFile() throws IOException { Path path = Paths.get(this.fileName); BufferedReader reader = Files.newBufferedReader(path, this.chars 阅读全文
摘要:
Linux系统可以自己建立和管理环境变量文件,而且每个用户都可以在自己的主目录下创建一个 bash 环境变量文件,这个文件会在用户登录时自动执行。 创建这个文件的命令是: ```touch ~/.bashrc``` 然后可以使用任意文本编辑器打开这个文件,添加需要的环境变量,例如: ```expor 阅读全文