2026年6月6日 你的领域层引用了 Postgres。你的 CI 却视而不见。 整洁架构的图在白板上看着很美。本文介绍如何在构建流水线中强制执行依赖方向,让领域代码永远无法触及基础设施。 deep-divesclean-architectureci-cddependency-rules
2026年6月5日 你的架构图早就是谎言了 架构文档在你保存的那一刻就开始腐烂。以下是如何利用代码生成图表、ADR 和自动化架构测试来保持文档的诚实。 deep-divesarchitecturedocumentationliving-docs
2026年6月4日 你的重试循环假设第一次请求失败了。大概率并没有。 超时或崩溃并不意味着你的 API 请求已经丢失。本文介绍幂等键(idempotency key)如何让重试变得安全,以及真正防止重复请求的数据库存储模式。 deep-divesidempotencyapi-designresilience
2026年6月3日 比进程更长寿的锁:分布式租约的真实工作原理 内存中的互斥锁在服务器重启后随即消失。本文介绍带有 fencing token 和 TTL 的分布式租约如何防止崩溃后的重复执行,以及它们在哪里仍然会失效。 deep-divesdistributed-locksleasingresilience
2026年6月2日 无 goroutine、无定时器、无后台开销的熔断器 大多数熔断器库都会启动后台线程来探测恢复。你根本不需要它们。本文介绍一种请求驱动的设计,在消除所有后台开销的同时,不牺牲正确性。 deep-divescircuit-breakerperformanceresilience
2026年6月1日 你的 Web 服务有一条优雅关闭路径。这就是 Bug。 Crash-only 软件将每一次失败视为崩溃,将每一次启动视为恢复。对于 Web 服务来说,这意味着删除你的关闭逻辑,并设计出能在 kill -9 下存活的状态。 deep-divescrash-only-softwareresiliencedistributed-systems
2026年5月31日 看不懂突变改了什么,怎么写测试杀死它? mutation testing 发现了一个 survivor,但你根本不知道这个 mutation 做了什么。这里有一个分步方法,让你不用先理解 mutant 也能写出正确的测试。 deep-divesmutation-testingtest-writingdebugging
2026年5月30日 认证代码需要 90% 的变异覆盖率。你的字符串工具函数不需要。 为什么在整个代码库强制执行单一变异分数是错误的,以及如何根据实际风险设置按模块划分的阈值。 deep-divesmutation-testingauthtest-quality
2026年5月29日 你的测试全过了。变异得分只有40%。以下是你该从存活变异体中读到的东西。 代码覆盖率告诉你很安全。变异测试告诉你,你的测试大多只是摆设。以下是存活变异体如何暴露这一鸿沟,以及如何弥合它。 deep-divesmutation-testingsurviving-mutantstest-quality
2026年5月28日 Rust 的变异测试确实能用,但你的编译时间会恨你 cargo-mutants 能找出那些只是假装在验证代码的测试。本文介绍变异测试在 Rust 中的工作原理、它能捕捉什么问题,以及编译时间成本是否值得。 deep-divesmutation-testingrustcargo-mutantstest-quality