San Fransisco Onsite面经 - ┅☆心随风飞 - 博客频道 - CSDN.NET



San Fransisco Onsite面经 - ┅☆心随风飞 - 博客频道 - CSDN.NET

财大气粗的Dropbox不愧为dream company,每天可以报销伙食费90美元,是我面过的公司给的最高的,并且还可以额外住一天酒店并报销100刀的观光费用。HR还很贴心的列出一堆景点,以供游玩。里面的工作环境很赞,食堂不错,白人比例高,由于靠海,view也不错,可以看海边日落。

需要注意的一点是,在代码写完后,不少人会拍个照,所以代码还是写工整一点比较好,这个一开始不知道,字迹潦草了点有些吃亏。

第一轮问research和behavioral questions。

第二轮是Game of life,一个二维数组里,每个元素有生和死两个状态,根据周围元素的生死情况按规则进行状态转换。Follow up就是对大的file操作,而非内存中的数组。基本属于纯实现题目,很简单。

第三轮 实现web crawler。follow up是网页抓取和网页解析的异步实现。其实就是异步实现BFS。我用了三个queue去实现,除开一个本身BFS需要的queue,另外用了两个BlockedQueue,不知道对不对。

第四轮实现两个函数,int allocate()和void release(intid),每调用一次allocate返回的id需要unique,为1到N之间的一个整数。如果release以后,就可以继续被allocate。之前用array+hashmap,达到O(1)时间和O(N)空间。后来被告知空间用得太多,map空间效率低,最后用了bitmap。这题其实和实现文件系统的metadata区域比较类似,不过最后居然是用时间换空间,有点让我诧异。

第五轮系统设计:对分布式的server,获取对每台server各种信息汇总后的time series。非常的open-ended,反正把各种系统设计原理都用上就行了。

加吃饭一共面了6个小时,还有些题目不记得了。。。


Uber:

最大感觉是公司扩招得很厉害,但是体制的改进以及设施的更新都没有跟上,很多地方都不成熟。面试过程其实也不怎么规范,还要求带上自己的laptop。感觉由于快ipo了,逼格非常的高,题目比起FLAG难不少。

第一个面试官是烙印,感觉挺不友好的,一开始讨论项目经历的时候就各种不以为然。然后40分钟问了四个问题,根本没时间做完。第一题是LeetCode原题,next permutation,秒之。不过烙印一开是怀疑我的思路,后来费不少力气才说服。第二题是实现hash map,指明非要用chaining的方法,CC150上应该有,也秒之。最奇葩的是,刚开始写了一部分代码,后来烙印觉得我代码排版不够好,于是给我擦了,中间划了一条线,让我用双栏排版重写。(总共就只有一块很窄的竖着放的白板,白板上面1/3的空间其实浪费掉了,因为手根本够不着)。无奈就费了一些时间重写代码。之后让我实现concurrent map,有点实现读者写者问题的感觉,没时间写完。还剩5分钟的时候又问如何在chaining的机制下实现load factor,实在不会,后来发现答案其实解法刁钻。其实三哥也就进来了一个月,感觉牛逼哄哄的,做题的时候一直在旁边指手画脚,比如算法设计的时候一开始很容易声明一些多余的参数,等题目探索完了其实往往也就一目了然,自然最后会去掉,可是三哥中途非要指着说认为某参数不必要,严重影响了自己探索问题的乐趣和连续性。另外我也严重怀疑他如果不看标答,是否能够一开始就知道某个参数是最后不必要的,

第二个人就一道题目,感觉很难,想了40分钟才想出来一个解。要求设计一个数据结构,满足insert(int key),remove(int key)和int getMostFrequentKey()。对于同一个key,每次被insert,计数加1;每次被remove,计数减1;然后需要取最大count的key。要求所有操作都是O(1)复杂度。

这题首先通过尝试排除掉map+maxHeap的组合,然后又联想streaming max等各种尝试。后经过提示数据结构需要保持部分的排序性质(如果保证完全排序,插入删除操作是不可能O(1)的)。考虑到需要统计的count是整数,我就想到了bucket sort,另外联系类似LRU设计思想(doubly linked list + hash map),设计出了如下结构:

class Node {

         int key;

         int count;

class Bucket {

         Set<Node>set;        // All the nodes with equal count.

         Bucket prev;

         Bucket next;

}

Bucket head;

HashMap<Integer: key, Node: node>

虽然这个解被证明是可行的,但总感觉自己的设计有点过于复杂。做完这题后,脑力废去大半。。。 

第三轮设计一个游戏,从起点到终点有两条不重合的长度相等的路径,每沿着当前路径走一步,需要耗费一定体力,如果切换到另一路径的相同位置,也需要耗费一些体力。每次只能继续往前或者切换路径,要求打印出消耗最少体力的路径。其实就是一个一般难度的DP问题,不过这个年代还考DP的真不多了。后来讨论了functional programming,要求给一个链表和一个filter函数指针,输出一个filter后的新链表,只能用递归写。其实iterative转recursive也不难。之后跟我讨论kmeans的并行实现,然后让我猜另一种clustering算法。我猜了hierarchical clustering和density-based,结果都没猜对,最后告诉我是想让我答EM算法。狂汗啊,我压根就没有把EM放到clustering分类里面。最后跟我聊了下最大似然估计。统计方面的东西自己不怎么懂,有些郁闷:自己明明面的infrastructure team,可是这货怎么总往machine learning上聊呢?这new grad要求也太全面了。。。

第四个人主要聊背景是否跟team match,题目只出了个power set,算是最后放松了下。


Twitter:

问题都不难,这里就不透露太多细节了。

1.      质数问题变种。

2.      各种sampling的问题,大数据的,分布式的。

3.      LeetCode原题:Clone alinked list with random pointers。

4.      设计如何分布式存储tweets,包括保持排序性质什么的。

5.      字符串匹配问题,都还没涉及到什么fancy的方法例如KMP什么的时间就完了。

6.      设计一个Timer class。

 估计由于我的项目经历,很多问题最后都延伸到了分布式实现和用MapReduce实现。


Read full article from San Fransisco Onsite面经 - ┅☆心随风飞 - 博客频道 - CSDN.NET


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts