猿辅导服务端一二三面面经(但求速死……)
一面(约 42 min)
- 聊项目
- 事务的 ACID,说一说概念和实现(说了 MySQL 相关的)
- 事务的隔离级别说一说,每个级别的问题?MySQL 默认是哪个隔离级别
- 除了 Java 还了解什么语言(C/C++)
- C/C++ 和 Java 的区别?(有点紧张,居然忘记说自动垃圾回收了😂)
- Full GC 的概念?
- GC 算法
- Java 标记存活对象使用的是什么算法?
- 栈和队列有哪些应用场景?
- JVM 的堆和栈分别存什么东西?
- 一个静态对象(static)的存储位置?
- 手撕算法
- 二叉树按前序序列化
- 数组按层序反序列化(一开始把面试官的意思理解错了,以为这题还是序列化🤣)
反问环节
- 我的知识储备还有哪些地方需要补全?
二面(约 50 min)
- 聊项目
- Kafka 如何保证全局有序性?
- Kafka 如何保证高可用(扯了一下 Kafka 的副本机制,leader 选举
- MySQL 是怎么解决幻读的?
- MySQL 索引的底层数据结构?
- 哈希索引的局限性有哪些?
- InnoDB 为什么用 B+树而不用平衡二叉树?
- 如果索引全部加载到内存中,平衡二叉树和 B+树哪个更优?(答了 B+树)
- Java 内存模型的概念?
- 可见性的概念?
- 指令重排序说一说
- 缓存一致性模型?(没听说过……)
- 常见的 Happens-Before 能说几条吗?(这个真记不得)
- GC 算法
- G1 收集器和传统的收集器有什么区别?(答了内存划分的区别和选择回收区域的策略)
- G1 分代吗?(记错了,答了不分代)
- IO 模型说一说,NIO 底层是 OS 什么函数?(epoll)Reactor 模型了解吗?(不了解……)
- 手撕算法
- 二叉树剪枝:节点值要么0要么1,要求删去全为 0 的子树
- LeetCode 221(这题一段时间以前刷过,但是一开始想错了,在面试官提示之下算是写出来了)
反问环节
- 同一面,面试官说我 IO 这块不太熟
三面(约 51 min)
- 上来寒暄几句,问了一点点基本情况和项目相关,然后剩下时间就是三道题,菜鸡的我只做出来一题半
- 面试官要求每题都提交一下,跑结果
1. LeetCode 33
- 这题太惨了,明明之前做过,但是临场就是想不出怎么做
2. 多线程
- 给定一个数组,要求用两个线程,按原始顺序打印,其中线程1只打印奇数,线程2只打印偶数
- 这题一上来就慌了,因为以前没写过这种多线程的代码
- 后来摸出来一个实现,但是有一个每个线程只能跑一次的那种bug,面试官指出错误之后说换下一题
3. 设计一个浏览器的前进和后退功能
- 这题算是做出来了
- 简单来说就是用一个列表维护网页,另外搞一个哈希表存网页对应的列表下标用来跳转
没有反问环节……
- 总体的感觉就是算法题越往后越难,尤其是三面,题型非常灵活
- 三面的表现我估计八成凉凉了,但是第二天上午问内推人,他说状态还是“终试中”,希望能早点出结果吧