目前 Java 后端有哪些不是很有必要去学的?

4 阅读6分钟

Spring Boot 项目里,pom.xml 随便一拉就是几十个依赖。你要是每个都去"深入了解",四年本科加两年研究生都不够用。

问题不在于"哪些该学哪些不该学",在于你现在处于什么阶段、以后想做什么方向。大三自学,最危险的事情不是少学了什么,而是把时间花在了投入产出比最低的东西上。

能跳过的重灾区:JSP、Servlet 裸写、SSH 框架

JSP 和 Servlet 裸写请求是 Java Web 的"历史课"。了解 Servlet 是什么、请求怎么到你的 Controller 的,有个概念就够了。花两周手写一个 Servlet + JSP 的项目来"打基础",纯粹浪费时间。

Spring Boot 的 DispatcherServlet 底层确实是 Servlet,但你不需要自己写 Servlet 才能理解这件事。看一篇 Spring MVC 请求处理流程的源码分析文章,半小时就明白了。

SSH(Struts2 + Spring + Hibernate)更不用说了。Struts2 几年前就因为安全漏洞被大面积替换掉了,Hibernate 虽然还在用但国内 Java 后端的主流是 MyBatis。你在招聘网站上搜一下,JD 里写 Hibernate 的岗位数量跟 MyBatis 差了一个数量级。

XML 配置地狱,跳过

Spring Boot 之前的 Spring 项目需要大量 XML 配置——applicationContext.xmlspring-mvc.xmlweb.xml,一个项目配下来几百行 XML。

现在 Spring Boot 的自动配置已经把这些事情干掉了。@SpringBootApplication 一个注解启动,application.yml 配几行数据源和端口就能跑。除非你去维护遗留项目,否则手写 Spring XML 配置的技能完全用不上。

有些教程还在教"先用 XML 配置把 Spring 搞明白,再学 Spring Boot"。逻辑没问题,但性价比太低。直接从 Spring Boot 开始,遇到自动配置搞不明白的地方再回头翻原理,效率高得多。

设计模式全背一遍,没必要

23 种 GoF 设计模式,面试八股文里的常客。但你真的需要把访问者模式、中介者模式、解释器模式全学一遍吗?

实际开发中高频使用的就那么几个:单例、工厂、策略、模板方法、观察者、代理。其中单例和代理 Spring 框架已经帮你实现了——@Service 默认就是单例,@Transactional 底层就是动态代理。

剩下的模式,等你在代码里真的碰到了需要它的场景再去学。脱离场景背设计模式跟背单词表一样,背完就忘。

JVM 调优:了解原理,别钻太深

GC 算法、堆内存分区、类加载机制——这些是面试高频考点,也是 Java 开发者区别于"只会写 CRUD"的标志。了解到"能回答面试问题、能看懂 GC 日志"这个程度就够了。

但是"JVM 调优"这件事本身,在大多数开发者的日常工作中几乎用不到。

为什么?因为大部分项目的性能瓶颈根本不在 JVM 上。一个接口慢了,十有八九是 SQL 没走索引、缓存没命中、或者调了一个响应慢的第三方服务。你把 JVM 参数调出花来,该慢的接口还是慢。

真正需要调 JVM 的场景——大促期间 GC 停顿影响延迟、堆外内存泄漏、metaspace 溢出——这些是高级工程师或者架构师级别才会碰到的问题。大三阶段花太多时间在这上面,不如把 MySQL 索引和慢查询分析搞透。

微服务全家桶,先别急

Spring Cloud、Nacos、Gateway、Sentinel、Seata、链路追踪、分布式事务——这套东西单独拎出来每一个都能学一个月。

但大三阶段学微服务有个致命问题:你没有体感。

微服务要解决的问题——服务拆分后的服务发现、负载均衡、熔断降级、分布式一致性——这些问题只有在你真的维护过一个多服务系统之后才能理解"为什么需要这个东西"。没有这个前提,Nacos 对你来说就是"一个注册中心",Sentinel 就是"一个限流工具",学完之后脑子里一堆概念但串不起来。

建议的路径:先把单体 Spring Boot 项目做到熟练,能处理数据库连接池配置、缓存策略、接口安全这些单体就要面对的问题。等你工作一两年,遇到了"单体扛不住要拆服务"的场景,微服务那套东西自然就学进去了。

面试中微服务的题目怎么办?看几篇高质量的架构演进文章,理解"为什么要拆"和"拆了会遇到什么新问题",比你本地搭一套 Spring Cloud 全家桶跑个 demo 有用得多。

时间该往哪花

上面说了一堆"别学",那到底学什么?

MySQL 是投入产出比最高的。不是会写 SQL 就行,是要能看懂 EXPLAIN 的输出、知道什么时候该加索引什么时候不该、理解事务隔离级别在实际场景里的影响。这个能力不管你以后写 Java 还是转 Go 转 Python,都直接带走。

然后是 Redis。String 做缓存、Hash 做对象存储、ZSet 做排行榜、分布式锁的实现和坑——不需要把源码翻一遍,但缓存穿透、击穿、雪崩怎么处理,面试和实际工作都会碰到。

Spring Boot 的核心机制也得搞明白。自动配置原理、Bean 生命周期、AOP 的实现方式、@Transactional 的生效条件和常见失效场景。这些不是八股文,是你写代码时真的会踩坑的地方。@Transactional 自调用失效这个坑,几乎每个 Spring Boot 新手都踩过一遍。

还有两个容易被忽视的:Linux 基本操作和 Git 分支管理。tail -f 看日志、top 看负载、Docker 打镜像——这些你不主动学,入职第一周就会被迫学。Git 的 rebasecherry-pick、冲突解决,团队协作天天用,不熟练会拖慢整个团队的节奏。

一个产品的开发流程

题主还问了开发流程,简单说一下。一个典型的后端项目从需求到上线的过程:

产品经理出需求文档 → 技术评审(讨论方案和排期)→ 数据库表设计 → 接口定义(跟前端对接口文档)→ 编码开发 → 自测 → 提交代码 review → 测试环境部署 → QA 测试 → 修 bug → 预发环境验证 → 上线 → 线上监控。

实际工作中,编码只占整个流程的三分之一左右。数据库设计、接口文档、code review、跟前端联调、修测试提的 bug——这些"写代码以外的事"加起来比写代码本身还耗时间。

学技术的时候不太会意识到这一点,但入职之后你会发现,写代码快不快不是最重要的,能不能把需求理解对、数据库设计得合理、接口文档写得清楚——这些才决定你返工的次数。