博客 · 第 4 页
关于工程、设计与一些随手记录。
优雅关闭:进程退出方式决定用户看到 502 还是正常响应
收到终止信号立刻 exit 会切断在途请求。正确顺序是停止接收新连接、等在途请求跑完、再释放资源、最后退出。
HTTP 缓存:Cache-Control 与 ETag 各管一半
Cache-Control 决定「要不要发请求」,ETag 决定「发出去之后能不能省下响应体」。把两者混谈是缓存问题的根源:改一个参数不会同时修好两侧。
幂等键:让重试变得安全的那一次写入
网络超时不代表服务端没执行。幂等键把「同一个请求」标识出来,服务端据此返回首次结果而不是再执行一遍。
JSON 规范化:为什么同样的对象算出了两个哈希
键的顺序、数字写法、转义方式都会改变字节流。要让哈希稳定,必须在序列化这一层定死规则,而不是指望 JSON.stringify 每次都给你同一串。
内存布局:同样的算法,慢十倍往往是因为缓存
CPU 取一次内存要几百个周期,取整个缓存行只要一次。顺序访问与随机访问的差别往往大过算法阶数。
死锁的四个条件:破坏其中任意一个就够了
互斥、持有并等待、不可抢占、循环等待——四个同时成立才会死锁。工程上最容易破坏的是循环等待:全局给锁定一个顺序。
