最终选择了字节跳动。

三家进行面试,都有三轮技术面以及一轮 hr 面。实际上,不管是哪一家的面试,所问的东西都较为相似,这些东西都能在网上搜到答案,并且一定存在于某篇面试题汇总的文章内。因为技术就是那些技术,即便问法有所变化,其本质或原理依然是相同的。如果想要查看详细的真实面试题,在掘金、牛客网、知乎上都有很多,随便找一下都看不完。
授人以鱼不如授人以渔。这篇文章存在其他我认为更值得分享的内容。因此,为避免篇幅过长,我不详细列举在这些公司中碰到的题目了。每家公司我各提两句我印象深刻的。
百度
百度是我在被阿里拒绝之后去面试的第一家公司。年前在北京还能够进行现场面试,因此我前往百度进行了现场面试。
问的基本上都是基本功。值得一提的是,在三家中,只有百度问了我 CSS 问题。大概是面试官从他正在做的业务中选取了一个布局场景,让我写样式来做好布局,这个布局不是圣杯布局或者双飞翼布局之类的。主要是考察对 CSS 的灵活运用,需要稍微动动脑筋。
二面问了一些基础方面的内容,主要考察的是一些场景的解决方案或者设计方案。在算法方面,只问了一个题目,这个题目的原理是二叉树的后序遍历,题目比较简单,没怎么费力就做出来了。
三面是经理面,只问了一个场景设计题。接着就开始谈论人生理想,询问为什么离职、有什么规划、在之前团队做过哪些有贡献的事情、碰到过什么难题以及最后是如何解决的等。我感觉回答这些问题比回答技术题要困难得多,因为有些问题太抽象了,我都不清楚到底想问什么,但又不好一直追问到底想问什么,只能依据自己的理解来回答,在回答的过程中还要留意面试官的表情和神色,直到面试官觉得差不多了才能停止,说得我口干舌燥,我更希望多问我几个技术问题。
总结而言,百度的这场面试倾向于考察实际做事能力。所问的问题都很实际。如果曾经在实际工作中碰到过这些问题,或者看过相关文章,那么回答起来基本不会有太大问题。
百度有一个部门是百度 APP,它可以算是主航道。我挺想去这个部门的,但是最后由于一些原因,我还是拒绝了。

快手
面试官的工作技术栈是 React,我的是 Vue,一面同样还是考察基础。面试官没有为难我,而是从 Vue 问题入手,问了一些面试题中常见的内容,比如响应式、diff 算法、观察者模式等。因为我之前系统性地看过 Vue 源码,所以回答这些问题没有什么难度。回答完之后,我顺便给面试官额外讲了 Vue 的执行流程和相关源码原理等内容,说得比较多,面试官对此表示挺满意。
二面询问了原型链等较为高级且抽象的内容,接着问的一个算法是洗牌算法。我觉得问这个题目不是很合适,因为洗牌算法相对比较独立,它不属于回溯、动态规划、分治等类型,是一个难以举一反三的题目。倘若你恰好见过洗牌算法的实现,那几行代码而已,你即便闭着眼睛也能写出来;倘若你没见过,或许你绞尽脑汁也不知道该如何下笔。当然,从另一个角度来看,运气也是实力的一部分。
三面应该是团队前端的负责人吧。百度三面问的问题差不多,先是一道场景设计题,以此来考察技能运用能力,接着就开始询问规划等人生理想方面的内容。
总结而言,快手的这场面试考察较为全面。并且,我与三面的前端负责人聊得很融洽,感觉很合适。此外,快手是我主动投递的最后一家公司。面试结束后的第二天,我就回家过年了,正在等待年后入职。然而,最终我还是没有去成,因为我选择了跳转到字节跳动。
字节跳动
过年在家玩耍时,字节的 hr 把我从简历库捞了出来并给我打电话,让我投字节跳动。我想了想,觉得反正没事,投就投吧,万一快手那边出岔子还有后路可走,于是就约了视频面试,没想到竟然过了。
三位面试官是我现在的领导。聊完之后,我觉得彼此很投缘。并且,我一年前和半年前曾两次投递字节跳动。第一次投递通过了,但由于某些原因我没有去。第二次投递未通过。现在是第三次投递,通过了。我比较纠结,因为已经接受了快手的电子 offer,反悔不太好。但我又想了想,也许这就是缘分。我感觉就算这次不进入字节跳动,将来早晚也会进入,晚进不如早进,所以只好对不住快手那边了。
成功面试的几个经验:
这些面试之后,我又看过一些面经,于是稍微总结出了大厂面试成功的几个经验。
学历
这很容易理解。不管你工作了多少年,hr 或者面试官在看简历时第一眼想看的就是学历。学历是一个能很直观地给简历打分的点。好的学历不一定能让你通过面试,但是却可以让你的简历通过初筛。很多人可能仅仅因为学历这一关,就导致连面试流程都无法进入,可能他们空有一身本事却无法施展。
这是可以理解的。因为大厂的简历数量众多,hr 不可能给每一个人都提供面试机会。如果给所有人面试,即便面试官不做其他事情,全天 24 小时连轴转,也无法完成面试。而学历是一种很直接的筛选简历的方式。

