有幸在创业公司做过面试官,也对头条的面试有一些了解,带我的mentor是面试官,小组里面也陆续培养了多名面试官。对于校招生,准备面试一般看网上的面经,也就是面试者面试之后的经验总结。会有一定的参考价值,但是面经太多了,五花八门,看了之后感觉自己不会的太多了,要准备的也太多了,根本没这么多时间覆盖全。
没有成为面试官前经历的面试
刚开始对待任何一场面试都很认真,无论公司大小。校招的时候只要收到面试电话,都会提前了解下公司和岗位信息,也会认真准备自我介绍。但自我介绍准备哪些内容、讲多久,当时也没研究,主要把学校、项目经验等捡重点的说一下。
社招的时候面试前一般都是hr先约好时间,也有时是面试官直接约时间。约好时间后进行现场或电话面。工作一年后跳槽当时没啥经验,只要一约面试,不管对方怎么说都尽量满足。比如要现场面就现场面,面试时间约工作日就工作日,虽然请假会扣工资或扣年假。基本都是对方怎么安排就怎么来,认为只要有机会就不错了,先去面。而没有先了解下这个岗位是不是自己投的,是做什么业务的,用的什么开发语言,是不是可以只远程面试,在邀约面试的时候都是可以问清楚的。
自己每次都很认真准备每场面试,以为面试官也是认真对待这次面试,会仔细看自己的简历,会提前准备面试题,会仔细听自己的自我介绍。但实际并没有。校招面试搜狐的时候,面试官是现场看的简历,看完简历发现没啥问的就随便问了几个基本概念,然后给出信号想快点结束面试。自己意识到了对方的态度,也比较配合,于是请教了下我这种情况要怎么准备比较好,面试官还是给了些建议。面百度的时候面试官也是现场看简历,问了几个问题觉得不合适,然后非常委婉的把我请出去了。
社招的几次经验更加不太好,一次是商汤现场面,过去之后面试官也是才看的简历,然后说我们是招python的,你之前主要用PHP,言外之意不太合适。当时就有点懵逼,这不是坑人吗。简历给你们了,我大老远跑过来,上来就是岗位不合适。但跟面试官起争执也没必要,后面也就配合的聊了些其他的,最后有说公司也在招PHP的,要不要推过去。这种推荐换其他面试官来面就是我这里你不合适,但看你学历或者某一点还可以,可能其他组有机会,也可能只是为了让你不那么尴尬或者尽量让你这趟不白来。
社招又去面了一次百度,约的现场。这次提前过去,但是等了一个小时才开始面,因为面试官忙其他去了,HR也开会去了,到了现场都联系不上,只能傻傻等。后面等到面试官上来就给两张纸,3道算法题,手写代码。写完之后面试官不满意,也就简单问了下,也推荐换其他岗位面试下。
当时面试体验就是:很认真的准备了简历,但是面试官在你开始面试前可能都没看过你简历。当你简历比较挫的时候他问的问题跟你简历没有任何相关性,有很大的挫败感。而对于没有把握的现场面试更是成本巨大,社招工作日面试需要请假,并且得提前去。而过去之后可能面试官三言两语就给打发了,面试官才不会管其他,他只看合适不合适,没面之前都好说,面试后不合适那么你的任何问题都是浪费他时间。对于面试官没有任何损失,而对于你的损失是比较大的。后面就学乖了,除非约非工作日,不然技术面都只远程,到最后的面试比如腾讯的总监面才接受现场面。
小公司的面试官怎么进行的面试
当时在的AI创业公司,入职的时候200多人,后面一年内人数翻倍,大量招人就需要大量面试。在入职2个月后,leader确实忙不过来了,投在面试的时间没有那么多,需要培养下面的人进行前面的一面或2面。所以有幸做一面和2面面试官。总共面试了将近20位候选者,候选者3年以内工作经验的居多,也有个别5年左右甚至更长的。个人感觉自己的面试把控还是做的不错,我这边通过的最后都拿到了offer,算是跟leader的标准对齐了。当然开始的几次面试没啥经验,有些地方判断上有点犹豫的。HR那边也比较喜欢找我,旁边组的leader也让我面,后面面的有点疲了,简历质量一般的面试能推就推。
成为面试官前也是旁听了一轮面试,然后才进行的独立面试。所以大厂技术面如果有多人那么一般都是有旁听的,而招银这些非互联网确实是多个面试官一起面。能够进行独立面试了,HR就会提前跟你约时间。HR搜集和筛选简历,如果HR有看到简历合适的就会问我们有没有时间,因为小公司没啥系统,都是微信聊约时间,面试的时候也直接跟候选人微信语音。
开始的几次,我会认真看下候选人的简历,根据他的经验针对性的准备些问题。因为是后台开发岗,而且python为主,所以pythonGIL锁、mysql相关比如索引每次必问,其他问题就问项目相关比如celery,vlan网络,再最后来一个手写代码。这个套路也是一步步摸索过来的。因为当时leader也没给套路,只是说一定要手写代码,其他的都可以自行发挥。所以开始几次面试我基本是:之前自己被问过的题、网上找的常问的题、剑指offer、工作中碰到的题。但工作中业务逻辑为主,很少有能够拿去面试的。
到了后面发现前面有些题目问的没有水平,没有针对性,比较浪费时间。于是开始认真准备,准备过程才发现要做好一场面试不容易,就跟老师备课、出试卷一样,选题比较难。这个时候才开始去想之前经历的面试官为什么会问那些题。我当时选题是分语言、网络、数据库、多线程多进程、组件等几类,然后每个类别准备几个题。开始的时候有些题我自己都答不上来,为了面别人,也得去学习一把,所以在面试的过程中学到了很多。
对于自己出的题,答案提前找好了,但面试过程还得快速判断候选人掌握到什么程度,是听过,看过,用过还是精通。很多人的回答都是背书模式的,一听就能听的出来。比如经常问的GIL锁是什么,对python熟悉一点的人基本都听过,然后说一通。但再深入问一句GIL有什么影响,有些会答会影响多线程效率,因为要争抢锁。那这样的话为啥python网络编程用多线程仍然是比单线程快。这又涉及到了计算密集型和IO密集型两个场景和CPU调度,很多人就回答不到点子上了。至于为什么会有GIL锁,有简单了解,但已经忘了。 所以站在面试官的角度,去准备知识点,并且准备多个层次的问题,用于判断候选人的水平到底是在哪个层级。
工作大部分都是拧螺丝,对于业务后台开发,算法用到的场合比较少,这里强调下是业务后台。起码在头条,我都还没用过二叉树、图这些复杂的数据结构,也没用过贪心、动归等算法。那为啥面试经常爱问算法题。因为要考察手写代码,写代码对于筛掉不合适的人非常高效,尤其在小公司。很多人写的代码水平真的差。那写哪种类型什么比较合适?总不能写个业务逻辑,写个查询mysql的api吧。另外工作用到的很多组件,常会用到很多复杂数据结构和算法,比如redis,对于基础好的人去学习理解的可以非常快,那么这种候选人去做难度大的事情是没问题的。总不能等到碰到难题再重新去外面找人。
对于要问的几个算法题,自己背的滚瓜烂熟,单纯一个快排可以筛掉很大一部分没有水平或者没准备的。算法题没写出来并不一定的会刷,会结合的其他方面的表现以及当时岗位紧缺程度定。对于小公司,在比较缺人而又是招聘淡季的时候是会降低门槛的。对于大公司可能是宁缺毋滥。但大公司有些面试官也会放水的,尤其对于工作年限比较长的候选人,如果你的经验特别匹配,那么会出一个简单的算法题,也不用bug free。
对于入行或者初级开发者,刷题真的只是应付面试,并且收效还慢。
候选人工作经验和岗位完全匹配是比较少的,因为匹配的话就得业务一致,即使业务一致有时方案不一样用到的技术也不一样。所以很多通用的问题在技术面都是比较合适的。
面试之后需要进行评价的,并确定是否进行下一轮。对于面试结果,面试官在结束面试的那一刻他心理都是有数的(要、不要、待定),但不会透露给候选人。当然犹豫的时候,可能会再面几个人,然后在几个人里面挑。评价一般会记录客观情况,比如问了GIL锁,对方是怎么答了哪些内容而不是记录对方答的好。记录这些有助于给后续面试官参考,然后避免问重复的题,最后定级定薪leader也会参考。
对于技术面试,技术面试官是不知道给你定哪个级别的,但一般根据经历和工作年限心理也会有个数。薪资都是到最后了由hr跟大领导沟通后定的。人、财、物都是领导才有权去决定。所以在头条是不允许技术面试官问候选人当前的薪水,也不允许问为什么离职,这都是HR才能问的。有时候有些面试官会夹带私货,只要候选人不反馈就可以。我之前做面试官有时就忍不住会问为什么辞职,候选人基本都会说,但没问过薪水,虽然好奇,但不找添堵的事。
到了后面,对于面试越来越能掌控了,除非简历上看起来还不错的,会认真根据简历去挖问题。不然都是面试开始前几分钟才开始看下简历,看简历的速度也比较快,因为即使不认真看也有问题可以问。在工作中,事情那么多,面试的人多了也记不住,所以即使提前看了,可能又忘了,只能现场看。这也开始理解了自己的几次面试官的表现。
因为面试的时候才开始看简历,所以开始的时候,我一般会让候选人自我介绍一番(到了二面就省了这个环节,候选人可能说的也烦了)。这个阶段大部分是一心二用的,主要是来熟悉简历,心里想着问什么。对于候选人说什么并没用心听,因为大概率说的跟简历上的差不多,主要就是哪里毕业的,之前在哪家公司,项目做了哪些。也有些候选人会说一些简历上没有提及到的技术点,会留意下。当候选人自我介绍后然后就开始先问一些简单的问题,以项目中用到的为主,考察候选人工作的实际情况。因为有些人简历造假,虽然简历上写的很丰富,但是问起来发现很多技术都不懂,需求也说不明白。 通过问项目可以考察候选者实际的工作情况。简历写自己没实际做过但是参考同事的项目也没问题,但不能写的太夸张,你可以写参与但不能写是核心成员,然后你还得对这项目熟悉。不然你写上去,面试官察觉出来了映象很不好。
中间一连串问题,最后就是写代码。之前如果远程面试是会开一个共享文档进行写代码,体验没牛客网好。远程写代码又不开视频,会有作弊的情况,比如网上搜、旁边有人帮忙。是很容易发现的,这种情况即使你写出来了,也不会让你过,对于这种行为肯定是零容忍的。
技术面试前几面就是普通的开发者,跟大家都是一样平凡的工作者,没有什么特别的,一般都是比较好沟通的,不管大厂小厂。所以面试的时候注意些基本的礼仪,平等的沟通即可,不用太过于谦逊。后几轮面试一般是职级比较高的,这个时候就是全方位考察了。
头条的面试
头条的面试官各种级别的都有,头条是要求工作经验2年以上入职半年以上才有资格成为面试官(具体年限可能记差了)。然后不论职级不论年龄,经过培训就可以成为面试官,但需要领导提名。有了面试资格后hr就会给你安排面试。一般会根据候选者的水平安排对应的面试官,候选者水平差的就安排一个低级别的,毕竟高级别的时间成本更高。面试和日常的开发工作是独立进行的,不会因为你要面试你的工作就可以少做,但可以因为面试比如临时不参加某个会。面试是额外的工作,做好了是可以算在的业绩里的。
头条的面试流程还算是规范的,标准两句话可以概括:同级别看你是否愿意与之共事;低级别的看你是否愿意带他。一般不会让低级别的面试官面高级别的候选人。