Java 基础是后续学习集合、并发、JVM、Spring 和各类中间件的前置能力。这部分内容不只是背语法,更重要的是理解 Java 的对象模型、参数传递、泛型擦除、反射调用、动态代理、序列化边界和框架扩展机制。
适合谁看
- 刚开始系统学习 Java,想把基础语法和核心机制串起来的读者。
- 准备 Java 基础面试题,希望快速查漏补缺的同学。
- 已经写过 Java 项目,但对反射、代理、泛型、SPI、序列化等机制理解不深的开发者。
- 想继续学习集合、并发、JVM、Spring 源码前,需要补齐前置知识的工程师。
Java 集合是业务开发中使用频率最高的基础库之一,也是 Java 面试最常考的模块。学习集合时,既要知道每个容器适合什么场景,也要理解扩容、哈希冲突、迭代器、线程安全和并发容器背后的设计取舍。
适合谁看
- 想系统掌握 Java 集合框架的后端开发者。
- 准备 List、Map、Queue、并发集合和源码分析相关面试题的同学。
- 平时经常使用集合,但对扩容、哈希冲突、fail-fast、线程安全等细节不熟的读者。
- 想阅读 JDK 源码,从常用集合类开始建立源码分析能力的工程师。
Java 并发编程是后端开发和面试中最重要、也最容易混淆的模块之一。学习并发不能只背 API,要把线程生命周期、锁机制、内存模型、原子操作、线程池和并发工具类放在同一条主线上理解。
适合谁看
- 想系统学习 Java 并发编程的后端开发者。
- 准备线程、锁、JMM、CAS、AQS、线程池等面试题的同学。
- 已经在项目中使用多线程,但对死锁、线程池参数、ThreadLocal 泄漏等问题不够熟的读者。
- 想理解并发容器、CompletableFuture、虚拟线程等工程实践能力的工程师。
Java IO 是理解文件读写、网络编程、Netty、RPC 框架和高性能服务端的重要基础。学习 IO 时,建议同时理解 Java API、操作系统 IO 模型和常见设计模式,这样才能把 BIO、NIO、AIO、Selector、Channel、Buffer、Reactor 串起来。
适合谁看
- 想系统学习 Java IO/NIO 的后端开发者。
- 准备 BIO、NIO、AIO、IO 多路复用、Reactor 相关面试题的同学。
- 想继续学习 Netty、RPC、消息队列、数据库驱动等网络通信框架的读者。
- 对阻塞/非阻塞、同步/异步、Selector、Channel、Buffer 等概念容易混淆的工程师。
JVM 是 Java 后端绕不开的核心基础。学习 JVM 的目标不是背概念,而是能解释对象如何创建和回收、类如何加载、GC 如何影响应用、参数如何配置,以及线上 OOM、频繁 GC、CPU 飙高等问题应该如何排查。
适合谁看
- 想系统学习 JVM 的 Java 后端开发者。
- 准备 JVM 内存、类加载、GC、参数调优和线上排查相关面试题的同学。
- 已经参与过线上服务维护,但对 GC 日志、堆转储、线程栈和 JDK 工具不熟的读者。
- 想继续深入 Spring、Netty、中间件或性能优化的工程师。
JVM 面试很少停在“堆和栈有什么区别”。回答完内存区域,面试官通常会继续问对象怎样分配、哪些对象可以回收、一次 GC 为什么会停顿,以及线上出现 OOM、频繁 Full GC 或 CPU 飙高时怎样排查。
这篇文章是 JavaGuide JVM 专题的面试复习入口,问题按内存与对象、类文件与类加载、垃圾回收、参数与诊断工具、线上问题排查五部分整理。每个问题的完整答案放在对应专题文章中。
时间比较紧的话,可以先看 JVM 常见面试题总结,把答不完整的问题标出来,再回到本文和专题文章补细节。
Java 新特性不适合按版本机械背诵,更适合抓住“语言表达能力、标准库增强、并发模型、JVM 改进、长期支持版本”这几条主线。日常开发优先掌握 Java 8、11、17、21 等 LTS 版本中的稳定特性,再按需了解后续版本的预览和孵化特性。
时间比较紧的话,可以先看面试突击版的 Java 新特性常见面试题总结,再回到本专题查看对应版本的完整说明。
Spring Boot 可执行 JAR 的关键是清单中的启动入口,以及能够加载嵌套依赖的 Boot Loader。 内嵌 Tomcat 负责提供 HTTP 服务,是 Web 应用启动后的一个组成部分;没有 Web 容器的命令行应用同样可以打包运行。
普通 JAR 也能通过 java -jar 运行吗?
可以。JAR 是归档格式,不是 Spring Boot 专用格式。使用 java -jar app.jar 时,Java 启动器读取 META-INF/MANIFEST.MF 中的 Main-Class,再调用相应入口。普通应用只要提供符合目标 JDK 要求的入口,并使依赖可加载,也可以这样启动。详见 Java 17 的 java 命令文档。
