线上事故复盘会上的经典台词
2026-10-18
「这不是我的锅」「这是个极小概率事件」「下次注意」——复盘会上真正危险的不是这些台词本身,而是它们把一次系统性学习,缩写成了一份免责声明。把每句台词翻译回它掩盖的问题,再看看一场能留下东西的复盘该怎么开。
3831 字
|
19 分钟
程序员恋爱与生活日常:代码之外的翻车现场
2026-10-17
「你根本不在乎我」「你能不能复现一下」——同一套工程思维,在代码里是优点,在家里可能是事故现场。把几个经典翻车场景拆开,看看哪些习惯值得带回家,哪些必须留在工位上。
2793 字
|
14 分钟
程序员的深度工作:用 git 提交时间戳测量上下文切换
2026-10-16
「今天又没干成一件整事」这个感觉很难反驳,因为它一直只是个感觉。本文给出一段约 140 行的 Node 脚本,它先从 git 日志里揪出「守时得不像人」的定时任务时段——我的仓库里足足有 58 条,全挤在同一个钟点——再把剩下的提交切分成工作会话,量出单提交会话占比、会话内模块切换和每日碎片化程度,最后老老实实讲清这件事能量化到哪里、又在哪里失效。
5539 字
|
28 分钟
Agent 记忆系统设计:工作、语义、情景、程序四层,以及各自的失效语义
2026-10-15
「给 Agent 加个向量库」为什么总是不够:把记忆拆成四层,讲清每层的写入时机、检索打分(recency × relevance × importance)与失效语义(invalidate, don't delete),附一个可运行的 TypeScript 记忆模块。
4017 字
|
20 分钟
消息队列不生产可靠性:at-least-once、双写问题与幂等消费实战
2026-10-14
消息队列最常见的两个事故是方向相反的:消息根本没发出去(丢),和同一条消息被处理了两遍(重)。它们都不是 MQ 的 bug,而是把「发出去了」和「只处理一次」当成了默认保证。本文讲清三种投递语义里哪些是厂家给的、哪些要自己合成,并给出双写问题的正解(事务性发件箱 + 中继)与幂等消费的两种落地写法。
3513 字
|
18 分钟
Open Graph 与结构化数据:让链接在聊天框和搜索结果里都好看
2026-10-13
把「链接预览不好看」拆成两套互不相干的词汇表:Open Graph 决定聊天框里的卡片,JSON-LD 决定搜索引擎读懂了什么。逐条讲清 og:image 的三种静默失败、twitter:card 属性名为什么是 name、Google 为什么说结构化数据「没有必填属性」,并给出一段能自己量图片真实尺寸的校验脚本。
3389 字
|
17 分钟
前端错误监控实战:从 window.onerror 到 Source Map 还原
2026-10-12
线上告警只有一行 app.9f2c1a.js:1:48213,而这一行是两百个函数压成的。这篇文章把错误监控拆成捕获、上传、还原三段:window.onerror 的五个参数与资源错误的捕获陷阱、unhandledrejection 里 reason 不一定是 Error、为什么生产环境该用 sourcemap: "hidden",以及一段能直接跑的脚本,把压缩堆栈还原回源码行列。
2556 字
|
13 分钟
Code Review 人间百态:LGTM 背后的真相
2026-10-11
「LGTM 👍」——一个 1400 行的 PR,40 秒后就被批准。这三个字母既可能是最高的信任,也可能是最贵的一次敷衍。把评审现场的黑话逐条拆开,再看看研究数据里,代码评审到底抓到了什么、又漏掉了什么。
3121 字
|
16 分钟