- 读陌生代码:先画地图再进细节接手一个仓库,几十个目录,不知道从哪看起。
- 报错定位:先要假设,别急着改贴一段报错过去,最常见的回答是「试试这样改」,改完还是错。
- 补测试:先列边界再写用例要给别人写的函数补测试,不知道该覆盖到什么程度。
- 代码评审:按影响面排序,不挑格式收到一份改动,想快速找出真正会出事的地方。
- 线上500:从日志到根因接口偶发500,日志里只有一条错误栈,需要定位真正原因。
- 读陌生代码库:先找入口和数据流接手一个十万行的项目,三天内要能改需求。
- 性能分析:慢在哪一段一个接口P99从200ms涨到2s,需要判断是数据库、序列化还是下游调用。
- 内存泄漏:跑一天就OOM服务运行一天内存涨到上限被重启,需要定位泄漏点。
- 并发问题:偶发的数据错乱高并发下订单状态偶尔错乱,日志看不出问题。
- 依赖冲突:装不上的那个包升级一个库之后,另一个库报版本不兼容,项目起不来。
- 升级踩坑:大版本升级前后要查什么框架要升一个大版本,官方说不兼容,需要一份检查清单。
- 代码评审:只说会出事的地方同事的PR有600行改动,我要给出有用的评审意见而不是挑格式。
- 安全审查:输入从哪来要上线一个对外接口,需要检查有没有注入、越权、信息泄露。
- 重构:先加测试再动结构一个函数800行,要重构成可维护的,但不能改变行为。
- 死代码清理:删之前怎么确认项目里有很多没人用的代码,删了怕出事。
- 测试失败:为什么本地能过CI不过同一个测试在本地过,在CI上随机失败。
- 日志设计:出事了要能查线上出问题只能猜,因为日志里什么都没有。
- 线上报警:先止血还是先查因收到报警,服务错误率上升,需要在十分钟内决定做什么。
- 回滚决策:什么时候该退回去新版本上线后指标变差,但不确定是不是版本引起的。
- 灰度方案:先给1% 的人用新功能要灰度上线,需要设计分批与观察指标。
- 监控指标:该盯哪几个数服务上线后不知道要监控什么,报警要么太多要么没有。
- 抓包分析:请求到底发了什么前端说发了请求,后端说没收到,需要看实际报文。
- 编码问题:中文变成问号数据从一处传到另一处,中文变成乱码,需要定位是哪一层的问题。
- 时间问题:时区与夏令时定时任务在某个时区跑错,或者时间显示差8小时。
- 接口返回慢:先分清谁慢用户说页面慢,需要判断是接口、前端渲染还是网络。
- 单元测试失败定位:先看断言还是先看环境一批单元测试突然大面积失败,需要判断是代码问题还是环境问题。
- 老旧项目改造:先加一层还是重写一个五年的老系统要改造,团队在争论重写还是渐进。
- 新功能实现:先定契约要加一个「导出报表」功能,需求只有一句话。
- 接口设计:让人不用问就能用要给外部团队提供一组接口,需要定路径、参数、错误码。
- 单元测试:测什么才有价值团队测试覆盖率不低,但线上还是老出问题,需要重定测试重点。
- 边界条件清单:先列再写实现一个分页查询,总在奇怪的数据上出错。
- 错误处理:让上层能判断底层函数出错时返回null,上层分不清是没数据还是出错。
- 重试策略:重试几次、间隔多久调用外部服务偶尔超时,简单重试后又出现重复下单。
- 幂等设计:同一个请求来两次用户网络抖动导致支付请求发了两次,需要保证只扣一次钱。
- 缓存策略:什么时候不该缓存给一个查询加缓存,结果用户看到旧数据来投诉。
- 数据迁移脚本:跑之前先备份要给生产表加字段并回填数据,需要一份可回滚的脚本。
- 脚本工具:一次性的活也要能重跑写个脚本处理一批文件,跑一半失败需要重来,不想重复处理。
- 正则表达式:先给测试用例要写一个正则提取日志里的字段,试了几次都不对。
- CLI设计:让人不看文档就会用要给团队写一个命令行工具,需要让人第一次就能跑对。
- 配置文件:环境差异怎么管开发、测试、生产配置不同,经常把测试配置带上线。
- 并发控制:先想清楚临界区多个请求同时修改同一条记录,出现覆盖。
- 日志埋点代码:别把日志写成字符串拼接代码里到处是字符串拼接日志,线上排查时无法按字段过滤。
- 代码注释:写为什么不是写做什么团队代码注释很少,接手的人看不懂业务规则。
- 重构代码异味:一次只除一种代码越写越乱,想重构但一动就出bug。
- 第三方SDK接入:先读失败路径要接入一个支付或推送SDK,官方示例只给了成功路径。
- 数据结构选型:先看读写比一个功能要选存储结构,团队各说各的。
- 性能优化:先测再改有人说这段代码慢,要优化,但没人量过。
- 代码生成:模板要好改要批量生成一批相似的模块代码,手写太慢。
- 文档与代码同步:注释失效比没注释更糟接口文档更新滞后,新人按文档调用全部失败。
- 依赖选型:这个小库该不该引为了一个功能要引入新依赖,需要评估值不值。