复盘职业之路

职业初心

自从学习程序设计开始,我被各种惊艳的算法和花里胡哨的编码技巧折服了,从此爱上了编码,自然地走上了程序员的职业道路。

大学毕业后,我的职业梦想是进入微软、谷歌这样的公司,就像高中时期梦想考进清华、北大。而本科又不是计算机科班出身的我明显实力不足,我选择了读研深造,读研期间很努力地提升自己的技术水平,希望毕业后能有一份满意的工作。

第一次参加微软的面试

研究生阶段一年后,我很意外收到了微软的面试邀请,这让我激动了很久。我迫不及待想去面试,即使自己毫无准备。

第一轮是线上面试,在自我介绍之后就开始在一个白板页面上写代码。首先出了一道非常简单的题目:实现算法从无序数组里找到第k大的数。我当时基本不理解微软的面试套路,毫无准备,刚听到这个题目时感到非常意外——什么?这就是微软面试?居然考这么简单的题目?

我回答:先排个序,然后查找第k个数。我当时还非常自信,太简单了,谁不会呢?我以为这个问题就答完了,然而实际上并没有结束,这又是一件让我感到意外的事。面试官极力地引导我想出更优的解法,先是让我分析一下我的算法的复杂度,然后引导我优化算法。几经周折,我还是想不出最优的解法,即使面试官都提示了优先队列,我也没有如期地实现出来。后面还有些时间,面试官又出了一道更难的算法题,像是为了打发时间似的就结束了面试。结果也可想而知,这是我与梦想插肩而过的一次经历。

谷歌的面试经历

临近毕业的时候,我又收到了谷歌的面试邀请,我又一次激动至极。我暗下决心,这次要认真准备!我参加的是谷歌现场面试,这一次可以与谷歌的工程师近距离互动,让我多少有些紧张,谷歌这家公司的门槛高到让我只能仰望,甚至让我连呼吸都感到谨慎。我来到谷歌北京的办公地点,前台小姐姐引导我进入面试间等待面试官。我在房间静候,感觉像个呆瓜。不一会儿,面试官进来,出乎我的意料,面试官看起来比我还紧张。他进来,首先跟我介绍了自己和自己做过的工作,仿佛我才是面试官,我们开始聊了起来,我也礼貌地介绍了自己,当他知道我是学数学的时候,他突然抖起了精神说:“哇!你竟然是学数学的,那你一定很聪明,我可要认真考考你才行!”我听罢,有种莫名其妙的压力,像一种被戴高帽的感觉。他想了一会,出了一道题,顺带说了一句:“我担心这道题你可能做过,如果做过的话你可以告诉我,我们换一题。”然后在白板上给了几个测试用例,让我在白板上手写代码。我定睛一看,确实有做过的印象,这是一道跟字符串相关的题目,我依稀记得这道题目是考察动态规划和贪心。我没跟面试官提这道题我有印象,但实际上我拼命回忆也想不起来怎么做,就像当初做这道题费劲脑汁想了一整天都没想出来,评测结果要么部分通过,要么超时,最后只能气馁地去找大佬提供的答案。我急了,真的想不出来。我很沮丧,难道就因为我是学数学的就毫不讲理地给我出一道困难题?我默默地在白板上写着数学式子,尝试着将动态规划的递推公式求出来,面试官看了一会,惊叹到:“不愧是学数学,我都看不懂你在写什么。”我慌了,这一说又让我倍感压力。我不清楚这是不是谷歌工程师的个人风格还是故意给我制造压力,我慌得脑袋像浆糊似的,难以思考。因为我们交流上遇到了困难,他看不懂我的解法,我也没有找出他心目中认为的好解法,面试官索性拿一个测试用例手把手演示给我看怎么求解,然后再让我想想通用解法。很可惜,我没做出来。而面试官还是很礼貌地说:“我看看你的代码,我不清楚对不对,但思路上看起来应该是可以的。我回去再试试编译一下你的代码跑几个用例看看。”谷歌这轮面试就这样结束了。

失去向往的工作机会之后

谷歌的面试结束没过几天,我收到了感谢信,这确实是意料之中的事。这之后,我失去了职业规划,我不知道毕业之后该找怎样的工作。但我还是要给自己毕业后谋一条出路,就投了一家国内大厂,非常顺利地拿到offer,是一份感兴趣的工作,也有满意的待遇,后面也没考虑投其他公司,就干等着毕业了。

再后来就碰到了疫情,被困在家里没法返校,毕业的事情几经波折。经过反反复复的失落和折腾,我的内心变得毫无波澜。

从国内大厂裸辞

工作了近半年,我萌生了离职的想法,在转正之际我提了离职。最后,部门人力主管找我谈话,问我为何离职,我答自己不适合公司的工作氛围,主管问我想去怎样的公司工作,我答微软和谷歌这样的公司,主管最后劝我认清自己的能力,别想着进入微软或谷歌了。经过了三番五次苦口婆心的劝说,又因为我劳动态度特别好,最后主管就改劝我转正后再离职,那样可以给我两个月的离职补偿,我最后拿到了补偿,内心感到一些宽慰,而我也放弃了高薪,还放弃了北京户口,毅然地裸辞了。

再一次面试微软

时隔三年,我还想再去面试微软。我投了简历,很快收到了面试邀请,这一次没有了之前的兴奋感,只想好好把握住这次机会。于是我准备了一个星期,又刷了近一百道算法题。首轮电话面试让我感觉很棒,面试官很有礼貌而且特别守时,聊了半小时项目又做了半小时算法题,整个过程特别顺畅。果然,第二天我就收到电话面试通过的反馈,而接下来就是五轮硬核的技术面试了。为了确保自己有良好的状态,我又准备了一个星期才开始面试。

