准备半年,拿到字节三个OFFER的复盘总结

本篇内容主要复盘一下在过去几个月面试字节的过程,以及,为了达到顺利通过面试考核所做的一系列事情,通过这次之后,更加确定凡事预则立,不预则废的做事方式,下面我会从以下几个层面来复盘整个过程

  1. 考察调研字节关于数据岗位的面试范围

  2. 优先把算法题刷一遍,尽量刷到400+题(我实际刷了300+)

  3. 自己模拟面试过程,作为十几年经验的人,也面试过几百人,对于面试基本方法是很清楚的

  4. 刷新简历,按照最近最新最强的项目经验进行重点复盘梳理,项目基本是必问环节

  5. 大数据组件不需要面面俱到,样样精通,但是对于实际项目中用到的核心组件要达到很熟练程度

对于字节面试比较了解的朋友都知道,字节技术面试每轮都会必考算法题,这源于创始人张一鸣在早期面试带来一种风格,作为以推荐算法来做内容流的今日头条和抖音,算法在其中的地位是相当核心,虽然其它厂也会考核算法题,但不会每轮面试都考,也不会考的过于难,但字节会出各种基于LeetCode的变种题。

所以,对于算法的复习,不能以做题量为目标,而是掌握做题的思路,能够达到看到一道题就想到用那些解法,我称之为一种做题的内力功法。

一、以leetcode为基础,复习数据结构,随之大量刷题,总结做题思路

LeetCode是基本上每个程序员算法功底的修炼场,当然,很多高校学生也用于算法竞赛以及学习,足以可见它的一个重要性和不可替代的地位。

既然,是以算法为根基的面试大厂,那么算法的学习就不能浅尝辄止,而要面面俱到,细致入微的对于每种数据结构都要深入的学习一遍,其实,对于数据结构的学习来说,真的不算难,难点在于:看完感觉很简单,但是一做题就完全懵逼没有思路。说实话,这个过程我经历了,很痛苦,及其痛苦,捶胸顿足、抓耳挠腮般的痛苦,这让本不富裕的头发变的更加稀疏了,那怎么办呢?总不能开局就撤回吧?对于从高中就研究各种学习方法论、脑科学、认知类(对不起,我习惯性吹牛了!)爱好者,于是乎~,我刷了大量关于刷题思路总结的笔记 😄😄😄,在此,再次感谢那些乐于贡献自己痛苦的成长经历,并将其积极分享出来的人,emm,我也算其中之一了。

玩笑归玩笑,适度的放松自己,积极构建对应困难的对策,是上面几句所要表达的核心观点,以我的应对方式来说,看了很多其它人的刷题突破的分享,以及,对于每个人刷题思路的总结,我才知道,原来这个过程是每个Coder的必经之路,跌倒了爬起来,爬起来跌倒了,慢慢的就可以走稳了。

复习完数据结构之后,就开始先做一些Easy类的题目,然后,使用A4纸或者小米画画平板,每道题在做之前先整理做题思路,哪怕是很简单、很简单、很简单的题,我也要把思路过程画出来,好记性/脑子,不如烂笔头,这句小学老师当年拿着大巴掌一边呼着我,一边说的话,我至今记忆犹新,且,相当管用。

我觉得逐渐让自己有一些题感是能否突破50道题的一个评判标准,所谓的题感就是基于前面做的一些题目的思路,能够从刚开始看到题目没有思路或者思考半天才能有一个大概的思路,到看到题目能判别出这道题的大概解题方式,会用到哪些技巧,以及,相关的几种变种写法/多种解题思路都可以从大脑中展现出来。当达到这个程度之后,就可以继续攻击更高难度的题目了。

再者,就是关于题型的总结,虽然leetcode有大几千道题,但是归纳总结之后,会减少很多,大约在几百道左右。大部分都是基于某个题型的变种而来,比如链表的题型,掌握单链表、双链表、前插法、后插法之后,基本上就可以解决绝大部分的链表算法题。

