不合格的面试官

周一上班早晨,打开电脑,邮箱弹出一封邮件,title是校招面试官。点开,内容大意是:如果您收到此邮件,代表您被所在部门推选为2018年校招面试官......

“不会搞错吧,我心里嘀咕着。我去年作为应届生入职,一年时间难道就有资格当面试官了?”

嘴上说着不要,心里还是挺诚实的!

“难道我太优秀,能力突出,技术过硬?”、“长得帅,拿得出手?”、“情商智商双高?”

自己在忘乎所以的头脑风暴中,一万个溢美之词像弹幕一样从眼前飘过。

“是不是你太闲了,所以推荐了你!”,同事的一句话把我拉回现实。

mentor路过我工位:“去年,还在被别人虐,今年去虐别人,这种feel是不是很爽?”,我甩了个响指,一抹邪恶的笑容挂在了似笑非笑的嘴角,简直说到我心坎里去了。

面试职位是QA,地点是xx酒店,不用想了,我肯定是一面面试官。一般公司,IT技术岗分为三轮面试,一二面偏向技术,三面可能还是技术,也有可能是人生观、价值观。

校招面试的知识覆盖面很广,算上实习,我也工作两年了,老油条算不上,小油条一根。论知识面,书本很多基础的也差不多还给老师了,除了工作相关的会了解的比较深入全面一些,其余比面试者强不到哪儿去。知识点忘了不要紧呐,咱还有算法,这个可是个利器啊。当年,剑指offer这本书我可刷了不下五遍!

面试前两天,我开始做准备工作。心里默默地叫苦,咱和面试者没区别啊!

知识点方面,掏出我当年复习用的葵花宝典,哦,不!是面试笔记。

算法方面,拿出落灰的剑指offer,掸掸,刷题。打开自己年少时刷过的leetcode技术博客,一篇篇翻看。

针对QA岗位,结合经典的测试类型题目,设计两道新的题型。这个其实不难,我觉得抓住一个核心,就是一般面试者设计测试用例往往只局限于功能性而忽略了其他方面的特征。所以,我们以这个作为考察点编出两道题很easy。

同时,为了增加一点趣味性,我还准备了两道智力题。难度适中,可以观察一下面试者的反应能力、聪明程度、逻辑思维等,顺便提升一下亲和力。面试不通过不要紧,得觉得这个过程很愉快吧!

语言方面,不打算问具体细节的知识,我个人对java精通一些。所以如果resume上有写对java擅长或是精通的,我想法是问问对java8之后新引入的lamda语法是否有了解或是实际使用场景。

国庆后的上班第二天,早起,洗漱完毕,穿上漂亮衣服,梳个靓丽发型,然后打车去酒店。其实没那么夸张啦,只是穿件干净的衣服,头发打理清爽一些而已,这也是对面试者的尊重嘛!

半小时之后,到达目的酒店,下车后在路边买两包子啃啃,进入会议室,打开电脑,登入系统,开始美好(苦逼)的一天。


面试者一

Q:你好,感谢参加这次面试,首先,请简单介绍一下自己?

A:你好,面试官,我叫XX,来自XX大学,今年大四.....在学校,专注搞ACM竞赛,曾经拿过银牌,今年退役。

我的内心独白:我滴个乖乖,上来就是搞ACM的。大神,先接受我一拜,我觉得,还是你来面我吧。

Q:你们有多少团队,你所在团队有几个人,简要描述你们角色分工和你在团队中的主要职责?

A:一般淘汰下来,我们全年级会剩二到三只队伍,然后出去PK。我们团队主要有三人。一人负责建模,一人负责画图,一人负责代码。其实,每次比赛时,一般每人先负责一道题,没有太明确的分工界限......

我的内心独白:他其实讲了很多,整个谈话过程,逻辑不是很清晰,吐词有点乱七八糟,一个劲围绕ACM比赛的规则、内容讲,并没有回答我问题的核心。这个时候,我有点怀疑他在团队里面的工作量了。冷静,先问问具体的算法。

Q:给你印象最深的一道题目是啥,里面涉及了哪些具体的算法,能描述一下吗?

A:印象比较深的是一道求最短路径问题,就是求A点到B点的最短加权路径,当时用了卢卡斯算法。

我的内心独白:最短路径问题,噢,原来ACM也涉及这些基本的图算法。脑子立马蹦出了Dijkstra算法、Floyed算法。等等,卢卡斯算法是啥?根本没听过呀,冷静,不能被发现。ACM的算法就是高端,待我咨询一下,顺手打开百度,进行搜索。没有什么问题是百度一下不能解决的,如果有,那就两下。

Q:对于最短加权路径问题,我想到了著名的Dijkstra算法,你有了解过吗?

A:没听过,我们一直使用的是卢卡斯算法。

我的内心独白:What?你算法这么牛逼,对于最短路径问题,连大名鼎鼎的Dijkstra算法没听过。注意,他回答的是没听过三个字。这个时候,我已经严重怀疑他的能力了。刚才百度一下,其实并没有搜出和此问题相关的叫“卢卡斯”的算法,这更加深了我的怀疑性。好吧,只要你能把我讲懂了,也行。

Q:对于你说的卢卡斯算法,我并不是很了解。麻烦你给我讲一下这个算法的思路,可以借助于纸和笔,画图辅助说明。

A:假设我们求A点B点的最短加权路径,初始时,我们用一个二维数组来表示顶点之间边的关系,若a和b之间有相互连接的边,那么标记为E[a][b]=E[b][a]=5(假设),如果没有,就标记为∞。然后用一个数组dis[]表示从A点到其余各个顶点的初始路程。算法思想是每次找到离源点最近的顶点,然后以该点为中心进行扩展,最终得到源点到其他所有点的最短路径......

我的内心独白:我的天呐,你说的不就是大名鼎鼎的Dijkstra算法吗,怪不得我搜不到叫啥卢卡斯算法的,你这是在逗我吗。没关系,咱继续保持微笑,让你写吧,看看代码能力如何。注意,在沟通过程中,面试者的表达比较混乱,思路不是很清晰,纸上反复好几次才讲出算法的思想。

Q:思想我大概听懂了,你把刚才你所说的算法在纸上写一下吧,写完了对着你写的代码给我讲一下?

A:我写好了,这个是我的代码......

我的内心独白:字迹很潦草,代码这边插一块,那边插一块,对于非法输入情况没有任何判断,中间夹杂着几处明显的细节错误。但是,整体上还是对的,核心步骤写了出来。

Q:我们来做一个有趣的题目。假设你是老板,你有一根均分为7等分的连接起来的完整金条。有个工人为你工作7天,工人每天的酬劳为1/7段金条,你现在只能把这根金条截取两次,分为三段。请问,如何截取,保证你每天都能付给工人正确的工资,不能出现赊账情况?

A:我想了一下,只这样的,分为1、2、4等份......

我的内心独白:这题不算难,逻辑稍加推理就能回答出来,我并不会给你加多少分。

综合:结合之前的表现,我认为他处在Fail的边缘。思路、沟通、逻辑能力给人感觉不是很好,甚至可以说不尽如人意。作为搞ACM的,算法能力也令人堪忧,编码也较为普通。总之,没有让我喜欢的亮点。看在拿过银牌的份上,勉强打了3分(3分通过,最高5分),让你去二面试试水。不过,从我个人角度,对你面试通过的期望值不大。(事实证明,的确如此,二面Fail)

面试者二

Q:(继续一样的套路)你好,感谢参加这次面试,首先,请简单介绍一下自己?

A:你好,面试官,我叫XXX,来自浙江大学,今年研二,现在在网易游戏QA部门,做测试化框架相关工作......

我的内心独白:我的第一感觉很好,说话思路非常清晰,不做作,简历也很不错。

Q:可以具体描述一下你的工作内容吗?

A:我工作是性质偏向QA里面的开发,以ruby语言为主。主要是定义一些模型,利用游戏开放出来的接口,做一些自动化框架的开发和集成,以模拟人的行为,并设计一些自动化的case,辅助开发人员进行联调测试......(描述的不是很准,游戏方面不是很懂)

我的内心独白:对工作有较为深刻的理解,讲解的非常详细、深入,以解决问题为背景,描述了从设计、调优、到最后的收益。看得出来,平时自主学习能力不错,有钻研精神。这位小哥哥,已经深得我心。

Q:最近王者荣耀不是很火么(不是去砸招牌的),假设让你来测试鲁班这个英雄,你会怎么设计?

A:游戏测试和普通的Web-UI测试不太一样,一般游戏程序会开放出各个接口,你可以直接调用这部分接口进行参数调节。以鲁班这个英雄作为demo,我会这样设计......