微软的第一轮技术面出现了小插曲,我这边的视频通话软件一直无法建立连接,面试官见我迟迟未上线就打电话问了问我的情况,就这样尴尬的开局。面试官同样很守时,为了弥补之前浪费的时间,就没做太多项目经历的交流,直接就来考察算法。第一题考察二分搜索,我很快解了出来,然后面试官在此基础上加大难度,从原本整型的二分搜索问题转换成了浮点数的二分搜索问题,即使思路是相似的但在浮点数的处理上还是有一些棘手,虽然解答的不太完美但也算将就着做出来了。紧接着开始加大难度,第二题直接考察贪心,我意识到这是困难级别题目,即使想到用贪心策略也很难短时间内证明出是最优的,我想了半天还是没想到最优的解法,最后很无奈跟面试官讲了一个暴力解法,面试官问了问我这个解法的复杂度是多少,我很不情愿地告诉他这是指数级复杂度,面试官不断提示甚至都要直接告诉我答案,直到时间用尽后结束。

然后,我进入第二轮面试,类似的流程,先是自我介绍然后聊了聊项目经历,然后剩下的时间考察算法,这轮考察了二叉树相关的算法,我很顺利解了出来,但还是有一些边界情况没有考虑清楚,在面试官的提示下才补充完整。这轮面试官表示对我很感兴趣,却又吐槽说我的工作经验不足,本来还想考我系统设计方面的能力,但认为我明显不懂这方面的问题,后面就加长了半个小时考察了我的英文口语,又考察了我对现代C++的理解。

午饭过后,进入第三轮面试,这轮我开始稍显疲态,甚至有些信心不足。同样的,自我介绍和聊项目,然后开始考察算法,这轮面试官出完题后补充到:“我对你期待很高,我觉得这个题目你肯定能做出来,如果你做过这个题目,我们就换一个。” 真是熟悉的感觉,跟之前谷歌的面试官一样,突然给我戴起了高帽,让我感到有些压力,不知道这算不算面试官的一种考察候选人应对压力的套路。果不其然,直接就给我出了一道动态规划的题目,出完还不忘说:“你是学数学的,这种题目你只要找出规律就会很简单。” 这一话又让我感到了压力,通常在这种情况下往往让我感到焦虑。我想了很久,还是没找到规律,而面试官也看得有些着急,就说了一句:“你可能是状态不好,这种题目给你足够时间你肯定能做出来,但是我们的面试时间是有限的,后面还有一些时间,我们换一道题试试,这道没做出的题目不算数。” 然后出了一道字符串转成有符号整数的题目,主要考察我在限定条件下对整型溢出情况的处理,几经周折我总算做了出来。面试官这轮直言不讳地跟我说,这轮你的面试表现,我不能给你通过,也不能给你不通过,就是保持中立的态度。但是安慰我说后面要好好表现,调整一下自己,如果能惊艳到下一轮面试官并顺利进入第五轮面试,就会很有希望。

第四轮面试,同样的自我介绍并且聊了很久的项目经历,问了很多开放性的问题,比如A编程语言比起B编程语言在某些特性上如何好的问题,彷佛想要引起怎样才是世界上最好语言的争论似的,后面我们都笑了笑说,工程上很多类似问题的讨论就是这样,大家觉得很好就是很好。然后开始考察算法,这一轮算法题很简单,考察了数组前缀和的使用,还有一些边界情况的处理,然后就是反反复复地让我想测试用例。这轮就是这样按部就班的结束,但似乎没啥很惊艳的事情发生。

我很疲惫,默默等着第五轮的BOSS面。我发着呆,我心里也嘀咕着,估计撑不到这轮面试,而且我也感觉不太好。第五轮的面试时间到了,我又多等了十分钟,后来负责招聘的工作人员告知我第五轮的面试取消了,让我等明天的面试反馈。第二天,面试反馈结果——两个面试官给了通过,但很可惜有一个面试官给我不通过,理由是:算法题没有找到最优解,并且工作经验不足。

微软负责招聘的工作人员又联系我,问我要不要加面几场试试另一个对工作经验要求不高的岗位,我很乐意地接受了。

微软的加面之后

微软加了几场面试也是类似的过程,不同的是考察的算法明显简单了许多,只有一位面试官出了一道动态规划的题目,还有一位面试官考了单例模式,整个过程非常顺畅,最后也顺利见到了BOSS,这轮面试很轻松,互相自我介绍,然后聊聊项目,谈谈自己为何在短时间内想要换工作等等,然后直接拍脑袋给我抛出一个实际工程问题,在解决问题的时候互相交流,并让我考虑各种情况尝试解决,程序写完之后又让我继续想想测试用例。一切非常顺利,当天面试结束我就收到面试反馈——通过。我不知道怎么形容此刻的心情,本应无比高兴,终于实现了梦想,但是我内心却毫无波澜。

后面进入了offer审批环节和谈薪环节,在知道薪资待遇的时候让我有些失望,因为这比前雇主给的待遇差得有点多。

结语

第一份工作,我有很多期待,但我放弃了。终于得到了梦想的工作,我又开始犹豫了。做了那么多事情,我总算明白,自己不过是想要一份能让自己快乐而且还有高薪待遇的工作罢了。工作不过是为了更好的生活,哪有什么情怀。