最后,在掌握了题感、算法内功之后,还要寻找一个“宝藏地图”,所谓的“宝藏地图”就是类似于一个各家大厂的常考题目,一般面试官都是抽取的公司内部题库的题目来出题的,比如字节来说,整个面试系统都包含很多功能,其中就是题库和做题的功能,面试官如果考察算法题的话,就会从整个题库里面选择一个自己比较熟悉的题目,然而,想这些常考的题目,在有些网站上是有记录的,相关网站的信息我都整理在文末了,有兴趣的可以自行领取。

好了,关于算法准备部分,就聊这么多了,相关的题目、题型总结,可以直接在文末查看,如果想更细节的聊一下这块内容的话,可以通过文末下方联系我。我很乐意和读者分享这块内容,当然如果关于其它面试也可以聊聊,相信也有一定的收获。

图片

二、关于自我模拟面试这件事,帮我在面试过程中树立了极大自信

为什么要把模拟面试这件事情单独拎出来讲呢?说实话,这可能是我“无意中”掌握的一项非标技能,为什么这样说呢?我现在复盘总结发现,可能是由于我在过往的工作中面试了太多的人,此刻,我特意查看了moka系统,近三年的社保面试人数82人,校招面试人数239人,也就是说不算过往其它公司的面试经历,近三年在目前公司已经面试了300+人。

以下当做一个纪念吧~~

图片

所以说,这也在一定程度上锻炼了我在面试过程中提问的能力,以及,能够快速根据简历判断出应该问哪些问题,基于这些“非标能力”(所谓非标就是不可复制的能力),我把我自己即当作候选人也当作面试官,然后根据简历内容和岗位职责要求来换位面试,类似于左右手互搏,一直问到自己无法答出来为止,然后再根据当前问题卡点,重新系统梳理问题卡点的原因是什么?我应该再补充哪些能力?

这也论证了为什么面试过程中能够表现出了比较自信并且稳定的心态,从自我察觉的感受来说,我已经反复练习的几十遍了,这次也没什么不同,类比于驾照考试,经常性的练习倒车入库、每天都练、每天都练、反复的练,当考试的时候,就把它当作一个练习就好了,只要平时练习的足够好,还有什么好担心的呢?

所以,为什么很多人在平时工作中,所表现出的能力是非常强的,甚至有的是部门内的技术骨干,但是在真实面试的时候表现却表现不佳,导致错失了本来能得到的机会,这时候可能技术原因不是核心问题,可能更多的要从心态方面查找根因,内观自己是否在技术之外做好了准备,也许,你也可以试试我的这种方法,也许,会取得不错的效果。

三、立足项目,反复研讨过去几年拿得出手的项目以及技术架构的实现

有过面试经验的小伙伴应该会清楚的知道,基本上只要你简历中有写项目,那么八九不离十会问你关于项目的一些实现问题,你有没有想过为什么会这样?

我总结下来,无外乎以下几个原因

  1. 单一的技术问题面试,无法充分了解一个候选人

  2. 考察候选人逻辑表达能力,是否能够有逻辑地说明项目功能的实现

  3. 考察候选人沟通能力,做业务、平台开发多少都会跨部门沟通,如果沟通能力不行,会稍微减分

  4. 考察候选人对于项目中的角色定位,能够判断出 ta 是否是核心成员以及项目是否具备真实性

  5. 对于高阶岗位,通过项目可以考察 ta 的组织领导能力

对于以上五条,仔细思索,是不是在真实面试过程中,面试官有意无意的会针对以上几个问题考察你呢?有些读者朋友可能会说,对于技术足够牛逼的人,什么表达、什么沟通、什么组织领导,这些都不重要,是的,我不一定反驳你,但是,你需要思考一下,如果你真的足够牛逼,真的是这个项目的核心骨干,难道你不能很好的讲出项目中技术架构的1,2,3出来吗?好比如,你说你学习非常好,但是只要考试就不及格,那这么说你学习好呢?

当然,这里也有一个例外,我看过不少人真的是专注于技术本身的,真的是能够做到底层内核级别优化的,那么,如果你真的做技术底层相关的,或者是做开源项目相关的,那可能是另外一种情况了,你基本上是不需要有面试过程的,大家一看到的你的开源项目和成就,会主动邀请你加入,这样的话, 你需要重点关注如何对外展示自己的成就,这个话题在这里就不重点讨论,如果你是真的技术大拿,并且热衷于开源构建的话,咱们可以单独聊聊。

上面说了那么多,那么,应该怎么样去准备项目这块的内容?

这里以自己来举例子,我过去几年一直在过数据平台的构建工作,对于数据平台的从0到1如何构建的,以及,对于每个不同的系统模块为什么要做?具体来做的有比较清楚的认识,例如我们当初为什么要做数据平台?是因为公司内部数据是烟囱式的,数据开发部门每个人需要自己单独编写SQL来实现,数据质量和数据应用分析及其的不稳定等等一系列问题,这是站在业务和公司层面发现的话,那么就希望通过平台建设来形成一个标准的、易于扩展的、高效的能力,来更好的帮助公司和业务来进行数据层面的应用,当然,这个要真聊起来可能万字级别的,就不深入了。

其次,对于每个系统为什么要做?基本的技术架构实现是怎么来做的?我在这里的角色定位是什么?这些内容要自己梳理清楚,这里其实也要做一些务虚的工作,你可以适当夸大你的功能,可能你只做了数据调度,但是你可以说你负责整个数据调度工作,并且也在做数据管理的功能,只要你对这两个真的掌握的足够清楚,适当夸大是可以的。毕竟它是面试,我们以功利性的态度来对待它,没什么不可以,这也是自己对自己价值的一种肯定,只有承担的越多,才能够成长越快。

最后,就是项目中的技术性问题,上面说的其实更多是业务层面,业务要落实到具体技术实现上,技术是为了更好支持业务的实现,所以,你要把这块为什么要采用这个技术来实现,要讲解清楚,比如字节就很喜欢问这种技术选型问题,在数据采集中你说你用的Flume和DataX,然后他会问你为什么用DataX是否有其它的组件能够实现呢?那么你不能简单的回答,我们架构设计的,这样回答你90%以上会挂掉,正确的回答应该是,我们当时调研了DataX和其它很多组件,例如:FlinkX(chunjun)、SeaTunel、InLong,(ps: 不管你是否真实调研了,只要你认为能Cover主的都可以说),然后说出为什么我们当初选择DataX?如果你真的调研了,可以说真实的选型结果,如果并不是真的调研了,而且“架构就这么定的”,那么有几个还算标准的回答,可以供你参考:

  • 因为我们当时做的时候,XX技术还不是很成熟,DataX开源时间比较早,有很多成熟的案例。

  • 我们之前的系统就是基于DataX来做的,对于技术掌握成本更低一些

  • 我们当时也测试了xxx,但是使用起来并不是很顺手,我们业务本身复杂度不高,所以没采用比较重量的组件

所以,从组件成熟度,技术成本、业务现状这三个维度基本可以成为一个标准答案来回答,我当时就是完全靠着这三点来应答了我完全不知道的东西,当我看到对方频繁点头的时候,我知道这稳了,已经完全进入了我的状态。对了,这里在补充点,如果这时候你在反问一下面试官,以技术讨论的视角来讨论,这时候对方绝对不会再问你这种问题了,有时候面试官不一定真懂,ta 问你的问题也许是ta 想要搞明白的,结果你反问ta,那么ta极大概率不会再追问了,至少字节很多一、二面的面试官是这个套路。

图片

四、对简历中的大数据组件要很熟悉的掌握1 - 3个

这个可以说是技术人员面试所应该认识到的基本方法,日常工作中我们可能会到非常的组件,比如一个数仓项目就会用到Hive、HDFS、Spark/Flink、Ooize/dolphinscheduler、Flume/DataX/Filebeat等等,这些都是一个项目所必须具备的组件,但是我们不可能每个都很熟悉,因为每一个组件都是很复杂的分布式系统,所以说,在面试前你要找准自己真正熟悉的组件是什么?以我个人为例:我自己擅长Flink、Kafka、HBase,也就是在过去的5,6年一直在深耕流计算方向,最开始是做Kafka的二次开发,后来做HBase方向的调优以及Bug修复等等,所以我可以把Flink、Kafka、HBase标记为熟悉的程度。

当我在进行自我介绍时,就可以很直白的说,我比较擅长Flink、Kafka、HBase这些偏向于流计算方向的组件,其中我对xxx组件进行过xxx的调优和二次开发工作,这样的话,面试官的面试重点会偏向于你擅长的领域,而不是一直问一些简历中写的其它技术点。

另外,还有一点就是,要懂得很好的引导面试官问你问题,这个也可以说是我的一项“非标技巧”,在有些面试场景中,如果你简简单单的只是回答了面试官所提问的问题,那你是一个被动者的角色,面试官会一直跳着问你问题,这会导致我们在面试过程思维跳跃,因为我们所掌握的技术一般是联通性的,如果一会问流计算,一会问离线计算,一会问Kafka,一会问Hive,那你觉得你能回答的很好吗?

所以说,最好是在回答一个问题的时候,能够主动的将话题带到一个自己擅长的领域,在这里举一个我当时面试的例子,当时问我关于HBase的读写的原理,以及高性能的地方,然后我就回答了关于HBase写入时候使用的数据结构,比如LSM、Memstore以及整个流程怎么实现的等等,注意,重点来了,那既然问到了HBase的高性能,我就借此机会,引导到了关于Kafka,我就是大数据内部构建,其实是有很多相通的算法和数据结构来提升性能的,比如Kafka里面也用到了类似Memstore的结构,以及LSM的结构,在Kafka里面的数据写入和读取的相关流程是xxx的,于是乎,面试官接着问了很多关于Kafka的问题,你看,这不进入我的场域了吗?

但是,这个也要讲究技法,你需要有一两个能够拿得出手的东西,并且知道那块是你擅长的,具体怎么做,文章篇幅有限,就不一一展开了,感兴趣的可以加入我们的技术交流群,或者 下方添加扫码添加联系我,可以无偿交流。

五、技术面试题不需要背,面试不是考试做题,而是与人的对话

不知不觉都写了这么多了,最后在补充最后一点吧,很多同学都喜欢搜索很多不同大数据组件的面试题来背,我个人觉得这是一个很低效的事情,我不推荐大家搜索各种Hadoop、Flink、Spark的面试大全来去背,当然,我不反对你去查看,阅读,可以作为你技术面的一个补充,毕竟,看这些总比刷短视频强。

之所以,我不推荐花费很大精力去记忆这些面试题,原因在于,技术它是一个有连通性的,是一种网状结构,而往往网上的那些所谓整理输出的面试题,大多是单个技术点的讲解,如果你懂这一块,你会发现第一:讲的并不清楚,甚至有些就是错误的,这不误人子弟吗?,第二:那么多题,那么多内容,真的能记下来吗?做技术的人重要的是逻辑思维能力,纯靠记忆是无法长久的。所以,我推荐的一种方式是找到你的技术擅长点,哪怕你都不擅长,也从你都不擅长的技术里面,找一个相对好一些的,然后在深挖一层看看那些具体的技术点能够讲清楚的,然后,通过以点带面的方式,螺旋式的掌握整个技术栈内容。

如果你真的不知道怎么挖掘自己,欢迎你联系我,我用15年的功力,来帮你疏通技术瓶颈(麻烦备注:老丁)

写着写着,到了深夜了,此刻北四环依旧灯火通明,这个世界不会因为任何事、物而停止运转,也不会因为任何人的抱怨而给你更多机会,更多的还是要自己把握,自己去争取,放弃无谓的抱怨吧。

正如飞驰人生2中所说:「机会只会存在其中的一两次,但是我们需要为了那一两次的机会,要时刻准备着」,当机会来临时,谁准备的多一些,充分一些,谁就会更有可能把握住,所以,这可能就是努力奋斗的意义,让自己时刻具备准备好的状态。

推荐网站地址:

  1. 各大厂面试题汇总,里面包含了每个大厂的常考题,备注了考察热度,最近考察时间等

https://codetop.cc/home

  1. 字节的面试算法题整理

https://www.yuque.com/dingdianbigdata/hvwk8g/ocba4q8gg8mqemin

如果想进一步交流的话,欢迎加我 V:kubedata
我们宗旨:分享创造价值、交流促进成长,欢迎关注:云原生大数据技术荟

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值