15445 面经(?
这里应该会记录单机数据库内核开发的相关面经。
你是怎么实现 LRU 的,实现过程中大概用了什么数据结构?
什么时候对内存中的帧 frame bitmap - 1 操作,也就是 unpin?
实现 B+ 树索引用到了什么数据结构,你能简单说说吗?
如何从 B+ 树中删除一个节点,并保证树的平衡。
什么是 Executor 火山模型,结合 Select 说说?
你能说说怎么实现 Nested Loop Join,Hash Join 的?
看你提到了死锁避免算法,那你说说什么是死锁?
BufferPool 中脏数据如何写入(flush)磁盘?
什么场景下使用 B+ 树更适合?
B+ 树的优缺点是什么?
介绍一下 Executor 火山模型?有什么优缺点?如何改进?(优化算子树、改用 Pipeline 模型)
介绍一下 Pipeline 模型?为什么相比火山模型更快?(可以跑满 CPU 流水线)
你知道 Pipeline 有哪些具体的应用吗?(Doris 和 Tiflash)
Tiflash 是函数下推,为什么要函数下推?(列式向量计算、让计算和存储更接近)
介绍一下 Hash Join 是怎么实现的?
- 追问:有没有考虑过 Hash 对 id/key 进行散列后得到的值很分散,那么得到的 Hash Table 很大,内存占用会很大?你的测试数据集规模有多大,有做过压测吗?查看实际的内存占用。
- 回答:换用其它 Hash 函数,被面试官说并不是 Hash 函数的问题。
你知道死锁出现的 4 个前提条件吗?
- 回答:互斥条件、请求和保持条件、不可剥夺条件、循环和等待条件
你是如何使用 Wound-Wait 算法预防死锁的?
- 回答的核心是:不要让线程一直等待,如果一直等待则需要根据 Wound-Wait 算法 Kill 掉相关线程。
- 老读不杀新读,老读杀新写,老写通杀。
为什么要用 B+ 树而不用其它的树如红黑树?B+ 树有什么优势?
如何实现三种隔离级别?(RU、RC、RR)
什么是幻读?
加锁避免幻读的时候是单行加锁还是多行加锁?
什么是死锁?你是如何实现全局的 Lock Manager 管理 R/W 锁,如何使用 Wound-Wait 算法避免死锁的?
Wound-Wait 算法避免死锁时如何避免某些线程饥饿状态,即某些线程经常性的被 Kill?
MySQL 是因为什么才能支持索引的最左前缀
- B+ 树
MySQL 建表要考虑什么情况,以及什么时候会出现索引失效
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 羽殇之舞的个人博客!