Sunday, November 8, 2015

how to prepare interview



刷题时代的困局
  • 第三阶段,刷题辅导班、困局。Leetcode 的副作用慢慢显现,很多公司尝试屏蔽掉 Leetcode 的原题,加上刷题带来的面试者整体实力的水涨船高,刷好题就能拿大 offer 的日子一去不返。在之后,各类刷题辅导班雨后春笋般出现,核心都是在 Leetcode 的模式上做填鸭式的辅导。困局解决么?小编私以为,只要核心还是刷题,那么这局就没解。
  1. 做题时交流很少,做过的题目可以大差不差的做出来,但是碰到变种题目,规定时间内甚至无法给出一个粗糙的回答;
  2. 计算机的基础知识非常薄弱,做题中偶尔涉及一些 OS, Threading, Network, 某些类库的底层实现,往往一头雾水;
  3. 回答设计类的问题很糟糕,无论是 OO Design 还是系统设计。知识面过于狭窄,缺乏实践经验,这都是命门;
  • 公司招聘的目标是找到那些愿意一起工作的人;
  • 在北美顶尖互联网公司,愿意和你工作一般意味着:聪明、有基础有能力、team player;
  • team player 是个很虚的概念,而且人可以慢慢改变,那还是找聪明有基础能干的候选人;
  • 出一些有意思的算法题,可能是最容易找聪明人的办法;解算法题需要一些背景知识,所以也是找有基础的人的办法;
这是一个简单的逻辑推演,也是小编心中的局眼。
出算法题的初衷是寻找那些聪明的、有一定 CS 基础的的人。但是刷题作为一个杀手锏,几乎让这个逻辑失效。可凡事总有利弊,公司只要感受到足够的不合理的招聘反馈,自然要调整考察的办法。比如越来越多的公司选择做 group project 来考察交流,用更多的设计类题目来考察背景知识和实践经验等。
归根结底,刷题锻炼的是 coding 能力,这确实是找工作必须的技能,但并非充分必要条件。
http://myprogrammingpractices.blogspot.com/2015_06_01_archive.html
在公司做的project可以适当放大,把没做完的也加进去,被interviewer提出问题,如
果这个部分你没有做,也要跟他说你可以怎么优化。要有over view on整个project,
尽量把握细节,讲的时候往你擅长的部分引到,这一点让人感觉你有ownership。我的
步奏是先介绍整个框架结构,project的motivation是什么,scale起来瓶颈在哪,sub-
project拆出来是怎么分的,为什么这么分,之间有什么dependency, sub-project我怎
么分配顺序的。

Design题一靠平常积累,二靠多看open source stack,当然要看细节和实现,光知道
大概没用的。
http://www.kuqin.com/shuoit/20150613/346615.html
GeeksforGeeks.org非常著名的漏题网站之一。上面会时不时的有各种公司的面试真题漏出。有一些题也会有解法分析。
CareerCup.comCC150作者搞的网站,也是著名的漏题网站之一。大家会在上面讨论各个公司的面试题。
Glassdoor.com一个给公司打分的网站,类似yelp的公司版。会有一些人在上面讨论面试题,适合你在面某个公司的时候专门去看一下。
themianjing.com面经网。应该是个人经营的一个积累面经的网站。面经来源主要是一亩三分地,mitbbs之类的地方。
一亩三分地。
mitbbs.comjobhunting版。北美华人找工作必上。

在线OJ及部分题解

LintCode- 专门提供面试题在线评测的OJ,筛选比较方便,还可以在source处选择cc150或者其他来源的题,有阶梯训练系统,不用担心不知道从哪儿开始刷题。目前会根据系统locale选择中文或者英文,评判时也比leetcode快,总之是比较赞啦。
LeetCode Online Judge- 找工作方面非常出名的一个OJ,相应的题解非常多
soulmachine/leetcode- 含C++和Java两个版本的题解
Woodstock Blog- IT,算法及面试。有知识点及类型题总结,特别赞
Acm之家,专业的ACM学习网站 - 各类题解
九章算法LeetCode / LintCode 题解。上面的题解是专业老师提供的,代码质量很不错。
水中的鱼。有很多LeetCode的题解。

论坛博客

