知乎高赞:本科生如何才能进入腾讯、阿里等一流互联网大厂?

知乎高赞:本科生如何才能进入腾讯、阿里等一流互联网大厂?

作者:Eyelids,来源:知乎

自我介绍一下,武汉大学国际软件学院2017届本科生,再过两天毕业。

去年校招拿到了B家的Offer。T家研发校招是一轮跪。

A家似乎是因为斗胆投了算法工程师,又缺乏相关背景,直接被筛了简历。除此以外主要还有亚马逊、微软跟今日头条的offer。

因为觉得做的事情很有意思,再加上一直以来对头条技术驱动的公司文化抱有好感,最后接了今日头条的邀约,去个性化推荐组做推荐算法。

直到今年三月份刚去实习的时候,leader称赞我是去年头条校招反馈最好的几个候选人之一,才知道去年校招算是撞了大运。头条的几个核心部门招聘标准还是挺高的。

好了,不扯远。接下来分几点讲讲,从我个人的视角来看,校招最重要的素质都有哪些。

01

首先是项目经历。在国内找工作,尤其是非微软、谷歌等外企的情况下,这往往是重中之重。
 
当然,作为本科生,尤其是处于正在找实习阶段的本科生,这点要求可以相对放缓。
 
在最理想的状态下,你应该讲出能够让面试官听懂的、让面试官觉得你牛逼且方向对口的项目。这三点按重要程度从高到低排序。
 
★你做的事情应该能够让面试官听明白,这是最低也是最重要的一个要求
项目low不要紧,哪怕是讲课程设计,也聊胜于无。把话说清楚就行。毕竟哪怕项目不合心意,面试官还是可以转而从你扎实的专业基础或是灵活的解题思路上寻找亮点。
面试终究是发生在人与人之间的一种羁绊。问答与交流只是一种手段,对于求职者而言,终极目的还是为了调动面试官的情绪,建立对自己的正面印象。
能让面试官对自己产生钦慕之心,自然是最高的追求。过来讲,面试很忌讳在两人之间形成一种微妙的龃龉。
一个没给人家讲明白的项目,就像聊天群里除了你以外没人get到点的冷笑话般尴尬。不但没有意义,兴许还会产生负面作用。
作为未来同事的候选人,面试官难免要因此质疑一下你的交流沟通能力能否Hold住可能的项目合作与交接。
说到这里突然想起一个很多搞竞赛的同学会遇到的尴尬面试题:总会有一些不知道acm竞赛有几个人组队的,b面试官,在你做完自我介绍以后,冷不丁上让你直接给讲一个在acm里做过的最难的算法题。
毕竟术业有专攻,面试官不懂不能强求,这不是他的过错。
可有些比较实在的同学,这时候就会真的给上一个爆难的算法题来维护竞赛选手的尊严。大致讲一遍解题流程,他不懂。
接着细讲。
结果四十分钟过去了,你会发现你们还在绕预处理数据时用到的一个小结论是怎么来的。面试官看时间到了,就客客气气请你回去等消息,换下一位进门…… 
 这样的故事我听多了,反正至今还不知道有谁在这种情况下最后面试通过的XD
毕竟生活在这世界上,谁不是一座孤岛。没有理解也就没有爱。面试也是同理。

02

