应届生如何半年找到一份数据库内核开发的工作

匆匆忙忙的春招告一段落了,自己最后也找到了数据库内核方向的工作,希望以后能在数据库领域有一番建树。

在这篇文章中我将我的学习路径贴出来,帮助对这方面有兴趣的人提供一点指南,当然也只是仅供参考。

其实如果按照我的路径学习,我个人觉得可以找的工作不光仅限于数据库这块,像分布式存储,分布式xx,基础架构等都是可以的(不含操作系统)。

个人背景

在开始 guideline 之前,我罗列下自身的硬件,这样大家会更加有信心。因为我个人觉得,想找这方面工作人的硬件条件一定是比我好的。

原有基础

在学习数据库知识之前,我是一个连 ACID 都说不清的懵懂少年。

智力

说实话我不是那种很聪明的人,有些面试官给我讲一个概率题,我会半天想不明白。

LeetCode 也不是那种刷一遍就能记住的人,我个人 LeetCode 差不多是刷了400 多道题才勉强够用(有些题重复刷了不知道多少遍)。

学历

学历这块大家不用担心,基本可以尽情吊打我。

本科:三本,软件工程。

研究生:专业型硕士,普通一本大学的研究生,计算机技术。

大环境

我没有参加过秋招,而是直接参加了春招。总所周知,春招坑位很少,难度可以想象,外加互联网大裁员的背景下,更是难上加难。

半年学习路线

我学习某个项目,通常都是梭哈的,也就是把所有的时间都放在了这上面。这里我按照先后顺序,贴出我完成的项目。

我这里其实推荐做的项目就三个,6.824 -> TinyKV -> CMU 15-445,另外两个项目说实话收益率不是很大。

MIT 6.824(推荐)

MIT 6.824,我只完成了项目,论文并没有看过。其中 Project4 并不是 Bug Free 通过的,因为要超过一个月的工期了,故没有继续较真了。

推荐资料:https://github.com/OneSizeFitsQuorum/MIT6.824-2021

MIT 6.s081(一般)

MIT 6.s081,一门操作系统课。因为我不想投入时间去学汇编,整个项目是半抄半做的。我个人觉得收益率不是很高,说实话,可能还不如背八股省时间。

推荐 现代操作系统:原理与实现(银杏书) 这本书,讲的不错,配合 6.s081 效果很好,当然你可以学这本书配套的实验,不过我没了解过。

CS144(一般)

我计算机网络很差,通常背了就忘,索性就写个 TCP 加深下记忆。

说实话当我写完了 CS144,有些计算机八股还是不会,仍要配套适当的八股背诵一下。

当然我觉得网络扎实的小伙伴,直接忽略即可。

推荐资料:我的博客

CMU 15-445(力荐)

说实话这门课非常不错,强烈建议好好学。

实验部分我差不多是花了一个月完成的,代码全部是 gradescope 满分通过的。

剩下的一个月主要就是看书,书本是我着重就看了 Query Planning,Query Execution 和 Concurrency Control 这三章。着重注意 Concurrency Control 这块,面试高频点。

配套的书是:《Database System Concepts》 第七版,考虑到数据库有很多专业名词,防止中文翻译误导,我买的是英文版。

推荐资料:我的博客

TinyKV(力荐)

PingCAP 的一个学习项目,难度非常大,完成之后写在简历上很加分哦,基本够和面试官扯一壶了。如果没做过 6.824,我觉得直接上手 TinyKV 难度会非常之大。

推荐资料:https://github.com/Smith-Cruise/TinyKV-White-Paper

其他

剩下的时间就是补一些边边角角的知识点,例如 Raft 相关优化技术,LSM 树等。

也许有些人会去阅读经典论文比如 Paxos,GFS,MapReduce,Spanner 或一些新的数据库顶会论文等等,我个人觉得性价比不是很高,因为通常你作为一个校招生,面试官不会对你有这么高的要求,主要还是更看中你的基本功。当然如果你时间充裕的话可以看看,毕竟这属于锦上添花的事情。

简历

我的简历非常简单,直接突出重点。很多 HR 和我说按照我的学历应该是直接挂的,但是看完了我的简历,还是给了一次面试机会。我的简历主要包含如下 5 个栏目。

注意,我没有在简历里面写啥技术栈,啥编程语言,上过啥课等这方面的内容,因为我觉得这些东西并不是重点,除了浪费版面就没啥用。

个人信息

一定要有邮箱微信号,HR 根据微信号来联系你,邮箱则用于发 Offer Letter。个人头像不放,当然帅哥美女可以放。

教育经历

