美文网首页好东西就要分享成长励志大学生活
第一次面试谷歌 | “你是怎么想的?”

第一次面试谷歌 | “你是怎么想的?”

作者: 思南说 | 来源:发表于2017-08-19 15:29 被阅读369次
    题图来自 imcreator

    昨天我经历了人生第一场谷歌面试,作为谷歌全家桶的忠实拥趸和半路出家的新手程序媛,不论结果如何,还是很激动有机会参加面试。

    每次面试结束后我都会写下给自己看的个人反思记录,但是晓颖鼓励我把这次面试经历写成文,一来能和更多人分享经验,二来自己也可以好好总结总结。

    我申请的是谷歌伦敦分部的 TTS Team 的开发职位。不太了解自然语言处理(NLP)的读者可能不知道 TTS (Text To Speech) 是什么;简单地说,就是研究如何从文本合成语音的技术,比如谷歌翻译就有个“发音”的选项,你可以听到机器来朗读多语种文本。

    我在面试前就犯了个“严重”错误,直接导致面试时发挥不佳(还没收到结果,不过我估计这次面试挂了)。什么错误呢?两天前,HR突然询问我可不可以参加第二天中午的面试,我当时没多想先同意了。但不到一天的准备时间实在太少,在后来面试快结束时我有种强烈感觉:如果多几天准备时间,很多问题我完全可以答得更好。面试时间安排一般都可以与公司商量,所以如果下次碰到类似情况,我肯定会吸取教训选择多要一个周准备时间。

    我人在德国,所以安排了视频面试。面试我的是谷歌伦敦同部门的两个员工,一个项目经理,一个高级工程师。在面试前我做了一点背景调查,所以大致了解两位面试官的教育背景和工作经历,这样在他们自我介绍时我不至于觉得措手不及。

    面试持续一小时,通过 Google Hangouts 视频对话,利用 Google Docs 现场解题(谷歌在线文档的多人实时编辑功能做得太好,打字速度、停顿、光标位置所有参与者都可以立即看到,所以,压力还是蛮大的)。整场面试分为三大部分,先针对过去的工作经验提问,接着提问 TTS 领域内的专业问题,最后是编程测试。

    如果不是视频面试而是现场,一般会让面试者在白板上写代码,同样是一小时左右。如果应聘软件开发类职位,大概会有2/3的时间都在编程与算法题目上,剩下1/3时间才会问与技术关系不大的综合问题(信息来自谷歌求职官网)。

    上周我才写了一篇关于如何提一个好问题的文章,这周就参加面试被人提问。我由衷地觉得,虽然好几次被问倒,但谷歌的面试官真的好会提问!因为只有几小时时间可以准备,所以大部分我能想到的面试问题也只是在头脑中过了一遍,没琢磨太多,更没空背题。针对过去工作经验,面试官不仅问我具体做了什么,我的工作对于团队有多重要,具体工作任务中的重点与难点,还会抓住某个技术性细节反复追问:

    “针对那个难题你用了什么方法?效果如何?有什么缺点?为什么不用xyz?”

    总之,除了要考证面试者的经历真实性外,还要看到面试者的思维能力——

    是的,我觉得这才是谷歌面试的考察重点。听一下来自谷歌面试官的真切发问:

    “你解决问题的思路是什么?”

    接下来,关于 TTS 的专业问题。其实我完全没有这个领域的经验,不过我语言学的背景和掌握的概率知识对分词和语音合成的问题有所帮助,加上提前几小时细读了几个相关的 wiki 词条,所以大体思路都还过得去。在这儿就不得不再多夸维基百科 (英文版) 一次了——当提到维基百科时,总有人说维基不够学术不够权威;事实上,有人做过调查,由于维基百科的维护者遍及全球、数量众多、更新极其频繁,上面内容的准确度完全可以和专业学术期刊相媲美。对于想快速了解某个新领域的人来说,认真搞懂几个相关维基词条 (英文) 就能达到高度 basic knowledge 的程度。

    最后,是我最担心的编程测试环节。担心一方面是因为自己学术不精,毕竟是半路出家,还得好好修炼;另一方面是因为……我还需要提高自己承受别人注意力的能力。我之前发过一条微博,就是关于“当众写码恐惧症”的;不仅是编程,面试也不是我的强项,朋友就曾经评价过我有“interview voice”——面试时由于太紧张,声音听起来像另一个人。对于这一点我只能多练习,碰到感兴趣的职位就去投简历试试,能进入面试的话就又多一次真实的练习机会。

    不过,由于我这次申请的职位不是纯粹写代码的软件开发岗,所以面试官出的编程题都较为初级。如何根据 TTS 的产品需求来分词,以两种方法写验证 palindrome 的 python 小程序,根据面试官给的一系列 pattern 写正则表达式 (regex) ,最后测验常见 unix tools 的命令行代码(来查看修改文档、编排格式等)。我卡在了最后一步——虽然我平时常用命令行,但碰到复杂些的情况,都会去求助 stackoverflow……如果当下问题解决了,我会把未来可能再用到的命令行收集到一个记事本里。但整理完的命令行“收集篓”我却很少再回头去研究。在这次面试中,我突然意识到,记住解决某个具体问题的代码 (WHAT) 只是最最低的要求,知道下次该如何靠自己举一反三地解决问题(HOW) 才初步具备了合格程序员的基本素质。再近一步地,若能理解到底为什么那么做(WHY) 则最好不过了。

    在我卡壳时,那位高级工程师面试官一直在试图通过提问 HOW 和 WHY 来帮我找回思路:

    “你是如何思考这个问题的?为什么要这么写?”

    比起几行没有语法错误的代码,面试官明显更感兴趣我的思维过程 (thought process) 与表达能力。

    但我当时的状态很像下面这个网友的评论:

    让我想起高中时同学常开的玩笑,数学记不住公式就在考场上当场推导好了!我面试时倒是可以想起公式,但不知道该如何重新推导。

    最后推荐一篇谷歌面经⎡Get that job at Google⎦吧 ,是谷歌高级工程师 Steve Yegge 08年写的,在网上流传多年依然被视为经典 (考虑到很多人不能访问 blogspot,我就把完整文章放在 这儿 了) 。其实对于任何想从事软件开发的人来说都值得一读,文章并不局限于面试经验,更多的是工程师应该具备的基本数学与计算机素养。

    谢谢你的阅读

    相关文章

      网友评论

        本文标题:第一次面试谷歌 | “你是怎么想的?”

        本文链接:https://www.haomeiwen.com/subject/rdptdxtx.html