工作经历
学历这件事已经发生就无法改变了,只能接受。然而,学历最大的作用实际上是能让简历通过初次筛选。倘若你的学历达不到让简历通过筛选的标准,那么你还可以把希望寄托在一个良好的工作经历上。
你的学历达不到能立刻进入大厂的标准,但你可以先进入一些二三线厂或者小型的独角兽公司。这样一来,可选择的范围就变得很广了。在这些层次的公司中,你可以老老实实地待上两年,在这期间,不要忘记修炼好基本功,不要让自己荒废了。
两年后,你的标签呈现为:学历并非特别出色,但工作经历较为不错,同时还比较沉得住气的一位候选人。通常情况下,大厂给你提供一个面试机会,肯定是没有问题的。进入面试流程之后,那便是你真正展现自身本事的时候了。
这里有三点需要注意:
1、作为跳板的公司不能太小了
至少是处于二三线水平或者属于独角兽企业。如果公司规模太小,就不太可能给你提供非常好的项目经历。此外,面试官和人力资源人员很大概率是听说过你所在的这个公司的。
2、不要频繁跳槽
如果你从腾讯跳槽到阿里,接着又跳到微软谷歌,即便你半年就跳一次,也完全没有问题。然而,如果你是从一个不怎么知名的小厂跳到另一个同样不知名的小厂,这种情况下,即便一年跳一次,人力资源部门都会觉得你跳得太频繁,认为你不稳定,要是半年就跳一次,那就更不行了。如果你目前在小厂,并且将来想要去大厂,那么就一定要稳住,千万不要把简历弄得乱七八糟的。
3、不要闷头搬砖
无论在何处工作,通常是以写业务代码为主,也就是进行基础的开发工作。但既然你决定将来要去大厂,那就绝不能仅仅局限于这种基础的开发工作,而要努力让自己的工作有所创新和突破。
如果发现项目中存在一个结构不太合理的情况,不过凑合着用的话问题也不是特别大,那么你就需要意识到不能凑合,要把它调整得舒适才行,接着就立刻开始行动,直到真正把它处理好。例如,你觉得工作流程中有些步骤属于重复工作,那么你可以思考一下是否可以创建一个新的解决方案来解决这个问题。
我经历的面试,很多时候是让你给出解决方案,重点考查的是技术的实际运用能力。几乎每一轮面试我都能碰到这类题目。这就需要你在平时工作中要有意识地进行积累。如果只是单纯地搬砖,是说不出完整的解决方案的。当然,一些常见的基础知识,像原型链、闭包、diff 算法等,也都会被问到。所以,你不能因为平时搬砖很少用到这些就不去管它们。有些知识点你可能知道是怎么回事,但就是无法清晰地表达出来,这也是不行的。一定要真正地弄明白。
总之,要有自己的思考,不能只专注于搬砖。搬砖是很容易的,大家都在做,都是搬砖的,不能因为大家都一样就觉得自己不能去大厂。所以必须要比别人强,没有条件的话也要创造条件去努力。

