F.Y.I

My materials for code interview:

You can have a look on the latest interview questions from careercup.com:
http://www.careercup.com/

And practice coding questions on Leetcode’s online judgement:
http://leetcode.com/

Here are my answers and summary for leetcode’s question on github:
https://github.com/benyl/leetcode

Here are some books that worth reading:

* CareerCup Top 150 Questions
* Cracking the Coding Interview
* C++Primer
* Head First Design Patterns

================================================================
Steps to solve algorithm problem on board:
================================================================

0) Collect detail requirements about the question: data structure, limitation, input types, error handling etc

1) Describe your solution by a simple case step by step.

2) Write your code base on the simple case.

3) “Mind compile” your code, check with corner cases.

4) Give the time & space complexity of your solution, think of ways to optimize them.

================================================================
And some useful knowledge (Good to know but not required):
================================================================

Sample coding questions from Google:
http://basicalgos.blogspot.com/?view=flipcard

如何设计一个LRU Cache
http://blog.csdn.net/hexinuaa/article/details/6630384

从B树、B+树、B*树谈到R 树
http://blog.csdn.net/v_july_v/article/details/6530142

Morris method (no recursive, no stack, O(1) space)
http://www.cnblogs.com/AnnieKim/archive/2013/06/15/MorrisTraversal.html

EXACT STRING MATCHING ALGORITHMS
http://www-igm.univ-mlv.fr/~lecroq/string/index.html

Dynamic Programming: 背包問題九講

Click to access DP.pdf

OOP questions (in java):
http://www.tutorials4u.net/java-faqs/core-java/index.html

教你如何迅速秒杀掉:99%的海量数据处理面试题
http://blog.csdn.net/v_july_v/article/details/7382693

从Trie树(字典树)谈到后缀树
http://blog.csdn.net/v_july_v/article/details/6897097

FB面试准备,这个人写的很详细,我觉得对其他面试也适用
http://www.mitbbs.com/article_t/JobHunting/32741713.html

大型WEB系统架构基本设计思路
http://www.it610.com/article/2619667.htm

增加你在美国找工作获得内推机会的10条建议
http://www.1point3acres.com/how-to-improve-your-chance-of-getting-referrals/

Get that job at Facebook
https://www.facebook.com/notes/facebook-engineering/get-that-job-at-facebook/10150964382448920

Facebook: How to crush your coding interview

系统设计总结:
http://www.mitbbs.com/article_t/JobHunting/32777529.html
http://www.wtoutiao.com/p/ef9tYN.html

================================================================
And something beyond algorithm:
================================================================

面试心仪的公司以前,我建议多面多几家公司,积累面试经验,你最起码要有一下体会:
1)面试提问千奇百怪你都遇到过,但你遇到没见过的问题不慌张。
2)现场面试过几家公司,特别是大公司。
3)足够强的体力和精神力挺过一天的面试。
4)自我介绍和项目经历倒背如流。
5)已经总结出一套跟面试官交流的经验,有几个常问的给面试官的问题。
6)算法基础扎实,对算法题有自己总结的一套经验和思路,面试前不盲目看网上的新题。熟练使用各种数据结构和优化思路,现场面对没遇过的算法题能够通过已有的知识一步一步推导。
7)对于有工作经验的工程师,最好能有自己的一套应对系统设计问题的思路,大致了解网站/分布式系统/移动开发的架构,能把设计题往自己熟悉的领域扩展,拉到自己的主场来分析。
8)关于系统设计,前端开发要考虑API设计,刷新机制,后端开发则需要考虑数据存储,状态更新,通知系统,分布式系统。最好你能有自己的一套理论归纳。简单来说就是减少数据量传输,状态更新的提示,用内存换时间性能、分布式系统的分配问题、负载均衡、数据同步。九章算法的课挺有用,mit bbs也有不错的系统设计总结,有个blog大概叫做a dummy guide to scalebilty写得就非常好,HighScalability这个网站也不错。还有一些网上的资源可以找找看。

这些不是说你特意准备以上几点,而是面试得多了,上面的几点你自然而然的就有了,你就知道自己准备充足了。不然通过的几率会比较低……

================================================================
关于OJ:
================================================================
用OJ训练算法基础是很有效的方法,现在有不少值得使用的OJ系统。我的GitHub (https://github.com/benyl/leetcode) 有当时全部leetcode解答和分析(130题),还有一个excel表格评价各题难度和归类,建议起码把3星及以下题目全部做完,和每一个类别做一个总结。Leetcode的题目我建议第一遍把题目做出来,第二遍精简代码,参考他人的答案,用尽可能简单和少的代码解决问题,这样对你的代码风格有很大帮助,注意,简单的代码不一定是最短的。

================================================================
关于读书时找工作的时间表:
================================================================
通常来说暑假实习需要提早一个学期投简历,前一年的9~12月份就应该一边读书考试,一边参加宣讲会和career fair,找认识的学长学姐内推,以及准备面试。
等到12月底学期结束,11~2月期间大公司面试完毕,没有就坚持到3~4月看能不能捞到一个暑假实习,不然就继续找。如果1、2月才开始找暑假实习,你基本上已经迟了(大公司intern head count很可能已经满了)。
等到春季学期结束,开始暑假实习,同时开始准备毕业和投简历找全职工作。
毕业前找全职工作的时间安排跟找实习差不多,同时有没有好的暑假实习经验也有很大影响。11月~1月面试完大公司。同上,1、2月才开始找的人基本上慢了一截。
最后学期继续一边上课一边投简历找全职工作,同时申请学生临时工作身份OPT。
如果工作不满意,可以继续一边工作一边准备面试更好的公司。
To be continue……

Good luck!

– Poly-Thinking

Leave a comment