滴滴一二面(发面经攒人品,许愿oc!)

最可惜的一次,滴滴二面问题基本上都能答上,可惜出了道刚好没做过的hot100,然后就挂了,唉...

一面面经

面试问题与知识点总结
1. 项目经历
1. 第一个项目 
技术点:
乐观锁解决超卖问题(如秒杀场景)。
Redis分布式锁实现“一人一单”限制。
扩展问题:
分布式锁的实现细节(如Redisson的底层原理)。
超卖问题的其他解决方案(如令牌桶限流)。
2. 第二个项目 
技术点:
基于Redis发布订阅机制实现线程池参数动态调整。
配置中心设计与定时任务上报线程池状态。
扩展问题:
对比Apollo、Nacos等配置中心的实现差异。
线程池参数动态调整的性能影响(如核心线程数修改的底层逻辑)。
2. Java基础
1. HashMap底层实现 
回答要点:
JDK1.8前:数组+链表;JDK1.8后:链表长度≥8且数组长度≥64时转红黑树。
树化后若节点减少,红黑树会退化为链表(节点数≤6时)。
扩展问题:
树化阈值为8的原因(哈希冲突概率与性能权衡)。
2. ConcurrentHashMap线程安全 
回答要点:
JDK1.7分段锁;JDK1.8后CAS+synchronized锁桶节点。
扩展问题:
ConcurrentHashMap的size()方法实现(分段统计再求和)。
3. 事务ACID与隔离级别 
回答要点:
MySQL默认隔离级别为可重复读(通过MVCC实现)。
脏读、不可重复读、幻读的解决方式。
扩展问题:
MVCC中ReadView的生成逻辑(活跃事务ID列表)。
3. 数据库
1. 索引与B+树 
回答要点:
B+树非叶子节点仅存索引值,叶子节点通过链表串联(支持高效范围查询)。
联合索引需满足最左匹配原则(如索引(a,b,c)需查询条件包含a)。
扩展问题:
索引下推(ICP)优化原理。
2. 红黑树 vs B+树 
回答要点:
红黑树为二叉平衡树,调整频繁;B+树为多路平衡树,层高更低(减少磁盘IO)。
4. Redis
1. 持久化方式 
回答要点:
RDB:定时快照,恢复快但可能丢数据。
AOF:追加命令日志,数据更安全但文件较大。
扩展问题:
AOF重写机制(压缩命令为最终状态)。
2. 缓存击穿解决方案 
回答要点:
空值缓存 + 布隆过滤器过滤无效请求。 
互斥锁防止大量请求穿透到数据库。
5. Spring
1. IOC与单例模式 
回答要点:
Spring Bean默认单例(通过单例注册表管理)。 
单例的线程安全问题(无状态Bean vs 有状态Bean)。 
6. 算法题
题目:二叉树层序遍历(LeetCode 102)。

二面

---

#### **1. JVM 垃圾回收算法**
- **问题**:  
  解释 JVM 中标记清除、标记整理、标记复制三种垃圾回收算法的原理、优缺点,以及分代回收中新生代和老年代分别使用的算法。
- **扩展追问**:  
  - 为什么新生代使用标记复制算法?  
  - 老年代为何更适合标记整理而非标记清除?  
  - 内存碎片问题在不同算法中的表现?

---

#### **2. ConcurrentHashMap 实现原理**
- **问题**:  
  对比 HashMap 和 ConcurrentHashMap 的线程安全实现,解释分段锁(JDK 1.7)或 CAS + synchronized(JDK 1.8)的底层机制。
- **扩展追问**:  
  - 分段锁如何保证并发安全?  
  - JDK 1.8 中为何放弃分段锁?  
  - ConcurrentHashMap 的 get 操作是否需要加锁?

---

#### **3. 生产者消费者模型实现**
- **问题**:  
  设计一个线程安全的阻塞队列,要求支持多生产者、多消费者,并在队列满/空时阻塞等待。
- **扩展追问**:  
  - 如何通过锁和条件变量(如 `ReentrantLock` + `Condition`)实现?  
  - 为什么不能直接使用 `BlockingQueue`?  
  - 如何处理线程唤醒的“虚假唤醒”问题?

---

