Java常见面试题及答案汇总(2025持续更新)_java面试题
Java 作为企业级开发的主流语言,面试时涉及的知识点广泛且深入。本文整理了 Java 基础、集合、多线程、JVM、Spring、数据库、分布式 等高频面试题,并附上详细解析,帮助大家高效备战面试!
📚 一、Java 基础
1. Java 的三大特性是什么?
✅ 答案:
-
封装:隐藏对象的属性和实现细节,仅对外提供访问方式(getter/setter)。
-
继承:子类继承父类的属性和方法,提高代码复用性。
-
多态:同一方法在不同对象上有不同行为(方法重写、接口实现)。
2. == 和 equals() 的区别?
✅ 答案:
-
==
:比较基本数据类型的值,或引用类型的内存地址。 -
equals()
:默认比较对象地址(Object类),但可被重写(如 String 比较内容)。
3. String、StringBuilder、StringBuffer 的区别?
✅ 答案:
String
StringBuilder
StringBuffer
🔍 二、Java 集合
4. ArrayList 和 LinkedList 的区别?
✅ 答案:
5. HashMap 的底层原理?
✅ 答案:
-
JDK 1.7:数组 + 链表(哈希冲突时链表存储)。
-
JDK 1.8+:数组 + 链表 + 红黑树(链表长度 ≥8 时转红黑树)。
-
扩容机制:默认容量 16,负载因子 0.75,扩容时容量翻倍。
⚡ 三、多线程 & 并发
6. 线程的创建方式有哪些?
✅ 答案:
-
继承 Thread 类(不推荐,单继承限制)。
-
实现 Runnable 接口(推荐,可复用)。
-
实现 Callable 接口(可返回结果,配合 FutureTask)。
-
线程池(ExecutorService)(推荐,管理线程资源)。
7. synchronized 和 ReentrantLock 的区别?
✅ 答案:
🛠️ 四、JVM
8. JVM 内存模型(运行时数据区)?
✅ 答案:
-
方法区(元空间):存储类信息、常量、静态变量。
-
堆(Heap):存放对象实例(GC 主要区域)。
-
虚拟机栈:存储方法调用、局部变量表。
-
本地方法栈:Native 方法调用。
-
程序计数器:记录线程执行位置。
9. 垃圾回收算法有哪些?
✅ 答案:
-
标记-清除:简单但内存碎片多。
-
复制算法:高效(新生代使用),但浪费空间。
-
标记-整理:适合老年代,减少碎片。
-
分代收集:新生代(复制算法) + 老年代(标记-整理)。
🌱 五、Spring
10. Spring Bean 的生命周期?
✅ 答案:
-
实例化(new)
-
属性赋值(populate)
-
初始化(
@PostConstruct
、InitializingBean
) -
使用
-
销毁(
@PreDestroy
、DisposableBean
)
11. Spring AOP 的实现原理?
✅ 答案:
-
JDK 动态代理(基于接口)。
-
CGLIB 动态代理(基于子类,无接口时使用)。
-
核心:
ProxyFactory
+MethodInterceptor
。
📊 六、数据库 & 缓存
12. MySQL 索引失效的场景?
✅ 答案:
-
使用
!=
、、
NOT IN
。 -
对索引列进行运算(如
WHERE age + 1 > 20
)。 -
使用
LIKE \'%xx\'
(左模糊)。 -
联合索引未遵循最左前缀原则。
13. Redis 持久化方式?
✅ 答案:
-
RDB(快照):定时全量备份,恢复快但可能丢数据。
-
AOF(日志):记录写命令,数据更安全但文件较大。
-
混合模式(Redis 4.0+):RDB + AOF 结合。
🚀 七、分布式 & 微服务
14. CAP 理论是什么?
✅ 答案:
-
C(一致性):所有节点数据一致。
-
A(可用性):每次请求都能响应。
-
P(分区容错性):网络分区时仍能运行。
-
结论:分布式系统只能满足其中两项(如 CP、AP)。
15. 如何解决分布式事务问题?
✅ 答案:
-
2PC(两阶段提交):协调者 + 参与者,强一致但阻塞。
-
TCC(Try-Confirm-Cancel):业务补偿,适用于高并发。
-
SAGA:长事务拆分 + 补偿机制。
-
本地消息表:异步确保最终一致。
🎯 总结
本文整理了 Java 面试高频问题,涵盖 基础、集合、并发、JVM、Spring、数据库、分布式 等核心知识点,适合 校招 & 社招 备战!
💡 建议收藏 + 实践 + 深入理解原理!
📌 你的点赞和关注是我持续更新的动力! 🚀
📢 欢迎在评论区补充你的面试经验! 💬