专栏名称: 九章算法
专业的北美IT求职经验分享、技术交流社区,帮助你找到好的IT工作。由硅谷顶尖IT企业工程师维护。提供专业的算法培训/面试咨询,官网 www.jiuzhang.com
目录
相关文章推荐
九章算法  ·  谷歌/亚麻的BQ题库,附上标准答案! ·  昨天  
九章算法  ·  北美码农「找工咨询1v1」服务来了!FAAN ... ·  5 天前  
九章算法  ·  美国正在萎缩的行业!华人千万别碰! ·  6 天前  
九章算法  ·  终极版捡漏!大厂system ... ·  4 天前  
51好读  ›  专栏  ›  九章算法

在职跳槽, 半年拿下Facebook & Microsoft Offer

九章算法  · 公众号  · 算法  · 2017-12-27 08:58

正文

作者丨学员 W

编辑丨朱瑾

专栏丨九章算法


作者:    W, 九章学员,曾上过九章动态规划专题班和系统设计班

拿到offer:Facebook、Microsoft

签约offer:Facebook


求职经历


本科就读于中国top 3的财经院校,读的MIS(management information system,信息系统管理),研究生就读于美国top5的MIS研究生院。有过5年工作经验,在职跳槽,花了半年时间准备,先面了Microsoft,在Facebook onsite前拿到了Microsoft的offer,最后选择了Facebook。

课程帮助


我报了九章 动态规划专题班 系统设计班 ,这两门课程都给我提供了很多帮助。

以我个人来说,DP(dynamic programming)是我的痛点,去年面google 5轮中2轮DP,所以毫无疑问的挂掉了。我在看网上的解法时常常会困惑为什么一些题DP数组的长度=input的长度,为什么另外一些要长度+1。 如果当某一类题成为你的痛点并且你自己在看答案的时候也似懂非懂,报个算法班在我看来是性价比最高的解决方案。 我从九章DP专题辅导班里获益良多,遇到DP题也不心慌了。


现在大部分公司 会有一到两轮系统设计的面试 这轮面试的考点是你在平时工作或学习中根本get不到的 而且只是通过网上找到的只言片语的信息、解法,很快就会被面试官问倒的,因为面试官会换需求,或根据你的解法深入去问细节,这些在没有系统的理解过系统设计的同学很难招架的。 所以我报了九章系统设计的课程, 因为签了NDA,不能说具体的,但是考点在系统设计课程中老师都讲过。


准备建议


0 1


刷题部分


现在绝大部分的tech公司面试的主要内容还是考察 算法及coding 所以刷题不可避免的成为面试准备的重中之重,我并没有速成的方法,所以我的经验可能只对准备时间比较充裕的同学有所帮助。 我的 刷题方法总结 起来就是:


分类整理,温故知新。



大致说下我刷题的过程吧:


做新题


  • 拿到一道新题,我会给自己5分钟到10分钟的思考时间,并不动手coding 或是下笔写,只是想下这道题属于什么类型的题(我把lintcode上的题分了10大类,及若干子类,会在最后贴出来), 我之前有没有遇到过相似的题或是某道题的解法可以用在这道题上。


  • 如果你的时间充裕,可以把自己想到的思路implement出来,如果是刚开始刷题没有解题思路或是要时间比较紧迫,可以直接在网上找答案来看( 九章的lintcode答案查询 http://www.jiuzhang.com/solutions 绝对是最高效的 )。


  • 我的习惯是多看几份答案,找出最优且最符合你思维习惯的解法,如果你之前所想到的思路解法并不是最优(比如说时间复杂度或空间复杂度更高), 这时候你需要花些时间去理解下最优解,学习一下最优解的解题思路,这样才能慢慢的增加你的解题思路。


  • 根据你所选择/implement的解法,把题归类到文档 – 我是把所有题都记录在一个word文档里,思路相近的题放在一起。


复习


这一步是很关键的,我听过很多同事/同学说我刷了几百道题但是感觉没什么提高,之前做过的题再遇到还是没思路,或还不是按最优解来做,我分析出现 这样的原因是因为之前遇到这道题的时候,解法并没有完全吃透,或是记忆不深


所以复习做过的题就很有必要,但这个时候并不是再去上刷题网站按题号来刷,而是 要用之前分类整理过的document来 这么做的好处是相同类型的题解法也相近,多道相似的题在一起刷往往更容易找到规律也更容易记忆。


在过你的document的时候,尽量总结出针对某类题的template,比如bfs,binary search,或是某类问题中的特定题

重点突破


对于某些难题,应该单独拿出来,一步步看(IDE里打出结果),加深理解。

总结分类解题特点及注意事项: 每一类题都会有些很细小但容易出错的点,刷题过程中要慢慢总结,比如我总结的数组需要注意的点:


1. 如果结果求的是区间,i-j; 如果是求点集,i-j+1.

2. 如果在循环里再循环移动指针,要加上判定指针是否还在数组范围内的判定

3. 数组需要计数的时候可以用map

4. 数组内部的数组是否有重复,排序后第二个相同的数字是否要skip


0 2


系统设计


这部分内容比较灵活,难度也比较大,建议参加一下九章算法的系统设计班,基本上考点都涉及了。


0 28


Behavior question


这个并不是每个公司都有,但是有些公司对这个有很看重。我个人觉得这些问题你基于几个基本点出发去答题,应该就可以:


  • 你和你的同事都说professional的,所有争执分歧都是因为看待工作的角度不同。

  • 沟通,沟通还是沟通

  • 责任心。


0 4


面试心得


面试官出完题,和面试官确认些Corner case,保证自己正确。

可以先和面试官说出自己 大致思路 ,如果有多个,可以都说,面试官可能只会让你实现一个。 写完自己过些test case,debug。








请到「今天看啥」查看全文