#### **4. LRU 缓存设计**
- **问题**:  
  实现一个 LRU 缓存,要求 `get` 和 `put` 操作的时间复杂度为 O(1)。
- **扩展追问**:  
  - 为什么选择哈希表 + 双向链表的结构?  
  - 如何维护链表节点的顺序?  
  - 单链表能否实现?时间复杂度如何变化?

---

#### **5. 算法题:旋转数组的二分查找**
- **问题**:  
  给定一个升序数组经未知次数左旋后的结果(如 `[4,5,6,7,0,1,2]`),设计算法在 O(log n) 时间内找到目标值。
- **扩展追问**:  
  - 如何确定旋转点(分界点)?  
  - 如何处理二分后左右区间的有序性?  
  - 代码实现中的边界条件(如数组完全有序、重复元素)?

---

#### **面试评价方向**
1. **基础深度**:JVM 垃圾回收算法、并发容器的底层实现。  
2. **设计能力**:生产者消费者模型、LRU 缓存的设计思路。  
3. **算法思维**:二分查找变种问题的分析与编码能力。  
4. **沟通表达**:能否清晰阐述项目亮点(如乐观锁、分布式锁、动态线程池)。  

---
全部评论
面试官是不是赵 mj
点赞 回复 分享
发布于 03-12 20:56 湖南
春招吗大佬
点赞 回复 分享
发布于 03-12 21:13 陕西
我也是二面手撕没撕出来挂了,被自己蠢哭了
点赞 回复 分享
发布于 03-12 21:59 江苏
二面开头就开始手撕没撕出来 然后开始压力
点赞 回复 分享
发布于 03-12 22:45 重庆
那个部门啊
点赞 回复 分享
发布于 03-13 13:46 安徽
滴滴的算法是进他的平台吗?还是在自己本地idea上跑?
点赞 回复 分享
发布于 03-13 14:37 山东
为什么不能直接使用 `BlockingQueue`?
点赞 回复 分享
发布于 03-13 15:02 广东
老哥你是在哪投递的 官网吗
点赞 回复 分享
发布于 03-14 13:40 黑龙江
二面挂得好可惜
点赞 回复 分享
发布于 03-16 10:46 吉林
mark
点赞 回复 分享
发布于 03-16 12:19 安徽
老哥一面结束后 多久通知的二面啊
点赞 回复 分享
发布于 03-17 17:41 黑龙江

相关推荐

#滴滴求职进展汇总# TimeLine:3.3投递->3.7笔试->3.11一二面->3.12三面->3.15状态变为暂不匹配一面面经1. 自我介绍2. 实习拷打3. java中的hashMap在多线程访问的时候会出现什么问题,ConcurruntHashMap的线程安全原理是什么4. 说一下MySQL的索引结构,MySQL为什么采用b+树而不是红黑树5. 红黑树和avl树的区别在哪,为什么说红黑树比avl更高效,这些区别具体是怎么实现的(https://www.zhihu.com/question/19856999)6. 说一下CAS的原理,操作系统底层cmpxchg命令是怎么保证可见性和原子性的7. 请你设计一个id发号器,除了基本功能的实现,还需要考虑哪些点?(从高可用,高并发的角度考虑)8. 写题:k个一组反转链表9. 反问二面面经1. 自我介绍2. 实习拷打3. redis原生事务和lua的对比,lua能保证严格的原子性吗?在使用lua的时候需要注意什么4. java垃圾回收的整体流程说一下5. 写题:最长上升子序列6. 反问三面面经本以为会和前两面一样轻松,但事与愿违,全程压力+说教和pua,找工作以来最差的面试体验1. 自我介绍2. 家乡在哪,base有要求吗,手上几个offer3. 看你之前两面都考了算法,这次不考了,来点设计题4. 分析一下淘宝和京东业务的区别?从业务流程到技术架构如何实现的?5. 设计一个停车场管理系统,从功能范围,架构设计,关键技术问题,解决方案等多个角度进行分析?6. pua+说教环节,我还在犹豫给不给你过,得和你前两面的面试官再沟通一下3.15晚上查询,状态变为暂不匹配
oc大王:过了又如何呢,还是得泡,别灰心
查看14道真题和解析 滴滴求职进展汇总
点赞 评论 收藏
分享
评论
9
52
分享

创作者周榜

更多
牛客网
牛客企业服务