Java高频面试题(带答案版)

一、Java基础

1. == 和 equals 的区别

==

比较的是地址(引用是否指向同一个对象)

equals

默认也是比较地址,但很多类(如String)重写后用于比较内容


2. String 为什么不可变

1)底层是 final 修饰的字符数组

2)保证线程安全

3)支持字符串常量池复用

4)提高性能(避免频繁创建对象)


3. final、finally、finalize 区别

final

修饰类、方法、变量,表示不可变

finally

异常处理中一定会执行的代码块

finalize

Object类方法,GC回收前调用(已不推荐使用)


4. 深拷贝与浅拷贝

浅拷贝

复制引用,多个对象指向同一块内存

深拷贝

复制对象本身,完全独立


二、集合框架

5. HashMap底层原理

JDK1.8结构:数组 + 链表 + 红黑树

流程:

1)计算hash

2)定位数组位置

3)冲突形成链表

4)链表长度 ≥ 8 转红黑树


6. HashMap为什么线程不安全

1)多线程put会数据覆盖

2)JDK1.7可能形成死循环

解决:使用ConcurrentHashMap


7. ConcurrentHashMap原理

JDK1.8:

1)数组 + 链表 + 红黑树

2)使用CAS + synchronized

3)锁粒度更小,提高并发性能


8. ArrayList扩容机制

1)默认容量为0(JDK8)

2)第一次扩容为10

3)之后按1.5倍扩容


9. List、Set、Map区别

List:有序,可重复

Set:无序,不可重复

Map:键值对结构,key唯一


三、并发编程

10. 线程创建方式

1)继承Thread

2)实现Runnable(推荐)

3)Callable + Future(有返回值)


11. Runnable和Callable区别

Runnable

无返回值,不抛异常

Callable

有返回值,可以抛异常


12. synchronized 和 Lock 区别

synchronized

自动加锁释放锁,简单

Lock

手动加锁释放,功能更强(可中断、公平锁)


13. 线程池核心参数

corePoolSize:核心线程数

maximumPoolSize:最大线程数

workQueue:任务队列

keepAliveTime:空闲时间

handler:拒绝策略


14. 线程池执行流程

1)核心线程执行

2)进入队列

3)创建最大线程

4)执行拒绝策略


15. volatile 作用

1)保证可见性

2)禁止指令重排序

3)不保证原子性


16. CAS是什么

Compare And Swap(比较并交换)

特点:

无锁机制,提高性能

缺点:ABA问题、自旋开销大


四、JVM

17. JVM内存结构

1)程序计数器

2)虚拟机栈

3)本地方法栈

4)堆

5)方法区


18. 堆和栈区别

栈:线程私有,存局部变量

堆:线程共享,存对象


19. 垃圾回收算法

1)标记清除

2)复制算法

3)标记整理


20. GC Roots有哪些

1)栈中的引用

2)静态变量

3)常量

4)本地方法引用


五、Spring

21. 什么是IOC

控制反转,对象由容器管理,而不是自己创建


22. 什么是AOP

面向切面编程,在不修改源码的情况下增强功能(如日志、事务)


23. Spring Bean生命周期

1)实例化

2)属性注入

3)初始化

4)使用

5)销毁


24. Spring事务失效场景

1)方法不是public

2)自调用(同类内部调用)

3)异常被捕获

4)数据库不支持事务


六、MyBatis

25. #{} 和 ${} 区别

#{}

预编译,防止SQL注入

${}

字符串拼接,存在注入风险


26. MyBatis缓存

一级缓存

SqlSession级别,默认开启

二级缓存

Mapper级别,需要手动开启


七、计算机网络

27. HTTP和HTTPS区别

HTTP

明文传输,不安全

HTTPS

加密传输,更安全


28. TCP三次握手

1)客户端发送SYN

2)服务端返回SYN+ACK

3)客户端发送ACK


29. TCP四次挥手

1)客户端发送FIN

2)服务端ACK

3)服务端发送FIN

4)客户端ACK


八、数据库(MySQL)

30. 索引的作用

1)提高查询效率

2)减少IO


31. B+树为什么适合做索引

1)多路平衡树,层级低

2)磁盘IO少

3)范围查询效率高


32. 事务四大特性(ACID)

原子性、一致性、隔离性、持久性


33. 常见隔离级别

读未提交

读已提交

可重复读(默认)

串行化


九、面试总结(背诵版)

面试核心必考:

1)HashMap底层原理

2)线程池执行流程

3)volatile和CAS

4)JVM内存结构 + GC

5)Spring IOC/AOP

6)MyBatis执行流程

7)TCP三次握手

相关推荐
码匠许师傅7 小时前
【C++ 面试真题】聊聊 C++ 中的 lambda 表达式
java·c++·面试
QCodingDev8 小时前
Spring AI Alibaba ReAct Agent实战:从Tool Calling到Agent,企业AI复杂业务该如何设计?
java·人工智能·agent·ai编程·spring ai
灵析表格8 小时前
灵析表格财务函数深度实用性分析与实操教程
开发语言·ai·json·excel·wps
RainCity8 小时前
Java Swing 自定义组件库分享(十六)
java·笔记·后端
LONGZETECH8 小时前
无人机组装调试实训高损耗痛点分析与虚拟仿真教学落地方案
c语言·开发语言·架构·无人机
菜冻鱼8 小时前
Python-sklearn-降维
开发语言·人工智能·python·机器学习·支持向量机·sklearn
luj_17689 小时前
大航海时代:沉浸式财商实战沙盒
c语言·开发语言·网络·经验分享·算法
赵广陆9 小时前
企业实战:Markdown图片检索
android·java·开发语言
C++、Java和Python的菜鸟9 小时前
第3章 从0开始用若依
java·开发语言
Json____10 小时前
五金制品行业-企业官网源码
java·大数据·数据库·企业站·wwwoop.com