博客 · 第 8 页
关于工程、设计与一些随手记录。
git bisect:把「哪次提交弄坏的」变成一条命令
回归排查的瓶颈不是二分本身,而是没人说得出「什么样的提交算坏」。先写出能自动判定的脚本,bisect 才能把 n 次构建压到 log n 次。
五子棋 AI:算杀层与搜索层怎么分工
纯 alpha-beta 在五子棋上会漏掉必杀。我把决策拆成三层——成五、堵五、算杀各司其职,剩下的才交给迭代加深加置换表,快棋也能下出像样的棋。
优雅关闭:进程退出方式决定用户看到 502 还是正常响应
收到终止信号立刻 exit 会切断在途请求。正确顺序是停止接收新连接、等在途请求跑完、再释放资源、最后退出。
HTTP 缓存:Cache-Control 与 ETag 各管一半
Cache-Control 决定「要不要发请求」,ETag 决定「发出去之后能不能省下响应体」。把两者混谈是缓存问题的根源:改一个参数不会同时修好两侧。
幂等键:让重试变得安全的那一次写入
网络超时不代表服务端没执行。幂等键把「同一个请求」标识出来,服务端据此返回首次结果而不是再执行一遍。
JSON 规范化:为什么同样的对象算出了两个哈希
键的顺序、数字写法、转义方式都会改变字节流。要让哈希稳定,必须在序列化这一层定死规则,而不是指望 JSON.stringify 每次都给你同一串。