刷题 | 一亩三分地论坛- 时不时就会有惊喜放出。
VisuAlgo- visualising data structures andalgorithms through animation - 相当碉堡的数据结构和算法可视化。
Data Structure Visualization- 同上,非常好的动画演示!!涵盖了常用的各种数据结构/排序/算法。
POJ的部分题解- Category: POJ| Beeder's Blog
专栏:算法笔记——《算法设计与分析》- CSDN上对《算法设计与分析》一书的学习笔记。
The Algorithm Design Manual, 作者还放出了自己上课的视频和slides - Skiena's Audio Lectures,The Algorithm DesignManual (豆瓣)
大部头有Introduction to Algorithm 和 TAOCP
Cracking The Coding Interview. 著名的CC150,Google,Mircosoft, LinkedIn 前HR离职之后写的书,从很全面的角度剖析了面试的各个环节和题目。之所以叫CC150就是有150道面试题,除了算法数据结构等题以外,还包含OO Design, Database, System Design, Brain Teaser等类型的题目。准备北美面试的同学一定要看。
剑指Offer。英文版叫Coding Interviews. 作者是何海涛(Harry He)。Amazon上可以买到。有大概50多题,题目的分析比较全面,会从面试官的角度给出很多的建议和show各种坑。
进军硅谷 -- 程序员面试揭秘。有差不多150题。
Get that job at Google
http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
http://blog.jobbole.com/39650/

http://frank19900731.github.io/downloads/file/Tips.pdf
http://memect.com/

http://www.1point3acres.com/bbs/thread-148574-1-1.html
0. 最最重要的一点: 一场成功的面试有两个重要的因素: 1. 快速解决问题并且可以做出相应优化 2. 快速完成没有任何错误的代码。

1.关于运气:我认为面试是50%运气加上50%实力。四个公司面下来我觉得能过两个。最后过了四个只是运气很好。如果真的面了我不会的题目我也一点办法也没有。. visit

2.关于刷题: 我Leetcode只刷了一遍,每道题亲自写代码保证AC(这点很重要!),写完之后看看讨论有没有更优化的解法用来举一反三,或是有没有更简洁更美观的代码。没有就自己发一个。从来不用IDE,点Submit就要保证不出Syntax Error,过基本的testcase。这样我感觉才是正确的刷题之道。

3. 关于面试题:这几家大公司都是最为常规的面试题目。Google难度大概在Top Coder Division 1 250 分左右, Hackerrank rated contest 题目里面简单和中等之间。

4. 关于面试表现:保持自信!保持微笑!微笑是实力的体现。面试更像是一场交流,你不会的多想一想,他不会的你给他讲一讲。

5. Experience Beats Everything。刷题其实是快速积累经验的一种方法,但是如果只靠刷题就能困难的面试,你让我们这些科班出身的情何以堪。所以还是推荐大家刷题的同时循序渐进,多掌握一些算法以外的东西,多做做有意思的项目,加深对计算机科学的理解。

http://www.cnblogs.com/lautsie/p/4317046.html
需要指出的是面试绝不仅仅是刷题,还有沟通,思维,英语等一系列方面。设计题则更需要经验,在复习准备的过程中,也确实对技术的掌握更扎实和深入了。虽然刷题这个行为广泛存在,但身边的牛人一般经过些训练和准备(不一定是强化的刷题训练),最终都还能过GG的面试;而只会做题的人,也经常会挂,可见Google等的面试整体还是能筛选人才的。
下面是准备过程:
1.LeetCode二刷;第一遍自己想,再看答案。第二遍,手熟。
2. WikiOi(CodeVs)天梯做到并查集,线段树附近;
3. ItInt5
4. POJ 50题做了一部分;
5. Codility的训练题;
6. Hackerrank
7. TopCoder;LeetCode和WikiOi的题都有定式,而TopCoder更启发思考,能帮助解耦定式。
8. MitBbs,一亩三分地,米群网上几乎所有的合理的面试题,都讨论了一下。
9. 和朋友参加线下技术交流,每周一次。
10. 向北大某个NOI金牌付费上课学习ACM的基础知识。
11. 上了九章算术的培训
12. 陈立人的微博过了一遍;
13. 经典的几道设计题整理准备了一下。
14. LeetCode,WikiOi,TopCoder都有明显的OJ风格。有些面试里会出现类似去除代码文件中所有注释的Coding题,此类也准备了不少;
15. Amazon的行为面试题,也都准备了一下;
16. 工作上也开始更深入关注架构,设计等方面。
17. 十轮左右模拟面试;