这个还是要写的,学历注意从高往低写!!不要从低往高,否则有些 HR 一马虎就 PASS 了。

项目经历

我这里就写了 6.824,CMU15-445,TinyKV 和本科的一个 JavaWeb 项目。这边大家自己体会吧,反正基本你写了啥面试官就盯着啥问。

论文发表

因为我研究生有两篇论文,而且做的都是系统架构这块的,就写出来了,基本这块面试官还是很有共鸣的。

当然如果你是机器学习一堆数学公式这种论文,我觉得写出来的意义不大,因为面试官大概率也不懂,不会去问。

我两篇论文都是水会,其中一篇是水会的最佳论文。

个人荣誉

存粹撑简历的,就随便挑了几个荣誉写了写。

面试高频知识点

这里我只罗列一些被经常问到的知识点。

  • 算法,通常都是远程屏幕分享,你用 IDE 现场写,一定要写出来,写不出来就人才库了。大多数是链表,树(很少),基于数组深度遍历或 DP 的题,难度在 LeetCode 简单到 LeetCode 中等之间。时间复杂度和空间复杂度一定要会分析,注意递归的空间复杂度。我 LeetCode 刷了 400 多题,差不多凑合够用。这里我列几个我遇到的题:
  • 基于链表的插入排序。
  • 买卖股票最入门版。
  • 实现 LRU。
  • 实现一个 Hash 表。
  • 最大频率栈。
  • 归并排序。
  • 快速排序。
  • 非递归的中序排序。
  • 用两个栈模拟队列。
  • 树的层序 S 形遍历。
  • 合并 K 个有序链表。
  • 忘了。。。。
  • Raft 的优化,通常是 PreVote,ReadIndex,LeashRead 这三个。问题来自 Raft。
  • Raft 的选举机制说一下。问了 n 次。问题来自 Raft。
  • Raft 哪些 state 需要持久化,为什么。问题来自 Raft。
  • Raft applyIndex 和 commitIndex 的关系以及区别,是否需要持久化,持久化有什么好处。问题来自 Raft。
  • Raft 成员变更介绍一下,就是单步成员变更和联合成员变更这两个说一下。问题来自 TinyKV。
  • Percolator 边边角角的问题,比如 Percolator 解决了什么问题。相比于 2PC,3PC 有什么好处等等。这块问的频率很高,估计比较有搞头吧。问题来自 TinyKV。
  • Percolator 说完会问 2PC,3PC,它们有啥优缺点。问题来自 TinyKV。
  • 说说 ACID,其中 C 和 CAP 的 C 有啥区别。ACID 分别通过什么技术来实现。
  • 说说 CAP。
  • 事务四种隔离级别,从低到高说一下。使用怎么样的并发控制手段,实现这四种隔离级别。问题来自 CMU 15-445。
  • 数据库 Buffer Pool 的作用,为什么要用 Buffer Pool,和操作系统的虚拟内存有什么区别。问题来自 CMU 15-445。
  • CPU Cache Line,缓存可见性,violate 这块内容。
  • CPU 各级缓存访问时间概念,比如访问一级缓存耗时多久,二级缓存耗时多久等等。有一个数量级概念就行了,不用准确答出。
  • Join 两种实现方法 Hash Join,Sort Merge Join 的优缺点,什么时候应该用哪个。问题来自 CMU 15-445。
  • B 树,B+树,红黑树,跳表的优缺点,什么场景用什么。
  • 布隆过滤器作用。
  • B+树和 LSM 树的区别,什么场景用什么。问题来自 TinyKV。
  • 设计题,这个很喜欢问,而且频率非常高。我随便举几个例子,如何实现一个 WAL 日志来保证 ACID 中的 A 和 D?如何实现分布式 Hash Join?如果一个 Raft Group 中存在多个 Learner,如何防止多个 Learner 同时同步数据给 Leader 造成压力?如何在 TP 数据库中实现 AP 的功能?反正很宽泛,全靠结合自己目前已知的各种技术吹。
  • 操作系统若干八股,比如虚拟内存,协程是啥等。
  • 计算机网络少许八股,基本就没被问到过。
  • 编程语言八股,如 Java JVM,C++ virtual,我直接都说不会,说自己没有深究过编程语言,然后面试官通常就不会追问了。

其实很多面试官是不屑于上来直接问八股的,通常是你在讲到什么东西的时候,随便和你扯一句八股。反而是那种上来问死锁产生条件的面试官,水的不行,这样的公司不去也罢。

编程语言相关问题就因人而异了,反正我都说自己编程语言只局限于调包层面,面试官一般就不会深入问了。

