博客 · 第 10 页
关于工程、设计与一些随手记录。
语义化版本:主版本号的承诺是「不会静默改变行为」
MAJOR 不是「改动很大」,而是「有破坏性变更」。把重构当主版本号、把破坏性变更藏在次版本号,都会让下游的自动升级变成事故。
SQLite 索引:最左前缀不是限制,是排序的结果
复合索引 (a, b) 只有先按 a 排才能按 b 排,所以「跳过 a 只用 b」自然用不上。理解成排序而非规则,就不会再背前缀口诀。
技术债的利息长什么样
技术债不是「代码写得丑」,而是「以后每次改动都要多付的那部分」。判断标准是可测量的:改一行要动几个文件、跑多久测试、有几处需要同时改。
时区与夏令时:存 UTC,存本地时间一定会出事
夏令时会让某一天有 23 或 25 小时,且切换时刻的本地时间可能不存在或出现两次。只存 UTC 时间戳,展示时再转,是唯一稳的模型。
把 AI 的思考过程做成一棵能翻的树
给搜索过程做可视化,难点不在画树,而在数据要是真的、面板不能把棋盘顶来顶去、以及它得按需加载不拖累不点它的人。
Unicode 规范化:看起来一样的两个字符串为什么不相等
é 可以是一个码点,也可以是 e 加组合重音。比较、存储、索引之前先统一成 NFC,否则同形异码会让查重和登录全部失效。