个人修炼
如果你实在太过倒霉,所去的公司接连遭遇倒闭的情况,或者遇到的领导们都非常糟糕,导致你不得不频繁跳槽,自然也就没有能够拿得出手的好项目,进而把简历弄得很糟糕,但这并不是就无法补救的。外界条件不可靠的情况下,你还可以仅仅依靠自己呀。
写博客,将平日的技术思考记录下来,把倒腾出来的解决方案呈现出来,创建或参与开源项目,把自己的博客和 Github 打理得有模有样,各种分析、源码、解决方案以及开源项目都有。面试官点击进去查看后露出笑容,这样的你还会担心没有面试机会吗?
个人修炼也有助于我上面提到过的面试官喜欢问的场景设计题
现在需要重构百度 app 首页的 feed 流。feed 流中展示的每一条数据,其功能和样式会因数据归属不同而产生不同效果,像广告、百家号、小视频等。点击数据流会有相应操作,比如打开一个 modal,或者播放一个小视频,或者跳转一个页面。那么,当你接到这个需求时,你想要如何进行设计呢?
这种题目考查的知识点很多,问的问题范围较大。它不会涉及具体的问题点,而是考察候选人的知识广度和深度、平时的积累以及考虑问题的维度等方面。上面那个题没有明确的答案。
这个时候是考验候选人个人修炼的时刻。有的人可能一脸茫然,随便说几句后就不知该如何继续;有的人却能跟你聊上几个小时,且仍意犹未尽。倘若我是候选人,我或许会从长列表的优化方面、跨域或跨页面通信方面、配置化(可维护性方面)、数据预加载方面、数据缓存方面、页面或组件的无缝切换及转场动画方面、离线包或 ssr 等角度来回答这个问题。如果没有这些知识储备,是难以想到这些的。场景设计题是一类能够让面试官全方位认知你,同时也能让你自由发挥的题目,所以一般大厂的面试都会问到这类题目。
然后也有几点需要注意:
1、高质量博客
博客是反映你自身技术水平的一个场所。首先,必须要保证是原创内容,确实是属于你的东西。要是全是搬运的 API 文档,或者是其他人的东西,又或者是小白教学的无脑文章,那还不如没有。因为面试官看到后,只会觉得你就只有这么点水平。所以,一定要保证博客的质量。
2、持之以恒
不能时而做事时而懈怠,必须持之以恒,构建起一个连贯的体验。其一,能让他人一眼就看出你是在认真对待这件事;其二,唯有如此,你才能够拥有足够丰富的积累,几十篇文章必然比仅仅几篇文章更能让面试官全方位地了解你。
亮点
这其实是一个在很多时候可以一招制胜的关键
关于亮点,我之前在一篇文章的最后已经提及过,在此我直接照抄如下:
最近参加了一些面试。发现面试官们都很乐意询问你具备哪些亮点,无论是在业务方面还是技术方面。并且他们会依据你给出的答案继续深入探讨,以了解你这个亮点究竟有多突出。
一个面试官追问你的亮点,实际上是比较愿意给你机会的。因为技术的范围太广了,可能他问的问题恰好是你不熟悉的,这是很常见的情况。例如,你熟悉 vue,而他的团队用的都是 React,那么他追着你问 React 可能很难问出结果。另外,你也无法保证在每场面试中都能保持最佳状态。万一你和面试官根本不在同一个频道上,你们之间相互听不懂对方在说什么,那又怎么继续下去呢?所以将选择权给予你,给你提供机会让你自行选择。这样就会引出另一个问题,倘若你真的未曾做过任何具有亮点的事情,那该怎么办呢?给了你机会,你却都未能抓住,这可不能归咎于他人了。
所以,若你有较高的追求,在平时工作中,即便每天都在写业务代码,你也得有自己的思考。比如,这个组件能否换一种写法?那个需求是不是可以简化?项目里的 webpack 是否需要升级到最新版?这个问题能不能造个轮子来一劳永逸地解决?
无论问题大小,都能够引发思考。实际上,通常情况下不太可能有大问题等着你去解决,多数情况下都是小问题。不过,即便问题很小,解决得多了也是一种可观的积累。通过这种积累,在团队内部,你就拥有了可以拿出来说的输出贡献;而离开了团队,你也能凭借此抓住面试官给你的机会。
有时候,这种亮点比你通过背诵面试题和刷算法要更有用。因为面试题或者算法题,会就是会,不会就是不会。然而,亮点这种东西却没有标准答案,能说的内容有很多。
需要注意的是,你的这个亮点务必足够耀眼,不能仅仅亮一下就消失了,不然容易刺激到眼睛,一定要足够持久。
你需要在你的亮点处有足够的深入和见解。要把上下游以及细枝末节都搞清楚。这样才能足以应对面试官展开的提问。只有这样,面试官才会觉得你确实擅长这方面。
软素质
1、简历用点心
简历是招聘流程开始的重要一步。首先,我们需要找一个好点的模板,因为网上有很多这样的模板可供选择。
然后就是内容要好好写,切忌罗列毫无意义的技术点,什么
jq、vue、vuex、react、redux、http、cdn、vim、git,并非不能书写,而是不要占用过多篇幅去郑重其事地介绍它们,用一句话概括即可,要将重点凸显出来。
不要提及精通某事物,因为对精通的理解因人而异。你或许认为精通就是能在各种场景中熟练运用。然而,面试官可能会觉得,既然你自称精通 js,那为何 vue 是 Evan You 所写而非你呢?或许他们还会故意为难你,所以尽量避免这些容易引发争论的内容。
重点阐述你参与过的项目,包括项目所运用的技术栈,以及大致的功能。同时说明你在这些项目中所扮演的角色。简历要突出重点,无需像文档那样冗长繁杂。对于三年以内工作经验的求职者,简历最好不要超过两页,那些细枝末节的内容可留待面试时再详细询问。
如果你在博客或 github 上有一些东西,那么最好将相关链接带上。如果只是一个没有什么内容的空壳子,就不要将其放置上去。
另外,个人建议在简历上放置一张照片。这样做相当于给简历增添了特定的主语,使其具有明确的个人属性。照片与长得好不好看关系不大,除非你确实觉得自己的长相有点对不起全国观众,若有此情况则可除外。

