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面经实录9174 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
周杰伦fans5 小时前
AutoCAD .NET 二次开发:深入理解 EntityJig 的工作原理与正确实现
开发语言·.net
许彰午6 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
Bat U7 小时前
JavaEE|多线程初阶(七)
java·开发语言
谭欣辰7 小时前
C++ 排列组合完整指南
开发语言·c++·算法
foundbug9998 小时前
自适应滤除直达波干扰的MATLAB实现
开发语言·算法·matlab
XDH_CS8 小时前
MySQL 8.0 安装与 MySQL Workbench 使用全流程(超详细教程)
开发语言·数据库·mysql
小短腿的代码世界8 小时前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt
小康小小涵9 小时前
基于ESP32S3实现无人机RID模块底层源码编译
linux·开发语言·python