Skip to content

速查表

全部 46 个模式的单页参考卡。收藏、打印、或 Ctrl-F 查找。

按问题选模式

不确定用哪个模式?从这里开始。

我需要...选择为什么
限制并发访问信号量基于计数器,OS 内核验证
处理慢消费者背压不丢弃 — 向上游施压
带淘汰的缓存LRU 缓存O(1) 读写,自动淘汰最冷数据
快速前缀查找Trie 前缀树O(k) 按键长,与集合大小无关
概率性集合检测布隆过滤器零假阴性,极小内存
有序范围查询B+ 树跳表B+ 树适合磁盘,跳表适合内存
崩溃安全写入预写日志 + 检查点先写日志 + 定期快照
阻止级联故障熔断器快速失败,渐进恢复
重试失败调用指数退避重试指数退避 + 抖动
控制吞吐量限流器令牌桶,恒定补充
验证数据完整性默克尔树O(log n) 哈希链证明
共享减少内存享元驻留共享不可变值
避免 GC 压力对象池Arena 分配器复用或批量释放
低成本变更检测脏标记干净时跳过重计算
分布式事件排序逻辑时钟Lamport 或向量时钟
惰性求值迭代器拉取式,零中间分配
处理多种类型标签联合体虚函数表封闭集用 tag,开放集用 vtable
写密集型负载LSM 树缓冲 → 刷盘 → 合并
组合中间件中间件链洋葱模型,逐层包裹
跨线程负载均衡工作窃取空闲线程从忙碌队列偷取
追踪多个标志位掩码N 个标志装进一个整数
按优先级调度最小堆O(1) peek,O(log n) push/pop
固定大小 FIFO环形缓冲区环形绕回,零分配
最小差异计算差异/补丁计算 + 应用变更
解耦生产者/消费者观察者订阅模型
分布式键分配一致性哈希增减节点仅重映射 ~1/n
依赖构建顺序依赖图DAG + 拓扑排序
原子状态转换状态机显式状态,不可能的转换不可表示
延迟删除后清理墓碑标记删除,稍后压缩
写时复制共享写时复制写入前共享
确定性清理引用计数rc=0 即释放,无 GC 暂停
注册/发现服务注册表名称 → 处理器映射
原子状态交换双缓冲写后缓冲,交换到前端
无阻塞读取MVCC版本化快照
保持主线程响应协作调度分片让出
单线程 I/O事件循环无线程的多路复用
累积后刷新批处理摊销单次操作开销
Actor 风格隔离Actor 模型私有状态 + 消息传递
树遍历分发访问者类型特定回调
O(1) 空闲槽分配空闲链表空闲块链表
合并有序流合并迭代器基于最小堆的 K 路归并

复杂度参考

数据结构

模式插入查找删除空间关键权衡
位掩码O(1)O(1)O(1)O(1)受限于字长
最小堆O(log n)O(1) peekO(log n)O(n)只有 peek-min 快
环形缓冲区O(1)O(1)O(1)O(n) 固定固定容量
Trie 前缀树O(k)O(k)O(k)O(SIGMA * n)稀疏键时内存大
跳表O(log n) 均摊O(log n) 均摊O(log n) 均摊O(n) 均摊概率性,比树简单
布隆过滤器O(k)O(k)N/AO(m) bits可能有假阳性
LRU 缓存O(1)O(1)O(1)O(n)容量满时淘汰
B+ 树O(log n)O(log n)O(log n)O(n)磁盘优化,高扇出
标签联合体N/AO(1) dispatchN/AO(最大变体)封闭类型集
默克尔树O(log n)O(log n)O(log n)O(n)用于验证,非搜索
合并迭代器N/AO(log k) nextN/AO(k)k = 流的数量

系统模式

模式吞吐量延迟故障模式
熔断器关闭时正常关闭时 +0,打开时快速失败打开时阻断所有调用
限流器受限于令牌速率有令牌时 +0拒绝超额 (429)
指数退避重试重试期间降低指数增长无抖动时放大
预写日志顺序写速度+1 次写入(先写日志)安全 — 从日志重放
批处理更高(摊销)更高(等待批次)崩溃丢失整批
一致性哈希与底层相同+哈希计算节点变更时 ~1/n 键重映射

内存模式

模式分配释放开销最适合
对象池O(1) 均摊O(1) 归还池大小高频同类型对象
Arena 分配器O(1) bumpO(1) 批量释放对齐浪费阶段性生命周期
空闲链表O(1)O(1)每槽 next 指针固定大小块
享元O(1) 查找共享不释放查找表大量相同小对象
写时复制O(1) 共享O(n) 首次写入每页引用计数读多写少的共享数据
引用计数O(1) cloneO(1) rc=0 时每对象计数器确定性清理
驻留O(k) 首次,O(1) 后续池化管理哈希表字符串/符号去重

模式组合

模式很少单独出现。这些是最常见的生产组合:

组合用于为什么一起用
预写日志 + 检查点PostgreSQL, etcdWAL 保安全,检查点限制重放
布隆过滤器 + LSM 树LevelDB, RocksDB跳过不必要的磁盘读取
最小堆 + 合并迭代器LevelDB compaction高效合并 K 个有序 run
熔断器 + 重试gRPC, Hystrix重试瞬时故障,熔断持久故障
限流器 + 背压API 网关限制入口,信号过载
环形缓冲区 + 事件循环libuv, io_uring固定大小 I/O 事件队列
对象池 + 空闲链表Go runtime池管理 slab,空闲链表追踪槽
MVCC + B+ 树PostgreSQL磁盘优化索引中的版本化行
脏标记 + 双缓冲React Fiber标记脏,批量到下一帧
位掩码 + 状态机React reconciler标志编码状态,位运算转换
一致性哈希 + 注册表服务网格哈希定位,注册表发现
Trie 前缀树 + 驻留编译器驻留字符串,前缀查找

决策树

"选哪种缓存?"

?需要淘汰吗?

"选哪种内存策略?"

?所有对象大小相同?

"选哪种并发模型?"

?共享状态?

基于 MIT 许可证发布。