字节 - 基础结构 - KV 二面(4.7)
1. 面试官自我介绍
2. 自我介绍
3. 介绍一下两个开源项目的背景,为了处理什么场景,为什么需要这个项目
4. ok,kv这个项目已经有类似pika这样的产品了,为什么你们还要做一个这样的新产品
5. 行,你是怎么参与到这个项目中的
6. 你们这个项目目前的使用场景是什么,有什么确定性的需求吗
7. 这里的强一致性的实现是什么实现方案
8. 对raft了解吗?raft的选主是什么流程?如果我现在想制定一个新的节点作为Leader有什么手段或者办法吗?
9. 什么情况下节点会投票给你,有哪些限制条件,补充说明一下
10. cpp20的新特性都有哪些,你觉得最有用的是哪些?
11. 介绍一下seata go这个项目的背景,为了解决什么问题
12. 举个具体场景的例子说明一下
13. 你个人项目中实现了Bitcask对吧,那如果我有一个数据已经删除了,但是log中实际是没有释放的对吧,最终是怎么做到磁盘空间释放的(merge)
14. 墓碑log和原始数据的log分别怎么释放的
15. merge时机(两种方式,计算有效数据比例到达设定值的时候,以及后台任务定时merge)
16. 这个比例你是怎么计算的,怎么知道多少数据有效多少数据无效(有效数据对内存索引设置个计数器,无效数据同样在追加log的时候自增计数器,为了适应hint文件需要修改一下重建索引的逻辑)
17. 你这里用lru做了缓存淘汰对吧,还了解其他淘汰策略吗
18. c++中的虚函数有什么用途,举个场景(先说了虚函数表然后举例子解释)
19. 做题(ez 二分)
20. 反问
- 需要继续学习改进的地方
- 后面还有几轮技术面