
滴滴面经(三面完入池子,求 OC )
算法+时间线+个人情况
基本情况:双非学院本 + 4 段实习,Java + Go 双线
简历项目:数藏(支付、超时关单、秒杀) + 个人项目(网关、数据冷热分离、热 Key 缓存预热 + CDN 检测 + RocketMQ 百万级消息堆积)
这个是上周四面的,内容有点多,我昨天部门团建完没事的时候总结了一下,感兴趣的同学自取即可
算法题可能有的同学感觉八股问题不大,直接问算法,我直接放到一开始,方便大家看
- 一面:SQL 题 + 俄罗斯套娃信封问题:https://leetcode.cn/problems/russian-doll-envelopes/description/
- 二面:最长无重复子串长度
- 三面:无算法
一面
1.integer a1=100,a2=100,a3=150,a4=150,看看a1是否等于a2,a3是否等于a4 2.说说==和equals,越详细越好 3.说说List,数组和链表区别(局部性原理?简单说说) 4.说说你知道哪些集合是基于链表和数组的? 5.你刚刚说了阻塞队列,我看你简历上好像用了Disruptor替换阻塞队列,为什么要替换阻塞队列?然后如果现在要你设计一个阻塞队列,你会怎么做?(线程安全说到了锁和cas) 6.cas简单说说?(aba问题) 7.锁,你这里说了ReentrantLock和sync,简单说说他们之间的区别 8.你说了cas,Java里面有一个原子自增的你有没有了解过(一开始说原子类,然后面试官说integer,就说了atomicinteger) 9.好了,差不多这个了,你说一下Java里面采用的map,(hashmap,treemap,currenthashmap) 10.你刚刚提到了线程安全,简单说说?然后前面那个List,你知道哪些线程安全的List?cow(Redis写时复制,然后具体Java实现忘记了)和vector(锁) 11.那你先说说hashmap,为什么线程不安全?(一开始想不起来,面试官提示说你先想想扩容,然后你估计差不多了) 12.hashmap扩容策略,缩容,扩容源码想起多少,然后为什么负载因子0.75,默认初始容量(8和16猜16),然后高低16位,为什么默认扩容是2的幂次方 13.currenthashmap实现(1.7和1.8),什么实现线程安全(优先cas,cas不行加sync),面试官问了一下锁的粒度,然后这里为什么不用ReentrantLock? 14.说说线程池,核心参数,工作流程,拒绝策略,拒绝策略如果让你实现,你会使用什么设计模式?(单例+策略模式) 15.接下来说一下MySQL,你先说一下jdbc连接过程?(我说jdbc吗?面试官说对)我说忘记了,能不能说我猜测的过程,面试官说可以? 16.为啥有了jdbc,还需要一些连接数据库的框架?(硬编码,连接池,Druid) 17.MySQL说说事务,然后隔离级别,mvcc? 18.mvcc回答不错,你自己总结过的吗? 19.说说Redis常见数据结构,然后你项目怎么用的? 20.回到刚刚的问题,你保证线程安全用锁,数据库有哪些锁,然后假设你不用Java的机制,无论什么语言,你要访问本地资源,怎么保证操作安全?(cas不用说了,直接说操作系统PV操作) 21.刚刚说了本地锁,你如果是在微服务和分布式的情况下,要怎么实现?(说了etcd,zookeeper,Redis然后Ap和cp) 22.好的,那说说你Redis怎么实现分布式锁(Redisson,追问用了哪些方法,没有get到面试官的点,说了lock和trylock,说了阻塞和非阻塞) 23.Redisson底层锁是怎么实现的(说了一下lua脚本,然后提到项目中限流用滑动窗口,然后Redisson底层用令牌桶) 24.如果我现在不用Redisson,让你实现一个分布式锁,用Redis,你会怎么实现(setnx,线程标记,看门狗) 25.setnx你说到了互斥,你知道他底层的互斥怎么实现吗?(操作系统PV信号量+lua保证原子性) 26.我问完了,你还有什么问题吗? 反问:今天有什么需要提升的点? 感觉你其实那些点都会,但是你回答的时候喜欢自己拓展,如果以后你面其他公司,把关键回答出来就好了,拓展这个交给面试官去做,然后表达简练一点,其他没多大问题,应届里面算不错的了,而且一些不会的点会尝试用自己掌握的点去推,整体来说可以(我以为说其他公司挂了,就没追问了)
二面
滴滴二面 1.lls挺好的,为什么没在那里转正,为什么会愿意去hll?后续如果通过了,愿意来北京吗?(表忠心,说愿意给滴滴卖命,面试官笑了) 2.说一下你项目中的亿级流量过滤怎么做的?(需求+背景+方案,这里吸取教训,说完问面试官需不需要详细说一下,面试官说她还有一些问题,等等) 3.你这里怎么保证用户设备的唯一性?为什么不用ip(设备指纹,Mac信息唯一,然后Mac获取ip的原理简单说了一下) 4.说说布隆过滤器扩容?(渐进式hash+定时任务+Redisson.count方法校验) 5.突然想到,你是怎么写入的(读写开关+flink流写+Pipline) 6.Pipline,为什么不用lua(允许误差,大不了查ES) 7.怎么降低97%ES压力的?然后这个集群价格怎么算的,ES客户端优化SLB,younggc优化,3000次/天降低排查过程(排查过程说了yonggc和fullgc,到这里没注意,又放飞了) 8.你这个线上排查还挺丰富,货拉拉这里三个排查你分别说说(jit逆优化,元空间fullgc,cmsgc频繁,面试官后面说你补充一下后面两个案例的版本) 9.说说g1和cms区别? 10.RPC这里我不问你了,你简单说说一致性哈希怎么实现的,然后优势(1000w数据10节点添加11节点移动6.87%-9.84%数据,原先hash要迁移90%),面试官追问计算过程(GitHub有,直接搜) 11.你Java线上排查挺可以的,你莉莉丝是用go,go怎么排查线上问题(和arthas对比回答) 12.实习问得差不多了,这个项目还挺不错的(数藏),接下来问一下项目吧,先来说说你这个rocketmq百万级消息堆积怎么排查解决的? 13.说一下你项目中除了这个线上问题,负责哪些模块开发,支付,秒杀,网关 14.网关URL动态加密(简单说了一下tls四次握手+项目实现) 15.秒杀我就不问了,你说说你这几个源码修改(Seata,ES,snakeyaml) 16.你多渠道支付实现了,你这里用到了分布式事务,主要做什么?(状态推进+定时任务+上链一致性),你这里幂等是用流水号+状态机?那我大概知道了,不用说了? 17.你大概什么时候开始实习的?你那么多线上问题排查,怎么学习的? 反问 1.表现如何? 线上问题排查确实可以,基础和技术都很扎实,线上排查那个比很多一年经验的都丰富了,不过表达不够简练,后面可以的话慢慢练吧,先去下一面
三面
滴滴三面 1.简历上这两段实习,哪段你收获大一点 2.说一下你这个cdn质量测试工具是干什么的? 3.零拷贝,说说你对于零拷贝的理解?除了中间件,工程中有哪些场景用过?(类似的思想) 4.接下来我们先说一下缓冲池,为什么需要缓冲池,缓冲池有哪些地方用到,具体怎么用(美团leaf,MySQL bufferpool,MongoDB写 Hbase写,消息队列,disruptor) 5.ES你感觉有没有用到(我感觉有,可能和MySQL一样,持久化的时候用到) 6.说说对象池吧,和刚刚一样,为什么需要?(减少对象创建和销毁,类似IOC集中式管理) 7.减少创建和销毁,创建和新建对象有什么损失,大概多少(举例线程池,以及取决于对象大小,类似jvm的老年代大对象晋升思想) 8.简单说说对象池工作流程?操作系统,中间件有哪些实现,他们是怎么做的?(hippo4j,各种数据库连接对象,Disruptor sequence对象,解决内存伪共享,Shardingsphere数据库连接对象,Linux slab分配,操作系统的进程池线程池,文件缓存读写缓冲池,cpp的用户对象池) 9.你实习了快两年,说一下你的感受吧? 10.实习的团队氛围怎么样?最喜欢哪一个? 反问: 1.表现整体来说可以,而且很多点可以看出虽然不知道,但是会利用自己以前学过的知识去推,不过有一些底层的东西可以自己再去挖掘一下 2.大模型日常开发中用得多吗?不多,因为公司要求数据安全,所以一些固定的会尝试大模型,涉及业务还是得自己写 3.如何看待大模型开发,后端程序员有必要掌握吗? 4.如果可以入职,主要负责哪块业务 5.滴滴对于校招生的要求(抗压能力,语言基础),反cue我基本都达到了,一些细节可以继续深入一下
