F家的算法:
1. F家的题基本上都是Leetcode 的原题和变种。把leetcode的题研究透就OK了。
2. 跟F家的HR 聊过, 如果你想拿到面试官的strong recommendation, 需要在一
轮面试中做完两道题。每题15-17分钟完成,包括和面试官讨论,写代码,以及写test
case 的时间, 同时尽量bug free, 不一定要optimal solution。
3. 时间很紧,所以要多练习白板码,多练习在白板上跑test case。写多了就会发
现,白板码上写出bug的概率比用电脑写低很多, 因为白板上可以通过图表的形式很直
观的跑test case, 很容易发现bug。
4. 面试的时候,自己带fine tip marker, 比粗的笔写代码快很多。
G家的算法:
1. G家的题库很大,而且经常换新题,我面试的时候一道都没有见过,所以刷题用
处不大。
G家的题基本上都是经典算法的变种。如果对经典算法很熟练,面试的时候很快
就可以想到解法。
- 复习经典算法,推荐看一下Sedgewick 教授的算法书。http://algs4.cs.princeton.edu/home/
相比算法导论,我更推荐这本书,因为这本书的算法是用Java而不是伪代码实
现的,而且代码写的非常简洁而优雅。
Sedgewick教授的书里没有 DP专门的章节,看看算法导论作为补充。
3. G家喜欢考各种tree:prefix tree,augmented binary search tree \(with
rank and select APIs), segment tree,binary index tree (1D and 2D),
interval tree, kd tree, quad tree.
4. G家喜欢考几何题,推荐:
topcoder的教程:http://help.topcoder.com/data-science/competing-in-algorithm-challenges/algorithm-tutorials/
Sedgwick的介绍几何算法(sweep line之类)的video:https://www.
youtube.com/watch?v=Igr6yONkpIQ
5. G家关于设计棋类游戏的AI的题,基本上都可以用MinMax 算法解决: http://neverstopbuilding.com/minimax
6. G家和F家都会考 Thread-Safe data structure和 Threading Pool,推荐阅读C
++ concurrency in action的第六章和第九章 http://www.manning.com/williams/
系统设计:
1. 我基本没有web development的经验。和我一样0经验的同学可以先上一门课,
推荐Reddit Cofounder 开的web development
的课( 讲义和课程project都非常好):https://www.udacity.com/course/viewer\#!/c
-cs253/
2. 对于distributed system不了解的同学,推荐coursera上的Cloud Computing
Concept:https://www.coursera.org/course/cloudcomputing
3. 系统设计里边,最重要的部分是Data Storage和Data processing。
Data storage包含:
a. Distributed File System: 推荐看一下GFS的paper和FB Haystack
Photo storage的paper
b. NoSQL Data storage: 推荐看一下Big Table的paper,了解一下
Cassandra 的架构:Cloud Computing Concept的课有讲
c. Memcache
Data processing:
看一下Map-Reduce的paper。了解一下Map-Reduce能解决什么问题。如
何做job scheduling等等。
4. 板上大牛收集的题库:https://www.evernote.com/shard/s21/sh/c2035c38-
1a80-4fd4-8c93-8ca0ad9ffb48/35079ac1bf5ae3ea
大多数题,解题的时候,按三步走:
a. 如果数据量小,如何在单机上实现。
b. 如果数据量大,如何sharding data,如何实现scalability
c. Fault tolerance,考虑有node failure和message loss的时候这
么处理。