我的内心独白:贴合自己的工作,能够活学活用,设计的case通用性很好,考虑了扩展能力,看来实习是实打实工作的,很好。那么,我很看好你,来点算法吧。

Q:有这样一个旋转数组,意思是它是由一个排好序的数组经过部分倒置形成。譬如[5,6,7,8,9,1,2,3,4],分为前后两块,并且前后都排好序。那么,请设计出一种算法,找出该数组最小值的索引位置。思考过后,可以借助纸笔,画图说明?

A:我想好了。首先,我立马想到的是一种比较简单的算法,时间复杂度为O(n),就是进行一次遍历,记录最小值的位置,并且返回。然后我想对它进行优化,可以观察出,这是一个排序数组的变体。排序数组找最小值,我们一般用二分法,效率比较高。所以,这边我也在考虑利用二分法解决这道题,难点在于,递归的判断条件和终止条件。经过分析......

我的内心独白:结合所学知识,经过短时间分析,立马想出了比较好的方案,对每种方式的优劣描述的很到位,算法功底比较扎实。加分!

Q:思想我大概听懂了,你把刚才你所说的算法在纸上写一下吧,写完了对着你写的代码给我讲一下?

A:我写好了,这个是我的代码......

我的内心独白:字迹很清楚,逻辑清晰,边界情况考虑的很全面,分为主函数和子函数,看得出来,编程能力也很ok。

Q:请给你的代码设计几个测试用例,尽可能全面一些?

A:我的测试用例包括这些,正常输入、一个值、多个值、无旋转、全部旋转、非法输入、数组为空,还有数组过大溢出情况。

我的内心独白:小伙子case想的很全面啊,递归会内存溢出都想到了,加分!看来,得使出我的杀手锏了。

Q:我给你写几个case,看看你的代码能不能得出正确的结果?[1,0,1,1,1]、[1,1,1,0,1]都可以看作是[0,1,1,1,1]数组的旋转?

A:哎呀,我没有考虑到可能有相同数字的情况,我的算法还有漏洞,我改进一下。对于中间值和起始索引和结束索引相同的情况,得作特殊处理,这个是我改进后的代码......

我的内心独白:稍作提醒,就发现问题所在,并且立马给出优化后的解决方案,反应和逻辑思维不错。

Q:我们来做一个有趣的题目。A、B两个人轮流在一张桌面(长方形或正方形或圆形)上摆放硬币,规则是每人每次摆一个,硬币不能互相重叠,也不能有一部分在桌面边缘之外,桌子大小不限。这样经过多次摆放,直到谁最先摆不下硬币谁就认输。按照这个规则有什么方法才能保证先下或者后下的人必胜呢?

A:玩棋类游戏时候,有种玩法是对称棋,就是模仿对手,在另外一个相同位置放子。这里,利用同样的思想可以保证先下的人必胜。就是,A找这个图形的对称中心,放置一枚硬币。然后每次B放一枚硬币,A都可以在中心对称的位置上放一枚硬币。

我的内心独白:小哥哥很聪明啊!

综合:结合之前的表现,我给出了4分这样的面试成绩。(一般3分通过,3.5比较优秀,4分相当优秀)面试者各方面能力都很优秀,基础扎实,算法功底好,学习能力很好,逻辑思维反应都很不错。整个聊天过程也非常愉快,属于不多得的人才,给高分,争取留住。个人角度看,二面三面都不是问题(事实证明,二面三面都是高分顺利通过)


全天一共面试了7位应届生,我没有Fail掉任何一位。除了那位很优秀的小哥哥,其他人能力都很平平。明知有些人二面过不了,出于善良的天性,只要是有一方面我觉得能力不错的学生,我都给放进了二面。(给二面面试官增加了很多负担,sorry!)我也是从校招一步步过来的学生,QA岗没有必要太过严格,毕竟开发测试既有开发又有测试,我只能帮你们到这了。

一天结束,很累,同时也很愉快。初次当面试官,经验不足,做的也不够好,但是,这种体验非常棒,希望明年再约!

吐槽一下,公司都不给定个午饭,自己叫外卖,什么鬼啊!!!

填完面试记录,合上电脑,背上书包,路边解锁一辆小黄车,回家,咱吃黄焖鸡米饭去。

推荐阅读更多精彩内容