用九个月的时间入行 OLAP 数据库开发——研二的学生时光总结

Published
June 6, 2024
Updated
Last updated June 6, 2024
Description
记录 2022 年末到 2023年底(研二到研三上半学期)的学习、生活与秋招
Progress
Still Working On
Author
Feng Kaiyu
我承认,这个标题有点夸张——我一向不是自吹自擂、好高骛远的人——不过由于在这一年的“转型”时间一直受到了《应届生如何半年找到一份数据库内核开发的工作》这篇文章的指导和鼓舞,因此也效仿而为之。而这个标题也能概括我这将近一年半时光的主要工作。

研二上——拜占庭共识算法

让我们将时间拨回到 2022 年下半年。那时的我才处于研二上半学期,刚刚结束了课内学业任务,便很快又投身于小论文的科研任务中去了。从 2022 年九月份回到学校一直到十二月,我的生活就是健身房、办公室(网协的办公室,用来写代码)、食堂和宿舍。那时候研究方向从联邦学习正式转为区块链共识算法,所以学习和思考的问题都以拜占庭共识算法的设计、工程化与优化为主。
2021 年前后,是区块链发展井喷的一年(我想主要因素是因为美联储量化宽松)。在传统方向上——如比特币、以太坊—— POW 机制依然在有序演进;以 PBFT 衍生的 BFT 类共识协议也开始在主流区块链系统中有了工程实践;甚至于基于图的 DAG 类共识也逐渐成为了学术研究的新方向。为了有机会写 Rust 也恰好是实验室需要,我们使用了 Substrate 作为基础框架进行改造,产出为
substrate-MCA
fky2015Updated May 2, 2023
。那段时间也针对 BFT 设计了一些优化改进的工作,放在了
Jasmine
fky2015Updated Feb 5, 2024
中。
notion image
接着很快就到了疫情最严峻的时刻,那时学校里面已经有病例,两三天就要做一次核酸。我只能一直呆在宿舍里面,一边完成实验。这样的光景持续了一周多以后,学校就匆匆把我们赶回了家。然后接下来就是在家中度过的一个冬天。
记得当时在实验阶段,为了自动化地在多台服务器上同时完成数千次性能测试实验,我(很开心地)编写了一整套执行测试、采集、调参、分析的脚本。到后来我无人值守地用一周时间就跑完了所有实验。当时也同时沉迷使用 LaTeX 的 TiKZ 画出好看的图像(比如下图)。
notion image
然后论文写着写着就如约得了新冠。当时还记录了自己新冠全过程的统计数据。
notion image
一周后病就好了,然后论文工作也开始收尾。这时候就开始沉迷于小岛秀夫的《死亡搁浅》之中了。寒假的时光便也在新冠的余波中飞速过去。

数据库内核开发从入门到头大——研二下寻找暑期实习

二月份——抉择与转型

记得那是 2023 年的 2月份,当时的我也算是有从跟同学的谈论中获得了“该(准备)找实习了”的概念,也就开始每天刷两道 LeetCode 的算法题。但当时的我们还远远没有真正感受到这场互联网寒冬对应届生带来的影响。所以虽然口头说着焦虑,但是实际上并没有往心里去。——彼时我还对 Web3 的工作抱有最后一丝幻想。
真正的转折开始算是 SmartX 的面试。返校以后,不管是从实验室的气氛、学长学姐的亲身经历还是网上对 23 届秋招春招的讨论都让我意识到:目前的互联网环境远不如本科毕业(21年)的时候;现在的公司手里有大把的应届生可以挑选。当时的我首先面临一个抉择:后端还是基础架构。从工作经历来讲,我有大厂实习的经历;但从研究生的研究方向和这几年的个人兴趣来讲,我更偏向于系统。此外,当时看到 SmartX 对“分布式文件系统开发”的描述后,我是一脸懵逼的:JD (Job Description)里涉及到存储、操作系统的深度远远超过了我已掌握的知识。所以在硬着头皮准备了一两天以后,我去参加了它们公司的面试。其实面试体验还是很好的,面试官对自己的领域都很有掌控力,也能顺着我的回答抽丝剥茧寻找其中的漏洞。当然面经并不是本文主要要讨论的内容,故不再赘述。面了之后自然是进入被养鱼状态。所以那个时候我就意识到:我目前所掌握的技能和市面上主流的需求并不匹配,若是在以往乐观的环境中,公司还可以稍作妥协,但现在只能由我来改变以匹配市场需求。
好在从假期开始,偶然和一位在数据库行业浸淫许久的学姐取得了联系,并从她的口中对数据库内核开发有了初步的印象。“我能不能从事数据库内核开发方向?”这样一个念头,就在我心底萌芽了。认真规划了一下时间,我便开始了 CMU 15-445 的大作业之旅。这门课程对我至关重要:1. 让我对数据库内核开发有了全面的初步认识。2. 放简历中是相关度极高的一项。3. 后来我在课程作业的测试中取得了不错的成绩,也成为了让我感到骄傲的事情。
在完成大作业的过程中时候,前字节 Mentor 找到我,帮我内推了一个字节 OLTP 方向的日常实习生。这个岗位其实很好,只可惜我没有把握住机会(当时 C++ 还不熟练,简历上也没有相关的经历;刚刚经历一场感冒)。现在想想可能当时就差临门一脚。于是目前的两个面试都止步于二面。到这时,时间是三月初。

