把最近几场面试的面经汇总一下
自从收到头条意向书后,每天划水,没有啥动力,半个多月没看复习笔记和刷题了。七月份投的几个提前批,差不多八月底才陆续开始进入面试流程。
有几个坑可以给大家排一下。第一个就是如果春招实习的时候没准备好,千万不要投大厂,特别是阿里,很看重最近半年的面试记录,我就是因为春招那会儿准备得不充分,支付宝二面挂了,今年找朋友内推的时候,面完二面,主管看到我的实习挂面记录不太满意,就直接放备胎池,两天后就收到了拒信;第二个就是视频面写代码的时候,如果题目对你来说很简单,不要一分钟就写完了或者一开始就给最优解,毕竟人家面试官也是挑了半天才选的题,你这么快就完事了,面试官会想你是不是做过这题,或者他出的题有这么 low 么。。。可以先思考一下,先暴力再优化,让面试官看到你思考的过程,会比你一分钟甚至题都没读完就开始写的效果要好得多,这样面试通过率会比较高。当然像快排、二叉树遍历的问题,那就别再思考了。。。
下面是最近一个月的面试面经汇总:
阿里菜鸟
一面(100分钟)
- 秒杀平台怎样预减库存,MQ 有什么作用
- 怎样防止超卖现象
- MQ 实现了异步但订单仍然有可能出现超卖,怎么解决
- Redis 集群的哨兵***过程,越详细越好
- Redis 的槽分配,如果一个集群节点挂了怎样重新分配对应的槽
- Redis 集群的哈希算法和渐进式 rehash 的过程
- Redis 主从架构,如何保持数据一致性
- Resdis 节点间如何通信,用了什么协议,具体流程
- 敏感词过滤算法的过程
- 发生 FULL GC 的条件
- CMS 垃圾收集器的特性,工作的四个流程,哪几个流程 stop the world
- 项目中关于 FULL GC 调优的细节
- 如何解决缓存雪崩和缓存击穿
- MySQL 中的索引为什么用 B+ Tree 而不用 B Tree
二面(50分钟)
- 秒杀平台的优化,如何实现更高并发量、高可用性
- SpringMVC 的请求过程,客户端的查询请求到渲染页面返回给用户的流程
- 线程安全的本质是什么?如何解决可见性的问题?可以想出哪几种方法?
- AOP 的原生 API 有没有了解
- 你所了解的所有安全性问题以及解决思路
- MySQL 中如何强制走指定的索引
- JVM 的内存结构,哪些是线程私有,哪些是线程公有
腾讯微信事业部
- Redis 的容灾,单机和分布式环境分别说一下
- Redis 的两种持久化,各自的优缺点
- Redis 的 IO 多路复用模型
- 动态编译和静态编译的区别
- STL 的底层数据结构(用 Java 的容器回答的)
- TCP 的四次挥手,为什么会有 TIME_WAIT 和 CLOSE_WAIT
- TCP 的流量控制和拥塞控制
- 用户从客户端输入请求到服务端接受请求,到数据库的访问,再到服务端返回应答、渲染页面的整个过程,描述所有细节
- Linux 的几个常见的 IO 模型
- 怎样实现 UDP 的可靠传输,需要设计哪些数据结构或者有什么思路
- 堆排序的实现过程,怎样调整堆;快排有没有稳定性,为什么
- 项目的技术栈,看过哪些相关的书,平时学技术栈的方法和路线
- 编程题6个(给了40分钟,只写了4个题):
- 将一个数字转任意进制(2-50进制)
- 写一段代码判断当前环境的字节序
- 实现单链表的有序插入,并思考如何在有序链表的基础上提高查找效率
- 给定一个数组,求 max(A[i] & A[j]),时间复杂度不高于O()
- 给定一个无序的大数组,如何找出中位数?如果有100亿个数,内存只有 4G 呢?
- KMP 算法
感觉腾讯不怎么想招人,一面就面了快三个小时,枯了。
小米电商
一面(45分钟)
- HashMap 的扩容,JDK 1.7和 JDK 1.8 扩容的区别
- 有几种方法可以让 HashMap 变得线程安全
- ConcurrentHashMap 用到了 synchronized 么,说说 synchronized 的底层是怎么实现的
- volatile 的特点,保证原子性么
- JVM 的结构,垃圾收集算法
- 存储引擎,B+ Tree 的结构,最左匹配原则
- TCP 三次握手,标志位怎么设,TIME_WAIT 发生在哪儿
- 输入 URL 到前端渲染的过程
- AOP 动态***有哪几种实现方式,有什么区别
- 项目问题
- 代码题:返回二叉树中包含每层节点之和平均值的数组
二面(45分钟)
- 项目中 Redis 和 RabbitMQ 的作用是什么
- 如何解决超卖现象
- 数据库事务的特点,隔离性对应哪几种隔离级别
- MySQL 的默认隔离级别能否解决幻读的问题
- InnoDB 引擎的特点,支不支持事务
- MVCC 是什么,核心问题是什么,为什么会有 MVCC
- 代码题1:输出一个单向链表的入环节点,如果没有则输出 null(先通过快慢指针得到 fast 和 slow 相遇的节点,再令 fast 从相遇点出发,slow 从链表首节点出发,一次一步,相遇的节点为入环首节点。面试官要求用数学公式推导为什么要这么做)
- 代码题2:合并两棵二叉树,对于两棵树都存在的节点,节点值相加,否则空的位置用另一棵树的节点来代替