Mockito 写测试时我踩过的坑
这篇按踩坑笔记来写,因为 Mockito 写测试时我踩过的坑 我现在更容易记住“错在哪”,而不是“定义长什么样”。 先记住这句话Mock 是隔离依赖的工具,不是让测试通过的遮羞布。 很多问题不是不会用,而是用得太顺手了,顺手到把边界条件给省掉了。 这类问题一般怎么出现我脑子里会先放这个场景:给订单服务 mock 库存服务返回不足。 一开始看着都像是个小问题,真正麻烦的是它往往不是立刻报错,而是跑一阵子、数据一多、并发一上来才暴露。...
单元测试不是为了凑覆盖率
这篇按踩坑笔记来写,因为 单元测试不是为了凑覆盖率 我现在更容易记住“错在哪”,而不是“定义长什么样”。 先记住这句话测试要锁定行为,帮助重构时发现回归。 很多问题不是不会用,而是用得太顺手了,顺手到把边界条件给省掉了。 这类问题一般怎么出现我脑子里会先放这个场景:给优惠券金额计算写三个边界测试。 一开始看着都像是个小问题,真正麻烦的是它往往不是立刻报错,而是跑一阵子、数据一多、并发一上来才暴露。 这次我想盯住的坑 优先测分支和边...
Git 分支管理和提交规范整理
今天不想写长文,先把 Git 分支管理和提交规范整理 这块拆成几条短一点的问答。面试里经常会被连续追问,如果只背一句定义,第二问基本就卡住了。 先说我自己的结论清晰的分支和提交记录能降低协作成本。 我现在会先把这类题分成“定义是什么、为什么这样设计、代码里怎么用、容易翻车在哪”四层去答。这样比死背一段话稳很多。 快问快答 功能分支聚焦单一需求。我现在的理解:先记结论,再回到代码里找一个能验证它的场景。 提交信息说明原因。我现在的理...
Maven 依赖冲突的一次排查
今天把 Maven 依赖冲突的一次排查 补成一篇正常一点的学习笔记,不写大而全,就记我这轮最想吃透的部分。 一句话先立住依赖冲突要看最终生效版本,而不是只看 pom。 我这次真正记住的点 dependency:tree 找来源 就近原则影响版本选择 dependencyManagement 统一版本 为什么我会专门记这块因为它很容易出现一种错觉:看资料的时候觉得自己会了,真到写接口、改 SQL、配事务、看线程池参数时又开始发虚。...
Docker 部署 Spring Boot 项目
这篇我想按“排查记录”来写,主题是 Docker 部署 Spring Boot 项目。这种写法比纯概念文更适合我自己回看。 现象先别急着解释容器化重点是可重复运行和环境隔离。 先把现象钉住,比急着下结论有用。很多时候真正的关键不是“答案是什么”,而是“我是怎么一步步排到这里的”。 我会先看哪几件事 镜像只放运行需要的内容 配置通过环境变量注入 日志输出到标准输出 带入一个排查场景写一个 Spring Boot 应用的 Docke...
Nginx 反向代理配置复盘
这篇我想按“排查记录”来写,主题是 Nginx 反向代理配置复盘。这种写法比纯概念文更适合我自己回看。 现象先别急着解释反向代理要关注请求头、路径转发和超时。 先把现象钉住,比急着下结论有用。很多时候真正的关键不是“答案是什么”,而是“我是怎么一步步排到这里的”。 我会先看哪几件事 proxy_pass 路径要仔细验证 保留真实 IP 需要转发头 上传接口要配置大小限制 带入一个排查场景把前端域名代理到后端 Spring Boo...
Linux 上排查 Java 服务的常用命令
这篇按踩坑笔记来写,因为 Linux 上排查 Java 服务的常用命令 我现在更容易记住“错在哪”,而不是“定义长什么样”。 先记住这句话从进程、端口、日志和资源使用四个角度定位问题。 很多问题不是不会用,而是用得太顺手了,顺手到把边界条件给省掉了。 这类问题一般怎么出现我脑子里会先放这个场景:记录一次服务启动失败的排查命令。 一开始看着都像是个小问题,真正麻烦的是它往往不是立刻报错,而是跑一阵子、数据一多、并发一上来才暴露。 这...
接口日志应该记录什么,不该记录什么
今天把 接口日志应该记录什么,不该记录什么 补成一篇正常一点的学习笔记,不写大而全,就记我这轮最想吃透的部分。 一句话先立住日志要服务排查,同时控制隐私和噪声。 我这次真正记住的点 记录请求路径和关键参数 敏感字段脱敏 大对象不要全量打印 异常日志保留堆栈 为什么我会专门记这块因为它很容易出现一种错觉:看资料的时候觉得自己会了,真到写接口、改 SQL、配事务、看线程池参数时又开始发虚。 我现在尽量把知识点挂到一个具体场景上:给登...