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三次握手

相关推荐
Java后端的Ai之路几秒前
Java并发编程07-等待通知机制优化循环等待
java·数据库·python
Raas1006 分钟前
AI网关如何接入?MAI Gateway部署实操教程
java·开发语言·人工智能·gateway·ai网关·mai gateway·企业级产品
小小龙学IT13 分钟前
Go 语言 pprof 性能剖析与调优深度解析:把“卡在哪“变成一张可执行的数据图
开发语言·后端·golang
前端双越老师16 分钟前
程序员 1v1 访谈系列第十一期:应届生别做开发
java·agent·ai编程
Captain1314_李祖团22 分钟前
5. MLIR相关语法
java·前端·javascript
starzy199024 分钟前
Scala Set深度解析:为什么大数据开发离不开它?
大数据·开发语言·scala
Rain的Java大神之路24 分钟前
面试官让你把 LLM、RAG、Agent、MCP 串起来讲清楚,90% 的 Java 工程师当场露馅
java·后端·面试
无所谓^_^42 分钟前
个人健康管理系统 | Springboot3 | Vue3
java·vue·毕业设计·springboot·课程设计·毕设·前后端分离
杨凯凡1 小时前
Spring Boot 的 @Transactional 为什么会失效?从代理、自调用到异常回滚的排查实战
java·spring boot·spring·事务·后端开发
熊猫钓鱼>_>1 小时前
三方库 NDK 原生模块跨平台适配与调试【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙心迹