简单介绍下背景,我司是北美一大型互联网公司,每一年九、10月份都会在一些高校招开发的实习生,但选拔标准和正式员工标准已经差很少了,通过实习后,很大几率会拿Return Offer。今年我第一次参加了家附近一所大学的实习生招聘,这是一所美国Top 10的知名大学,我是第一轮校园的面试官之一,此次校园招聘对我来讲也是一次可贵的体验,在周筠老师的建议下把这个过程写下来记录一下。css
首先HR在 Piazza.com 、Career Fair 等校园招聘网络平台上发布招聘信息,也会在内部让员工们推荐(推荐成功被录用有不菲的奖励),先一拨人到校园开宣讲会,面对面答疑,这个环节没参加,据之前参加过的同事说很是辛苦,得站一天,不停的回答各类问题。前端
而后HR会收集简历,初步筛选后,通知经过在同一天到大学的就业中心进行第一轮面试。整个面试过程从早到晚一成天时间,每一个候选人面试一次,一次55分钟,每一个面试官当天要面试6我的左右,一小时一个。python
这一轮面试很关键,经过了会安排后续面试,没经过就没有机会,固然相对来讲标准也会略微低一点,以避免错过一些好的苗子。git
在首轮面试结束后,HR会给经过的候选人邮件和电话通知,安排下一波的面试,后面一波面试通常会直接安排在学校最近的公司分部办公室,连续3轮,每轮1-2人,一次也是55分钟。面试官通常来自不一样部门不一样角色,其中有专业技术人员,有目标岗位的经理,还有不一样岗位的人会一块儿参与,因此面试技术岗位,面试官也可能会是产品设计、市场的人。这些面试官其中有一个最重要的角色叫Bar Raiser,这我的要负责肯定候选人最终的面试结果。github
在全部面试结束后,HR会安排全部参与过这个候选人面试的面试官一块儿开一个Debrief会议,最终Bar Raiser决定是否录用。若是录用的话,HR根据岗位和工做经验评级以及肯定待遇,最终将结果通知到候选人。web
面试结束后,全部面试官都要给面试人打分,打分会分红四档:面试
根据你们打分的结果,Bar Raiser在Debrief会议上要组织你们一块儿讨论,基本原则是这样的:算法
最终Bar Raiser会综合你们意见来作出最终决定。sql
每一个面试官都会有本身的面试风格,一般来说个人面试风格是这样的:编程
先提早5-10分钟阅读一下候选人的简历,对于简历提到的内容在网上查询核实一下,若是有github连接,是必定会去看看上面的项目和代码,有linkin连接也会大概看看,有个大体印象。
见面后,首先会简单自我介绍一下,让对方对个人身份和角色有个简单了解,也适当缓和一下紧张气氛。我比较倾向于营造一个轻松的面试氛围,让面试人有机会充分发挥出他擅长的部分,经过观察了解他擅长和突出的部分是否是跟我想要的匹配。有的面试官和我偏偏相反,喜欢给候选人很大压力,观察候选人在压力下的反应。
自我介绍完后会让对方开始简要介绍本身和项目经历,对于介绍的项目内容会适时打断询问一些细节,我须要经过对这些细节的提问,去核实候选人在简历上写的和讲述的内容是否真实,了解候选人在项目中担任的角色,在遇到问题时是怎么解决的,沟通能力如何。
除了项目以外,还会拉拉家常,问问他平常感兴趣的事情,看候选人是否是属于那种对技术真的有激情的,好比业余时间还写写开源程序的确定是有加分的。这个过程会持续15-20分钟左右,基本上会对各方面有个大体了解:技能是否是和目标岗位匹配,是否是适合团队合做,是否是对技术有持续热爱,有没有成长潜力,是被动仍是主动工做。
面试技术岗,代码能力是相当重要的,甭管说的多溜多牛逼,仍是得show me the code,因此接下来的环节就是代码测试,题目的难易度有时候是和前面相关的,若是前面聊的好,可能会相对容易一点,不想误伤;若是以为不靠谱,可能会直接上来一道很难的,这样结果就不容易有争议。此次校园面试我只是准备了一道介于Easy到Medium难度之间的题,不算复杂,作对也须要一点基础。
一般每一个面试官都有几道本身喜欢的面试题,从简单到复杂的都有,甚至是一环接一环的,先一道容易的,作出来给你加点条件继续。一般咱们代码测试都是基于CodePad,能够方便的把题目要求写在上面,支持多种语言,能够实时编译和查看运行结果。也有同事喜欢用白板的。我此次直接选了用Leetcode,不只能够像CodePad同样在线运行调试代码,还有不少test cases帮助验证代码正确。我通常给这个阶段会安排30~40分钟,作的过程当中会有一些沟通,必要的时候给一些提示和指导,若是到时间没作出来,那么很遗憾恐怕是没办法经过的,若是作出来后,还会问一些后续问题,在这个过程当中能够观察候选人写代码的熟悉程度,解决问题的方式方法。
最后我通常会预留5分钟左右时间给候选人提一些问题,这也是个很好的互动过程,毕竟面试是双向的,公司在选择候选人,候选人也在选公司,能够经过这种方式让候选人对公司和将来可能的工做环境有更多了解。
如前面所述,每一个面试官都有本身的风格,以上仅表明我的。
给我分配的有6个候选人,都是刚上大三的学生,从9点开始,上午三个,下午三个,中午休息一小时顺便写上午的总结,每一个面试官都有单独的一间会议室,条件不错,有白板、投影和WIFI。
0号候选人爽约了,因而我有了一个小时的休息时间,趁这时间解决了个bug,顺便把剩下的候选人简历又都看了一遍。
第1号候选人简历很好看,有个用GitHub的Pages作的,网页作的挺漂亮的,css动效也很酷。美国本土出生的小孩,从初中毕业就开始本身写App,软件硬件项目都有涉猎,大二暑假就有实习经历,还参加了各类俱乐部,github上还有个C++ 项目,代码不算多,但也还算工整。
在聊的过程当中,发现小伙子很健谈,也展现出他兴趣的普遍。我特别问了他github的项目,这是他参加一个机器人项目的副产品。另外我也对他的我的网页表示了很大的确定,捎带着咨询了他一些CSS和js细节,但发现其实用的是现成的模板,对细节并非很了解。因此说简历包装的太好,也不见得是好事,会抬高面试官指望,若是没有与之匹配的实力,反而容易造成落差。
前面20分钟聊下来,感受这哥们属于兴趣普遍,但不算太专一,善于沟通。可能更适合作PM之类的岗位,感受不像那种能沉下心来钻研技术的那种。从岗位匹配的状况来看我以为不算特别合适。
无论怎么说仍是看看代码测试的结果吧。打开leetcode,把题目介绍了一遍后,1号候选人立刻就有了思路,因而拿上纸和笔给我分析和讲思路,并写了伪代码实现,给个人感受是应该是之前刷过这题,以及有过一些针对面试的套路培训。接下来就是代码实现,选择了他熟悉的C++,很快就把代码实现了,从写代码的熟练程度来看,看的出仍是有必定代码量的,代码格式有点乱。代码第一次运行没法编译经过,好像是API有些不同,C++我是真一点不懂,帮不上,因此建议他直接Google,很快就找到了答案,可是有几个测试没经过,几回修正后顺利经过全部测试。预计花了30分钟时间,若是之前没作过的话,这个成绩仍是不错的,若是作过的话只能说通常,可是作没作过并很差考证。
继续问follow up问题,回答的也不错,最后问他有没有问题须要问个人,他问了我司同事间人际关系如何,他以前实习的公司人际关系很复杂。这点我司到仍是不错的,给他解答一番后他也比较满意。
总体面试下来,虽然我感受他题目他刷过,可是综合来说代码水平还行,只能说他运气不错,并且这毕竟是第一轮面试,我这边经过了,他后面可不必定这么好运气都能遇到作过的题。因此最终仍是给了经过。
从简历看,2号候选人是个学霸,从印度考过来的,GPA 3.9+,要知道学校牛的话拿高GPA挺难的。上大学前就开始利用假期实习作项目了,算下来如今大三都有三年项目经历了,在学校也跟着导师有作一些项目。
2号候选人给我介绍了一些他的项目经历,其中有些web前端的,有些是后端的,暑假实习的一个项目是基于MEAN架构(MongoDB Express Angularjs Node)的,都是他本身边学边搭建的,询问了一些技术细节,基本能够印证他说的仍是挺靠谱的。为了考察他知识面,让他讲了一下MongoDB和Mysql的区别,关键点讲的挺到位,很明显平时比较注意积累这些方面知识,做为大学生来讲很不错了。
聊下来给我感受很是不错,属于那种作事情比较专一和认真、也勤奋努力的,这种人才挺很少见的,若是没看走眼的话,应该属于那种给一个任务,稍微指导就能够有个不错结果的,几年下来能成长为团队核心。
接下来是代码测试,一样的技术题,在搞明白意思后也没有多废话,直接开始写代码,实现比较中规中矩,但对语言熟练程度不错,一看就是有写过不少代码行经验的,代码格式不是太注意。第一遍写完,结果提交到LeetCode后,有几个test cases失败了,发现是有些边界条件没有判断清楚,几个来回后,几乎没有太多提示,就把修复了全部问题,经过了全部测试用例。用了大约30分钟。而后我又花了大约5分钟时间问了一些follow up的问题,也答的不错。
最后留了大约5分钟给他问一些问题,他很感兴趣咱们平常工做内容是什么?对于这种人才我确定是要费心让他有机会加入的,否则就被别的公司抢走了!因而我给他详细讲了一下今年暑假咱们组实习生平常的工做,以及咱们是怎么帮助她成长的。
最后结果固然是经过,很是不错的候选人。
3号候选人的简历也不错,从国内考过来的,大一暑假就开始实习,大二暑假也都在实习,上学期间当助教,有个漂亮的我的主页,把他全部的项目都列上去了,看着很可观。最让我印象深入仍是在App Store有个能够下载的App,GitHub上有几个活跃的项目。
在给我介绍他项目经历的时候,我重点问了下他App Store上的项目,他跟我说他上学期间,发现学校的网站很难用,因而他就本身把数据扒了下来,作成了iOS和Apple Watch的App,一共有4500多的下载,大量的好评。为了核实这项目确实是他本身完成的,我提问了一些技术细节,例如他如何抓数据,和如何实现登陆的,他给我解释完了后,顺便说了下全部代码都提交到了github上,因而我立刻打开了对应的GitHub Repo看了下,两年来一共280多个commit,代码细节和他描述的彻底吻合。
前期的沟通结果我很是满意,我我的是特别喜欢这种类型开发人员的:善于发现问题,本身动手解决问题,善于自学和乐于分享。前期的沟通是有不少主观色彩在里面的,无论喜欢仍是不喜欢,最终招过来仍是要看能不能写代码,能不能完成平常工做,因此代码测试都是必不可少的。
在了解清楚题目意思后,也没有太多废话,直接就开始写代码了,我原觉得他会选择Swift或者OC,没想到是用的Python,并且还挺熟练的。代码也算是中规中矩,逻辑清楚,可是在一些边界条件上有些欠缺,短期内没能本身搞定,因而给了一些提示,在提示下很快解决了。问了一些follow up的问题,也答复的不错。
从代码面试的结果看,也暴露出3号候选人的一点问题,就是代码经验是偏向平常实际项目的,对于基础性的,尤为是面试方面的训练偏少一些。并非说他的代码能力有问题,工做中的代码他确定能够完成的不错,但在面试代码测试会比较吃亏,我甚至有点担忧他后续面试会不会遇到不会作的题目而不能经过,那就太惋惜了。
最后提问环节,他问了我以为在平常工做中最好的部分是什么?我告诉他在我司工做最好的部分就是你写的程序,天天全世界都有好多人在用你的产品,这足够激动人心了。我顺便问了他一下毕业的打算,他说还没想好是工做仍是考研,我从一个过来人角度建议他毕业后仍是先去工做几年比较好,而后再决定要不要上研,感受他毕竟不像那种科研型的,更适合到大公司去历练历练。
最后结果固然也是经过,这种虽然面试经验不足但动手能力强的候选人,其实偏偏是面试中容易被误伤和忽视的,不少leetcode刷的烂熟的在实际工做中多半没这种好使。
4号候选人学习也不错,GPA 3.8,在Machine Learning和软件开发都有经验,美国本土孩子,大一暑假就开始创业作项目赚钱,大二暑假在一个医疗中心实习,这学期开始在学校当助教。
他在Machine Learning和软件开发两个领域都挺感兴趣的,我问他对哪一个更有兴趣一点,他也是有点纠结。在介绍项目的时候,我对他给医疗中心作的项目很感兴趣,问了一些项目上的细节,讨论了一下若是项目的需求发生特定变动时,他的设计会如何修改,总体上回答的仍是不错的。对于这些有实际项目经验,而且认真完成项目的都都是感受不错的。
接下来是代码测试部分,咱们花了一点时间在理解题目意思上,多是我没表达清楚,但在动手前搞清楚问题绝对是一个值得确定的事情。也是选的python,一样的没有太多废话,开始动手编码,代码熟练程度绝对是能够的,代码风格偏向快猛糙一点,代码逻辑我一时之间没太能理解,不过先看看运行结果再说,运行后有几个测试用例跑不过去,因而他开始加上一些特殊逻辑的处理,但很快又发现有其余边缘条件须要考虑,因而添加了更多代码,并跟我解释,我表示能够先把代码跑起来,后面还能够优化。可是时间开始愈来愈少,有点着急了,而我对他的逻辑还没能彻底理解,尝试帮助他一块儿分析一下,没想到反而是在添乱。而时间更少了,但我以为他应该有能力本身搞定,因此就让他不要着急,我能够多给他一点时间,最后花了将近40分钟时间,仍是没能解决,我以为也不必继续了,因而咱们先结束了编码。
每两个面试之间,我有5分钟休息时间,已经快到下一个面试的时间了,但我以为仍是应该把这个时间给他问他有没有什么能够问的,他问了咱们通常平常工做是什么样的?这是个挺好的问题,因而我给他大概描述了一下平常工做的内容,由于他也学过一些敏捷开发项目管理的知识,因此也给他讲了下咱们平常如何使用敏捷开发的。这个沟经过程还挺不错,在下一个面试开始前1分钟结束了整个面试。
从他写代码的过程来看,他代码能力仍是不错的,对Python很熟悉,面试过程可能仍是有些紧张影响了发挥,若是是平时应该是能够作出来的。我甚至以为他应该是比1号候选人要更合适一些,愿意给他一个机会。但代码没完成仍是硬伤,我有些纠结,因而决定看看最后一个面试的结果再最终决定。
5号候选人是个ABC,大学里拿了很多奖,大一大二暑假都在实习,还有几个我的项目,在Github上能够看到记录,可是不少都是Private的无法查看,有Web和iOS开发经验。
在向我描述项目经验的时候,他重点介绍了正在作的我的项目,是一个跨平台的移动App,基于React Native来写的,正好React我也比较熟悉,就问了一下他React和Redux的关系,如何用Redux管理state,没想到他解释的很是清楚,这让我很意外,由于这个问题其实不少有几年工做经验的前端开发人员都不必定搞的清楚。接下来他又谈到由于他在作App时遇到产品设计和UI设计上的一些问题,因此前不久开始学习产品设计和UI设计相关的知识。由于正好他作的事情我都很熟悉,因此聊的很投缘,时间还超了一点。
从聊的过程当中,我能感受到这是一个很是聪明的人,动手能力强,同时兴趣也普遍,不只本身搞定代码,还会去尝试学习设计领域。但这也让我隐隐有些担忧,由于若是兴趣转移快,容易分心,不够专一,那么即便很聪明,也可能会作事情很随性,到头来什么都会,却什么都不精。
在搞明白题目要求后,他立刻开始写代码,选的是Javascript,逻辑清晰,代码规范很好,缩进空行对齐都刚恰好,让我这个有点代码规范强迫症的看了一天糟糕的代码规范后瞬间舒服了不少。他先实现了个简单逻辑,简单测试没问题后,接着实现了完整的逻辑,代码很是简洁清晰,来回两三次就经过了所有测试,整个过程估计15分钟到20分钟,很是高效。
对于代码测试的结果我很是满意,这是我当面面试最好的一个,接近完美了,也打消了我前面的一丝疑虑,以为这种真正聪明的人,属于彻底有超出常人精力和智力去搞定这些事情的。我以为也不必继续其余的代码测试,简单的问了一下follow up问题,而后把剩下时间留给他看有没有什么问题的。
他也问了下咱们平时平常的工做是怎样的,跟2号候选人的回答差很少,我给他讲了下咱们暑期实习生的平常工做,以及她暑期实习得到的成长。由于时间很充裕,因此他又接着问了一个在咱们公司工做和生活平衡性的问题,看得出他还比较注意工做和生活的平衡,这个问题我并无一味吹嘘咱们公司多好,而是从我我的平常工做的状况客观描述了一下,好的方面,例如咱们平常能够根据须要Work From Home,对我这种能够节约大量路上的时间,很差的方面例如咱们也会有oncall,有时候半夜会被生产环境故障的报警电话叫醒,可是轮班制的,因此整体仍是不错的。同时我也给他委婉建议了一下,前期能够多专一一些,精力不要太分散,一些事情能够需求别人的帮助完成。
对于5号候选人,我给了全天全部候选人里最高的面试评价,同时也最终决定4号候选人是不经过,只能说运气差了点。
此次校招的面试,我一共面了6我的(算上一个缺席的),最终经过了4个,经过比例还算比较高的,这也有些缘由:
在拿到各个候选人最终结果汇总后,我必须得认可个人同事们都很厉害,从不少不一样角度看到了我面试时没发现的问题。个人不少面试结论更多来源于一种靠经验积累获得的直觉,虽然个人直觉仍是比较可靠的,可是在Debrief会议上并很差表达这种结论是如何得出的,而他们的结论更可能是从不一样角度基于事实的推断。这是我须要在之后的面试过程当中去学习和提升的。
下面仍是简要说一下各个候选人后续结果。
1号候选人在第二波面试结果里面争议很大,从1分Not Hire到4分Strongly Inclined to Hire的结果都有。
4分的同事的意见是以为他有潜力、积极,能完成平常工做,还有缘由是基于文化和种族上的考量,这是个少数族裔候选人。3分的同事以为代码方面能力仍是不错的,知足岗位要求。
2分的同事是Bar Raiser,他其中一个担心和我是比较接近的,即1号候选人的的兴趣并不在于技术上,他的精力和兴趣太过于分散,没有明确的目标。另外他看到了一些我没看到的问题,例如过于关注细节而忽略总体,沟通的时候少倾听多絮叨。
1 分的同事是考察的技术设计,客观讲这轮仍是有点难度的,设计应该不是1号候选人所擅长的领域,因此他在很大压力的状况下开始急躁起来,暴露出了沟通上很大的问题,在面试过程当中执拗己见,不理会面试官的建议和提示,在错误道路上越走越远,最终设计结果和沟通结果都很糟糕。
在每一个人陈述完本身的结果后,Bar Raiser问有没有改变本身结果的,并重点和Not hire的面试官沟通,看有没有可能改变结果,可是这个同事很是坚持,认为确实不合适,通过反复讨论没法达成一致后,Bar Raiser决定最终选择不经过。
2号候选人得到你们一致好评,一个4分,其余都是3分。你们都对他的代码能力、沟通、学习能力等方面充分确定。在Debrief会议上简单走了下流程就算是经过了。
前面我在面试3号候选人时说到过,对他代码测试方面是有一点担心的,果真他的结果里,一个2分(Inclined Not to Hire)一个3分和两个4分,有个2分是个危险的信号。
此次的Bar Raiser是个产品经理妹子,她给了4分,理由很充分:
3分的同事对于他的代码和沟通都表示了确定,以为略微欠缺的仍是在作的过程当中须要一些提示,可是反应还挺快。
2分的同事主要也是考察编程的,但对于编程的结果不是很满意,以为低于他目前面试的候选人的平均水平。
另外一个4分同事是和Bar Raiser一块儿面试的,一样对于3号候选人的沟通、学习能力、主动性很是满意。
总体结果都不错,可是仍是有个2分,关键时刻我帮助说了几句:首先这个候选人确实不太擅长这种面试时的编码,有所欠缺,可是他的学习能力和潜力都毋庸置疑,另外从他github上对那个App的将近300条提交记录来看,足以能够证实他是一个能锲而不舍,而且主动学习的优秀人才。
最后给2分的同事在听完咱们的陈述后打消了他对3号候选人编码能力的疑虑,决定改为3分(Inclined to Hire),最终经过了整个面试,拿到了Offer。
5号候选人最终结果也很不错,一个4分,其余都是3分,没有什么争议。
Bar Raiser是个工做经验比较丰富的女同事,他对5号候选人各方面都很是满意,惟一有些担心的就是这个候选人很是聪明,不知道是否会兴趣转移太快而作事情随性,但谁不肯意给聪明人一个机会呢?
面试的一个Manager给了4分,而且很是强烈的但愿5号候选人能到他所在的项目组去实习。
最终也是毫无悬念的拿到了Offer。
此次我经过的4个候选人有3个拿到了最终的Offer,结果仍是挺不错的,整个过程也是挺客观公正的。但愿他们明年暑假都能过来实习,有更大的成长。
最后祝你们好运!我微博帐号是 @宝玉xp ,知乎专栏 - 宝玉的专栏 谢谢!