2025 Java 面试大全
目录
2025 Java 面试大全
一、编程语言
Java
Kotlin(音视频岗优先)
二、开发框架
Spring 全家桶
MyBatis
设计模式
三、数据库
MySQL
四、分布式技术
Redis
Kafka/RocketMQ
分布式理论
五、系统 / 网络
JVM 原理(深入篇)
Linux/Docker
TCP/IP/HTTP(实战篇)
六、领域技术
音视频开发(专项)
DDD 中台设计(供应链 / 制造行业)
七、技术栈与岗位匹配速查表
2025 Java 面试大全
一、编程语言
Java
- 出现频率:100% 岗位要求
- 面试高频考点:
- JVM:详细阐述内存模型(堆、栈、方法区各自的作用、存储内容及特点,如堆用于存储对象实例,是垃圾回收的主要区域;栈用于存储方法调用的局部变量、操作数栈等;方法区用于存储类的元数据、常量池等);深入理解 GC 算法(以 G1 算法为例,讲解其如何将堆划分为多个 Region,采用标记 - 整理算法,实现可预测的停顿时间;CMS 算法关注其如何在并发阶段减少停顿时间,以及存在的浮动垃圾等问题);熟练掌握 OOM 排查的方法和工具(如通过 Java 自带的 jmap、jstack 命令,以及 MAT 等可视化工具分析堆转储文件,找出内存泄漏的对象和原因)。
- 多线程:透彻理解线程池参数(corePoolSize 核心线程数、maximumPoolSize 最大线程数、keepAliveTime 线程存活时间、unit 时间单位、workQueue 任务队列,解释每个参数在不同场景下的合理设置及对线程池性能的影响);清晰区分 synchronized vs ReentrantLock(从实现原理、锁的获取与释放方式、锁的公平性、锁的重入性、是否可中断等方面进行对比,如 synchronized 是基于对象头中的 Monitor 实现,是非公平锁;ReentrantLock 可通过构造函数选择公平锁或非公平锁,支持可中断的锁获取等);掌握 CAS(Compare and Swap)原理及应用场景(说明 CAS 操作如何通过比较内存中的值和预期值,当相等时才进行更新操作,以实现无锁并发,在 Atomic 包中的应用等);理解 AQS(AbstractQueuedSynchronizer)框架(阐述 AQS 如何通过一个 FIFO 队列来管理等待锁的线程,以 ReentrantLock 为例说明其如何基于 AQS 实现独占锁和共享锁);明确 volatile 关键字的作用(保证变量的可见性,即一个线程修改了该变量的值,其他线程能够立即看到最新值,禁止指令重排序,举例说明在单例模式双重检查锁中使用 volatile 的必要性)。
- 集合类:深入剖析 HashMap 底层(解释在 JDK1.8 及之后版本中,HashMap 如何在数组 + 链表的基础上引入红黑树,当链表长度超过 8 且数组容量大于 64 时,链表转换为红黑树以提高查找效率,分析哈希冲突的解决方式,如链地址法等);了解 ConcurrentHashMap 分段锁优化(在 JDK1.7 及之前版本中,ConcurrentHashMap 采用分段锁机制,将数据分成多个段,每个段有自己的锁,不同段之间的操作可以并发进行,提高并发性能;JDK1.8 及之后版本采用 Node 数组 + CAS+Synchronized 实现,进一步优化并发性能)。
- 新特性:熟练运用 Lambda 表达式(掌握 Lambda 表达式的语法结构,如何简化匿名内部类的写法,在集合的遍历、过滤、排序等操作中的应用,如使用 Stream API 结合 Lambda 表达式对集合进行复杂的操作);熟悉 Stream API(了解 Stream API 如何提供高效、简洁的方式处理集合数据,包括中间操作(如 filter 过滤、map 映射、distinct 去重等)和终端操作(如 forEach 遍历、collect 收集、reduce 归约等)的使用场景和方法);了解模块化(Java 9+)(解释模块化的概念,如何将一个大型项目拆分成多个模块,每个模块有自己的依赖和访问控制,提高项目的可维护性和可扩展性,在实际项目中的应用案例)。
- 关联岗位:所有 Java 开发岗,包括但不限于后端开发工程师、全栈开发工程师、Java 软件工程师、系统开发工程师等。在这些岗位中,无论是小型项目的快速开发,还是大型分布式系统的架构设计与实现,Java 的基础知识、多线程处理能力、对集合类的熟练运用以及对新特性的掌握都至关重要。例如,后端开发工程师在开发业务逻辑时,需要使用多线程提高系统性能,利用集合类存储和处理数据;全栈开发工程师不仅要在后端运用 Java 进行服务器端编程,还可能在前端通过 Java 相关技术(如 JavaFX 等)实现部分功能,新特性的使用可以提高代码的简洁性和开发效率。
Kotlin(音视频岗优先)
- 出现频率:在音视频相关岗位中具有较高要求,在整体 Java 相关招聘中相对低于 Java,约 30% - 50% 的音视频岗有此要求。
- 面试高频考点:
- 与 Java 互调:掌握 Kotlin 与 Java 相互调用的方式和注意事项(如 Kotlin 调用 Java 代码时,对于 Java 的静态方法、静态变量的调用方式,Java 调用 Kotlin 的函数、属性等的方法,处理数据类型转换等问题,举例说明在实际项目中如何在 Kotlin 和 Java 代码之间传递参数、调用方法)。
- 扩展函数:理解扩展函数的概念和使用场景(解释扩展函数如何在不修改原有类的情况下,为其添加新的函数,如为 String 类添加一个自定义的扩展函数用于格式化字符串,在实际项目中如何利用扩展函数提高代码的复用性和简洁性)。
- 协程(Coroutine):深入理解协程的原理和应用(说明协程如何在非阻塞的情况下实现异步操作,对比协程与传统线程的区别和优势,如协程的轻量级、低开销,在处理高并发的网络请求、文件读写等场景中的应用,如何使用协程构建异步任务链,避免回调地狱)。
- 空安全设计:熟悉 Kotlin 的空安全机制(讲解 Kotlin 如何通过可空类型(如 String?)、安全调用操作符(?.)、非空断言操作符(!!)、Elvis 操作符(?:)等机制来避免空指针异常,在实际代码中如何正确使用这些机制来提高代码的健壮性,举例说明空指针异常在 Java 中常见的场景以及在 Kotlin 中如何避免)。
- 关联岗位:音视频开发岗,如音视频工程师、视频编解码工程师、音频处理工程师等。在音视频开发中,Kotlin 的协程可以高效地处理音视频数据的异步加载、解码等操作,其空安全设计可以减少在处理复杂音视频数据结构和逻辑时出现空指针异常的风险,与 Java 的互调能力则方便在现有的 Java 音视频项目中引入 Kotlin 进行优化和扩展。例如,在开发一个视频播放应用时,使用 Kotlin 的协程可以在不阻塞主线程的情况下,高效地从网络加载视频数据并进行解码,空安全设计可以确保在处理视频帧数据等复杂数据结构时程序的稳定性。
二、开发框架
Spring 全家桶
- 出现频率:100% 岗位要求
- 面试高频考点:
- IoC/AOP:深入理解 Bean 生命周期(详细阐述 Bean 的实例化、属性赋值、初始化、使用、销毁等阶段,在每个阶段 Spring 提供的扩展点,如通过 @PostConstruct 注解