面试准备

准备经历:

生物转行 CS 通过 Hired.com 找工作经历分享
http://www.1point3acres.com/bbs/thread-88894-1-1.html


8个月菜鸟 to google
http://www.1point3acres.com/bbs/thread-77453-1-1.html 


LeetCode and CC150 Frequency
http://www.cnblogs.com/wei-li/p/3318929.html


我的美国CS面试经验分享
http://blog.csdn.net/sigh1988/article/details/9774845


一、入门:
Behavior Questions
http://www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=106072&extra=page%3D1%26filter%3Dsortid%26sortid%3D192%26sortid%3D192


http://hrinterviews.blogspot.com/


获取比较全面的CS知识最快的方法,
www.programmerinterview.com


建立起了CS思维过程
Structure and Interpretation of computer programming:
http://www.youtube.com/playlist?list=PL3E89002AA9B9879E
http://cslibrary.stanford.edu/


Top 10 Algorithms for Coding Interview
http://www.programcreek.com/2012/11/top-10-algorithms-for-coding-interview/


面试中如何剔除“鱼目混珠”程序员
http://www.techug.com/how-to-get-rit-of-bad-programmmer


学语言:
codeacademy


side projects
www.udacity.com


Mobile:
android: online course (udemy)
iOS: iOS Programming


Design Pattern: online course (udemy)


Programming Interviews Exposed
入门级书籍,可以了解一些基本概念。


熟悉Java API:
首先,找一本类似<Java完全手册>的书来看,半懂不懂就行,动手写几个拿来玩的程序,这个阶段不要用IDE. 
玩得差不多之后(也就是你的程序写出来差不多能通过编译能跑之后),看<Thinking in Java>详细的过一遍,
过完后再把<Effective Java>捎带着看了,这样一般的Java程序你都能搞定.然后就想看啥看啥,想编啥变啥吧.
就看你想往哪方面发展了. 
对了,API的Javadoc是必备一份的,见到没见过的类就去翻文档,翻久了你就熟悉文API了.另外这三本书都有关于常用的API的内容.



二、中级:
Cracking the Coding Interview
中级书籍,经典必备教材,重点推荐,重中之重!从头到尾我做过五次。


http://www.leetcode.com/
难度偏难,可做适当了解。个人认为,如果不是面Google,里面的题目被面到的可能性不高。


Wikipedia/Google
仔细查阅每一个你所不知道的算法、数据结构和概念,做好笔记。等你在面试时发现一个名词你见过却不知道是什么,你会把肠子悔青的。


大话设计模式


补充一个看设计题面经的链接:http://blog.csdn.net/v_july_v/article/details/7382693 (PS:这东西本来也没有固定答案,个人觉得看看就好,别太认真)


Programming Pearls: 面google前花了两天看的,如果说CC150和leetcode教了方法,那么这本书就教了方法论,亦即思考过程,和从初级思考过程到高级思考过程的思考过程。


三、高级+面经+补充材料:


mitbbs的JobHunt板块,Glassdoor,CareerCup
资料很多,水帖更多,可以寻找到很多战友和第一手的面经。可以重点学习里面的精华贴。


Object Oriented Analysis and Design (Oreilly Head First.)和
Design Patterns Oct.2004(Oreilly Head First)两本OOP的经典教材。据说Design Pattern挺重要,但个人从未遇到过相关题目。但是大致了解一下,总不会错。


每个公司所关注的技术:
这一点非常重要。比如面Google,就要把Distributed System和Information  Retrieval的相关技术了解下,好好看看他家的经典Paper:Map-Reduce和Google File System;比如面Amazon,要准备好OOP。


Hacking a Google Interview
MIT的一门课程,教学Handout可作为中级题目练习。


Topcoder
知名的编程练习网站,有一些相关的材料和教材很经典。
====================================================================================
知识准备重点分类:


1.)  Time Complexity分析
基础中的基础。绝大部分情况下,算法的时间复杂度能一眼看出来。
如果是面Google,需要掌握一些严密的时间复杂度的数学推导,有些算法不是一眼能看出时间复杂度的。


2.)  Coding    


3.)  Data Structure
题目类型大多是:给定一些实际需求,来设计相应的数据结构。所以,对每一种数据结构的特点、时间复杂度要非常熟悉,而且要有很敏锐的第一感。


    a.Hashtables
可以说是人类发明的最重要的数据结构之一了。面试时的出现率极高!
保证你玩得转Collision strategies和hash function。如果深入到如何设计具体的hash function,题目的难度也会是很大的。


    b.Trees
BST,BFS,DFS,trie,Kruskal’s Algorithm ,Prim’s Algorithm
Balanced tree就没什么研究必要了。


    c.Graphs:
图的几种储存形式,BFS/DFS,Dijkstra,A* algorithm


    d.Linked List/Queue/Stack/Heap
相应操作的时间复杂度要了如指掌。保证你能轻松写出C++ STL或Java Library对应类库的API。


4.)  Algorithm
重中之重的重中之重!
Sort,Recursion,Binary Search,Greedy Strategy等等等等要全面准备到。
Dynamic Programming的一些经典题也要会。如果面Google,可能要准备一下DP的高级题目。
笔者认为,准备这类题目毫无捷径,只有不断刷题,总结,刷题,总结。要培养出对题目的直觉,这是一个漫长的训练过程。
在面试的时候,一般来说,要先给面试官提供一个暴力搜索的方法,然后计算复杂度。然后再慢慢做优化。面试时一定要keep talking,提出自己的想法,展现自己的思路。如果你get stuck,面试官也会给出相应的hint(当然这是会被扣分的)。


5.)  System Design


常见形式是:给定大数据量和N台机器,解决一个特定的问题。较开放的题目。在网络公司的面试中经常出现。
解法有固定套路,可以参考Cracking the Coding Interview 相关章节,并自己做一些总结和应用。这类题目看起来很难,掌握方法后,实际难度并不算很高,而且容易展现自身的分析能力,容易出彩。当然,面试官很可能会做适当的延伸,涉及到具体的技术,这就靠自身平时的积累见招拆招了。
推荐的一些补充阅读材料:
External Sort (http://en.wikipedia.org/wiki/External_sorting)
Web Crawler (http://nlp.stanford.edu/IR-book/html/htmledition/web-crawling-and-indexes-1.html)
Google MapReduce (http://labs.google.com/papers/mapreduce.html)
Google File System (http://labs.google.com/papers/gfs.html)


6.)  Mathematics
重点在于组合数学和概率论。会有一些这类的变体出现。稍微准备准备就可以了,相信国人的数学水平,绝对凌驾于世界巅峰,不管他面试官是阿三还是老美还是欧洲人。


7.)  Operating Systems
Processes vs. Threads
Locks, mutexes and semaphores
Deadlock and livelock
Scheduling: FIFO, priority, shortest remaining time, round robin, and multi level.
不算特别重要。至少笔者从未遇过相关题目。


8.)  Bit manipulation
两个目的:应付该类面试题(出现率不高,但是Google喜欢问);
用于自己的编程技巧——尽管有些silly,但是在代码中整一点bit manipulation,是很geek的事。


9.)  Design Pattern


了解这些:Observer Pattern, Decorator pattern, Factory Pattern, Singleton Pattern






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值