23届小硕秋招分享-数据库/存储方向
秋招终于尘埃落定,整个过程经历了很久,在这里记录分享一下下自己的秋招过程。
在23届秋招过程中,幸运地收获了十几家公司的offer,大厂以及创业公司都涉猎了部分
- 阿里云,数据库内核
- 字节,数据库内核
- 百度,数据库内核
- 快手,基础架构
- 美团,大数据基础研发
- 京东,京东云存储
- 小红书,数据库内核
- smartx,分布式存储
- akuna,C++开发
- metabit,data infra
- Starrocks,数据库内核
- SelectDB,数据库内核
- DolphinDB,数据库内核
- HashData,数据库内核
- MatrixOrigin,数据库内核
- tplink,研发
- ..…
下面分享一下自己在整个求职过程中的记录,自己的求职准备以及一些踩坑分享,本人技术水平和文章措辞水平都有限,整理出来作为对自己求职的一个阶段性总结。
基本情况
先简单介绍一下自己的情况,北航计算机小硕,无paper无竞赛,lc 800 题左右(困难题还是很困难TAT),写过一些公开课,有过一些数据库实习,主要写C++
和Rust
。
上大学开始才拥有一台笔记本,本科阶段基本摸鱼度过,折腾过一些脚本语言和基本的Web开发,研究生阶段开始自学入门数据库/存储相关的领域,觉得很有意思。
几次实习经历中浅浅涉猎了 kv,数仓(AP)以及mysql的开发和学习,也给了我在数据库领域更大的视角和更丰富的工程实践。
这里也推荐大家如果有条件要尽可能多的去实习,去工业界能够更快地了解业界的前沿方向和整体行业市场情况,非常有利于的就业(如果有学术理想,那是另外一个道路了)。
记录
自己的秋招开始的很早,因为从暑期实习就大概看出来今年的就业市场不太景气(但是也没预料到后来没想到有这么不景气… 。整个秋招面试大概有80+场左右(面到后面人已经麻了,刚开始还比较紧张,后面面多了之后…自己就完全放松了…有时候面试之前还在打游戏-_-||)罪过罪过……没有不尊重公司的意思…
时间线大概如下:
五月底开始刷题找手感
六月中下旬开始写简历和基础复习,关注各大公司招聘和各种招聘帖
七月初开始投递简历,面试主要集中在七八九月
这里就记录下部分公司的面试体验,好多公司后来都有点忘记了
阿里云数据库:阿里云暑期实习,是电话面试,所以只面了暑期,暑期一共两轮面试都比较基础,一面基本就是基础概念的考察,二面挺有意思,从一个很简单的需求出发进行一个日志系统的设计,这里基本感觉就是靠积累和知识的广度尽可能多吹一吹了…,后来实习转正了
字节数据库:字节一共有五轮技术面试,前两轮技术面试都问的比较基础,基本就是数据库的各种基础概念的考察和做题,三面开始我才觉得面试开始聊一些其他的东西,聊一些更big picture的设计,面试官开始从系统设计的角度和我讨论某个需求方案的设计,讨论各种方案的trade off,聊TP,AP系统的界限设计等,总体也是非常不错的面试体验。
快手服务架构:一开始内推快手数据库结果内推人说没hc了……就投了一个C++开发,被捞去服务架构那边,面试聊的也比较基础,一面问了很多细节的生产环境的数据,但是自己确实对当时组里的线上实际情况了解很少(也了解不到,只能推断,印象比较深刻的是二面问了高性能服务器的设计,
美团大数据研发:暑期拿到offer没去,延续暑期实习的组投递的,组里的leader非常好,不论是暑期还是秋招面试,都像聊天一样聊,给我聊行业内大数据的发展和现状,感觉像是来学习而不是面试,体验非常好,如果自己最开始做大数据方向,也许就去了
京东云存储:京东面试三轮,一开始给我推到了java岗位……我简历上都没出现 java 这个词,后来被推去京东云那边做对象存储的组聊了三轮拿了offer
小红书数据库:小红书这两年发展很快,前两轮面试也都是基本的写题和简历,聊聊实习项目基本都差不多,没问太多额外的东西,但是第三轮面试面试官似乎不是做db的,所以只能聊聊宏观上的一些架构取舍,没能聊太多细节,另外,他们今年开的包确实都很大
smartx:一直很有好感的一家创业公司,从去年日常实习就投递拿到分布式存储offer了,印象十分深刻,还依稀记得当时一面面了一小时四十五分钟,面得口干舌燥,面试官的问题也一直刨根问底,一直问到非常非常底层的实现,当时就发现自己的基础并没有很好的串起来,所以后来自己一直加强基础的学习。。今年秋招面试就非常有趣了,一面随便聊聊,二面就是面试官前辈(还是去年的面试官)给我分享了不少smartx在做的事情,整个过程基本就是他在分享行业以及公司的信息。
akuna:因为有朋友在那里实习,所以内推了下,三轮纯英文技术面试,每轮基本上就是写一两道题,题目并不是很难,工程性比较强,比较考验英文交流和写代码的习惯
StarRocks:一家做的很棒的数仓创业公司,面的查询优化组,一共有五轮面试,每轮面试的体验都非常好,都能明显感觉到对面的面试官非常懂数据库,不论是从细节层面抑或是宏观层面聊db内核的各个方面,都能够聊的非常愉快,从执行引擎到存储、到分布式数据库的架构的宏观理解、或者是newsql的一些设计,聊的非常舒服的几次面试。
SelectDB:面的存储组,三轮面试,感觉面试官对我的经历也很感兴趣,所以和面试官非常能聊得来,也是我最早收到的offer之一,目前的发展也非常迅猛
百度:找前辈内推了百度的数据库,一面聊的很好,但是二面开始让我有些不太舒服,面试官似乎不太在乎我做的东西和简历上的内容,几乎不问我的简历,最后还硬问我了一些linux下命令的各种参数代表的含义,……不太懂硬问linux命令参数的意义。。也可能是面试官希望我能够直接去参与到系统的线上运维工作中去😄
DolphinDB:很早因为胡神了解到这家公司,暑期实习和秋招都进行投递了,面试流程和面试体验也属于一流的公司,推荐
unknown:面了一家杭州的数据库公司(不提名字)…前两轮技术面都挺正常体验也很好,但是最后去线下去和老板当面聊的时候,本人被当场pua了,上升到人生层面的那种…这也是我秋招过程中最糟糕的一次面试经历😓
求职思路分享
求职的部分主要分为几个方面,都是出于我自己有限的经验,我觉得对于像我这种资质普通,大学之前都没接触计算机的同学应该是比较好的思路,如果是大神请略过…(很羡慕很多大学之前就接触过计算机、竞赛的同学,那是非常好的经历,可以减少很多入门时的坑)
先分享一下在我的视角里面面试官或者公司希望招到的应届生的画像(反侦察
一个基础扎实(计算机基础、数据结构算法),有相关领域的实习,或者有等价的比较有价值的比赛或者(开源)项目,对业内工业界有一些了解或参与(加分项)的应届生,是大多数公司都愿意招收培养的应届生。
当然除此之外还有一些不可忽视的软技能,就比如说如何在面试的时候如何和面试官进行高效有效的沟通,如何更快更高效的展示自己的价值等
前期准备
- 计算机基础
对于应届生来说,最重要的就是把基础打牢了,不要在学习阶段太迷恋于应用层的各种中间件或者框架,因为工作之后有的是时间去学习和实践,在学校期间最为重要的就是把几门基础课上好,特别是 操作系统、数据库、计算机网络、编译原理,最好能上一些名校的公开课做做对应的 lab(可以看看这个自学网站),理解才会更深一些,不过现在在 infra 方面同学基本已经把这个方面的课程刷爆了,在之前做过 lab 就是优势的时代感觉一去不复返,已经快成标配了
- 刷题
刷题要趁早,可以在 leetcode 开个会员督促自己学习,刷一刷经典的题单,多打打周赛,尽量不要让做题成为自己的短板。
- 参与开源项目
参与有价值的开源项目是妥妥的加分项,一般来说开源项目的质量都比闭源的更高,而且带来的影响力也比闭源项目要好得多,能够直接向其他人展示你的代码能力,也能认识更多志同道合的朋友一起学习
- 参加比赛
有时间可以参加各种业内的比赛,可以关注开源之夏、阿里天池比赛、miniob、talent plan等,如果能拿到名次那将是和面试官吹牛的最好方式
找实习
如果有机会一定要多去实习,实习阶段的试错成本是最低的,能够让你更快确定以后自己想要的职业和发展的方向。
找实习的前期一定要做好准备,从简历准备、基础复习、刷题找手感几个方面分别做好,实习基本就没啥问题。
准备简历时,首先书写一定要突出重点,将能够体现自己价值、水平的部分写在前面,必要时可以用加粗等字体表明,不相关的经历(例如学生会,各种杂活)可以不写,主要是写了也没啥用,……面试官也都懂,尽量用量化的指标去度量自己的成果;其次写简历切忌多和杂,对于写到简历上的东西一定都要非常了解,对于每段经历和都要做好充足的准备,对于面试官来说,他不需要你样样都懂,但是需要你写上去的东西都非常了解,举个例子,例如写上:“了解LSMTree存储引擎”,那么最好将LSM本身的内容、工业界的实践、和BTree的比较、存储引擎的抽象、以及学术界LSMTree 的一些研究进展都可以做一些相关了解,如果被问到那将会是非常大的亮点,这样在面试的时候就能够完全不慌,当然准备是需要时间的,所以建议自己多做一些整理,经过找实习和秋招一两年的时间也将会积累起不少的笔记。
基础的复习时,建议从两个方面入手,首先是过一些经典的书籍和课程的notes、PPT等,其次是多搜集各种面经上的问题。在经典的课程下建立起一个大纲,然后刷面经的过程中将不会的问题归类和整理,问题虽然看起来多,但是在看过足够多的面经之后你将会发现,反反复复就是那么些问题,然后从大纲出发建立起整体的脉络。
刷题找手感,刷题是一个永远避不开的话题。特别是在校招当中,做题尤其重要,对于一个校招生,本身就没有什么工程经验和优势,如果连基础的算法题都写不出来,那么面试通过的可能性非常低^ ^(做数据库感觉一般遇到的算法题都不是很难)。
秋招
秋招的准备整体和实习差不多,但是一定要注意提前准备和时间线的安排。
尽早关注一些秋招的公司开启的帖子和博客,一般每年秋招开始前牛客和github都会有,可以自己关注一下,同时对于自己特别感兴趣的公司列一些list多关注,记住,投递都是越早越好,赶早不赶晚。
多找内推。尽可能找认识的师兄师姐内推,不然面试排期都会排的很晚
mock面试。正式面试之前可以多找水平相近或者水平更高的同学相互mock,做一些讲简历经历和问题挖掘。
面试心得
谈谈自己在面试的时候刻意注意的一些点。
- STAR法则相关。首先对每一段经历,首先要站在全局的角度去理解讲述整个系统的架构设计,解决的核心问题等;其次对于每一项task,要利用STAR原则去讲述每段经历,必要时候可以写下来自己多排练,同时要做一定的拓展,也就是相似的问题多去搜索和思考,思考解决的方法和设计是否有更好的方案;更重要的是对其中涉及到的基础技术要做深入的了解,而不要只是一些简单的使用。
- 不要不懂装懂。每个人都有不懂的地方,不懂的地方可以直接说明,切忌切忌不懂装懂,但是对于不会的问题可以将其引入到自己了解到的类似的问题、类似的原理,说明自己的理解即可。
- 不紧不慢,逻辑清晰。要记住面试其实是一个沟通的过程,是人和人的沟通,并不是闭卷考试,要努力做到说话不紧不慢,回答每个问题都要逻辑清晰的去思考,想好再说,最好形成自己的方法论,这样才能遇到什么问题都能顺利接下。
- 保持平视的心态。^ ^
数据库学习
聊一聊自己认为在入门数据库时候的资料和学习的路线,
CMU15445
- 明星之课,最好的数据库入门教程,除了做里面的lab之外,一定好好上课和看书,这门课的意义绝不仅仅是 lab,而更重要的是对于初学者更快的更完整的入门构建起整个数据库的框架结构
CMU15721
- andy的数据库进阶课,有非常多的经典论文,非常推荐值得阅读,如果之后要做数据库方向,一定要开始读论文,这里面的论文都非常经典,读不完全集论文可以先读课程重点推荐的论文,相信我,你不会后悔开启这个旅程的
MIT6.824/tinykv
- 这两年分布式系统非常火,数据库也和分布式系统结合非常紧密,有余力可以学习下
开源项目
- leveldb:还自己自己最早读完的代码就是 leveldb,入门数据库推荐,代码量很小,静下心来很快就能读完,(不过常读常新,有不少细节还是回顾才意识到的
- pg:pg的代码读的不多,但是组织结构确实比之后接触到的 mysql 的代码组织上更容易阅读一些,TP经典推荐
- duckdb:如果想看看 AP 数据库的设计,可以尝试开始看看 duckdb,代码结构非常清晰
- 就不推荐太多了,优秀的项目实在太多,这里只推荐最经典的一些…
其他
- 其实如果能扎实学习下上面的东西,同时把计算机基础打牢,找到一份数据库的实习/工作就肯定没问题了,但是我相信想要做数据库方向的同学肯定经历更加充沛也非常卷,我也认识很多其他的同学做了非常多的课和项目
相信每一份耕耘都会有一份收获~