程序员的墨菲定律:演示的时候必出 bug,删掉的那段代码才是有用的。我想了想,觉得这话没法接。我把这个异常的类型打出来,发现它被包了三层。这大概就是程序员的人生吧
😂 IT段子
程序员日常、代码趣事、技术梗图,让你在学习之余轻松一笑
我把这个堆栈从头读到尾,关键信息在最后一行。这套流程走下来,我从头到尾又确认了一遍。我把这两次运行的日志逐行 diff 了一遍,找到唯一的差异。第二天这个方案就变成了团队标准做法
妈妈觉得我在互联网大厂很风光,只有我知道我大厂里的 title 是高级修 bug 工程师。我想反驳,但发现他说得对。我把这个变量的生命周期理了一遍,发现它被提前释放了
我第一时间把锅甩给了缓存,结果真的是缓存。我拉了个小群,把相关同学都叫了进来。我发现这个接口在特定参数组合下返回了空对象。第二天这个方案就变成了团队标准做法
调试是有惯性的,停下来反而更容易想通。我不知道该说什么,就笑了笑。我把这个依赖的版本锁死了,问题不再随机出现。感动,然后我学到了新的一课
问题居然复现不了了,这比复现出来更可怕。我默默记下了这句话。我把日志的时间粒度从秒改成了毫秒,顺序终于排对了。感动,然后我学到了新的一课
程序员的墨菲定律:演示的时候必出 bug,删掉的那段代码才是有用的。我停了一下,然后继续手上的活。我发现是序列化的问题,字段名大小写在两端口径不同。我把这条经验写进了团队 wiki
我在本地复现了十次,第十一次它变了样子。我不知道该说什么,就笑了笑。我发现这个字段在数据库里存量是脏的,代码没问题。那一刻我觉得自己还是很专业的
这个错误在生产环境是必现的,在测试环境是玄学。我停了一下,然后继续手上的活。我把这段逻辑重写了一遍,bug 没了,但我不知道为什么。好在最后有惊无险
我在本地复现了十次,第十一次它变了样子。我发现自己居然没法反驳。我发现是缓存的问题,清掉之后一切都正常了。我把它写进了组内的避坑文档第一章