工作总结

发表时间:2026-04-17

后端开发工程师工作总结〔借鉴〕。

入职第三年,我换了种干法。以前遇到接口响应慢,第一反应是加机器、调连接池参数,像给车多踩油门。今年更愿意把调用链上的每个环节拆开看,从DNS解析到数据库连接,从GC停顿到锁竞争,像以前带学生做物理实验那样,一个变量一个变量地控制。这个转变源于一次线上故障——那晚我们查了四个小时日志,最后发现是一个循环里反复查配置表,每次查都走网络IO。加上本地缓存后,响应时间从3秒掉到80毫秒(P99)。当时运维同事说“早知道这么简单”,我回他:“简单是结果,找的过程一点都不简单。”

年初接手订单状态同步的老服务。它用定时任务轮询第三方物流接口,每天凌晨两点跑批,赶上大促,用户查物流经常延迟半小时。客服群里每天都有“为什么显示已发货但没物流”的投诉,有时候一天能收十几条。我提出改成基于binlog的增量捕获,用Canal监听数据库变更,通过RocketMQ推送给下游。方案评审时,组长问:“引入中间件,万一挂了怎么办?”我提前在测试环境搭了一套完整的docker-compose,把Canal的高可用、MQ的消费重试和幂等都跑通,还模拟了一次Canal宕机——自动切换花了15秒,期间消息积压但没丢。上线后,状态同步延迟稳定在3秒以内。最直观的效果是,客服群里这类投诉两周后几乎绝迹了。后来我把整个搭建过程写成了《Canal从入门到躺平》的手册,里面标注了五个最容易踩的坑,比如binlog格式必须是ROW,还有Canal的position记录在ZK里,重启时要注意偏移量。组里一个刚转正的同事照着手册,半天就搭起一套测试环境。

另一个变化在代码审查上。以前我提PR意见,多是“命名用驼峰”“异常别吞掉”。今年开始,我每条意见都会往可测试性上靠。看到有人直接new HttpClient,我会建议改成构造器注入,顺便附一段单元测试的例子。这个习惯来自去年的一次事故:退款模块改了行代码,没写单测就上线,结果触发重复退款,财务对账对了一周。那次之后,我在每个迭代计划里硬性留出20%的时间写测试。上周统计了一下,最近三个版本,回归测试发现的bug从之前平均8个降到了3个。不是我们变厉害了,是那些本该被单测拦住的低级错误,真的被拦住了。 [生日祝福语网 289a.Com]

也有翻车的时候。八月份优化商品推荐接口,我想把用户标签计算下沉到数据库,写了个存储过程。上线后CPU负载反而翻倍,查了半天发现存储过程里用了临时表排序,而数据库服务器内存只有8G,临时表一溢到磁盘就慢。反观应用服务器是32G内存,本来该在应用层做的事,硬塞给数据库,属于典型的“用错工具”。我赶紧回滚,改用Redis的SortedSet做预聚合,凌晨三点重新上线。那天晚上我盯着监控屏幕,心里骂了自己好几遍:原理都懂,怎么就犯了这种低级错误?

记得项目冲刺那周,连续三天跟缓存穿透较劲。一个爆款商品的详情页,每秒上万次请求,Redis没命中就全打到数据库上。我先加互斥锁,结果锁竞争让响应时间从5毫秒抖到200毫秒。后来改用布隆过滤器预热热门商品ID——每天晚上跑定时任务,把当天销量前1000的商品ID塞进布隆过滤器,再配合Caffeine做本地缓存,过期时间设30秒。压测时看着监控曲线从锯齿状变成一条直线,我拍了下桌子,把旁边正吃外卖的前端吓了一跳。他问我怎么了,我说:“没事,解了道题。”

日常里,我养成了写“病例卡”的习惯。每次线上故障,我都记在一份Markdown文档里,分四栏:症状、诊断过程、用药方案、预防措施。现在已经攒了37条。比如有一条:某服务频繁Full GC,诊断发现是日志框架用了异步appender但队列满了丢消息,导致业务代码里不断重试。预防措施是统一用logback的基于内存队列并设置丢弃策略。新同事入职,我会让他们先看一遍这37条病例,再挑三个历史故障做模拟演练——给出日志和监控截图,让他们写出诊断思路。效果比讲规范好很多,因为他们能理解“为什么这个规则会存在”。

跟测试同学协作也踩过坑。以前提测,我经常漏环境变量,测试环境跑不起来,来回确认浪费半天。后来我照搬以前带学生时的“实验课前准备清单”,自己做了一张《提测自检表》,列了八项:数据库迁移脚本是否可重复执行、依赖的外部接口有没有mock桩、配置项是不是全写进环境变量模板、日志级别是不是设成了INFO……每次提交前花五分钟对照勾一遍。坚持了半年,测试环境因为配置问题阻塞的比例,从大概30%降到了不到5%。测试组的小赵说:“你们后端现在提测,稳得有点像教科书。”

反思做得不够的地方,最大的失误是容量规划。双十一前一周,我发现订单明细表已经两亿多行,原有的按月分区策略不够细。那天凌晨三点,数据迁移脚本卡住了主库写入,报警电话把我震醒。紧急改成按天分区,又手动清理了三个月前的历史数据才扛过去。事后我加了张看板,每天展示核心表的增长速度,并设了阈值告警——超过一亿行就提醒重新评估分区策略。这个教训让我明白,设计时不能只盯着当下,得像排课表那样,提前留好加课的弹性。

面向明年,我打算在团队里搞“故障演练日”。每个月挑一个周四下午,不同成员轮流往系统里注入故障:kill掉一个pod、模拟网络延迟500ms、写满一个磁盘。每次演练前写好假设,比如“kill掉一个pod后,流量应该自动切换到其他实例,恢复时间不超过30秒”。演练后记录实际表现,把差距补到待办事项里。这跟我以前做物理实验的思路一模一样——你不亲手拉断一根绳子,就不知道它的真实拉力。

昨天下午,测试环境出了个小问题:一个老接口突然返回500。我花十分钟定位到是最近加的布隆过滤器没有处理null值,补了段代码就解决了。合上电脑那会儿,我突然想起年初的自己,要是遇到同样的问题,可能要先翻半天文档,再试两三种方案。现在能快速定位,不是因为记忆力变好了,而是脑子里那张“故障地图”越来越细了。

    为了您方便浏览更多的工作总结网内容,请访问工作总结

本文网址://www.zw5000.com/xindetihui/190893.html