随笔分类 -  030. 算法 - 应用算法

摘要:bitmap本质使用一个bit来表示一个元素,在数据量比较大的情况下,数据去重,数据排序,数据查找,使用这种数据架构有这很大的空间优势。 在实现上,Java中最小单位是byte, 1byte=8bit, 所以如果使用Java来实现bitmap, 就要用到位移、或运算,这里使用Java的bitset 阅读全文
posted @ 2020-08-04 22:38 秋夜 阅读(310) 评论(0) 推荐(0) 编辑
摘要:布隆过滤器(Bloom Filter)是一种比较巧妙的数据结构, 他的功能就是判断一个元素是否在一个集合中, 相比于List, Hash等数据结构,它使用的空间很小, 原理就是通过N个hash函数,映射到一个位图上,将指定位置的位图元素设置为1,因为它不存储原始数据,再加上位图长度没有办法扩展,所以 阅读全文
posted @ 2020-08-04 22:37 秋夜 阅读(366) 评论(0) 推荐(0) 编辑
摘要:跳跃表是一种比较巧妙的结构,其查询性能大部分都可以达到O(logN),Redis中的sorted set 就使用了这种结构。 Skip list的性质 (1) 由很多层结构组成,level是通过一定的概率随机产生的。 (2) 每一层都是一个有序的链表,默认是升序 (3) 最底层(Level 1)的链 阅读全文
posted @ 2020-08-04 22:29 秋夜 阅读(96) 评论(0) 推荐(0) 编辑
摘要:在缓存场景中,一致性hash算法避免了余数法在因为节点失效导致大面积缓存失效的问题。 直接上代码,使用了Java自带的TreeMap, 参考了dubbo代码中的一致性hash负载 1 package org.example; 2 3 import java.nio.charset.StandardC 阅读全文
posted @ 2020-08-04 13:08 秋夜 阅读(182) 评论(0) 推荐(0) 编辑
摘要:简介 LRU是一种缓存淘汰策略,全称是Least Recently Used,即最近最少使用,也就是说我们认为最近使用过的数据应该是是有用的,很久都没用过的数据应该是无用的。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。 LRU的实现思路就是hashmap+双链表,其中has 阅读全文
posted @ 2020-08-04 13:06 秋夜 阅读(300) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示