然后是,你需要面试官觉得你牛x。
如前面所说的,这种牛逼构筑于被理解的基础之上,是项目经历的核心所在。
牛逼这个词其实微秒,说复杂也复杂。
但说到底仍然是一种情绪、一种主观的印象。举个不恰当的、极端的例子:一个好项目,如果是放在一本学生身上,面试官自然会认为你优秀。
但如果是个三本出身的倒霉孩子做的,也许面试官可以留下更为深刻的印象。
你的项目最好在被面试官充分地展开、理解之后仍然被认为是复杂的。
这种复杂性可能涉及艰辛的公式推导、精巧的代码结构或是用上了炫酷而繁琐的技术特性。这些都是相对客观的指标。
然而互联网嘛,技术栈划分细、变化快。
老道的面试官并不特别关心你做过什么,他会转而透过你的这段项目经历,去观察、揣摩你的智力、好奇心以及执行力分别到达了怎样的程度。
★这里我的建议是,分配好精力。花大量时间,精心准备一个“牛逼”项目。
毕竟,复杂的世界里,一个就够了。
事实上你那几十分钟面试时间里也就够你们详谈一个项目。
人的错觉有很多种,第一印象的效应尤为明显
又或是八二原理、马太效应、路径依赖……  
作为一个有志于盅惑人心的面试者,你得把自己想象成是一个剑客,十步杀一人、光速出剑、一击毙命。
只要心够决,去把一个项目做好、做深、做到极致。做完以后再深入了解项目细节,包括上游客户需求、下游开源工具特性和原理、可行优化方案以及后续可能的开发方向。
这是你的使命,只能一次成功,不容许失败。
举个例子,记得15年的7月份那会有一篇爆款论文,关于如何利用神经网络训练一个转换艺术风格的迁移学习模型。
如果你作为一个两个月后找算法工作的大三本科生,那么把论文细细读了,公式全部会推,写靠谱代码把项目做好。
在面试前再把相关算法原理跟实践中遇到的困难以及你攻坚克难的过程耐下性子理清楚、面试的时候讲明白。
是不是显得很有含金量、很能体现个人动手能力与技术好奇心、在一群连基本的k-means都写不好的校招生中,陡然间鹤立鸡群了?
★除了让面试官理解你牛逼以外,方向对口也重要。
毕竟校招统一面试,如果没有恰到好处的内推,往往是需要部门主动捞你简历约面试的。
又比如过了谷歌的面试,后续也还是需要做team match。
很多时候去哪不是你说了算,而是你的简历起决定性作用。另外方向对口对于面试本身的重要性更不必多说。就算是校招,相同水平下谁都更想找熟练工吧。
所以你得提前很久想清楚自己想干什么,提前做准备。
找工作这件事很多时候是蝴蝶效应。也许偶然帮老师做了个项目,然后主要靠这个项目找了个实习接着做相关方向,最后的正式校招就很可能这么一直续下去。
 
最好从一开始就不要将就。
 
有道是,Fuck everything,but growth. 
想清楚做什么才是有用、有效率的。
比如本科毕业就打算工作的,如果真的想做机器学习算法,那么我认为极端情况下,宁愿去有活力的小公司做算法岗,也别去谷歌做前端实习。
其实一次实习的机会成本还是挺高昂的,而实习的title在最后的校招中也未必如你想象得那么有用。
我个人曾因为在微软实习的项目相对零散而兴趣不相关,在去年校招的过程中甚至直接将这一段实习经历删掉,以避免与面试官在这一点上陷入尬聊的窘境。
然后是专业基础知识。
正常情况下外企在这里不会做太多要求。
而BAT三家都会考察基础知识,且各有侧重面,这个你们具体还是要看面经。
不同考察方向都有哪些常见知识点,你们随便一搜都有。
最好能结合之前的专业课所学,在具体的面试知识点上深入下去,了解细节。
当然大学前几年能把计算机组成原理、计算机网络以及操作系统等几门专业课基础先打牢了,会好很多。
我承认,本科的CS教育往往扯淡,但是我建议该上的课还是应该上一下的,哪怕自己跟着书本自学。不去上课,你的自制力恐怕没有想象中那么强。
这些基础课程对以后的职业生涯会有潜移默化的影响。
毕竟,计算机上的设计思想,很多地方都是可以互相借鉴的,这些知识会成为你以后解决工作中遇到的棘手问题的灵感来源。
而且这部分知识都是成体系的,等工作了以后就没有整块时间去啃了。劝君惜取少年时。
★面试中所涉及的另一个重要部分是算法题、代码题,以及一些智力题。
 
这一块我比较有心得。面过不少公司,基本还没有不会做的题,最多偶尔在思考过程中卡一下。除了有一次面试官让我写快排,我写完以后改了一次还没写对。
面试时间有限,问到的题目都不会太难的。当然也看候选人背景,经历以竞赛为主的就会给难一些的——不会涉及太繁琐的分析,往往只需要你灵机一动。
记得我曾临场解决了“2n+1个数,n对一样的,找不一样的”,以及“3n + 1”和“3n+2”版本的素质三连。还有一次电话面试,因为一个智力题答得太快,面试官认为我是用电脑查的答案。
这里还是有一些技巧的。
不太好用语言表述出来,就像篮球一样,要在实践中练习投篮的感觉。
所以多争取面试机会很重要。我自认为心理素质算是不错的,但是最开始经历的几次面试,都会因为紧张而产生智商滑坡的情况。
面试算法题、思维题,也是一种测试团队协作能力的方式。
面对算法题,有经验的人往往会建议你,不要急着给出最优解,先讲基本方法,可以暴力一点,然后慢慢优化。这很有道理。
其实最好能按一定的节奏来一步步地展现你的思考过程,甚至遇到不太会聊的面试官你得自己学会去引导,掌控面试的节奏。
甚至有的时候,你给讲一些你觉得很靠谱的思考路线,面试官也会主动提醒你,想歪了。
或是另一种情况,饶有兴致地陪着你按照新思路想下去,最后不论是否能解决问题,往往都会觉得你想法不错,是个面试加分项。
实在没有好思路的情况下,试探性地讲些模糊的大体思路也比过久的沉默要好。
哪怕随便瞎讲点什么,面试官兴许会提点你一下,继续观察你接下来的表现。
用考场上的话来讲,面试中要学会尽量拿到步骤分。
如果你以一个人冥思苦想的方式玩命怼一道难题而不得,中间过程一言不发,那么好比是考试交白卷。

03

最后,在校招前,争取做一份实习
 
如果你在武大国软这种自由放浪的环境下,从大一开始出去实习,到校招前实习个四五次完全存在理论上的可能性。
实习次数多了,你也就可以循序渐进地换更好的公司,跟更牛逼的同事做更牛逼的项目。至于结识朋友、邂逅妹子、开阔视野什么的更不在话下。
而对于大部分中规中矩度过前三年本科生涯,基本功还算扎实的同学来说,大三暑假的实习期将会是一个补充项目经历的大好机会。
最好能争取一个稍有难度的、相对独立的项目好好做。这是你将来的几个月冲刺校招的主要资本之一。

04

最后,作为一个毕业生,一个行将凋零的老兵,再多讲几句不切实际的大道理吧。
这些话很想讲给多年前的我自己听,但是不现实了。沉舟侧畔千帆过,现在我把积淀后的思想赠予你们。
首先,快速迭代自己的方法论。
 
很多孩子在刚上大学的时候,因为太习惯于被父母老师安排的人生,往往只重视战术,不懂得经营发展战略眼光。
大局观很重要。有的时候只是只言片语,一点小小的信息素,就有四两拨千斤的效果。
人与人之间在判断力上的差距其实很重要。在一些关键的决策点上,如果能稍微提高百分之一的准确率,乘上可能的潜在收益或是损失,都会是很大的数学期望值。
记得去年冬天参加叉姐的camp的时候,覃超过来给我们做过一次讲座。
提问环节的时候我问他,在曾有FB面试机会的情况下,直接去CMU读书,是否考虑过不妥。
他说,这是他人生最后悔的决定之一,如果早入职几年,存在获得数百万美刀期权的可能性。
如果让现在的我回到大学报到的时候,大概会出去做很多次实习、多认识很多朋友、去折腾很多奇怪的项目,甚至刷语言绩点准备出国。
可是那时的我什么也不懂,这种状态持续了好几年。现在回想起来,本科时代的大部分事情我都做错了,做对的判断只是少数。
基友→WenjieTan
在校的时候,曾经运营过一个“咖啡之约”的公益活动。学弟学妹们请已经身为成功人士的学长喝咖啡,讨教学长学姐的人生经验。我觉得就很不错。
从个人角度出发,如何高效率地获取信息以及反刍,也是一个很有意思的课题。
举个例子,你可以考虑挑选一定数量的靠谱微信公众号来了解互联网信息,不要多,控制在每个公众号的推送都能定期读完的关注规模。
当然,其实互联网圈的媒体人写东西都有点虚浮,对不同的观点你要有自己审慎的判断。
上述的例子只是抛砖引玉。其实解决信息不对称,甚至是构筑自己相对于常人的信息壁垒,仍然有很多可行的方法有待探索。
年轻人可以多尝试、多试错。毕竟年轻没有失败,等级低就是复活快!
第二点是,不要怂。
 
