万字干货 2019 年蚂蚁金服、头条、拼多多面经( 五 )


3. 项目中的限流怎么实现的?
(Guava  , 令牌桶算法)
4. 具体怎么实现的?
(要点是固定速率且令牌数有限)
5. 如果突然很多线程同时请求令牌 , 有什么问题?
(导致很多请求积压 , 线程阻塞)
6. 怎么解决呢?
(可以把积压的请求放到消息队列 , 然后异步处理)
7. 如果不用消息队列怎么解决?
(说了预消费的策略)
8. 分布式追踪的上下文是怎么存储和传递的?
( +  , 当前节点的作为下个节点的父)
9. Dubbo的是怎么传递的?
()主线程的怎么传递到线程池?
(说了先在主线程通过的get方法拿到上下文信息 , 在线程池创建新的并把之前获取的上下文信息设置到中 。这里要注意的线程池创建的要在中手动 , 不然会有内存泄漏的问题)
10. 你说的内存泄漏具体是怎么产生的?
(说了的结构 , 主要分两种场景:主线程仍然对有引用和主线程不存在对的引用 。第一种场景因为主线程仍然在运行 , 所以还是有对的引用 , 那么变量的引用和value是不会被回收的 。
第二种场景虽然主线程不存在对的引用 , 且该引用是弱引用 , 所以会在gc的时候被回收 , 但是对用的value不是弱引用 , 不会被内存回收 , 仍然会造成内存泄漏)
11. 线程池的线程是不是必须手动才可以回收value?
(是的 , 因为线程池的核心线程是一直存在的 , 如果不清理 , 那么核心线程的变量会一直持有变量)
12. 那你说的内存泄漏是指主线程还是线程池?
(主线程 )
13. 可是主线程不是都退出了 , 引用的对象不应该会主动回收么?
(面试官和内存泄漏杠上了) , 沉默了一会 。
14. 那你说下不同用户登录的信息怎么保证线程安全的?
(刚才解释的有点懵逼 , 一下没反应过来 , 居然回答成锁了 。大脑有点晕了 , 此时已经一个小时过去了 , 感觉情况不妙 。)
15. 这个直接用不就可以么 , 你见过有锁实现的代码么?
(有点晕菜 。)
16. 我们聊聊mysql吧 , 说下索引结构(说了B+树)
17. 为什么使用B+树?
( 说了查询效率高 , O(logN) , 可以充分利用磁盘预读的特性 , 多叉树 , 深度小 , 叶子结点有序且存储数据)
18. 什么是索引覆盖?
19. Java为什么要设计双亲委派模型?
20. 什么时候需要自定义类加载器?
21. 我们做一道题吧 , 手写一个对象池
22. 有什么想问我的么?
(感觉我很多点都没答好 , 是不是挂了(结果真的是) )
小结
头条的面试确实很专业 , 每次面试官会提前给你发一个视频链接 , 然后准点开始面试 , 而且考察的点都比较全 。
面试官都有一个特点 , 会抓住一个值得深入的点或者你没说清楚的点深入下去直到你把这个点讲清楚 , 不然面试官会觉得你并没有真正理解 。二面面试官给了我一点建议 , 研究技术的时候一定要去研究产生的背景 , 弄明白在什么场景解决什么特定的问题 , 其实很多技术内部都是相通的 。很诚恳 , 还是很感谢这位面试官大大 。
总结
从年前开始面试到头条面完大概一个多月的时间 , 真的有点身心俱疲的感觉 。最后拿到了拼多多、蚂蚁的offer , 还是蛮幸运的 。头条的面试对我帮助很大 , 再次感谢面试官对我的诚恳建议 , 以及拼多多的HR对我的啰嗦的问题详细解答 。