文章格式有些变化,具体原因中秋发过文章解释,主要是想在格式调整上少花些心思,把精力用在内容本身上,毕竟刚入职新工作嘛~
先直接说一下结论。从 6 月初开始,到 8 月末结束,这个期间一直在面试,大约从面试场数来看,70 多场,每个岗位走完全部流程大概四五场面试。其中 7 月份安排的面试最为密集,基本上 50 场左右,平均每天都安排 2~3 场。
然后最终获得过的 offer 有,百度、腾讯、美团、字节、快手、滴滴、京东、携程、搜狗、老虎。对,没有阿里,而且阿里还面了两次,一次 hr 挂了我,一次三面都走完了然后突然被告知锁了 hc,也是无奈。
当然拿到这么多 offer 在几年前我是想都不敢想的,因为我转行的嘛,刚毕业那会连大厂都不敢投简历。
最终的选择就不在文章里说了,想交流的可以私聊问我哟。反正不是钱给的最多的那个,甚至都不是钱给的靠前的公司。
因为之前一直说自己在面试,等忙完了给大家写总结,现在算入职稳定一小段时间了,所以写一篇,毕竟也拖了大家好久了。不过不打算写面试题那种面经,这网上一搜一大把,而且也代表不了你遇到的面试,用处感觉不大。
我就从整体上说说吧。前几节是一些虚的部分,后面几节是一些实际公司遇到的情况,大家可以选择性阅读。
方向
首先这次面试的时间拉得很长,主要是真的想好好找一份适合自己的岗位。
这个适不适合对每个人来说是不一样的,对我而言,这次是想调整我的技术方向,从做上层业务转向做底层技术,也就是从业务部门换到基础架构部门。所以这次投递的也都是基础架构方向的岗位。当然一开始面试的时候,还没有想的那么清楚,面着面着逐渐坚定了自己这样的想法。主要是我自己不太喜欢做业务,感觉也不太擅长,而且每次做业务的时候也总愿意想一些业务无关的通用的技术原理,平时自己私下里也喜欢琢磨底层原理,包括公众号的文章我也喜欢写原理性的东西。所以索性,咬咬牙,让自己工作就是这个方向,那就一举三得了。当然做业务和做基架各有优劣,业务可能就是被大家常常吐槽的整天 CURD 没有技术深度积累,而做基架很有可能沦为高级运维天天 oncall 回答低级问题。不过说实话基架这个东西除非做特别特别底层的,比如内核魔改,其他的也是 CURD,调别人接口完成功能。不过起码周围的环境上来说,都是搞基架的,可能耳濡目染地也会了解别的部门的技术,如果真的很喜欢底层技术和愿意往深度去研究问题的,还是会很有幸福感。总之,这部分看个人意愿,如果你真的特别特别讨厌做业务,而又特别特别喜欢研究底层原理,不妨换换口味。定了方向后,接下来就是准备了。准备面试无非就是八股文、项目、算法。事后诸葛亮一下,我是五年工作经验,面试的时候被问到自己项目相关问题的占比要多于技术八股文的占比。当然也有个别的公司问八股文占比高些,比如京东从头到尾全是八股文,头条和快手也是八股文占比不少,其他我面试的公司基本都是项目占主要,阿里和美团更是几乎 100% 的问项目,或者问一些特别大方向的问题,比如这个问题说说你的理解,那个技术你怎么看,之类的。八股文我就不详细展开说了,背就好了,我当时就是照着 JavaGuide 上的题简单刷了一下,重难点再详细看一看。这里说一些高频题的基础题,线程池是一个,包括各个参数的含义以及原理。锁是一个,大致的思路是 sychronized 说一遍,包括锁对象是谁,JVM 做了哪些优化。然后再展开讲 Lock 接口下的各种实现,也可以从 AQS 的角度讲讲锁的底层原理,再往上层实现推导。Java 内存模型是一个,从内存模型角度能把 volatile 关键字说明白了即可。然后 JVM 内存划分,把怎么划分的,然后堆区展开讲讲分代和垃圾回收。
总之大家看吧,我个人觉得突击是有效果的,但平时的积累能让突击的效果更明显,因为好多知识点是相通的。
对我来说项目就比较重要了,也正好我也是着重准备了项目,顺便还把我自己梳理的结论整理成了文章,就是之前那篇。真是一举两得呀。这篇文章帮助很大,几乎每一场面试,注意是每一场,我都把这个文章给面试官背一遍,然后面试官追加的问题,由于思路确实理顺了,也能对答如流。虽然一些特别细节的问题我也不清楚,但一般面试官才听一遍你的项目,也不会问到那么细节。所以,把一个项目的关键模块吃透,特别有用,因为这毕竟是 100% 必问的问题,而且还占很大一个比重,而且还能由你自由发挥引导,这不重点准备还准备啥呢?
但项目千差万别,所以也没法给出啥针对性建议,最好是高并发项目,能够体现微服务的复杂性以及解决方案,这样才有“高端”货往出说,不然一个太简单的项目,面试官都不知道该问什么。借着项目,往往后面会展开问一些微服务、分布式、缓存等知识,这些就属于进阶方面的考点,也是考察知识面的一种途径。这块刷 JavaGuide 的进阶部分也是可以刷到的。但这块如果纯背的话就显得有点嫩了,面试官是能听出来你对这块的理解深度和广度的。关于这里我推荐一本书,不是专门讲面试的,但拿来做面试进阶知识的准备非常合适,就是周志明老师的《凤凰架构》。读完后基本你可以从宏观上理清楚一个高并发系统架构设计所要考虑的问题,之前的零碎知识点会从一个很宏观的层面上连接在一起,拿它来做面试准备有点降维打击的意思。这本书对我面试回答问题的思路以及体现知识广度,有很大帮助。
除了项目之外,算法一般都说很重要,面大厂前必须要刷算法,刷 leetcode。这点我就做的不是很好,因为我一道题都没刷,所以像是特别注重算法能力的字节和快手,我就面了很多部门才拿到一个 offer。不过好在我面试的场数太多了,光面试中刷的面试题就好几十道了,而且都是超级高频题。我的结论是,我面试中被问到的算法题,有 80% 都出自《剑指 offer》里的原题,所以你这本书上的题都会了,基本面试的时候算法就不是问题了,只是可能做题的时候有些手生罢了,做几次就好了。当然由于现在都是在线面试,不同公司用的面试工具还不一样,写代码的时候还真有可能不习惯,但也仅限第一次。我之前也整理了我面试公司的在线工具,大家有空可以看下:各主流公司的在线面试工具然后还有一些超高频的题,比如一个 LRU 算法的实现,这个我一共都做了四遍了,以至于第四遍做的时候,已经熟练到不敢写得太快,怕被面试官看出来。所以,多面试也有好处,战线拉得长一点,你的失误会越来越少,也会越来越明确自己的目标,不会将就。
心态的变化还是很重要的,比如我上一次跳槽的面试,就是还没面多少家,有公司给了 offer 就不想在面了,不断暗示自己这个 offer 也挺好的就去了。这次就不同了,打一开始我就下定决心要面好几个月,前期的面试就仅仅是试水,绝不去。而且比较幸运的是,一开始面的美团和老虎,都发了 offer,所以给了我很大的信心。假如一开始我去面头条和快手,然后因为算法不会,一面就挂,那估计心态就崩了。再面其他公司给发了 offer 可能就会觉得来之不易,就会草率决定了。所以我觉得最重要的就是沉得住气,千万别中途心态崩了影响自己的选择。如果心态不太稳定的同学,就不建议裸辞去面试了,当然如果心态完全不受影响裸辞不裸辞无所谓,什么社保断不断那都有别的办法,心态不影响的话甚至裸辞面有更充足的时间准备,我不知道为啥总有人劝不要裸辞,这得因人而异。我这次是在职面多些,之前几次跳槽都是裸辞,所以发现自己的心态可能还是会受影响,这次就没裸辞了。也有一定原因是现在都在线面试了,之前跳槽都需要现场面,所以也是条件不允许。不然我咋可能在职面这么多场。因为一场面试还是很累的,要组织语言,要高强度回答一些烧脑的问题,还要做一两道算法题,所以相当于近乎一小时都在高强度用脑。再加上心理压力,可能会慢慢磨平一个人的意志。所以首先要做到心态放平,记住你和公司是双向选择,然后把自己的时间拉长,不给自己规定必须多久找到工作,就一直面直到找到符合自己胃口的为止。这样心理压力和语言组织时耗费的脑细胞就少很多了,你不用刻意想着如何讨好面试官,这其实是很心累的。再之后,其实我这个面试心路历程中间有一道坎,在面大概一个多月的时候有点累。但后面一旦过了这个坎,一方面由于我回答面试题尤其是项目相关的面试题,已经熟练到可以不过脑子只过嘴了,所以脑力耗费也在逐渐降低。另一方面就是我已经习惯了每天面试的节奏,而且面试时间我基本是给自己固定的,所以到那个时候我的脑子感觉自然进入了面试状态,到后来我每天不去面个试,都有点难受。所以,一定要过中间那到坎,前面咬咬牙坚持过去,后期柳暗花明。而且,面得约多,失误越少,你真的会发现,面试题已经逃不出之前面试官问你的那些问题了,所以,渐渐的就没有失常发挥,只有超常发挥。如果一场面试中没有失常发挥,那只要有一两个亮点,基本就成了。亮点一方面来自于平时的积累,比如面试官问到我自制操作系统和自制 CPU 的经历,那就是我的亮点。另一方面来自于运气,比如上个面试官刚刚问完这个问题。所以其实运气也是积累后的必然结果。我后期的面试问题,都是之前面试官问过的问题。所以,面试后复盘很重要,如果你想拉长面试占线,那复盘就更为重要了,后期全靠它。面试这东西不确定性很大,因为毕竟公司把你这个人全部信息都掌握了,而你却对公司架构,hc情况,面试真实进度,完全不知道。我这次遇到好多种情况。以下是我的个人经历哈,不具有普适性。阿里云 hr 挂了,才知道原来阿里 hr 真的会挂人。后来又面了阿里云其他部门,结果到三面 hc 锁了,这跟挂了还不太一样,但结果来看区别也不大。快手发了 offer 最后又说 hc 有调整不要了,打我个措手不及。然后基本上大多公司都是平薪平级,因为我有的公司面了好几个部门,结果后续的部门薪资和职级都和我面的第一个部门一样,这个是公司要求,防止部门间恶意竞争。小红书面试官,面试过程一直在看手机,还笑,我中途受不了了,挂了电话。网易面试官,直接给我个需求,让我写完代码和流程图后发给他。我没理。滴滴发 offer 不说薪资,让我说其他公司薪资,以及给我开多少钱我才肯定去。这也和其他公司不一样,有点个性。薪资方面基本一致卡涨幅,不过快手和头条是给的最大方的,其他公司基本差不多。我这轮面试基本上包括了公司毁约,hr 挂人,hc 临时锁住,平薪平级政策,以及所有大厂都会有的卡薪资涨幅。总之,面多了你会遇到各种奇葩的事情,有的是你自己的问题,有的是公司的问题,有的就是纯面试官这个人不合格。所以还是上面的建议,一定要多面,多看,才能最大限度地保证自己不被奇葩的事情坑到。阿里:十分注重项目经验,解决问题的能力,这个是真事。算法题考查不在重点,也不会太难。HR 一定要注意,真的会挂人,而且 HR 在阿里权力很大。还有一点是其他公司基本都能有个 HR 可以联系到,然后帮你把控流程,阿里联系不到,下一面是什么时间,还会不会推进,就让你干等着,等到了电话直接通知你一个面试时间,反正面试过程体验还是很不好的,不过面试官还是很专业。腾讯:也是联系不到 HR 的公司,其他公司都可以加 HR 微信,而腾讯居然不能加微信,回拨电话也找不到人。不过比阿里好的一点是,可以通过腾讯招聘公众号看到面试时间,也可以发起面试时间的修改。
百度:接触不多,不好评价,仅从一次面试中感觉,这家公司有点跟不上互联网时代,技术问题比较呆板,说话方式有点官僚。
美团:技术比较踏实,面试流程也很友好,面试过程也很专业,基建做得好。就是有点抠,没什么福利,开水团。字节和快手:这俩放一起说就行,面试中极其注重算法能力,出的算法题也都不简单,有的还很特别。然后问的问题也都是“聪明向”的问题,喜欢在你回答时抓一个点,然后问。我觉得年轻且聪明的同学,很适合这两家公司。给的薪资也是普遍高于大厂。京东:京东整个面试过程非常舒服,时间把控也十分精准,不过我当时面的时候问的都是八股文,面试官不断告诉我,接下来我们会问哪些方面,大概会持续多久,反正感觉整个面试过程心里很踏实,不会的问题面试官也会引导。总的来说,这次 3 个月的面试过程,还是学到了不少,也进步了不少。
熟悉了自己原来的项目,面试过程中被迫刷了几十道面试题,也逐渐打磨了自己的意志,明确了自己的目标。越面到后面,越敢于进行双向选择,不在被公司忽悠,把问题尽量前置,说清楚。被很多公司坑了之后,也就慢慢知道如何保护自己的利益,而不是见到大厂就要瑟瑟发抖,任人摆布。希望大家也能清晰自己的目标,找到合适的工作,不将就。写的过程中发现有好多子话题,比如做业务转做基础架构的原因和方法,比如选择公司是钱、公司、岗位还是幸福感更重要,如果大家感兴趣,后面也可以聊聊。