当前位置: 首页 > 面试经验 >

24届数据库存储岗面经

优质
小牛编辑
123浏览
2023-12-15

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数据库、图数据库存储的知识,这块平时经常接触,答的还不错。题是多线程排序的,写了个归并排序版本的,二面暂时没说结果,面试官说要是能通过的话后面还会有三面,等后续再更新吧

#实习##数据库#
 类似资料: