24届数据库存储岗面经
个人bg
- 24届老东西,本科偏自动化的AI,非计院
- 211本,保研到985,本科主要是以lab为主,硕士阶段的研究方向主要是存储。
- leetcode 300题,个人很讨厌算法,而且是夏令营结束后再也没刷题了,算法退化成草履虫水平了。
项目
- 15-445
- 6.824
- Ob数据库大赛,主要写了初赛的经历,提了一嘴决赛
- 其他:系统方向的,存储,数据库,分布式等看过不少paper,但是没正儿八经参加过科研,开源项目上redis、leveldb、etcd/raft的源码都看过(我感觉还挺算加分项的,但没被问到,感觉面试官不是很care)
- 开源贡献:ob比赛期间给官方miniob修了两个bug,提了两个pr(约等于没有)
- 还有一些别的,比如说MIT 6.830(Java实现的数据库),自己用go搞的redis,cpp webserver感觉没啥含金量就没写在简历上
投递情况
由于前一阵一直在搞ob比赛,最开始也没打算找实习,单纯是身边几个朋友实习了想跟着凑一波热闹。大概拖到十二月初才开始投简历,刚投第一份简历结果就甲流中招了,在床上又躺了好几天。感觉现在找实习有点晚了,boss上投的很多都未读或者已读不回,boss上就启思码回我了,smartx挂简历,selectdb投了没下文,所以现在结果非常惨淡,只有一家约了面试。
其实到现在我也并不是很坚定的想要实习,最近和导确定了毕设的题目,现在更想推进一波毕设,再加上硕士阶段也会放实习,现在找不找实习其实无所谓,主要是想体验一下面试,检查一下自己学的情况
启思码数据库存储岗
一面 60mins
Raft
- 介绍一下824的项目架构
- 一次读写请求是怎么完成的
- range_scan怎么实现
- 介绍一下raft
- raft选举如何实现
- 选举会出现活锁问题吗
- 说一下raft的集群变更
- 还有一些其他的,都比较基础
445
- 介绍一下lru-k,主要解决什么问题
- b+树并发
场景题
- b+树如何和图数据库结合,怎样设计进行存储
- 针对读请求如何提升并发
- b+树写放大问题,如何解决
- wal有什么用
- copy on write
- 某个节点有大规模的边应该怎么存储
- 后面聊到了Treeline
c++
- 左值右值
- 虚函数
题
lru,当面写
二面 60mins
项目
- 介绍一下 miniob架构
- 说一下update-mvcc是怎么实现的
- 具体update是怎么修改磁盘的上的数据的,同步还是异步?
- 一个table的组织形式?都有哪些文件
- 更新是in-place还是out-of-place的,什么时候进行compaction
- 介绍一下page的概念,是内存当中的概念还是磁盘当中的概念
- 如何偏移读取
- rid和索引之间如何联动,更新时如何更新索引
- text的实现方式
- 如何定位系统瓶颈(火焰图,日志)
- 火焰图尖的好还是平的好
- 项目当中收获最多的是什么
c++
- 左值和右值的区别,左值引用和右值引用之间的区别
- 说一下完美转发
- std::forward和move之间的区别
- std::forword只能用在模版函数吗
- c++多态的实现
- 怎样找到虚函数表的首地址
操作系统
- 线程间通信方式
- 条件变量和什么配合使用
- 互斥锁与自旋锁的区别
- 编译连接的过程,应该是想问elf,数据段相关的
- 进程和线程在上下文切换之间具体开销分别是多少
- 说一说用户态和内核态的区别,为什么要设置两个状态(答了之后扯了一些目前的 kernel-bypass的设计,像是spdk等)
- 说一下用户态和内核态的切换过程
数据库
- 介绍一下隔离级别
- 如何操作锁才能从可重复读提升到序列化
- 有没有了解过图数据库
- 图数据库的应用场景
- 为什么会有join操作,图数据库怎样替代掉join的
- 图遍历在存储引擎层面是怎样实现的
- 有了解过ap数据库吗,介绍一下
- ap底层列储是怎么实现的(数据排布问题和SIMD加速)
题
多线程排序(写了个多线程归并)
反问
- 公司产品的应用场景
- 存储引擎具体使用的什么
- 对于大V等大规模数据,怎么进行优化
- 刚才说了使用了S3存储,架构是存算分离吗
- 一致性上是怎么设置和实现的
- 如果入职是做什么的
小结
一面来说总体并不难,主要以问项目为主,项目问的也都比较的基础,都是些基本实现,没有涉及到优化相关问题,基本认真做过lab和看过raft论文都能答出来,后面问了个关于B+树的场景题,就是B+树怎么应用到图数据库的存储当中的,其实我对B+树了解的不太多,基本上就是只在lab当中写过,我更希望能和面试官聊LSM的。八股就问了两个c++的,也比较简单,算法题也没有难为我,总体来说一面体验还是很好的,面试官很亲切,关于图数据库相关的我不懂的也认真给我讲,也会去启发我进行思考,结果很快也就出来了,大概半小时。
二面面试官感觉态度比较冷淡,听起来不是很热情,差不多项目和八股五五开,项目主要在聊今年Ob比赛的情况,问了一些实现和设计,后面问了很多cpp和os的八股,基本没怎么看,疯狂道歉,数据库方面主要问了事务相关、ap数据库、图数据库存储的知识,这块平时经常接触,答的还不错。题是多线程排序的,写了个归并排序版本的,二面暂时没说结果,面试官说要是能通过的话后面还会有三面,等后续再更新吧
#实习##数据库#