2、一定要会表现自己
面试官的初衷是想尽可能多地了解你,以便更好地评估你的能力。然而,面试官问的问题可能只有一两句话。作为候选人,不能因为面试官只问你 1+1 等于几,你就只回答个 2 就结束了。这种回答虽然合格,但并非面试官最想得到的答案。
给出标准答案后,你需根据主动面试官所问的问题进行拓展,例如探讨为何等于 2,存在哪些实际运用场景,以往是否有等于 3 的情况等。
如果面试官给你出了个关于原型链的题目,那么你要做的不单是做出这道题,还要主动提及原型链的相关原理,最好当场画出关系图,接着说出有哪些应用场景,像原型链继承等。如果说了这些,还可以继续往继承方面延伸,即便面试官并未询问。总之,要将你的知识点全部展现出来,尽可能多地向面试官展示你的能力。
这并非偷奸耍滑,而是面试官所期望看到的。他无需费尽心思去刻意引导,你便能主动坦白。面试官肯定会感到高兴,因为这至少表明你懂得很多。那些知识点掌握得不好的人,是说不出这么多内容的。
你在某个知识上有深入或发散的表现,这在一定程度上能够触发晕轮效应。某一方面的突出会给面试官留下深刻印象,就如同月亮的光晕一样。这种突出会让面试官下意识地忽略你其他方面的不足。
很多程序猿或许不太擅长言辞,然而这并非让你去进行社交活动,在技术方面的事宜,我认为还是能够开口多谈论几句的。
3、第一印象
面试有时会看眼缘。有的面试官,当你刚见到他时,你就会明白这场面试肯定无法通过;同样地,有的面试官,在刚看到你的那一刻,就已经决定不给你通过了。
所以第一印象很重要。程序猿不需要穿得西装革履,但也不能太懒散。尤其是在个人的精气神方面,绝对不能弱。一定要有精神。不要因为担心面试过不了而表现出诚惶诚恐的样子,你越这样,反而越难以通过面试。
面试你的人,通常是你将来的同事、leader 或者隔壁组的同事。如果换作是你,你肯定也不希望招一个看起来邋遢且性格太负面的人进来当同事。所以,你一定要保持自信。需要明确的是,自信和狂妄是不同的,自信与谦虚也并不相互冲突。

小结
技术人最重要的是自身的技术能力。很多刚毕业的人满怀热情,每天像打了鸡血似的通宵工作也不觉得累。然而,后来被社会毒打次数多了,就很容易感到疲倦。或许有的人喊着喊着就放弃了,开始安于现状。这是很危险的事情,因为技术这条路不进则退,只有持续学习才能在技术之路上越走越远。
一方面,客观的困难确实存在,像工作量大导致没时间,前端技术发展快以致学不完等。这就要求你找到一条可持续发展的路径,例如每周认真研读一篇高质量的技术文章,或者定期进行总结。既不要给自己过多压力,又必须保持学习和进步。
无论你所选择的方法为何,最终最为重要的事情是要将其付诸实践。仅仅收藏了大量优秀文章的链接并将其放置在收藏夹中而使其积灰,是没有任何用处的。
多年开发的老码农有福利赠送,包括网页制作、网站开发以及 web 前端开发,这些都是从最零基础开始的 HTML+CSS+JavaScript。jQuery、Ajax、node、angular 框架等在移动端小程序项目实战方面的内容,包括视频、工具、电子书以及系统路线图等都已整理好。如有需要的伙伴,可以私信我,发送“前端”,等待 3 秒后即可获取领取地址,这是送给每一位对编程感兴趣的小伙伴的礼物。
人在贫穷的时候,命是没有什么价值的!我们在媒体上每天都能见到那些幸存下来的人。像马云、王健林这样的人,有些人曾经比他们更有胆量,更有才智,然而却遭遇了不好的时运。那些人的努力都白费了,个人和家庭的幸福陷入了绝望的境地,他们的艰难与痛苦被忽视,不被这个世界所了解。但仅仅因为穷,我们就应该被人践踏和羞辱吗?当然不可以。