25年10月大连云通信息技术 Java开发 实习 二面
#JAVA##JAVA面经##JAVA内推#
1. 你用 Java 创建线程时,继承 Thread 类和实现 Runnable 接口最核心的区别是什么?
回答思路
- 锚定核心维度:类的单继承限制 + 代码解耦;
- 继承 Thread:Java 是单继承,继承 Thread 后无法再继承其他类,且线程逻辑与 Thread 类耦合(run 方法写在 Thread 子类中);
- 实现 Runnable:无单继承限制,可同时继承其他类,且线程逻辑(run 方法)与线程对象解耦(Runnable 只封装任务,Thread 负责执行任务);
- 补充场景:实际开发优先用 Runnable(解耦+规避单继承),如线程池提交任务时只能传 Runnable/Callable;
- 核心结论:最核心是「继承 Thread 受单继承限制,Runnable 解耦任务与线程且无继承限制」。
标准答案 核心区别:继承 Thread 类受 Java 单继承限制,且线程任务与 Thread 类耦合;实现 Runnable 接口无单继承限制,还能将线程任务(run 方法)与线程对象解耦,是实际开发的首选方式。
2. 多线程共享数据时,使用 synchronized 关键字的核心作用是什么?
回答思路
- 锚定核心:保证原子性 + 可见性 + 有序性,本质是「互斥锁」;
- 拆解作用:
- 原子性:确保同步代码块/方法只能被一个线程执行,避免多线程同时修改共享数据;
- 可见性:线程释放锁时会刷新共享变量到主内存,获取锁时从主内存读取,避免缓存不一致;
- 有序性:禁止指令重排序,保证同步代码内逻辑按顺序执行;
- 举例:多线程累加计数器,synchronized 包裹累加逻辑,避免计数错误;
- 核心结论:核心是通过互斥锁保证共享数据操作的原子性、可见性和有序性,解决线程安全问题。
标准答案 核心作用是通过「互斥锁」保证共享数据操作的原子性、可见性和有序性:确保同步代码块同一时间仅一个线程执行,避免多线程并发修改共享数据导致的不一致。
3. 多线程共享数据出现线程安全问题的核心原因是什么?
回答思路
- 锚定核心:原子性被破坏 + 可见性缺失 + 有序性混乱,本质是「多线程对共享数据的并发修改」;
- 拆解原因:
- 原子性:多线程对共享数据的操作(如 i++)拆分为多个指令,中间可能被其他线程打断;
- 可见性:线程修改共享数据后未及时刷新到主内存,其他线程读取到旧值;
- 有序性:指令重排序导致代码执行顺序与预期不符;
- 举例:i++ 拆分为“读-改-写”,线程A读i=1,线程B同时读i=1,最终都写i=2,导致计数少1;
- 核心结论:核心是多线程并发修改共享数据时,操作的原子性、可见性或有序性被破坏。
标准答案 核心原因是多线程对共享数据的并发修改破坏了操作的原子性、可见性或有序性:比如非原子性的累加操作被打断、线程缓存导致数据可见性问题,最终引发数据不一致。
4. 继承和接口相比,各自的局限性是什么?
回答思路
- 先拆分两类局限性: ✅ 继承的局限性:
- Java 单继承限制,子类只能继承一个父类,扩展性差;
- 继承会耦合父类实现,父类修改可能影响子类,违反“开闭原则”; ✅ 接口的局限性:
- JDK8 前只能定义抽象方法,无法包含具体实现,重复逻辑需多次编写;
- 接口修改(如新增方法)会导致所有实现类必须适配,兼容性差;
- 补充场景:继承适合“is-a”关系(如 Dog extends Animal),接口适合“has-a”能力(如 Dog implements Runable);
- 核心结论:继承受单继承+耦合限制,接口受实现强制+无默认实现限制。
标准答案 继承的局限性:Java 单继承限制,且子类耦合父类实现,父类修改易影响子类;接口的局限性:JDK8前无默认实现(重复逻辑需多次编写),接口修改会强制所有实现类适配,兼容性差。
5. 冒泡排序的时间复杂度是多少,什么场景下效率最低?
回答思路
- 锚定复杂度:
- 最好(数据有序):O(n)(加标志位提前终止);
- 平均/最坏:O(n²);
- 效率最低场景:数据完全逆序(如 [5,4,3,2,1]),此时每一轮都要交换所有相邻元素,无任何提前终止的可能;
- 补充:冒泡排序是稳定排序,核心是相邻元素比较交换;
- 核心结论:时间复杂度O(n²)(最好O(n)),完全逆序时效率最低。
标准答案 冒泡排序平均/最坏时间复杂度为 O(n²)(最好O(n),数据有序时);效率最低的场景是数据完全逆序,此时每一轮都需遍历并交换所有相邻元素,无提前终止的可能。
6. 归并排序的空间复杂度是多少,核心优势是什么?
回答思路
- 锚定空间复杂度:O(n)(需额外数组存储合并结果,递归栈空间O(logn)可忽略);
- 核心优势:
- 时间复杂度稳定:最好/平均/最坏都是 O(nlogn),不受数据有序性影响;
- 稳定排序:相等元素的相对位置不变,适合对稳定性有要求的场景(如电商订单排序);
- 对比:快排最坏O(n²),堆排不稳定,归并排序的稳定性+时间稳定性是核心优势;
- 核心结论:空间复杂度O(n),核心优势是时间复杂度稳定O(nlogn)且是稳定排序。
标准答案 归并排序的空间复杂度为 O(n);核心优势是时间复杂度稳定为 O(nlogn)(不受数据有序性影响),且是稳定排序,适合对排序稳定性有要求的场景。
7. MySQL 中聚簇索引和非聚簇索引的核心区别是什么?
回答思路
- 锚定核心:数据存储位置与索引的关系;
- 拆解区别: ✅ 聚簇索引(主键索引):
- 索引叶子节点直接存储整行数据;
- 一张表只有一个聚簇索引; ✅ 非聚簇索引(二级索引):
- 索引叶子节点存储主键值,需回表(通过主键查聚簇索引)获取整行数据;
- 一张表可多个非聚簇索引;
- 举例:查询 select * from user where id=1(聚簇索引),直接取数据;查询 select * from user where name='张三'(非聚簇索引),先查name索引得主键,再查主键索引取数据;
- 核心结论:聚簇索引存整行数据,非聚簇索引存主键,需回表。
标准答案 核心区别:聚簇索引(主键索引)的叶子节点存储整行数据,一张表仅一个;非聚簇索引(二级索引)叶子节点存储主键值,需回表获取整行数据,一张表可多个。
8. MySQL 联合索引的生效规则中,最关键的一点是什么?
回答思路
- 锚定核心:最左前缀匹配原则;
- 解释规则:联合索引 (a,b,c) 仅匹配以 a 开头
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

SHEIN希音公司福利 379人发布
查看7道真题和解析