Google, Twitter, Facebook, Amazon面经收集

持续更新。最近:2014年2月8日

正在寻找2014 Summer Internship... 下面整理从2013年11月份开始的面试题:

Amazon

Facebook

Rocket Fuel
有n1个(),n2个[],n3个{},枚举出所有的合法括号组合。
注意不是求合法的括号个数。。。

三哥面试官,感觉算三哥里面比较好听懂的发音了
就一个题,跟他纠结了很长时间,也聊了比较长时间的项目。最后面了1小时22分钟。

Twitter

计算图里面路径的最小sum, 很简单的递归,不到3分钟敲完,然后要求分析复杂度。
---------------------------------------------
Codility的链接上去做题,一共两题。 1)是找出单独的数组元素,其他的都是成对的. 2)是2sum的一个变形。
---------------------------------------------

Google

(1) Suppose each request has some data, calculate the average bandwidth in the last 1 second, 1minute, 1 hour.
这题跟careercup那道recent average request很像。首先,不能有错误,只想出来了use a queue as moving window, and then take average over last 1 sec, 1 minute, 1 hour. Maintain the queue by deleting all requests information outside the 1 hour window.
其次,允许一定的错误量。这样就可以用circular array. For example, take a circular array to store the bandwidth in each second, sample_per_sec[3600]. Then circular filling in the array. The average in last hour is the average
of the array.

(2) Existence of an integer in a sorted array. O(log(n)) binary search.
Existence of an integer in a linked list. 貌似只能O(n)。
Visit webpages and count specific words in each webpage in a graph.
DFS/BFS, and need to take care of cycles. 这里我用了一个list to store visited pages to avoid double counting,不知道有没有更好的data
structure.

貌似G的电面variance很大啊,这些题比什么四位解码,2-d knapsack好多了。同时抱怨一下google doc比f的collabedit难用多了。。
From: http://www.mitbbs.com/article_t/JobHunting/32610449.html
---------------------------------------------
昨天onsite完的,趁还记得上来写一下,面的不好,求bless。

一轮店面
第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷
阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题
都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到
二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做
错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去
onsite不是在浪费他们engineer的时间,觉得我没有问题。。。

过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三
轮然后吃午餐,下午再两轮,一共五轮

第一轮
给一个矩阵,每个格子上有三种可能,空房,阻碍物或者是保安,阻碍物不能进,空房
四个方向都能进,要写代码给每个空房标记其离最近的保安的距离,比如

000
BGG
B00

B表示障碍物,G表示保安,0表示空房,应该标记为

211
BGG
B11

我说扫一遍矩阵,然后遇到每个G就bfs整个矩阵, 他说不是optimal,optimal可以做到
O(N^2)。当时想不出,他说那就先按我那个想法写代码。写完就到时间了。后来回家后
就想到optimal的解法了,对所有G一起开始bfs就可以了。

第二轮
写一个函数生成满足下面三个条件的integer
1. 非负
2. 不能有重复数字
3. 递增,既后面产生的比前面产生的要大

我问要一次性全部生成所有数字还是每呼叫一次函数产生一个,他让我先写一次性产生
全部的,这个不难,backtracking,follow up是假设现在给一个符合条件的数字,如
789,返回下一个(比输入大但是最小的)数字,790。一开始我没思路,说很多edge
case,然后多观察几个例子后发现有些规律,说出来后他说看起来不错,然后举了几个
例子让我模拟跑一遍,没有问题,他说ok,不用写code了,正好也到时间了

第三轮
问了一个Java的问题
假设有两个class,A和B,B是A的子类,
先有下面几句
A a = new A();
B b = new B();
List < A > la = new List< A >();
List< B > lb = new List< B >();
(反正就是建了A,B的各一个instance,list of A 和 list of B 各一个instance)
然后问下面四句哪句能过compiler,哪句不能:
a = b;
b = a;
la = lb;
lb = la;

答案是只有第一句能过,我一开始答1和3能过(我真心不熟Java,python里面的话啥能
过啊亲)。

然后出了一道python generator的题,写代码,还有follow up,也要写代码,最后都
超出时间了。

中午吃饭, 下午接着面

第四轮
问我知不知道zip文件,我说用过但不知原理。他就说我们来讨论一下

假设一个文件压缩后的表示是

#3, #5, #6, 2 5, #8...

”#k“形式的代表这个数字k,两个数字“i j”形式的代表取前 i 个
数字做 j 长的 circular重复,像上面那个表示,前面3个都是表示单个数字,
然后 2 5表示取前2个数字 (既56),组成5个数字,不够的从头再取,所以就是56565
最后上面解压缩后应该为
3, 5, 6, 5, 6, 5, 6, 5, 8...

要我写的是压缩算法的代码。
我提出从头扫,一边一边用hashtable记下见过的number,每前进一位就检查hashtable
有没有符合当前数字模式的number出现过,然后他说还不错,写代码。一边写一边出现
bug,一边发现很多写代码前没考虑的东西,最后勉强算写完,时间也到了,他说这个
他也没写过,是在一篇paper上看到的算法,原算法跟我的有些不同,倒是都用了
hashtable。。。

第五轮
拿着我简历进来,说有人跟你谈过你的简历吗,我说没有,他表示万分惊讶,然后在我
简历上挑了一个research project让我说说,说完后用c++出了一个题,一个cipher类
,有一个member function是对输入加密,加密方法为对input的每16个Byte和一个
increasing counter做xor,这个increasing counter也是有16Byte,从00..01(前
15Byte都是0,最后1Byte是1)开始,还有一个要求,举例说:
第一个input 有20个Byte,前16个Byte就和00..01做xor,后4个Byte和00..02的前
4Byte做xor
然后之后再对第二个input加密的时候,对这个input的前12Byte用00..02的后12Byte(
即11个Byte 0,1个Byte 1)

然后让我写这个class

我问了一句要是couter的数用完了怎么办,他反问我这个counter有16Byte,多久会用
完。因为已经很累了,算错了好几次,中途我还说16乘以8等于64。。。反正在他逼迫
下我硬着头皮模拟算了一下,得出结果就是很久很久很久才会用完,不用担心。然后又
因为好久没写c或c++,还有真的很累,脑袋一片发麻,茫然不知如何下手,他看不下去
了就说那你就写一个能从小到大生成这个counter能表示的所有integer的函数吧,你要
对python熟一点的话就用Python,这个写完后有两个小bug,迅速改正过来,然后就到
时间了。问我还有没有问题,我就随便问了一下这个office有哪些project,然后就结
束了。

总算写完了,反正总结下来自己coding还是太差了,慢且buggy。希望大家bless一下然
后有奇迹发生吧。

http://www.mitbbs.com/article_t/JobHunting/32622081.html

---------------------------------------------
array min and max
---------------------------------------------
pow, string search, multi-threading

Category >> Interview  
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
<pre><code> 
String foo = "bar";
</code></pre>