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

相关推荐
big_rabbit05022 小时前
JVM堆内存查看命令
java·linux·算法
m0_662577972 小时前
C++中的RAII技术深入
开发语言·c++·算法
学习要积极2 小时前
Springboot图片验证码-EasyCaptcha
java·spring boot·后端
码云数智-园园2 小时前
测试双雄:单元测试与集成测试的深度解析与实战指南
开发语言
故城、2 小时前
Python进阶
开发语言·python
2401_891482172 小时前
C++代码复杂性分析
开发语言·c++·算法
C羊驼2 小时前
C语言学习笔记(十):操作符
c语言·开发语言·经验分享·笔记·学习
李少兄2 小时前
企业资源计划(ERP)系统全景指南
java·前端·数据库·erp
波波七2 小时前
SSM与Springboot是什么关系? -----区别与联系
java·spring boot·后端