当鸟哥在微信里告诉我不用去美团了的时候,我知道今天是我的幸运日。

我从 2008 年开始吉林大学读电子专业,一读就读到了现在。直到 2013 年我刚刚攻读微电子学硕士时,依然一门心思地要在 IC 界混出一片天地,我的导师也非常看好我,在我刚刚进入实验室时就和我讨论直博的事情,那时的我决心将毕生的经历投入到电子行业。硕士生涯第一年很快就过去了,而在这一年里我唯一的成果就是写了一本讲解 Chrome 扩展开发的书,我知道我的心并不在电子上。 2014 年 8 月,我顶着巨大的压力和导师聊了聊我自己的人生规划——也许电子行业不适合我,我不想继续攻读博士了。这个决定的背后有太多的苦涩——导师和父母都被我深深地伤了心,但我知道,自己的路必须自己来选。

2015 年 6 月,在我改变研究方向的 10 个月之后,我完成了计算机视觉方面的基础研究,用 JS 写出了一个可以满足我研究需要的计算机视觉库,发表了自己的算法,完成了 paper ——我已经达到了毕业的要求,这时我觉得如果以后想在 IT 方面就业,应该找实习了——然而似乎我找得有点晚了,不过令人欣慰的是,锤子科技还在招聘实习生,而且池建强老师也在锤子科技,那么这家公司一定不会错。于是 6 月末我参加了锤子的网络面试,面试的职位是前端开发实习生。一切都非常顺利,锤子前端的同事没有问深邃复杂的算法题,也没有问数据结构题,每一道题都是紧贴前端技术的,我也如鱼得水,回答得没有半点含糊。

进入锤子实习如此顺利,但进入公司后前几天却并不那么顺利,原因是我自己太过自信太过自我, QA 提出的问题我每次第一个想到的就是他们不懂编程,这个问题不是编程的问题——换句话说,这个问题不应该算是技术问题。当初面试我的同事很快知道了我在工作中的问题,他找了一个时间专门和我潜心聊了聊我对工作中遇到问题的看法,我也丝毫没有隐晦,但听了他说的一席话,我发现了我自己这个严重的错误。他说,大家的目标都是为了做出更好的产品,我们在遇到问题的时候更应该考虑怎么样能解决这个问题,而不是想方设法去告诉别人为什么解决不了这个问题,当然如果真的遇到无法解决的问题,我们会重新评估需求的。同事的话说得轻描淡写,那次谈话虽然更像大哥哥与弟弟的谈话,但我的脸却红得不行。后来 QA 再提出任何问题我都跑过去现场确认,仔细询问复现的方法,工作上的心情也完全变了 180 度。

在锤子实习期间,我也向网易、腾讯、知乎、美团和百度投递了简历,几家公司的结果各不相同。网易为我安排了三次电话面试,听得出来面试官人都很 nice ,不过可惜的是没有再收到后续的消息,我猜可能是我在算法能力上的薄弱最终让网易对我保持了谨慎的态度。腾讯因为拿到了微信内推, TST 的简历评级是 A+,也就是说我无需参加笔试,只需参加面试,如果一切顺利就可以拿到 offer ,所以我也一度认为未来基本会在鹅厂工作,但最终我还是收到了鹅厂在线笔试的通知,在常规的校招流程了,我这个非 CS 专业的人肯定没有任何优势,所以不出意外,两轮笔试后再无消息,后来我又联系了之前内推我的同学,他表示 TST 已经结束了,并且好心提醒我关注下腾讯其他的部门,在此只能像那位内推我的同学说声抱歉了,我也真的是不争气……知乎是一家给我印象非常不错的公司,工作环境很优雅,办公区别致的越层让人拍案叫绝。由于去知乎面试之前我在公司还有些事情没有做完,做完之后没顾得上吃午饭就忙不迭地跑去面试了,当知乎 HR 知道我还没有吃饭后,热情地给我拿来了吃的,和我说免得一会面试时会头晕,这些事情都让我倍感感动。在知乎聊得也很开心,不过遗憾地是最后得到的答复是 reject ,后来我想可能知乎更想寻得一名工作经验丰富的前端,对于校招可能并不是他们的目标,不过想起来即使这样也那么热情地接待我,更令我感动!美团比较直接,上来就是连着三轮面试,美团也是我面试过的出题最难的公司(因为鹅厂没有给我面试机会,所以不考虑鹅厂的面试难度),第一轮面试是纸上用 JS 写快排,由于之前我写过,所以很轻松就写出来了,第二道题是问多叉树叶子之间的距离,当时我还小心翼翼地询问是二叉树吗,面试官微笑着说是多叉树,有很多叉的,然后还非常体贴地为我画了图。虽然没考虑过多叉树,但其实也不难,于是很快也给出了面试官认可的答案。接下来是等待结果,大概半小时后通知我进行二面。二面就直接问 JS 的问题了, this 的指代,原型链这些深层次的就都问出来了,但由于之前有读过 You don’t know JS 这本书,所以这些问题也都可以 handle ,不过在判断 this 指代时,第一次脱口而出的是正确答案,后面反复思考后给出的恰恰是错误答案,不过面试官没有马上做结论,还是体贴地提醒我继续考虑考虑,最后给出了正确答案,并给出了令面试官满意的解释。第三轮其实算不上面试了,因为整个过程都是那位工程师在向我介绍他们部门,希望我能过去,我说不还没确定 offer 吗,他笑笑,说会很快通知你的。美团面试结束后第三位面试官热情地把我送到楼外,那次面试也给了我很大的鼓励。

第二天,我接到了微软的面试邀请——其实我之前根本不敢投这家公司,因为我知道我差得太多,虽然 FE 方面我比多数人知道得多些,但没有实打实的 CS 功底想混过微软的面试比登天还难。微软也非常利索,一个下午三轮面试。第一个面试还是说写个快排吧,语言随便选——可能选 JS 的我是微软历史上的头一个吧……第一面顺利通过。第二面,面试官先和我说,堆你应该知道的吧……我说,不知道……冷场,开始面试官试图向我介绍堆的概念,但后来还是作罢,考了一道 leetcode 上 easy 级别的题,虽然 leetcode 也做过一些,但是写起来还是有些慌,毕竟我最开始对自己的定位就非常清楚,微软对我来说太高了。最后磕磕绊绊算是写出了可以 work 的 code ,二面勉强通过。三面是鸟哥的 team leader ,第一句话是 make an introduction to yourself please ……我知道微软会有 English Test ,但我没想到会这么快……然后磕磕巴巴, uh ……那个…… well ……心里喊着 Mayday Mayday Mayday ……后来面试官贴心地说, OK ,我们切回中文吧 Orz ……考的依然是一道不算难的题,因为是 leetcode 的原题,我的答案也很快就给出来了,但面试官马上提出来了,这个代码会不会有问题?我从头 review 了一遍,感觉没有问题啊,他说如果给定数组里没有目标值怎么办呢?呀, leetcode 里给的前提条件是一定有啊,怎么办怎么办,肯定是我边界条件不严谨!于是开始聚精会神考虑边界条件……这时面试官说你可不可以 confirm 一下呢……当时我恨不得拍死自己,猪脑子啊……在面试官的提示下最后给出了答案……

事情发展到这里也许就该结束了,因为大家看得出来我有多惨,鸟哥也和我说了,他的老板觉得我还是一张白纸,要不要冒险还是需要看上面老板的意思。实话说,那时我已经在考虑以后留在锤子继续写漂亮的页面了,但最后得到的通知是上面的老板还是想面我一下,稍后通知我四面的时间。四面鸟哥给我打了预防针——香港的同事,普通话不太好,平时开会完全是英文……我想了下,能准备的可能真的只有 self introduction 了,所以虽然觉得没什么悬念,但还是认真准备了一份自我介绍。第二天上午面试官和我准时在网上见面,也是让我先做一段自我介绍,由于这次是有备而来,所以没有向上次那么狼狈。接下来面试官和我说的英文我也基本能听个差不多——我相信是面试官有意用了更简单的词汇。当然也有一些专业词汇我不熟悉,面试官都体贴地为我用文字发了出来,通过 Google 搜索知道大概的中文意思,然后做出了回答。其实由于第四面我没有冲着过的心态面对,结果反而聊得很开心,四面结束后不久, HR 通知我,面试官觉得你还 OK ,下午还要进行第五轮面试。这很让我感到意外,但还是那个心态,我能在微软的面试中走到这里,已经心满意足了,这甚至超过了很多 CS 专业的同学!第五轮面试是鸟哥老板的老板的老板……没有太紧张,因为是一位美女,声音和我大学认识的一位计算机老师特别像,感觉非常亲切。她没有和我聊过多的技术问题,她也直接向我说明了,他们知道我计算机基础水平差,但他们现在也在转变想法,如果一个人的学习能力和学习动力强,他们也是非常欢迎的。看到这里,我一下感觉还有戏!于是赶快把我在研一转方向,用两三个月时间就研究明白了计算机视觉的基本算法,并且在后续的几个月里完成了 JS 的计算机视觉库、发表了自己的算法、写好了 paper ,甚至还在图灵社区发表了一篇还算有深度的总结文章。她听后很高兴,因为这些我没有写在简历上,她觉得在某一个层面上又认识了一个新的我。

接着就是我最开始说的那样,鸟哥在微信上通知我,大大大 BOS 已经给了我 Hire ! HR 可能会过些天通知。后来鸟哥告诉我,其实五轮面试面试官给的都是 Hire ,成绩也算不错,但还是那句话,他们都知道我的短处, CS 功底太差。

今天我以一个幸运儿的角色站在这里和大家分享,一是希望和大家分享我的快乐,二是希望大家能从我的经历中得到鼓舞,我相信你们多数人不会比我差。一个人的成功往往不可复制,微软今天给了我这个机会,他们愿意冒这个险,但不代表每个人都能像我这么幸运,大家还是要把基础知识学好,我也会在未来的一段时间里疯狂补 CS 的知识,不负鸟哥和微软的期望。