刷了几百道 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 布隆过滤器本质是位图 + 哈希

八、总结

  • 工作中用到的算法更偏工程——数据结构 + 应用场景
  • 算法学习的核心是理解”什么时候用”