美团二面 后端开发 非科班
- 美团效率比较高,面试官也比较认真。
- 自我介绍(面试官觉得说的有点少)
- 上来两道题,比较简单:
- 一个矩阵,每一位都有个权值,从左上到右下的所有路径的最少权值多少。
- 复杂度是多少。空间复杂度可以有优化吗
- 复杂度是多少。空间复杂度可以有优化吗
- 反转链表,奇数位反转,偶数位不反转
- 排序算法都了解哪些?(我还提了,“需要写一下快排吗?”,没让我得逞)
- 快排、冒泡、插入、归并、堆排序、计数排序
- 最优和最差时间复杂度和空间复杂度分别是多少。
- 归并的空间复杂度为什么是O(n);(没答上来归并的空间复杂度,现算的,耗了比较久)
- 上面的算法是否稳定(又耗了比较久,对稳定概念理解错了,所以都是现想的)
- 知道桶排序吗(忘了,没复习这个)
- 排序使用场景,用没用过以上算法(没用过)
- 看没看过sort源码(没看过)
- 快排、冒泡、插入、归并、堆排序、计数排序
- 数据库了解吗,说一下事务的隔离级别
- 底层是怎么实现的——说了视图(应该不对)
- 锁了解吗,怎么和事务的隔离级别联系起来(没想清楚,只能开始乱说了)
- 间隙锁了解吗(不了解)
- 索引是怎么实现的?
- 为什么使用B+树?
- 为什么比B树快
- 聚簇索引了解吗
- 联合索引(举了一个最左匹配原则的例子,问这样会不会用索引,怎么样索引失效)
- 底层是怎么实现的——说了视图(应该不对)
- hashmap的底层怎么实现的
- 线程安全吗(引出ConcurrentHashMap)
- ConcurrentHashMap底层原理
- 为什么jdk8之前用了lock,jdk8之后用了synchronize
- 那什么情况用synchronize,什么情况用ReentrantLock
- 当时说了高并发用ReentrantLock,其底层是CAS,不会引起上下文切换,而高并发状态下synchronize是重量级锁。(面试官指出ReentrantLock也会有上下文切换,意见不一致,差点吵起来)
- 现在回想,答案应该往公平锁和非公平锁上引,或者别的ReentrantLock有的而synchronize上没有的特性上引
- 当时说了高并发用ReentrantLock,其底层是CAS,不会引起上下文切换,而高并发状态下synchronize是重量级锁。(面试官指出ReentrantLock也会有上下文切换,意见不一致,差点吵起来)
- 线程池了解吗
- 拒绝策略有用过吗(面的时候说没用过,现在一想项目里面其实用过。。。。)
- 线程安全吗(引出ConcurrentHashMap)
- 线程和进程的区别
- 进程之间内容共享吗
- 哪些共享哪些不共享
- 死锁的条件
- 问项目问了20分钟
- redis的问题,以及怎么解决(正好redis部分问题比较多,内容比较多)
- 问代码怎么写的,能否解决并发。(面试官真的在思考我这么写合不合理,比较认真)
- 经常问:你这么写有什么问题?
- redis的问题,以及怎么解决(正好redis部分问题比较多,内容比较多)
- 又问了知不知道哪些设计模式?
- 单例模式(正好和redis写的对应起来)、代理模式、工厂模式
- 单例模式(正好和redis写的对应起来)、代理模式、工厂模式
- 又问了问科研,有没有论文啥的?(没有论文,就说了说创新点)
- 总结一下:这个面试官希望我有些概念可以多说一些,比如自我介绍,进程和线程的概念,以至于经常回复我“嗯?这就没了?”,所以还是多背一些书面性的东西,不能只有理解。
- 许愿hr面