Java 常见面试题

返回 面试

按主题整理的 Java 高频面试 Q&A;详细原理见 Java 基础 各专题笔记。


面向对象

问题简答深入
抽象类和接口的区别?is-a vs can-do;单继承 vs 多实现;抽象类可有字段和构造器抽象类和接口的区别
抽象类有构造方法吗?,供子类 super(),不能 new 抽象类抽象类会有构造函数吗
接口有构造方法吗?没有,接口不能实例化、无实例字段接口能有构造方法吗
重载 vs 重写?重载:同名不同参,编译期绑定;重写:子类改父类方法,运行期多态面向对象
==equals== 比引用(基本类型比值);equals 默认同 ==,可重写比内容equals与hashCode
为什么重写 equals 必须重写 hashCode相等对象 hash 必须相同;否则 HashMap/HashSet 行为错误equals与hashCode
深拷贝 vs 浅拷贝?浅拷贝共享引用字段;深拷贝递归复制引用对象对象

Q:final 修饰类 / 方法 / 变量?
A:类不可继承;方法不可重写;变量引用不可改(基本类型值不可改,引用对象内容仍可改)。


String 与基础类型

问题简答
String 为什么不可变?final char[]/字节数组 + 无修改方法;线程安全、可缓存 hash、字符串池
字符串常量池?字面量、intern() 复用;JDK 7+ 池在堆中
String / StringBuilder / StringBufferString 不可变;StringBuilder 线程不安全快;StringBuffer 同步慢
自动装箱拆箱陷阱?Integer 缓存 -128~127;== 比较包装类可能错;拆箱 NPE

集合

问题简答深入
ArrayList vs LinkedList数组随机访问 O(1);链表插删 O(1) 但定位 O(n)集合框架
HashMap 原理?数组+链表/红黑树;hash 扰动;负载因子 0.75 扩容 2 倍HashMap原理
HashMap 线程安全吗?否;并发用 ConcurrentHashMapHashMap原理 · Java多线程与JUC
ConcurrentHashMap JDK7 vs 8?7 分段锁 Segment;8 CAS+synchronized 锁桶头Java多线程与JUC
fail-fast vs fail-safe迭代时改结构抛异常 vs 副本迭代(如 CopyOnWriteArrayList同上

Q:HashSet 如何保证不重复?
A:底层 HashMap,元素作 key,value 固定占位;靠 hashCode + equals


并发(JUC)

问题简答深入
进程 vs 线程?资源分配 vs 调度单位;线程共享进程堆、独立栈进程与线程
创建线程的方式?ThreadRunnableCallable+Future、线程池JUC
synchronized vs ReentrantLock关键字/JVM 监视器 vs API;Lock 可中断、公平、多 ConditionJava多线程与JUC
volatile 作用?可见性 + 禁止部分重排序;保证复合操作原子性Java多线程与JUC · JMM
什么是 happens-before?JMM 规则,保证可见性的偏序关系同上
死锁条件与避免?互斥、占有且等待、不可抢占、循环等待;固定加锁顺序、超时数据库死锁 · 死锁
ThreadLocal 原理与泄漏?线程内 Map;线程池场景用完须 remove()JUC
线程池核心参数?core、max、queue、keepAlive、拒绝策略Java多线程与JUC

Q:sleepwait 区别?
A:sleep 不释放锁,属 Threadwait 释放监视器,须在 synchronized 内,属 Object


JVM 与 GC

问题简答深入
JVM 内存结构?堆、栈、方法区/元空间、程序计数器、本地方法栈JVM内存结构与垃圾回收
堆 vs 栈?堆存对象;栈存局部变量、引用、方法帧同上
常见 GC 算法?标记-清除、标记-复制、标记-整理同上
分代收集?新生代(Eden/S0/S1)+ 老年代;Minor/Full GC同上
G1 / ZGC 特点?G1 分区可预测停顿;ZGC 超低延迟(染色指针)同上
类加载过程?加载→验证→准备→解析→初始化类加载与双亲委派
双亲委派?子加载器先委派父加载器;防核心类被篡改同上
如何排查 OOM?堆 dump、MAT;看老年代泄漏、大对象、元空间jmap

Q:对象一定在堆上吗?
A:多数在堆;逃逸分析后可能栈上分配或标量替换(JIT 优化)。


泛型、Stream 与反射

问题简答深入
为什么需要泛型?编译期类型检查,消除强转Java泛型
PECS 原则?Producer extends,Consumer super同上
map vs flatMap1→1 vs 1→多再展平JavaStream
Stream 为何惰性?中间操作不执行,终止操作才遍历同上
反射获取 Class 几种方式?.classgetClass()Class.forNameJava反射

IO 与异常

问题简答深入
BIO / NIO / AIO?阻塞流;Channel+Buffer 多路复用;异步回调IO与NIO
受检 vs 非受检异常?必须处理/声明 throws vs RuntimeException异常处理
try-with-resources自动关闭 AutoCloseable,抑制异常链同上

Spring / 后端(简答)

详见 SpringBoot常见面试题

问题简答深入
IOC / DI?容器管理 Bean 生命周期与依赖注入IOC与DI
AOP 原理?动态代理(JDK 接口 / CGLIB 子类)AOP
Bean 生命周期?实例化→注入→初始化→使用→销毁Bean生命周期
@Transactional 失效场景?非 public、自调用、异常被吞、错误 rollbackForSpringBoot事务失效场景
Spring Boot 自动配置?@EnableAutoConfiguration + .imports / spring.factories自动配置

设计模式(常问)

详见 设计模式常见面试题

模式一句话深入
单例全局唯一实例;枚举/静态内部类防反射序列化破坏单例模式
工厂 / 抽象工厂封装创建逻辑,解耦具体类设计模式常见面试题
代理控制访问;Spring AOP 基础同上
观察者发布-订阅;事件驱动同上

答题建议

  1. 先结论后原理:如 HashMap → 数组+链表/树 → 再讲扩容、线程不安全。
  2. 带边界:volatile 不保证 i++ 原子性;synchronized 锁的是对象不是代码。
  3. 链到项目:线程池参数怎么配、事务为什么失效、线上 OOM 怎么查。
  4. 细节笔记:本文只做速查,深入阅读上方 wikilink 专题。

专题笔记

面向对象

集合与并发

JVM

语言特性

设计模式

其他专题