前言
楼主是在上周拿到的上海美团优选校招的Offer,手上还有携程和腾讯的口头offer。之前一直因为太忙了所以没能写面经哈,现在把还记得住的面试问题写一些了
一面(45分钟):
1.介绍线程池的核心参数;介绍任务提交过程和线程池的一个运作过程。
2.介绍一下数据库的聚簇索引和非聚簇索引的区别,它们底层的数据结构是什么?为什么不用B树?
3.介绍一下数据库的四种隔离机制以及他们能分别解决什么并发事务带来的问题?什么是幻读,什么是不可重复读?
4.数据库是如何解决幻读的?原理是什么?(这里要深入回答MVCC实现原理和间隙锁)
5.问我项目中的数据库索引是如何设置的?(也就是问一些什么地方建索引比较好)
6.sychronized和reentrantlock的区别;reentrantlock实现了哪些高级功能?
7.sychronized在1.6的优化是什么?(这里从偏向锁开始说)
8.对象头中有什么内容?
9.Java对象创建的过程
10.JVM类加载的过程以及讲解一下双亲委派机制;双亲委派机制的作用有什么?
11.讲解一下CMS垃圾回收器的具体回收过程以及特点
12.如果说缓存了一个热数据,突然过期失效了。请求全部打在了数据库上会导致服务器崩溃,这里有什么比较好的解决办法?
(先说一下这种情况是缓存击穿,然后我的回答是设置热数据永不过期)
13.接着面试官根据我的回答问我Redis清理过期数据的机制是什么
14.算法:算术平方根和翻转链表
然后面试官向我介绍了一下美团优选部门的现状,接着问我有啥想问的
二面(35分钟):
上来直接手撕一道算法:无序数组找出重复数字,要求时间复杂度O(n),空间复杂度O(1)。(也就是不能用任何排序和集合)
大概想了5分钟,虽然记得以前看到过这个方法,但是还是忘了想不出来了。。。(后来查了下是原地置换法去重)说实话没想到会考这个去重算法。然后和面试官申请换一道,面试官同意了
第二道算法:n!末尾0的个数。算是比较简单的,半分钟写完了之后面试官看了眼没问题之后开始问问题。
1.什么时候能来实习(毕业证拿到之前先去实习,因为毕业证是从国外寄回来的)?现在在国内还是国外?
2.项目当中我是如何保证缓存和数据库的一致性的?(延时双删策略)
3.延时双删中为啥要延时?第二次删除为什么不在写完直接删除?
4.如何应对缓存删除失败的情况?(这里我答了用中间件消息队列)
5.讲一下BIO, NIO, IO多路复用
6.你了解虚拟内存吗?讲一下
7.讲一下死锁的条件;讲一下破坏死锁的条件;口头描述一个死锁例子
8.一次TCP连接上能传多少个http请求?(实际上问的就是长连接短连接,分类讨论即可)
9.TCP如何保证安全传输的?TCP头的大小?TCP头里主要包含什么?
10.用UDP进行传输的话,假设要发送1000M的文件,但是接收限制是800M,能传成功吗?如果能成功,怎么传?如果不成功,说出不成功的理由。
(这里我答的是不成功,回答的理由是UDP是没有拆包功能的,所以会直接传输失败。面试官点头说了个好的,我也不知道对不对)。
11.hashmap的底层数据结构说一下。它是线程安全的吗?它在什么情况下会发生线程不安全的情况?(这里头插法和尾插法的线程不安全是不同的,可以分类说一下)
12.hashmap为什么用的是红黑树而不是二叉树和二叉平衡树?
13.又问了一遍毕业之前什么时候能先来实习。。。。。(我投的是校招,但是因为毕业证拿到要7月了,所以问我能不能先实习)
后续
隔了一天后收到了Hr面的通知,估计是因为那个去重的算法没想出来就白菜了,没有加面。后面两天陆续收到了携程和腾讯的口头offer
最后祝兄弟们早日上岸!
我的面试经验汇总
下面先给大家上一个总的目录大纲,基础的东西就不进行过多的赘述,我们将会从面试必问的说起,同时由于每篇的内容过多,我们也只说重点,太过基础的内容谁都会,我就不多敲字浪费大家的时间了!
有需要的朋友点击这里自取就好了,希望资料对你有帮助!
SpringCloud
Redis
JVM
MySQL
Zookeeper
Kafka
Dubbo
spring
Rabbitmq
springboot
最后
由于文章篇幅有限,PDF的内容又很多,全部手敲下来很累…所以需要阅读阅读学习的,大家“一件三连后:“查看下方””即可拿到手之后自己学习吧,博主真的打字打累了。
有需要的朋友点击这里自取就好了,希望资料对你有帮助!
预祝大家前程似锦,工作顺利!