本文作者 kkbaby 是小菜刀的研究生师弟,前段时间跳槽去了阿里。由于师弟在上一家公司写 Go ,面试语言部分也是考察 Go 语言。因此,小菜刀觉得他的面试经历也许能帮助到一些同样想挪坑的读者。
以下是师弟投稿原文
个人经历
某二线互联网公司应届一年,主要做数据库运维中台及中间件,技术栈是 Golang + Python。考虑种种原因,准备换一个新的工作环境~
面试情况
首先说下面试的节奏,面试前根据各厂的数据库团队情况,本着面不过就继续沉淀半年的原则确定了几个目标:腾讯/阿里/美团/字节/快手。之后为了解下市场行情,找了几家练手(微博,boss,矿视,均到薪资面)。
在上述几家公司的面试过程中发现了一个问题:除了更熟练的介绍项目外,其他貌似没有太多能借鉴的地方,问题大都集中在他们的项目驱动上。比如某司还会追着问 orch 的底层实现细节,这个除非在日常工作中特地关注,不然不会有太多了解。基于此,准备硬刚目标厂了。
这里目标厂总共面了两家,腾讯(2面聊的方向不符挂掉)、阿里(offer),考虑到阿里数据库方向的工作内容比较符合个人兴趣,并且技术背景也是这几家最强的,遂接受 offer,放弃再面其他厂(面试真的太累了)。
在说面试流程前补充一点,我觉得对于刚毕业不久的同学来说,换一份工作不能具有盲目性,应该至少提前半年就做相应的准备。一方面关注下相关岗位的综合要求,另一方面也要借工作机会多丰富自己简历。否则在准备跳槽前可能会发现自己的工作内容写不满一张A4纸,和我一同找工作的同事就面临了类似的问题,最后通过突击的方式强行加了几个点。
因为刚毕业满一年,所以在面试过程中面试官还是把我当作应届生来看待。以下的内容可能更适用于和我一样,工作经验不够丰富的同学,老鸟可以选择性观看~
面试内容
基础
重点基本都在数据库方面,mysql 部分:MVCC原理,读已提交和可重复读的实现,主从原理,备份恢复,索引相关,日志等,这些都是mysql的重点,这部分看完《高性能mysql》大致都能回答。因为面试岗位和分布式数据库相关,因为还需要准备下相关背景知识,如 paxos 或 raft 算法实现,计算存储分离架构等。其他就是数据结构/操作系统及网络相关,对应准备下就好。
项目
这部分是面试重头戏,之前 菜刀哥的文章 里也讲的非常清楚,主要问题集中在
-
项目背景
-
个人分工,如何协作
-
技术难点
-
是否还有改进空间
考虑到我做的是数据库方向,面试官必问的一个问题是,平时有遇到过哪些故障,怎么处理的?实话讲,我工作的一年里也没有遇到过重大故障,但是这时候说自己没有遇到,显然是与面试官的意愿相悖。
有个技巧,在面试前,我将组里之前发生的重大故障复盘都看了一遍,主要关注故障发生原因、解决方案、后续改进方案。
同时一定要明白为什么是用这个解决方案,还有没有其他更好的方案?对于一个经验丰富的面试官来说,很容易在这一块把自己问倒,这时候不要不懂装懂,虚心接受,能顺着面试官的意思,表达自己的理解就OK。另外一个重点就是 mysql的高可用架构,一个是数据库本身的高可用,另一个就是自研平台与相关中间件融合实现的高可用方案。
对于自己在简历上的项目一定要熟悉,相关细节也要准备好。例如,面试官就会问我中间件的 sequence id如何实现?配置变更如何实现的热加载等。
Go
在各大厂里,字节用 Go 应该是最多的,所以面试前可以多看看相关面经,面试的常见问题基本都可以找到。
-
GMP 模型及内存模型,这是必问的,一定要有了解
-
slice 的底层实现,扩容机制,map 的底层实现
-
sync.Map 实现原理,适用的场景
-
sync.Mutex 实现原理
-
其他常用库
-
Go 框架
总体来说,Go 方面的问题都是比较基础,在日常中多记忆,大部分问题都是可以答出来的。
算法
手撕代码,建议至少刷两个月的 leedcode,有时间就刷几道找找手感。算法我遇到的,基本集中在二叉树和动态规划,之前如果不做准备,遇到动态规划的题目还是有点懵逼的。遇到的一道打家劫舍问题,提交时就没写对,好在面试官最后放过了我。
总结
从面试体验上来说,大厂的流程更加规范,通常都是以聊天沟通的方式进行。大厂更加看中逻辑能力,小厂反而对个人实战能力要求更高,猜测是由于人手较少,要求入职后就能直接上手干活。