工作中常用的数据结构和算法
刷了几百道 LeetCode,工作时却很少用到?现实中真正有用的算法和数据结构有哪些?
一、跳表——Redis ZSet 的核心
- 1.1 为什么 Redis 用跳表而不是红黑树
- 1.2 跳表的结构——多层索引
- 1.3 插入/查找的时间复杂度
二、布隆过滤器——缓存穿透克星
- 2.1 判断”一定不存在”
- 2.2 应用——防止缓存穿透、URL 去重
- 2.3 Guava BloomFilter 的使用
- 2.4 误判率与 bit 数组大小
三、一致性哈希——分布式缓存的路由
- 3.1 取模分片的扩容问题
- 3.2 哈希环 + 虚拟节点
- 3.3 应用——Dubbo 负载均衡、Redis 分片
- 3.4 代码实现
四、令牌桶——限流的实现
- 4.1 令牌桶 vs 漏桶
- 4.2 Guava RateLimiter 的用法
- 4.3 应用——接口限流、防止刷接口
五、LRU/LFU——缓存的淘汰策略
- 5.1 LRU——最近最少使用
- 5.2 LinkedHashMap 实现 LRU
- 5.3 LFU——最不经常使用
- 5.4 Redis 的 LRU 近似实现——采样
六、前缀树(Trie)——关键词匹配
- 6.1 敏感词过滤
- 6.2 搜索提示
七、位图——统计活跃用户
- 7.1 Redis Bitmap——日活统计
- 7.2 布隆过滤器本质是位图 + 哈希
八、总结
- 工作中用到的算法更偏工程——数据结构 + 应用场景
- 算法学习的核心是理解”什么时候用”
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 谜思录!