记在美国的一次校园招聘
背景
背景介绍
简单介绍下背景,我司是北美一大型互联网公司,每年 9、10 月份都会在一些高校招开发的实习生,但选拔标准和正式员工标准已经差不多了,经过实习后,很大概率会拿 Return Offer。今年我第一次参加了家附近一所大学的实习生招聘,这是一所美国 Top 10 的知名大学,我是第一轮校园的面试官之一,这次校园招聘对我来说也是一次难得的体验,在周筠老师的建议下把这个过程写下来记录一下。
招聘流程
首先 HR 在 Piazza.com、Career Fair 等校园招聘网络平台上发布招聘信息,也会在内部让员工们推荐(推荐成功被录用有不菲的奖励),先一拨人到校园开宣讲会,面对面答疑,这个环节没参加,据以前参加过的同事说非常辛苦,得站一天,不停的回答各种问题。
然后 HR 会收集简历,初步筛选后,通知通过在同一天到大学的就业中心进行第一轮面试。整个面试过程从早到晚一整天时间,每个候选人面试一次,一次 55 分钟,每个面试官当天要面试 6 个人左右,一小时一个。
这一轮面试很关键,通过了会安排后续面试,没通过就没有机会,当然相对来说标准也会略微低一点,以免错过一些好的苗子。
在首轮面试结束后,HR 会给通过的候选人邮件和电话通知,安排下一波的面试,后面一波面试一般会直接安排在学校最近的公司分部办公室,连续 3 轮,每轮 1-2 人,一次也是 55 分钟。面试官一般来自不同部门不同角色,其中有专业技术人员,有目标岗位的经理,还有不同岗位的人会一起参与,所以面试技术岗位,面试官也可能会是产品设计、市场的人。这些面试官其中有一个最重要的角色叫 Bar Raiser,这个人要负责确定候选人最终的面试结果。
在所有面试结束后,HR 会安排所有参与过这个候选人面试的面试官一起开一个 Debrief 会议,最终 Bar Raiser 决定是否录用。如果录用的话,HR 根据岗位和工作经验评级以及确定待遇,最终将结果通知到候选人。
招聘标准
面试结束后,所有面试官都要给面试人打分,打分会分成四档:
- (1 分) Not Hire:表示候选人水平是低于平均水平的,也不适合其他岗位,不录用
- (2 分) Inclined Not to Hire:表示候选人不适合目标岗位,但可能适合其他岗位,倾向于不录用
- (3 分) Inclined to Hire:表示候选人水平符合目标岗位,建议录用
- (4 分) Strongly Inclined to Hire:说明候选人属于那种非常优秀,水平高于公司 75%值的,强烈建议录用
根据大家打分的结果,Bar Raiser 在 Debrief 会议上要组织大家一起讨论,基本原则是这样的:
- 高标准要求:所有录用的应该高于公司平均水平 (50%),应该招聘哪些优秀的并且能带动其他人的人才。
- 公司优先:招聘那些学习能力强,能适应公司岗位要求,适应公司文化的人才。
- 专业性:招聘在专业领域有专业技能的人才
- 成就&证据:招聘那些取得过一定成就和聪明的人胜过只是有工作经验的;要能证明这些成就是真实的。
- 明确的结果:如果纠结这个人招还是不招,那么答案就是不招,宁缺毋滥。
- 一票否决:一般来说 Bar Raiser 不需要动用一票否决权,目标是大家通过讨论达成一致意见。
最终 Bar Raiser 会综合大家意见来做出最终决定。
我的面试风格
每个面试官都会有自己的面试风格,通常来讲我的面试风格是这样的:
先提前 5-10 分钟阅读一下候选人的简历,对于简历提到的内容在网上查询核实一下,如果有 github 链接,是一定会去看看上面的项目和代码,有 linkin 链接也会大概看看,有个大致印象。
见面后,首先会简单自我介绍一下,让对方对我的身份和角色有个简单了解,也适当缓和一下紧张气氛。我比较倾向于营造一个轻松的面试氛围,让面试人有机会充分发挥出他擅长的部分,通过观察了解他擅长和突出的部分是不是跟我想要的匹配。有的面试官和我恰恰相反,喜欢给候选人很大压力,观察候选人在压力下的反应。
自我介绍完后会让对方开始简要介绍自己和项目经历,对于介绍的项目内容会适时打断询问一些细节,我需要通过对这些细节的提问,去核实候选人在简历上写的和讲述的内容是否真实,了解候选人在项目中担任的角色,在遇到问题时是怎么解决的,沟通能力如何。
除了项目之外,还会拉拉家常,问问他日常感兴趣的事情,看候选人是不是属于那种对技术真的有激情的,比如业余时间还写写开源程序的肯定是有加分的。这个过程会持续 15-20 分钟左右,基本上会对各方面有个大致了解:技能是不是和目标岗位匹配,是不是适合团队合作,是不是对技术有持续热爱,有没有成长潜力,是被动还是主动工作。
面试技术岗,代码能力是至关重要的,甭管说的多溜多牛逼,还是得 show me the code,所以接下来的环节就是代码测试,题目的难易度有时候是和前面相关的,如果前面聊的好,可能会相对容易一点,不想误伤;如果觉得不靠谱,可能会直接上来一道很难的,这样结果就不容易有争议。这次校园面试我只是准备了一道介于 Easy 到 Medium 难度之间的题,不算复杂,做对也需要一点基础。
通常每个面试官都有几道自己喜欢的面试题,从简单到复杂的都有,甚至是一环接一环的,先一道容易的,做出来给你加点条件继续。通常我们代码测试都是基于 CodePad,可以方便的把题目要求写在上面,支持多种语言,可以实时编译和查看运行结果。也有同事喜欢用白板的。我这次直接选了用 Leetcode,不仅可以像 CodePad 一样在线运行调试代码,还有很多 test cases 帮助验证代码正确。我一般给这个阶段会安排 30 ~ 40 分钟,做的过程中会有一些沟通,必要的时候给一些提示和指导,如果到时间没做出来,那么很遗憾恐怕是没办法通过的,如果做出来后,还会问一些后续问题,在这个过程中可以观察候选人写代码的熟悉程度,解决问题的方式方法。
最后我一般会预留 5 分钟左右时间给候选人提一些问题,这也是个很好的互动过程,毕竟面试是双向的,公司在选择候选人,候选人也在选公司,可以通过这种方式让候选人对公司和未来可能的工作环境有更多了解。
如前面所述,每个面试官都有自己的风格,以上仅代表个人。
首轮面试
给我分配的有 6 个候选人,都是刚上大三的学生,从 9 点开始,上午三个,下午三个,中午休息一小时顺便写上午的总结,每个面试官都有单独的一间会议室,条件不错,有白板、投影和 WIFI。
0 号候选人
0 号候选人爽约了,于是我有了一个小时的休息时间,趁这时间解决了个 bug,顺便把剩下的候选人简历又都看了一遍。
1 号候选人
第 1 号候选人简历很好看,有个用 GitHub 的 Pages 做的,网页做的挺漂亮的,css 动效也很酷。美国本土出生的小孩,从初中毕业就开始自己写 App,软件硬件项目都有涉猎,大二暑假就有实习经历,还参加了各种俱乐部,github 上还有个 C++ 项目,代码不算多,但也还算工整。
在聊的过程中,发现小伙子很健谈,也展示出他兴趣的广泛。我特别问了他 github 的项目,这是他参加一个机器人项目的副产品。另外我也对他的个人网页表示了很大的肯定,捎带着咨询了他一些 CSS 和 js 细节,但发现其实用的是现成的模板,对细节并不是很了解。所以说简历包装的太好,也不见得是好事,会抬高面试官期望,如果没有与之匹配的实力,反而容易形成落差。
前面 20 分钟聊下来,感觉这哥们属于兴趣广泛,但不算太专注,善于沟通。可能更适合做 PM 之类的岗位,感觉不像那种能沉下心来钻研技术的那种。从岗位匹配的情况来看我觉得不算特别合适。
不管怎么说还是看看代码测试的结果吧。打开 leetcode,把题目介绍了一遍后,1 号候选人马上就有了思路,于是拿上纸和笔给我分析和讲思路,并写了伪代码实现,给我的感觉是应该是以前刷过这题,以及有过一些针对面试的套路培训。接下来就是代码实现,选择了他熟悉的 C++,很快就把代码实现了,从写代码的熟练程度来看,看的出还是有一定代码量的,代码格式有点乱。代码第一次运行无法编译通过,好像是 API 有些不一样,C++ 我是真一点不懂,帮不上,所以建议他直接 Google,很快就找到了答案,但是有几个测试没通过,几次修正后顺利通过所有测试。预计花了 30 分钟时间,如果以前没做过的话,这个成绩还是不错的,如果做过的话只能说一般,但是做没做过并不好考证。
继续问 follow up 问题,回答的也不错,最后问他有没有问题需要问我的,他问了我司同事间人际关系如何,他之前实习的公司人际关系很复杂。这点我司到还是不错的,给他解答一番后他也比较满意。
整体面试下来,虽然我感觉他题目他刷过,但是综合来讲代码水平还行,只能说他运气不错,而且这毕竟是第一轮面试,我这边通过了,他后面可不一定这么好运气都能遇到做过的题。所以最终还是给了通过。
2 号候选人
从简历看,2 号候选人是个学霸,从印度考过来的,GPA 3.9+,要知道学校牛的话拿高 GPA 挺难的。上大学前就开始利用假期实习做项目了,算下来现在大三都有三年项目经历了,在学校也跟着导师有做一些项目。
2 号候选人给我介绍了一些他的项目经历,其中有些 web 前端的,有些是后端的,暑假实习的一个项目是基于 MEAN 架构(MongoDB Express Angularjs Node)的,都是他自己边学边搭建的,询问了一些技术细节,基本可以印证他说的还是挺靠谱的。为了考察他知识面,让他讲了一下 MongoDB 和 Mysql 的区别,关键点讲的挺到位,很明显平时比较注意积累这些方面知识,作为大学生来说很不错了。
聊下来给我感觉非常不错,属于那种做事情比较专注和认真、也勤奋努力的,这种人才挺不多见的,如果没看走眼的话,应该属于那种给一个任务,稍微指导就可以有个不错结果的,几年下来能成长为团队核心。
接下来是代码测试,同样的技术题,在搞明白意思后也没有多废话,直接开始写代码,实现比较中规中矩,但对语言熟练程度不错,一看就是有写过很多代码行经验的,代码格式不是太注意。第一遍写完,结果提交到 LeetCode 后,有几个 test cases 失败了,发现是有些边界条件没有判断清楚,几个来回后,几乎没有太多提示,就把修复了所有问题,通过了所有测试用例。用了大约 30 分钟。然后我又花了大约 5 分钟时间问了一些 follow up 的问题,也答的不错。
最后留了大约 5 分钟给他问一些问题,他很感兴趣我们日常工作内容是什么?对于这种人才我肯定是要费心让他有机会加入的,不然就被别的公司抢走了!于是我给他详细讲了一下今年暑假我们组实习生日常的工作,以及我们是怎么帮助她成长的。
最后结果当然是通过,非常不错的候选人。
3 号候选人
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 号候选人
4 号候选人学习也不错,GPA 3.8,在 Machine Learning 和软件开发都有经验,美国本土孩子,大一暑假就开始创业做项目赚钱,大二暑假在一个医疗中心实习,这学期开始在学校当助教。
他在 Machine Learning 和软件开发两个领域都挺感兴趣的,我问他对哪个更有兴趣一点,他也是有点纠结。在介绍项目的时候,我对他给医疗中心做的项目很感兴趣,问了一些项目上的细节,讨论了一下如果项目的需求发生特定变更时,他的设计会如何修改,整体上回答的还是不错的。对于这些有实际项目经验,并且认真完成项目的都都是感觉不错的。
接下来是代码测试部分,我们花了一点时间在理解题目意思上,可能是我没表达清楚,但在动手前搞清楚问题绝对是一个值得肯定的事情。也是选的 python,同样的没有太多废话,开始动手编码,代码熟练程度绝对是可以的,代码风格偏向快猛糙一点,代码逻辑我一时之间没太能理解,不过先看看运行结果再说,运行后有几个测试用例跑不过去,于是他开始加上一些特殊逻辑的处理,但很快又发现有其他边缘条件需要考虑,于是添加了更多代码,并跟我解释,我表示可以先把代码跑起来,后面还可以优化。但是时间开始越来越少,有点着急了,而我对他的逻辑还没能完全理解,尝试帮助他一起分析一下,没想到反而是在添乱。而时间更少了,但我觉得他应该有能力自己搞定,所以就让他不要着急,我可以多给他一点时间,最后花了将近 40 分钟时间,还是没能解决,我觉得也没必要继续了,于是我们先结束了编码。
每两个面试之间,我有 5 分钟休息时间,已经快到下一个面试的时间了,但我觉得还是应该把这个时间给他问他有没有什么可以问的,他问了我们一般日常工作是什么样的?这是个挺好的问题,于是我给他大概描述了一下日常工作的内容,因为他也学过一些敏捷开发项目管理的知识,所以也给他讲了下我们日常如何使用敏捷开发的。这个沟通过程还挺不错,在下一个面试开始前 1 分钟结束了整个面试。
从他写代码的过程来看,他代码能力还是不错的,对 Python 很熟悉,面试过程可能还是有些紧张影响了发挥,如果是平时应该是可以做出来的。我甚至觉得他应该是比 1 号候选人要更合适一些,愿意给他一个机会。但代码没完成还是硬伤,我有些纠结,于是决定看看最后一个面试的结果再最终决定。
5 号候选人
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 个,通过比例还算比较高的,这也有些原因:
- 首先我校招的学校是美国 Top 10 的名校,本科录取率极低,能录取的本身就都是非常优秀的学生
- 然后我们的 HR 在筛选简历的时候,优先选的是那些有过实习、项目经历的学生,这类学生本身就有一定的项目实践经验,自学能力强,所以更容易通过面试。
- 最后这是第一轮面试,不像后面几轮是综合评定,是一票否决的,如果不通过后面就不能继续了,所以要稍微松一点,所以 1 号候选人我最终还是选择了通过,即使是题目没有完全做对的 4 号候选人,如果不是因为这次跟他一起面试的其他候选人都表现非常杰出,整体录取比例要考虑进去,我也会选择通过的。
- 遇到什么样的候选人也是有一定偶然性的,我对比了一下其他面试官的通过率,基本上都在 6 个通过 3 到 4 个。
最终面试结果
在拿到各个候选人最终结果汇总后,我必须得承认我的同事们都很厉害,从很多不同角度看到了我面试时没发现的问题。我的很多面试结论更多来源于一种靠经验积累得到的直觉,虽然我的直觉还是比较可靠的,但是在 Debrief 会议上并不好表达这种结论是如何得出的,而他们的结论更多是从不同角度基于事实的推断。这是我需要在以后的面试过程中去学习和提高的。
下面还是简要说一下各个候选人后续结果。
1 号候选人
1 号候选人在第二波面试结果里面争议很大,从 1 分 Not Hire 到 4 分 Strongly Inclined to Hire 的结果都有。
4 分的同事的意见是觉得他有潜力、积极,能完成日常工作,还有原因是基于文化和种族上的考量,这是个少数族裔候选人。3 分的同事觉得代码方面能力还是不错的,满足岗位要求。
2 分的同事是 Bar Raiser,他其中一个担忧和我是比较接近的,即 1 号候选人的的兴趣并不在于技术上,他的精力和兴趣太过于分散,没有明确的目标。另外他看到了一些我没看到的问题,例如过于关注细节而忽略整体,沟通的时候少倾听多絮叨。
1 分的同事是考察的技术设计,客观讲这轮还是有点难度的,设计应该不是 1 号候选人所擅长的领域,所以他在很大压力的情况下开始急躁起来,暴露出了沟通上很大的问题,在面试过程中固执己见,不理会面试官的建议和提示,在错误道路上越走越远,最终设计结果和沟通结果都很糟糕。
在每个人陈述完自己的结果后,Bar Raiser 问有没有改变自己结果的,并重点和 Not hire 的面试官沟通,看有没有可能改变结果,但是这个同事非常坚持,认为确实不合适,经过反复讨论无法达成一致后,Bar Raiser 决定最终选择不通过。
2 号候选人
2 号候选人获得大家一致好评,一个 4 分,其他都是 3 分。大家都对他的代码能力、沟通、学习能力等方面充分肯定。在 Debrief 会议上简单走了下流程就算是通过了。
3 号候选人
前面我在面试 3 号候选人时说到过,对他代码测试方面是有一点担忧的,果然他的结果里,一个 2 分(Inclined Not to Hire)一个 3 分和两个 4 分,有个 2 分是个危险的信号。
这次的 Bar Raiser 是个产品经理妹子,她给了 4 分,理由很充分:
- 有很强烈的学习欲望,能够发现问题解决问题
- 愿意承认错误并吸取教训
- 刮胡子了(我很惊讶会把这一条专门写上,看来面试时注意下形象还是有帮助的)
其实最打动她的理由和我比较类似:3 号候选人做的 App 非常有说服力,首先能发现生活中的问题,然后能自己动手自己学习去解决,并且能坚持不断优化改进。
3 分的同事对于他的代码和沟通都表示了肯定,觉得略微欠缺的还是在做的过程中需要一些提示,但是反应还挺快。
2 分的同事主要也是考察编程的,但对于编程的结果不是很满意,觉得低于他目前面试的候选人的平均水平。
另一个 4 分同事是和 Bar Raiser 一起面试的,同样对于 3 号候选人的沟通、学习能力、主动性非常满意。
整体结果都不错,但是还是有个 2 分,关键时刻我帮助说了几句:首先这个候选人确实不太擅长这种面试时的编码,有所欠缺,但是他的学习能力和潜力都毋庸置疑,另外从他 github 上对那个 App 的将近 300 条提交记录来看,足以可以证明他是一个能持之以恒,并且主动学习的优秀人才。
最后给 2 分的同事在听完我们的陈述后打消了他对 3 号候选人编码能力的疑虑,决定改成 3 分(Inclined to Hire),最终通过了整个面试,拿到了 Offer。
5 号候选人
5 号候选人最终结果也很不错,一个 4 分,其他都是 3 分,没有什么争议。
Bar Raiser 是个工作经验比较丰富的女同事,他对 5 号候选人各方面都非常满意,唯一有些担忧的就是这个候选人非常聪明,不知道是否会兴趣转移太快而做事情随性,但谁不愿意给聪明人一个机会呢?
面试的一个 Manager 给了 4 分,并且非常强烈的希望 5 号候选人能到他所在的项目组去实习。
最终也是毫无悬念的拿到了 Offer。
最终面小结
这次我通过的 4 个候选人有 3 个拿到了最终的 Offer,结果还是挺不错的,整个过程也是挺客观公正的。希望他们明年暑假都能过来实习,有更大的成长。
对于参加校园招聘的计算机专业(不限于)学生的一点建议
-
实习实习实习 你可以看到,这些通过面试甚至没通过面试的学生,他们每一个都是从大一甚至更早的时候就开始去实习,去到各个公司去实践,哪怕有些是小公司,但是都可以帮助他们积累很多学校学不到的实际项目经验,发现自身的不足,进而可以努力弥补,如果运气好一点在实习时能遇到好一点的 Mentor,那真的是终身受益!
-
项目经验 实习是最好的获取项目经验的途径,但并不是唯一途径,比如前面提到的 3 号候选人,如果他没有做那个 App 以及把代码放到 GitHub,那么都不一定能通过我的第一轮面试,更不用说后面 PM 妹子和我在 Debrief 会议上对他的力挺。开发的同学建议多在 github 上提交一些高质量代码,并且能持续更新。这一点我强烈推荐大家看看刘未鹏写的《怎样花两年时间去面试一个人》
-
专业课 针对校园招聘,包括校招,必不可少都要直接或间接的考察专业课知识,例如所谓算法题其实都来源于算法、数据结构等基础课程,还有像软件工程这种课程也可以帮助你加分
-
刷题 刷题确实是有一定帮助的,不一定要太多,可以把各个类型的简单到中等难度的代表性题反复做一做,这样可以在面试时不会太慌张,不用说非要刷到考的题都刷过,那是不可能的,万变不离其宗,只有把算法基础打好,对各个类型的题目基本解法都熟练了,自然能不变应万变。这个可以推荐一个朋友写的文章:《我五天面试了五家硅谷顶级公司,幸运地拿到了五个 Offer 》
-
注意沟通技巧上的培养 这其实是很多候选人的一个通病,不善于沟通表达。但实际上沟通表达是可以刻意训练的,不需要达到演讲的水平,只要达到一些基本要求就可以了,例如:能简明的表达自己的意思;能在理解和确认对方意思后再回应;能倾听。这基本上就满足绝大部分岗位要求了。
-
简历 简历不需要太多无用的信息,1-2 两面足够了,把主要的项目经验和亮点放上去就好了,也不要夸大其词,否则很容易像 1 号候选人一样形成落差反而影响结果。
-
投简历 内部推荐是成功率最高的获得面试的方法,如果没有认识的人也可以通过一些论坛或社交媒体去试试看,大部分公司对于推荐候选人都有奖励,所以很多人其实乐于帮助推荐的。退而其次就是关注招聘会和各大招聘网站了。
-
面试过程
-
不要紧张:在面试过程中,努力克服紧张情绪,可以朋友之间模拟面试过程,甚至多参加面试,这样就可以很好增强心理素质。
-
确认清楚:在面试官询问问题时,如果不清楚一定要反复确认清楚再反馈,不要想当然去回答。
-
虚心请教:在做技术题时,如果在一些技术点卡住了,不要盲目的陷入细节中,要冷静一点跳出来,虚心向面试官请教,这时候一般面试官都会给你适当提示,帮助你继续下去。
-
承认不足:很可能会遇到一些不会的问题,或者回答错误的问题,通常面试官的经验都是比较丰富的,很少有人会喜欢狂妄自大、拒绝不足的人,这时候老老实实承认不会或者错了会更好。
-
面试结果 对结果有个好的期待,但是不必过于介怀,很多时候,没有拿到 Offer 可能只是运气不好或者和目标岗位不匹配,并不代表你能力不行!心态上还是要乐观积极一点,不要因为几个拒信打击了自信心。我毕业的时候被很多家公司都拒绝过,前些天还在群里说 Atlassian 连面试的机会都不给我呢。我有个同学被 Google 拒了两次,后来第三次终于成了。
最后祝大家好运!