后端开发十大坏习惯,你中了几个
写代码容易写好代码难。很多后端开发者工作几年后技术栈越来越熟坏习惯却越积越多。它们平时不致命一旦流量上涨、需求变更或线上故障就会集中爆发。下面这十个坏习惯看看你中了几个。一、日志当摆设要么一行日志不打出问题全靠猜要么满屏System.out.println关键信息却被淹没。日志不是越多越好而是要分级、结构化、带上下文。请求进来时打上 traceId异常时记录入参和用户标识排查效率能提升十倍。二、异常随手吞catch (Exception e) {}是典型的掩耳盗铃。异常被吞掉问题不会消失只会在更深的地方爆发。正确的做法是能处理的处理不能处理的包装后抛出至少也要记录 error 级别日志。e.printStackTrace()在生产环境约等于没打。三、硬编码上瘾数据库密码、第三方 URL、业务开关全写死在代码里。改一个配置要重新打包发布不同环境还得改代码。配置应该外置到环境变量或配置中心代码只负责读取。硬编码一时爽上线火葬场。四、不信任后端校验“前端已经校验过了”——这句话是无数脏数据和漏洞的源头。前端校验只为用户体验后端校验才是安全底线。参数长度、格式、范围、权限一个都不能少。用 Bean Validation 加自定义校验别让非法请求穿透到数据库。五、SQL 随心所欲SELECT、循环里查数据库、没有索引的模糊查询、深分页不带游标。这些写法在测试环境跑得飞快数据量一上来就拖垮整个库。写 SQL 前先EXPLAIN能批量别循环能覆盖索引别回表。N1 查询是性能杀手不是小毛病。六、事务边界模糊该加事务的方法没加导致部分成功部分失败或者事务里调用远程接口把数据库连接占着不放。事务要短、要准明确传播行为。尤其注意事务内不要做 HTTP 调用否则超时会把连接池耗尽。七、线程安全靠运气单例对象里放可变成员变量SimpleDateFormat写成静态共享HashMap在多线程下裸奔。并发问题不是每次必现但一旦出现就是数据错乱。共享可变状态必须加锁或用线程安全容器能用局部变量就别用成员变量。八、接口不幂等支付、下单、回调这类接口重复请求是常态。没有幂等设计用户点两次就扣两次款。用唯一业务 ID、数据库唯一索引或 Redis 令牌保证同一请求只生效一次。幂等不是可选项是分布式系统的必修课。九、测试靠手点改完代码启动服务点一遍页面就算测试通过。这种模式在小型项目还能撑一旦模块多了改一处崩三处。单元测试覆盖核心逻辑集成测试覆盖关键链路不是为了 KPI而是为了半夜能睡安稳。十、监控告警裸奔系统上线后没有指标、没有链路追踪、没有告警。用户反馈慢了才发现 CPU 打满用户说付不了款才发现数据库连接池满了。至少要有QPS、响应时间、错误率、JVM/GC、慢 SQL 监控。告警要分级别让狼来了变成常态。坏习惯之所以难改是因为它们短期成本低、长期代价高。改掉一个代码就健康一分。不必追求一步到位从今天开始把日志打清楚、把异常处理好、把参数校验加上就已经超过大多数人了。代码质量是长期主义共勉。