这是什么?
Battle-Tested Patterns 收集的编程模式具有以下特点:
- 经过生产验证 — 在 React、Linux 内核、Go 运行时、Chromium 等顶级项目中使用
- 交互式可视化 — 每个模式都配有可点击、可拖拽的 SVG 可视化,动手操作建立直觉
- 跨语言通用 — TypeScript、Rust、Go、Python 的地道实现
- 代码级技巧 — 可以立即应用的具体技术,而非抽象的架构概念
为什么做这个
市面上有大量"设计模式"书籍和"算法"仓库,但存在一个空白:
| 现有资源 | 缺失的部分 |
|---|---|
| 设计模式 (GoF) | 太抽象,过于面向对象 |
| 算法仓库 | 脱离工程实践 |
| 系统设计指南 | 架构层面,不涉及代码级技巧 |
| "Awesome" 列表 | 链接集合,没有教学内容 |
| 交互式教程 | 通常是独立项目,不成体系 |
本项目填补这个空白:从生产源码中提取的代码级技巧,配备交互式可视化和可验证的精确引用。
什么是"经过实战检验"?
本集合中的每个模式必须满足:
- ≥ 2 个生产验证 — 精确到行号的 GitHub 链接,展示模式的实际使用
- 多语言实现 — TypeScript + 至少一种其他语言的地道代码
- 可运行练习 — 渐进式难度,配套测试用例
我们绝不编造源码链接。如果找不到可验证的引用,就不收录该模式。
推荐学习路径
根据你的背景选择一条路径,或自由浏览。
前端开发者
从你已经在用(可能没意识到)的模式开始:
- Diff / Patch (差异/补丁) — React 虚拟 DOM 协调
- Bitmask (位掩码) — React Fiber 标志位
- Cooperative Scheduling (协作调度) — React 为什么每 5ms 让出
- Observer (观察者) — Redux、EventEmitter
- Double Buffering (双缓冲) — React Fiber 的
current/workInProgress
然后看它们如何组合:React 中的模式 · 速查:备忘单
后端 / 系统开发者
从数据库和分布式系统中的模式开始:
- Write-Ahead Log (预写日志) — PostgreSQL、etcd 的崩溃恢复
- MVCC — 读者如何永不阻塞写者
- Circuit Breaker (熔断器) — 微服务中的快速失败
- Rate Limiter (限流器) — 令牌桶控制吞吐量
- Consistent Hashing (一致性哈希) — 跨节点分配键
性能 / 底层开发者
从内存和并发模式开始:
- Arena Allocator (Arena 分配器) — 推进指针分配,一次性释放
- Object Pool (对象池) — 避免 GC 压力
- Free List (空闲链表) — O(1) 分配/释放
- Work Stealing (工作窃取) — Go runtime、Tokio 调度器
- Ring Buffer (环形缓冲区) — 无锁队列
然后看它们如何组合:Go Runtime 中的模式 · Linux 中的模式 · 速查:备忘单
如何使用
- 玩转可视化 — 每个模式页面都有交互式 SVG 可视化,点击、拖拽,建立直觉
- 浏览模式 — 阅读概念,研究生产验证,然后尝试练习
- 本地运行练习 — TypeScript:
pnpm test:exercises· Rust:cargo test· Go:go test - 在线尝试 — 将代码复制到官方 Playground 运行:TypeScript · Go · Rust · Python
- 参与贡献 — 参见如何贡献