发个google面经大家帮我看看是因为什么被拒

原帖地址:一亩三分地

面的职位是SETI。
一面面试官是个白人大叔,coding是给个排序数组建balance BST,跟他讲了讲思路,他觉得可以然后开始coding,五分钟搞定,大概给他讲讲,他看了看表,you‘re so fast. 就问我怎么测试判断生成的BST是正确的,其实就是怎么validate balance BST。然后又问了一道题说不用coding,给一个文件包含很多行,最后输出的文件要去掉重复的行,问怎么实现。我说用个set,他说c++的set?我说准确说应该是用unordered_set,他又问两个set的区别,就告诉他set是排序set,unordered_set是个hash set,然后他就问hashtable的实现原理,大概给他讲讲,他又问如果要求去重后的行还是保持原来的顺序怎么弄?我就说写成个pair用set按idx排序。然后他看看还有时间又问了一题,说有几台server收到client的请求之后发出response,要实现一个response ID generator,满足生成的ID是global unique和sequencial,我当时第一反应就是spanner,就说用个GPS一样的全局timer生成timestamp,配上server ID,组成一个64bit的ID,然后他就问应该是server ID在前还是timestamp在前?这样做有什么好处?会有什么问题?然后又让我想另外一种设计思路,他给提示是用一个server专门负责生成ID,我就想到zookeeper,然后就给他讲讲怎么做,有什么好处,有什么问题。他似乎对我挺感兴趣问了挺多问题,反正最后面试超时让外面的人等了一阵。二面也是个白人,上来给题,生命游戏,一开始跟他讨论题意讨论了半天,我说直接遍历一遍就出来了,然后写的时候出了个bug,因为遍历是从上到下从左到右,所以如果前面的cell改变了直接用之前的cell就会导致问题,然后我就直接重建了一个matrix遍历,他说能不能省点空间,我就只保存了上一行又重新写了code,他看看还行就问怎么用multiprocess做,我就说把matrix分成几块分别去遍历,但是注意保存边界初始值。这时候还剩十五分钟,他就说他没什么问题了,然后我就问他干什么的,他是做security的,来这干了两年了,给我讲讲他们怎么跟踪data之类的,然后又说他要换组了,我就问他google换组怎么换之类的。三面是个中国人带个白人shadow,问了道interval的题,有点像meeting room,但是要返回重叠的interval最多的那几段,基本就是meeting room的思路,把start和end都抓出来排个序,然后扫一遍,用个count记录当前重叠的个数,跟candidate比较,最后返回candidate。开始想算法的时候卡了一下,他给了点hint,但是感觉关系不大最后还是自己弄出来了,写code的时候还用了个meetEnd来判断是不是到达end,后来他指出来没必要。剩下就是问问题,问他们都是做什么的。四面是个黑人,题目是给个数组找出非零的range,非常直接五分钟搞定,然后他看了看还想挑点错也挑不出来,就让我写testcase,给他写了一堆。然后他又给了道题,判断一个BST是不是包含另一个BST,给他讲讲思路,又是非常直接的五分钟搞定,他看看无话可说。还有五分钟就又给了道题,给两个只包含0-9char的string,判断能组成的最大的数谁更大,让我用o(n)搞定,我说先判断长度,长度大的肯定大,长度一样就用个map记录各个数字出现的频率,给他讲了讲最后怎么判断大小,然后时间到了外面有人要用房间了,他就一路走出来跟我说让我想一种情况我这个算法过不了,我想了一下就告诉他一个全零另一个非全零但是长度比较小,一开始判断长度就不行,他想了想,right,you got it. 然后他就给我讲他做test做了两年。总的感觉面试题目不难,虽然很多题都没做过原题,但是思路都很直接,但是今天收到电话说不move forward了,给我个什么Engineering Residency的program,相当于实习一年再考虑要不要你,感觉就是逗你玩。不知道跪在什么地方,是因为做题太快?被挑了bug?还是什么地方表现不好?感觉面到现在面了一堆,也拿了几个onsite,但是都是一路跪过来。一开始跪的时候大概还知道是题没做出来,现在的情况是题做出来了,感觉跟面试官沟通也还行,但就是跪了,跪得莫名其妙,非常confusing,完全摸不着头脑,恳请大家帮忙看看会是跪在什么地方。去问recruiter要feedback,recruiter就是不给,我记得g家的recruiter会给feedback的啊。。。面完的时候感觉还不错,但就是跪了,感觉人生无望快找不到方向了。。。