每日面试实录·滴滴·校招·JAVA
📍面试公司:滴滴
📌面试岗位:Java 开发实习
📅投递时间:4 月 15 日
📞面试时间:4 月 25 日 上午
🔄面试轮次:技术一面 + 技术二面
🕒面试时长:每轮约 40 分钟
✨ 面试整体节奏:
滴滴这次Java 岗位几乎是一场“纯八股”考试,项目经历一笔带过,直接从 Java 基础、并发编程、数据库、Spring 框架、JVM 到系统优化、分布式锁、排查手段全流程覆盖。
一面主打八股基础,面试官态度很和善,会适当提示,属于“辅助答题”型;二面直接拉高强度,题目深度 + 宽度兼具,追问较多,一些系统性问题处理不太好,明显感觉有点被带崩了。
✅ 一面题目逐题整理与解析:
-
ArrayList 和 LinkedList 的区别与使用场景?
- 答案点:ArrayList 基于数组,随机访问快,插入删除慢;LinkedList 基于双向链表,插入删除快,查询慢。
-
HashMap 和 ConcurrentHashMap 区别?后者如何线程安全?
- 答案点:前者线程不安全,后者基于分段锁(JDK7)或 CAS+Synchronized(JDK8)实现并发安全。
-
线程池的创建方式及原理?
- 答案点:ThreadPoolExecutor,核心参数解释、任务队列、拒绝策略等。
-
Lock 的底层原理及与 synchronized 的区别?
- 答案点:Lock 可中断、可限时、公平锁支持;底层基于 AQS 实现。
-
synchronized 的锁升级过程?
- 偏向锁 → 轻量级锁 → 重量级锁。
-
sleep 和 wait 的区别?
- 答案点:sleep 不释放锁,wait 释放锁,wait 必须在同步代码块中。
-
原子类如何实现原子操作?
- 答案点:底层使用 Unsafe 类,依赖 CAS 实现。
-
ThreadLocal 的原理与内存泄露问题?
- 答案点:每个线程维护 ThreadLocalMap,key 是弱引用;未清理容易泄露。
-
红黑树、B树、B+树 结构和区别?Java 中的应用?
- 红黑树:TreeMap;B+树用于数据库索引;顺序访问只用叶子节点。
-
MySQL 存储引擎?Memory 引擎特点?
- MyISAM 不支持事务;InnoDB 支持事务、行锁;Memory 存储在内存中,基于哈希索引。
-
MySQL 联合索引优化:最左匹配、等值与范围查询?
- 答案点:索引列的使用顺序会影响能否命中联合索引。
-
MySQL 锁机制?
- 行锁、表锁、意向锁、间隙锁(Next-Key Lock)。
-
事务的四大特性与 MySQL 实现?
- ACID:原子性、隔离性、一致性、持久性;通过 undo/redo 日志 + MVCC 实现。
-
Spring 如何解决循环依赖?三级缓存作用?
- singletonObjects、earlySingletonObjects、singletonFactories,三级缓存机制。
-
手撕算法题:给字符串中最大字符后加“(max)”
- 示例代码(示意):
public String markMaxChar(String s) {char max = 0;for (char c : s.toCharArray()) {if (c > max) max = c;}return s.replaceAll(String.valueOf(max), max + "(max)"); }
✅ 二面题目逐题整理与解析:
-
Java 中为什么要设置字符串常量池?优势?
- 节省内存,提升效率,String 属于不可变对象,可复用常量池中对象。
-
序列化与反序列化的过程?
- ObjectOutputStream/ObjectInputStream,Serializable 接口。
-
有序的 Map 类型?如何实现?
- TreeMap(基于红黑树),LinkedHashMap(基于链表维护顺序)。
-
线程池满了之后任务如何处理?拒绝策略?
- AbortPolicy、CallerRunsPolicy、DiscardPolicy、DiscardOldestPolicy。
-
线程执行异常怎么办?任务丢失怎么避免?
- 提交前 try/catch 捕获,设置 UncaughtExceptionHandler,自定义 RejectedExecutionHandler。
-
JVM 中对象被 GC 的条件?
- 可达性分析,弱引用、无引用关系等;GC Roots 起点。
-
SpringBoot 常用注解?
- @SpringBootApplication、@RestController、@EnableAutoConfiguration、@ComponentScan、@Configuration 等。
-
MySQL 索引原理?什么时候回表?什么时候索引失效?
- 回表:覆盖索引无法满足 select 字段时;失效:like ‘%a’、函数包裹字段、or 混用等。
-
MySQL 修改单行记录时的锁机制?
- Next-Key Lock 行锁/间隙锁,涉及 MVCC 乐观锁/悲观锁理解。
-
问到分布式锁:如何实现?Redis/Zookeeper?ZK 原理?
- Redis setnx + 过期时间;Zookeeper 利用临时有序节点 + watcher 实现锁机制。
- 系统上线后卡顿如何排查?
- 从 JVM、GC、线程 dump、慢查询、接口响应时间、调用链等角度排查。
- 系统查表慢,不止数据库,该怎么优化?
- 分析链路瓶颈,缓存预热、慢 SQL、IO 延迟、网络延迟、负载均衡等。
-
是否做过压测?(没有)
-
实习收获?
-
反问业务是否涉及信息安全?结果被反问网络安全与加密算法 😅
🧠 总结 & 面试复盘:
一面能基本应对,虽然有卡顿但还能接住;二面加压之后暴露了知识点的“理解盲区”和“记忆边界”问题,像线程池异常处理、分布式锁底层、GC 等场景性题目都属于实战积累不足导致。
📌 建议补强方向:
- 线程池全流程 & 源码级别掌握
- MySQL 索引失效、锁机制、事务隔离级别再深入
- JVM GC 触发条件和对象存活判断
- 分布式锁 & SpringBoot 核心注解体系记牢
- 系统优化 & 排查技巧需通过实战训练补足
🎯 如果你也在准备 Java 实习/社招,可以点赞+留言交流,我会继续整理类似的高频面经 + 项目思路拆解,希望大家都能稳稳上岸!