📚 一、Java 基础
1. Java 的三大特性是什么?
✅ 答案:
- 封装:隐藏对象的属性和实现细节,仅对外提供访问方式(getter/setter)。
- 继承:子类继承父类的属性和方法,提高代码复用性。
- 多态:同一方法在不同对象上有不同行为(方法重写、接口实现)。
2. == 和 equals() 的区别?
✅ 答案:
==:比较基本数据类型的值,或引用类型的内存地址。equals():默认比较对象地址(Object类),但可被重写(如 String 比较内容)。
3. String、StringBuilder、StringBuffer 的区别?
✅ 答案:
| 类 | 可变性 | 线程安全 | 适用场景 |
|---|---|---|---|
String | ❌ 不可变 | ✅ 安全(final) | 字符串常量 |
StringBuilder | ✅ 可变 | ❌ 不安全 | 单线程字符串操作 |
StringBuffer | ✅ 可变 | ✅ 安全(synchronized) | 多线程字符串操作 |
🔍 二、Java 集合
4. ArrayList 和 LinkedList 的区别?
✅ 答案:
| 对比项 | ArrayList | LinkedList |
|---|---|---|
| 底层结构 | 动态数组 | 双向链表 |
| 查询效率 | O(1)(随机访问快) | O(n)(需遍历) |
| 增删效率 | O(n)(需移动元素) | O(1)(头尾操作快) |
| 适用场景 | 频繁查询 | 频繁增删 |
篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题
需要全套面试笔记及答案【扫一扫】 即可免费获取**
5. HashMap 的底层原理?
✅ 答案:
- JDK 1.7:数组 + 链表(哈希冲突时链表存储)。
- JDK 1.8+ :数组 + 链表 + 红黑树(链表长度 ≥8 时转红黑树)。
- 扩容机制:默认容量 16,负载因子 0.75,扩容时容量翻倍。
⚡ 三、多线程 & 并发
6. 线程的创建方式有哪些?
✅ 答案:
- 继承 Thread 类(不推荐,单继承限制)。
- 实现 Runnable 接口(推荐,可复用)。
- 实现 Callable 接口(可返回结果,配合 FutureTask)。
- 线程池(ExecutorService) (推荐,管理线程资源)。
7. synchronized 和 ReentrantLock 的区别?
✅ 答案:
| 对比项 | synchronized | ReentrantLock |
|---|---|---|
| 实现方式 | JVM 层面 | Java API 层面 |
| 锁类型 | 非公平锁 | 可公平/非公平 |
| 可中断 | ❌ 不支持 | ✅ 支持(lockInterruptibly) |
| 条件变量 | ❌ 不支持 | ✅ 支持(Condition) |
🛠️ 四、JVM
8. JVM 内存模型(运行时数据区)?
✅ 答案:
- 方法区(元空间) :存储类信息、常量、静态变量。
- 堆(Heap) :存放对象实例(GC 主要区域)。
- 虚拟机栈:存储方法调用、局部变量表。
- 本地方法栈:Native 方法调用。
- 程序计数器:记录线程执行位置。
9. 垃圾回收算法有哪些?
✅ 答案:
- 标记-清除:简单但内存碎片多。
- 复制算法:高效(新生代使用),但浪费空间。
- 标记-整理:适合老年代,减少碎片。
- 分代收集:新生代(复制算法) + 老年代(标记-整理)。
🌱 五、Spring
10. Spring Bean 的生命周期?
✅ 答案:
- 实例化(new)
- 属性赋值(populate)
- 初始化(
@PostConstruct、InitializingBean) - 使用
- 销毁(
@PreDestroy、DisposableBean)
篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题
需要全套面试笔记及答案【扫一扫】 即可免费获取**
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:长事务拆分 + 补偿机制。
- 本地消息表:异步确保最终一致。