计算机网络方面真的问的很少,好像也就字节一面问过,别的公司就没了。

不要认为你写数据库内核一定要会 SQL,反正我没花时间学 SQL,一些公司笔试的 SQL 我都写不出来。

本人公司面试记录

一般公司都是三轮技术面外加一轮 HR 面。三轮技术面中,一二面纯技术,三面更多是主管和你交流人生加适当技术,比较宽泛。当然也不乏有些公司有四面,五面。反正先拿不去的公司练练手,固化一些套路,再去尝试自己心仪的公司。

很可惜,在大裁员背景下,很多大厂春招基本都不开了,有些公司面进了也锁 HC,所以我觉得还是有点可惜。我用我的血泪教训告诉大家,非必要不要到春招找工作,还是秋招靠谱。

失败公司列表:

  • Databend,一面挂。
  • 矩阵起源,一面过,后面要做一个 raft kv 小作业,直接放弃,挺花时间。
  • 云和恩墨,一面挂。
  • 星辰天合,要做一个爬虫,直接放弃。
  • 字节跳动,三面挂。
  • Zilliz,简历挂。
  • 大应科技,一面挂。
  • 易鲸捷,一面挂。
  • 杭州四大坑,一面挂。
  • 理想汽车,一面挂。
  • Singularity Data,简历挂。

成功公司列表:

  • 兴业数金,数据库写 SQL 岗:),两轮。
  • PingCAP,三轮+HR。
  • StarRocks,五轮。
  • DolphinDB,四轮+HR。
  • 星环科技,两轮。
  • 网易研究院,两轮+HR。
  • 声网,三轮+HR。

我自己的面试基本上要么一面挂或简历挂,要么就通关。实际上到了面试后期,基本上公司都是面一个拿一个,也不知道是运气好还是已经掌握了套路。

Lab 简历模板

因为有人问我怎么把这些 Lab 经历写成简历,我这里贴出我的简历模板,注意仅供参考。

TinyKV 基于 Go 开发的支持横向扩展,高可用,分布式事务的 KV 数据库:
开发了 Raft 模块,支持 Leader 选举,Leader 转移,日志复制,单步成员变更,Snapshot 等基础功能。
采用 Multi-Raft 架构,数据基于 Region 进行分区,每一个 Region 为一个 Raft Group。Region 支持数据规模较大时自动分裂。
实现了 MVCC 多版本控制,并基于 Percolator 模型设计了分布式事务系统。

CMU15-445 基于 C++ 开发的支持简单 SQL 操作的单机数据库:
底层基于 LRU 设计了 BufferPool,所有 page 操作在 BufferPool 上进行。同时在 Buffer Pool 实现了可扩展哈希表。
语句执行采用火山模型,支持 SELECT,DELETE,UPDATE,JOIN,AGGREGATION,LIMIT,DISTINCT 操作。Join 有 Nested Loop Join 和 Hash Join 两种实现。
并发控制采用 2PL 设计,实现 RU, RC, RR 3种隔离级别。
实现全局的 Lock Manager 管理 R/W 锁,死锁处理是基于死锁预防中的 wound-wait 算法。

MIT 6.824 基于 Go 开发的分布式 KV 数据库:
采用 Multi-Raft 架构,支持数据分片处理,分片迁移。
Raft 支持 Leader 选举,日志复制,Snapshot 等基本功能。

小结

后序持续补充吧,可能有些地方忘了。

感谢女朋友在无数个夜晚我通宵 DEBUG 时没有发出太大的呼噜声。

原创文章,作者:Smith,如若转载,请注明出处:https://www.inlighting.org/archives/how-to-find-a-database-job

打赏 微信扫一扫 微信扫一扫
SmithSmith
上一篇 2020年10月13日 下午1:03
下一篇 2022年4月28日 下午1:21

相关推荐

  • 以后再也不折腾博客了,立帖为证!

    文章在 2024 年 11 月 3 日更新了下折腾日记。 这两天折腾了一下,又把博客从 Hexo 换回到了 WordPress,真的是,何必呢? 我自己接触博客应该是在 2013 …

    2022年4月28日
    3.6K38
  • 博客最近老挂

    今天打开博客,又挂了,距离上一次挂差不多有一礼拜,我开始有点警觉了! 在过去的 n 年当中,我的博客从来没有挂过,我也从来不会考虑这个问题。直到一礼拜前,一个用户发了一封邮件告诉我…

    2023年3月13日
    9821
  • 618 之我的刀把金鱼缸主机

    自己一直惺惺念念想拥有一台优雅的、强劲的台式机,终于在今年的 618,组上了一台艺术品,废话不多说,先上图: 机箱特意选了一个乔思伯 TK-1 金鱼缸机箱,侧弯的玻璃能够完美的展现…

    2023年6月24日
    1.2K4

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

