刷题时代的困局
在公司做的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
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
http://www.1point3acres.com/bbs/thread-173996-1-1.html
1. 千万不要在面试时候急于表现自己,抢话说。
2. 一定要挺清楚面试官意图和题意再开始写
3. 注意交流、交流、交流 这个非常重要。
4. 面试官不太理解你意思的时候,test case给他明明白白地跑一遍。
5. 不要一味地迎合,显得你特别low没实力。有时候也要据理力争。
6. 最关键的一点放在最后, 自信,自信,自信!!!
说一条适合数据科学的:
数科经常会面很多不同方面,比如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. 能找人内推就不要海投,尤其非牛校
平时学习一定要虚心, 不要觉得自己都会了就跳过。 其实很多看起来很简单的问题挖起来超级深。。。亚麻有次面试就是, 考官本来只打算先出个简单的试试水, 但是我们往深了一讨论 时间就到了,那个面试还是比较满意但是下一场就因为准备不够跪了。。。
如果想知道work life balance,可以上glassdoor查
如果要问:可以问what is your typical day like? 一般跟什么人合作?你最近最proud的项目是什么?等
说:这个阶段钱不重要,我们先看看彼此合适不合适?
等发口头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. 面试时候遇到不会的题不要想用看到过的问题去套,冷静,一步步思考,这样至少会有你自己的思路,用别人的答案去套连思路都没有,而且面试官一问你就会慌。
面经里的题目好好写,弄得滚熟,尤其是如果这个公司的题目千年不变的话!
今天电面的时候遇到面经里面的原题,结果发现自己之前写的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
- 第三阶段,刷题辅导班、困局。Leetcode 的副作用慢慢显现,很多公司尝试屏蔽掉 Leetcode 的原题,加上刷题带来的面试者整体实力的水涨船高,刷好题就能拿大 offer 的日子一去不返。在之后,各类刷题辅导班雨后春笋般出现,核心都是在 Leetcode 的模式上做填鸭式的辅导。困局解决么?小编私以为,只要核心还是刷题,那么这局就没解。
- 做题时交流很少,做过的题目可以大差不差的做出来,但是碰到变种题目,规定时间内甚至无法给出一个粗糙的回答;
- 计算机的基础知识非常薄弱,做题中偶尔涉及一些 OS, Threading, Network, 某些类库的底层实现,往往一头雾水;
- 回答设计类的问题很糟糕,无论是 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 Googlehttp://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分钟的难题,但是你们聊天太开心他自己说的忘记时间了,而且他心里已经开始偏向你了,就赶紧快点问个简单的题目拉倒
面试是相互的,他们要看你是否合适,你也要看他们是否合适
关键是问问题要察言观色,不要穷追猛打
问一个让对方开开心心讲半天的问题,并且提很密切相关的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