三月份——潜心修行

后来我就沉下心来先完成 CMU 15-445 的大作业——从早上 10 点到晚上 11 点,除了生活必需和健身,其余时间都全部投入在新知识的学习中。而彼时同龄人已经纷纷开始投递简历和笔试,当完成这个课程以后,实际上已经到了 3 月下旬。而各个大厂的暑期实习开始时间实际上是在三月初。所以相当于我在投递时间上并不占优势。而且因为两次面试失败,我的策略开始变得保守。所以第一轮投递只投递了初创公司 K* (学姐帮忙 refer)和阿里的 F*(也是学姐帮忙 refer)。
为什么当时不把其他的大厂也投了?这应该算是我的一个策略失误。我是想着这样面试压力不会太大,而且其他大厂有些岗位描述不是很清晰,我挺犹豫要不要投递的。另一点,我低估了面试的周期:暑期实习的面试一般周期都在一个月左右。我一开始还以为能像日常实习一样一周就结束。所以没敢多投。
然后这期间也经历了一周的甲流和一周多的过敏性鼻炎,拖慢了整体进度。
后来的一周又陆陆续续投递了一些中厂(数据库方向已经比较成熟的公司),但是基本都没有回信。

四月份——尘埃落定

然后到 4 月 4 号,阿里这边完成了二面(应该是一共有四面),K* 完成了全部三面(拿到了 offer)。剩下的公司要么就是没回我消息,要么就是因为我刚刚投递还在走初期的流程。
另外有几个决策问题:
  • 我在阿里和 K* 面试都是春季实习而不是暑期。是因为我想快速积累数据库领域的经验,而不是靠这个 offer 就直接转正(当然,如果是阿里的话,我也不挑)。所以其余的面试我感觉再等下去没有太大意义,因为至少还要三四周的时间。另外,秋招的提前批和暑期实习是重叠的,都在 7、8 月份。根据我的情况,我想等到秋招的时候参加提前批,因为这时候已经有一段领域相关的实习,面试机会会更大一些。这是我的策略。所以基于此,现在手头只要有 Offer 我就应该去。
  • 另一个问题是选择大厂还是小厂。现在阿里才算是进行了一半,而 K* 那边已经能去了。另一方面,如果 K* 也非常符合我的期望的话,我可能也会考虑留在那边。但是大家显然都认为毕业生去大厂是最好的选择。所以这点比较纠结。
  • 最后一点就是当时的我还不知道毕业后要去哪里工作。因为女朋友考研调剂的关系,我有可能要去外地(暑期的时候就尘埃落定了)。所以“秋招重新找工作”的概率增加了。
  • 另一个原因,我感觉这一个月在“焦虑+找工作、准备面试、面试”的状态挺难受的,要是再来一个月,我感觉压力比较大。目前还是挺想先开始做事情的。
K* 这边又经历了四面,二三四面相当于和三位合伙人分别面试了一遍,感觉还是挺好的。至少目前没啥可挑的。
四月七号,阿里约了下周一中午的 HR 面(是不是少了什么)。然后在当天晚上,学姐找到我说,字节 B* 团队临时空出来了一个 HC,问我要不要去试试。当时我犹豫了很久,最后还是咬咬牙投递了。然后,学姐说帮我内推的学长也是北理的(大我一届),并且认识我。不得不感叹世界真是小啊。于是怀着忐忑的心情,我又重新踏上了面试的征程。
转眼到了十号,周一。阿里那边因为 Base 的原因,自然是双方相互拒绝了。然后字节面得还好。K* 那边又提出下周三聊一聊在做的事情。字节这边本来以为很快就能出结果,然而因为面试官比较忙,直到当周周五才约了二面(下周二);而到了下周一(17号),又把我鸽到了周四。周四的面试也是比较顺利的。但是那个时候邻近我决定 K* 的 Offer 已经时日无多。所以我非常忐忑,如果字节的面试持续时间过长,那么我必须快速舍弃其中一个,而可能会留下额外的遗憾。
幸运的是 21 号周五中午,字节的 HR 给我打电话,通知我不再有三面、HR 面——我得到 Offer 了!下午火速确认 Offer。又在下周周一,婉拒了 K* 的邀请。四月二十六号正式入职。
回过头来看这几个月的经历,主要有几个 takeaway:
  • 决策和执行要分离——在决策周期要好好规划;但是一旦进入执行周期,就不要三心二意、犹犹豫豫,如果此时再后悔可能一事无成。
  • 广撒网,多敛鱼,择优而从之——适当的广告并不是吹嘘,在时间比较充裕的情况下应该尽量多展现自己,从而能获得更多机会。同时,有个熟悉的圈子确实也是很重要的。(再次感谢学姐 😍)
  • 对于我这样过于谨慎的人来说,应该学会更加自信一些。

研三上——字节实习

后续的日子便是入职字节以后的为期一年的实习。WIP