关于Google interview的事情,今天这个视频我特意总结了几点,我觉得很重要的面试经验在这里跟大家分享一下。首先讲一下Google的面试过程, Google的面试过程总共会有三个环节,第一个环节是online assessment,这个时候review会发给你1~2个问题,算法题,然后会给你一定的时间让你写出代码回交过来,如果阿拉萨斯曼的效果不错的话,会进入下一个环节就是电话面试,电话面试的话通常会有两轮,每一轮都会有一个Google engineer打电话给你,问你一道算法题,这个时候他会share给你一个Google dog,你就在Google dog里面把你的代码写出来提交给他,如果放映这b效果也不错的话,就会进入下一个环节,就是onset。
然后在interview的话, Google会把你请到Google的办公室来面试你一天,通常会给你安排4轮面试,每一轮面试都会有一个Google and Jimmy过来问你,要么是算法题,要么是系统设计题,然后你需要在白板上把你的代码写出来,接下来我想分享几点在准备面试过程中的一些tips。
第一点就是一定要练习在Google dog或者在白板上写代码,通常我们在工作或者学习的时候写代码都会用到代码编辑器,很多代码编辑器,比如说像intel这样的都会有很强大的功能比如说像金泰斯泰拉丁欧洲completion甚至能帮你做一些reflection的湿气,这些功能能帮我们很好的提高解码的效率,但是在面试的时候是没有代码编辑器的,突然少了这么多帮助,写记代码可能会很不适应,所以一定要练习,在没有这些功能情况下,写代码最好办法就是在工作bug上写代码,这也是我们电话面试会用到的方式。
同样的原因在准备面试的时候也要练习手写代码,如果你进入了奥赛interview,通常时候你是需要在白板上写代码的,那么手写代码跟在键盘敲字写代码的感觉又会完全不一样,有的时候你键盘打字写代码写得很快,不代表你手写代码也能写得很快,写得准确无误,所以一定要手写代码练习自己的muscle memory。
第二点tips就是练习计时写代码,通常一轮面试会有45分钟,一个比较好划分,这个时间的方式就是5分钟用来聊聊天,讲一下简简历,介绍一下自己,20~25分钟用来写代码,5分钟用来跑text,剩下的5~10分钟就是用来思考算法题,在练习算法题的时候,同时也建议设一个timer计算一下时间,这样可以帮助自己了解自己做题的宿命。
第三点tips就是要练习一边写代码,一边把自己的思路讲出来,通常我们在思考问题或者写代码的时候都是不会说话的,但是面试的情况就比较特殊,我们需要把自己的思路讲出来,这样可以让面试官知道你的思路到底是什么,这样他可以更好的判断你的解读能力,把自己思路讲出来的另外一个好处就是当你做题卡壳的时候,面试官可以通过你之前已经讲出来的思路给你适当的提示,面试最忌讳的就是一个人,在那思想什么都不说,面试官是没有办法知道你脑子里在想什么的,如果你什么都不说,他是没有办法给你提示会是你做出题目的,所以一定要练习边写边讲。
第四点就是要练习手动跑test,在面试的时候没有第八个也没有compound了,当你写完代码的时候,你需要自己脑子里跑test来检查代码的对错,通常面试官也不会要求你第一次就写出准确无误的代码,如果你第一次写的代码不是最正确的,面试官会希望你能通过自己跑test,找出代码的错误自己纠正代码,所以大家一定要练习manually call test。
第五点tips就是要练习写unit test通常有下面这几种unit text需要被cover,一个standard input,empty input,malfold input,very large input,now input还有其他任何的education,打个比方如果被问到的问题是 versa link list。1个标准的test case就是1个有5个elements的Liszt,edger cases就只有1个elements的Liszt没有elements,Liszt,niao input会或者very long legalist一个比较特别的test case。
林普勒斯会思路,接下来我还总结了几点在面试过程中可以用到的,第一点就是一定要澄清面试官问的问题,通常面试官问的问题都会比较含糊,缺少很多细节,所以就直接开始解题之前,你需要多问几句确保自己弄懂的题目。
举个例子,如果会的问题是implement a regular expression matter with dot star,你可以追问的问题就有音字序是不是只有数字跟字母会不会有dot的符号?我们能不能确定match string是正常的等等这一系列的问题。
第二点就是解题时一定先讲一下不for solution,be for solution一般都是最简单最直观的答案,通常面试官问的问题都会有更优化的答案。但是我还是建议不论题目难不难,都一定在最开始的时候讲一下不for solution。如果题目很简单的话,你可以直接继续讲更优化的答案,一句话带过一下,不for solution也不会占用什么时间,如果题目很难,你最后可能都没有写出一个优化答案,这个时候你至少还有一个布尔斯鲁神在这里,不至于说是完全没有解答。
举个很简单的例子,比如说你的题目是给你一个to the array array的row跟column都是sorted,然后问你某一个数字是不是在 r里面,这道题最优化的方式是可以用一个微米尔的solution把它给解出来的,但是这道题一上来你就可以跟面试官说最简单粗暴的方式就是把 qd瑞林的每个数字一个接一个的从头查到尾,看你要的数字在不在里边。
最后一个帖子就是在你写完程序,跑完test之后,都把你这个程序的complexity算一下告诉面试官,面试官很多时候会问你,有的时候不会问你,不过不管他问不问,我都建议你算一下康普拉斯题,然后告诉面试官你的卡普拉色体是多少,会像卡普拉斯体,说明你对自己的程序有更深层的了解。
在面试过程中你需要向面试官展示这方面的能力,最后跟大家讲一下面试官通常都看中什么?第一点就是你代码的正确性,你这个代码能不能解答,面试官问的问题是不是优化的,能不能handle edge case,当然还有一些更基本的就是你有没有title,你的心态可以用的对不对?等等这一系列的。
再就是扣框问题,你有没有module write你的代码,就是把很长很大一段的代码从逻辑上合理分割成小的方式,你有没有一直在重复写某一段代码,有没有在适当的时候做一些reflection?如果你是在白板上写代码的话,你的字迹是不是清晰的?因为最后面试官是要把你的代码抄写到一个遗传的错误里面的,所以说如果你的字迹不清晰的话,也是会大大减分的。
以上就是我总结的关于应对Google technical interview的小经验,希望在面试机能帮助到大家,如果你喜欢这个视频的话给我点个赞,欢迎订阅我的频道,我们下次再见,拜拜。