这一点我深有感触。尤其是针对学CS的孩子来说,很重要。
这个专业出身的同学,往往家里不是很富裕,见识不够广,不够自信。
甚至有些还会因为过于敏感多思,反而过于独善其身,存在与人交流的障碍,又或是做事情瞻前顾后、缺乏决断,聪明反被聪明误。
我也见过很多人,当本可进取时,却故作谦卑,因为不愿承担过大的心里压力,错过了唾手可得的面试、出国、比赛机会。
我在读大学以前,一度非常自闭,不爱与人说话。
这几年下来改变了很多,虽然仍有轻微的社交恐惧症,但只是面对陌生人会有点难受,正常交谈是没有问题了。
事实上我心里清楚,我是花了大力气来打磨自己在这方面的性格缺陷的。
我常常分析,为什么会对他人感到恐惧呢。
后来发现,因为我总是习惯性地在潜意识里预设,他人、或是某个外部事物是完美的。
但经历了很多之后又发现,没有什么是完美的,均值回归是普遍存在的现象。
事物的诸多美好品质之间并不存在绝对的因果关系,往往只是弱相关。
高大上的互联网公司、遗世独立的牛人、狂拽酷炫的技术,只是世人所见的一个片面。哪怕是那天上的月亮,也有圆缺,存在暗面。
本该是不卑不亢的平等交流,却因为过分谨慎而表现得小心翼翼、唯唯诺诺。我也曾因此错过了爱情。
 
最后,有自己的追求。
 
这点见仁见智,不强求。像大多数人一样,我也总是在思考,人生的意义是什么。
成长的过程中,我发现身边的大环境是,总是会预设一个最优路径。
比如,中学时代大家的注意力都在高考上,觉得上了好大学就可以万事大吉。
搞竞赛的同学容易认为打好ACM就可以获得一切。
CS专业的同学整日想法设法地想要进BAT、谷歌。投资人对共享单车、共享充电宝这些项目趋之若鹜、蜂拥而上。
然而,名校是终点吗?ACM World Final是终点吗?Google优雅舒适的工作环境里和身为谷歌员工的逼格是终点吗?
无论是成绩突出的高中学霸,还是表现优异的大学生,在获得了满意的结果,进入人生的下一个阶段以后,还是会有很多感到迷茫。
像艘驶入无人深空的太空飞船那样迷失了方向。
或许从一开始我们就错了,不该过分执迷于一个成就、一个被预设为完美,得到之后却终究归于平淡的的title。
叔本华说,人生就是在痛苦和无聊这二者之间像钟摆一样摆来摆去:当你需要为生存而劳作时,你是痛苦的;当你的基本需求满足之后,你会感到无聊。
我想,人生本来没有意义,痛苦欢快不过是虚幻。
而创造,是生而为人的唯一救赎。
Stay hungry, stay foolish.
本文由 程序员小吴 创作,采用 CC BY 3.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在先添加作者公众号二维码。
五分钟学算法 » 知乎高赞:本科生如何才能进入腾讯、阿里等一流互联网大厂?

我还会在以下平台发布内容

GitHub 哔哩哔哩