评论列表(105条)

  • Starry
    Starry 2023年8月3日 下午3:07

    半年学这么多,太牛了

  • micr0
    micr0 2023年7月5日 下午4:08

    老哥可以发一份 tinyKV 源码吗? 最近想学习一下这个项目.
    非常感谢老哥!

  • 江莲
    江莲 2023年6月18日 下午3:36

    厉害厉害,学习路线很有帮助

  • Re
    Re 2023年6月16日 上午10:19

    想要一份源码学习一下

    • Re
      Re 2023年6月16日 上午10:20

      @Retinykv

    • Smith
      Smith 2023年6月16日 上午11:35

      @Re以下楼层均已发

    • Re
      Re 2023年6月16日 下午5:41

      @Smith十分感谢!

  • lalala
    lalala 2023年6月16日 上午12:59

    大佬可以求一份MIT 6.824的源码嘛 写不下去了哈哈哈 邮箱:1542827496@qq.com

  • www
    www 2023年4月16日 下午8:05

    求cmu14-445代码,感恩!

  • DBCS
    DBCS 2023年4月5日 上午10:17

    佬,求一份15445的源码,十分感谢
    weihnachtsbogen@gmail.com

  • 一只硬核少年
    一只硬核少年 2023年3月21日 下午4:04

    大佬,我现在是研二下,对LSM Tree有一定的了解,精读过SSTable的源码,精读过ElasticBF的论文,进行了复现,但是复现得一般,而且基础差,将来想找杭州的工作,还有半年时间,有啥建议吗?该搞啥项目之类的。也是想找DB的岗,DolphinDB梦之公司。

    • Smith
      Smith 2023年3月22日 上午11:24

      @一只硬核少年就几个项目我觉得够了,可以稍微弄得更好一点。
      剩下的时间把计算机基础搞好吧,你项目搞得再多,基础问题一旦被问倒,基本就GG了。其实他们更注重基本功,项目只是锦上添花。
      此外,DolphinDB 不一定是你的梦之公司,因为一开始我也是这么想的,你面的多了,会发现有更好的。

    • 一只硬核少年
      一只硬核少年 2023年3月22日 上午11:29

      @Smith感谢您的建议,感觉需要抽时间把cmu和南大的os课认真刷一下,db和os应该是最重要,然后把题刷一下应该就可以到合格线了。

    • bigboss
      bigboss 2023年3月31日 下午9:19

      @一只硬核少年同研二下,老哥你是准备直接冲秋招吗?有没有找实习的打算?

    • 一只硬核少年
      一只硬核少年 2023年3月31日 下午9:27

      @bigboss

    • kkqq
      kkqq 2023年3月31日 下午10:45

      @Smith计算机基础是算法,os、计算机网络、数据库之类的嘛

    • Smith
      Smith 2023年3月31日 下午11:07

      @kkqq是的,主要集中在算法,os,计算机网络吧。

    • kkqq
      kkqq 2023年4月1日 下午10:22

      @Smith好的

    • xinglan
      xinglan 2023年11月15日 上午1:58

      @Smith请问你现在在什么公司哈,能透露吗

    • Smith
      Smith 2023年11月15日 上午10:44

      @xinglan你觉得你看我的博客文章,猜也猜出来了。

  • we groot
    we groot 2023年3月9日 下午4:57

    大佬想求一份tinykv的源码用于学习

  • black
    black 2023年2月15日 下午4:29

    老哥,请教个问题,隔离性这里,读取已提交为什么可以写时加写锁,写完就解锁了,这样怎么防止脏读呢。不应该时写时加写锁,提交时再解锁吗

    • black
      black 2023年2月15日 下午4:32

      @black脏写的

  • 若你喜欢怪人
    若你喜欢怪人 2023年2月13日 下午6:48

    求一份cmu15445代码!!!

  • 鲨鱼辣椒
    鲨鱼辣椒 2023年1月20日 下午6:21

    大佬可以求一份完整的tinyKV源码吗,我也在准备春招,非常感谢了😭jian1_x@163.com

  • 白桃乌龙
    白桃乌龙 2022年12月18日 上午9:56

    smith,你做的cmu15-445是哪一年版本的呀.官网现在有19~22的了.

  • wuwwu
    wuwwu 2022年12月12日 下午10:16

    求一份cmu15445代码!!!

  • 谭海角
    谭海角 2022年12月2日 上午10:58

    老哥,想要一份CMU15445的代码学习一下

  • black
    black 2022年10月19日 下午7:49

    楼主能发一份624和445的源码吗,不胜感激,有几个测试样例死活过不去,崩溃了。

  • p
    p 2022年10月17日 上午11:05

    老哥求mit6824源码学习一下 做得很艰难

  • ycb
    ycb 2022年10月9日 上午9:56

    学长很强了,向您学习
    我是理工cs本,今年春招投暑期实习去的网易互娱,现在秋招还没找到工作,大概率又是实习
    身边一起的cs同学现在保研985,有时候觉得自己还不如当时把绩点冲到保研线
    不过我发现理工cs相关研就业最后都挺厉害的,今年也遇到了拿字节的理工研。
    如果读研的话考本校还有必要吗?

    • Smith
      Smith 2022年10月9日 上午10:15

      @ycb理工本身不咋地,看自己吧。如果自己自学能力很强,再给自己3年的自学时间做缓冲也不是不行。不过一定要找一个不是坑逼的导师。

  • w1nd
    w1nd 2022年10月8日 下午5:39

    如果一个 Raft Group 中存在多个 Learner,如何防止多个 Learner 同时同步数据给 Leader 造成压力
    这个问题没看懂,learner的作用不是防止添加的节点追赶日志而导致系统不可用,可以暂时同步日志而不参与选票吗?为什么learner会同步数据给leader造成压力

    • Smith
      Smith 2022年10月8日 下午5:41

      @w1ndlearner 的作用难道不是不参与选举,但是要进行追赶日志吗?

    • w1nd
      w1nd 2022年10月8日 下午6:24

      @Smith对,追赶日志不是同步日志吧,这里的压力是指leader要向多个learner同步日志所造成的压力吗(因为AE RPC要带上log?)

    • Smith
      Smith 2022年10月8日 下午6:28

      @w1nd追赶日志不是要问 leader 拿一堆 log 或 snapshot 吗,那不是会给 leader 造成很大的网络压力。反正我的回答是用 chain replication 的方式处理,类似于 HDFS 上传文件时生成三副本的处理方式。

    • w1nd
      w1nd 2022年10月8日 下午6:30

      @Smith哦哦了解,谢谢博主

  • wangzd
    wangzd 2022年10月2日 下午6:56

    读的是985么?

  • liuyang29
    liuyang29 2022年8月23日 下午9:39

    老哥可以分享下代码吗

  • 小杨
    小杨 2022年7月31日 上午11:22

    老哥春招的时候有实习经历吗?

  • doug6662
    doug6662 2022年7月14日 下午5:12

    大佬能不能分享一下数据库相关的公司呢?快秋招了想了解一下

  • 油屋
    油屋 2022年7月14日 下午3:04

    博主,可否加下好友?最近秋招,想了解下数据库企业的信息。

  • soar
    soar 2022年7月4日 上午10:59

    大佬,请问你发表的论文再找工作的时候有帮助吗?

    • Smith
      Smith 2022年7月4日 下午12:28

      @soar有吧,基本面试官都会问。当然这和我发的是系统架构的论文有关系,毕竟这玩意能解释的清,不像机器学习这种做工程的基本都不懂。

    • soar
      soar 2022年7月4日 下午3:09

      @Smith谢谢大佬,我目前准研二,现在和大佬的学习路线基本一致,目前正在做cmu15445。不知道大佬怎么平衡Lab和学校的时间的,老师让我们研二去上海的研究所干项目,不知道到时候有没有时间完成这些lab.

    • Smith
      Smith 2022年7月4日 下午3:22

      @soar那就是看你自己是不是时间管理大师了,自己平衡时间呗。

  • fitzh
    fitzh 2022年7月2日 下午5:01

    没有参加秋招,博主是今年毕业吗?好猛呀

  • 小杨
    小杨 2022年6月28日 下午5:12

    老哥,你好,看到你有两篇系统架构方面的论文,请问你有兴趣分享发论文的经验吗?谢谢

    • Smith
      Smith 2022年6月28日 下午10:33

      @小杨哎呀,很菜的其实,不要想的有多牛。
      On a Small File Merger for Fast Access and Modifiability of Small Files in HDFS
      你可以自己看看,我感觉没啥好分享的。

  • SAM926
    SAM926 2022年6月14日 上午9:54

    老哥可否发一份源码学习一下|´・ω・)ノ

  • 张乐
    张乐 2022年5月12日 下午2:58

    点个赞,👍

  • rustzzh
    rustzzh 2022年4月30日 下午6:05

    博主最后去哪了呀