http://www.1point3acres.com/bbs/thread-173996-1-1.html
  • 后知后觉,没有抓住每年9月的高峰,导致现在投简历直接被据
  • 海投而没有怎么内推
  • 不能盲目投,追求数量而不追求质量和效果。盲目投除了浪费时间外,更重要的是让你遭受到严重心理创伤。我开始不知道应届生只能投New Grad,而是一通乱投,还投了些小公司的Senior职位,结果就是倍觉打击
  • 一直觉得自己没准备好,而不申请好公司,导致很多公司没坑了。正确的做法是先投出去,占个坑再说
  • 面经里的题目好好写,弄得滚熟,确保correct,没有bug,足够clean,最优解,尤其是如果这个公司的题库非常小(不超过20个)的话!

1. 千万不要在面试时候急于表现自己,抢话说。
2. 一定要挺清楚面试官意图和题意再开始写
3. 注意交流、交流、交流 这个非常重要。
4. 面试官不太理解你意思的时候,test case给他明明白白地跑一遍。
5. 不要一味地迎合,显得你特别low没实力。有时候也要据理力争。
6. 最关键的一点放在最后, 自信,自信,自信!!!
1. 处女面就面dream company
2. 没有提前准备好好刷题

说一条适合数据科学的:
数科经常会面很多不同方面,比如you will talk to a PM, a dev, a few fellow data scientists, 1-2 managers etc..
显然这些人care的事情会不一样
what can you say to please these different people?
以下抛砖引玉:
- phd 数科:查他的paper and talks,快速找机会表扬你读过他的研究,表示做的很好。多参加会议什么的,如果此人还可以,多半在各处做过讲座,哪怕你当场没去提问,也要表示你当时在场,talk做的很好,如果你还记得任何的细节,赶紧丢出来表示highly impressed 

- 其他数科:问他impact,让他说说最近项目里面最大impact的是什么
- pm:问impact, 问challenge.
- dev:除了谈代码,问dev对数科的期望是什么样的,将来打算如何合作
- manager:问一般1-1什么样,希望招你去了以后做什么项目,对你期望如何,什么timeline,有什么建议。
如果我来做这个工作,你觉得什么会是我最大的challenge? 然后你可以解释为什么这些不是大问题,或者你打算如何解决这些问题

- bigger boss (usually for culture fit): 表示理解公司营业模式,报道什么的都要读的,问为什么是这样的,经过过什么样的探索才决定这么做的,工作大方向的vision是什么,队伍expansion plan如何,等待.
you can ask from multiple person: 
你来了以后遇到的challenge是什么,怎么解决的
对于我加入队伍后的成功,你有什么建议吗?然后认真做笔记,问1-2个follow up问题

教训:1 别问worklifebalance 2可以问面试官当前做的东西,但是不要过于详细 3 不要问面试官过多的个人信息 这些都是低级错误

6. 能找人内推就不要海投,尤其非牛校
1. 一定要把job description吃透,提前能了解多少面试官或者职位就了解多少,有针对性准备
2. 面试时候一定要察言观色,面试官不感兴趣的project不管你多confident多想讲,都不要多讲
3. 问面试官问题不要问太多,问一两个最感兴趣的就好
平时学习一定要虚心, 不要觉得自己都会了就跳过。 其实很多看起来很简单的问题挖起来超级深。。。亚麻有次面试就是, 考官本来只打算先出个简单的试试水, 但是我们往深了一讨论 时间就到了,那个面试还是比较满意但是下一场就因为准备不够跪了。。。

如果想知道work life balance,可以上glassdoor查

如果要问:可以问what is your typical day like? 一般跟什么人合作?你最近最proud的项目是什么?等

提问环节见仁见智,我属于会问非常多问题的那种人
面试是相互的,他们要看你是否合适,你也要看他们是否合适
关键是问问题要察言观色,不要穷追猛打
问一个让对方开开心心讲半天的问题,并且提很密切相关的followup问题,人家会对你印象很好
首先,他get to talk about sth he cares about 本身就很开心
其次,by asking a good follow up question it demonstrates you are interested, you paid attention ,and you are able to ask an intelligent question. 1point3acres.com/bbs
两种good feeling叠加起来,对方就不自觉会觉得跟你交谈很融洽
而且这样还可以缩短他问你问题的时间。。。。
比如他本来打算问你一个需要30-40分钟的难题,但是你们聊天太开心他自己说的忘记时间了,而且他心里已经开始偏向你了,就赶紧快点问个简单的题目拉倒

说:这个阶段钱不重要,我们先看看彼此合适不合适?
等发口头offer之前如果再问,就说:i am open to reasonable market level compensation之类

死也要让对方先开口。谁先开口谁输
note that there are more than 1 ways to ask for "more"
可能可以base加
equity加
都不给加的,要求加signon
有的搬家费可以折现
nonconventional的,可以要求more time off

1.沟通是最重要的(有一次,面试就自己蒙头写,没怎么说话,最后还没做出来,面试官都无语了
       你在想解决方案的时候一定要说出来,这样让面试官知道你在想什么
2.调整好心态(有次紧张的不行,导致自己很多想说的东西都没说出来
     尽量不要紧张,想想自己在各种教授面前都已经presentation过,那些教授的背景很有可能比面试官更厉害,既然已经在这么厉害的人面试展示自己,干嘛还害怕这些面试官呢
3.遇到特别难的题还是要一步一步的去试着解决,现在简单case考虑,说一些东西,不要让面试官觉得你什么都没想,看见难题就蒙了


5. 面试时候遇到不会的题不要想用看到过的问题去套,冷静,一步步思考,这样至少会有你自己的思路,用别人的答案去套连思路都没有,而且面试官一问你就会慌。
2 不要浪费机会。 很多人都说什么今天形式不好什么的, 可是我看到的确实很多人真的是浪费了一把把的机会。 明明有面试自己不好好把握, 别人说形式不好你就归因于形式不好。 有再多的面试又有什么用呢? 面挂两三个都是可以理解的, 但是你面挂七八个一定是你自己哪里有问题, 就别浪费机会了。反省一下再接着面。

还有一点,就是千万不要一听完题蒙着头使劲写,特别是ood的题,听完不交流直接写的100%跪。

面经里的题目好好写,弄得滚熟,尤其是如果这个公司的题目千年不变的话!

今天电面的时候遇到面经里面的原题,结果发现自己之前写的code有问题!当时就慌神,然后一边想一边写,然后就一直出bug。真TM后悔当初没弄得熟一点!

offer接的太早… 后来发现拖着不接可以谈各种条件…
到了给口头Offer的时候 你想要什么就说什么

1. 大公司比小公司好进,一定多种形式反复的去申请,目的是为了让他们家能看到你的简历。 
2. 优先级,校招 > 朋友内推  > 社会内推 > >  海投, 海投其实就是投进了海里,很少会有人给你回复的。我认为一定要好好珍惜校招的机会,太多的大公司对校招非常青睐,很容易会给你个campus internview,进去的可能性也大大增加了。千万不要以为自己已经找别人内推了,就不再投校招了。这是错误的。
3. 关于校招,一定要早早的知道有哪些公司参加,一定是 大公司 先 小公司 后 这样的优先级,一定要排在大家前面先投大公司。(大公司实习的面试题真的不是特别难,而且对简历也不是特别看重)
4. 关于校招(follow up): 校招的时候一定要找工程师,千王不要找hr 千万不要找 hr 千万不要找hr。 工程师中找年纪大一些的不要找年纪轻的,因为没什么卵用。另外,尽量不要找中国人,按照我参加的经验来说,中国人只是来打个酱油。
5. 关于刷题,实习根本不需要刷很难的题目,只需要将easy刷到非常熟练,同时对medium做过一遍就可以了。关键在于熟练,面试的时候查面经也是非常重要的一部分。
https://www.nowtoshare.com/zh/Article/Index/70531
https://www.nowtoshare.com/zh/Article/Index/70532

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts