作者:CMN 九章学员,上过《Python算法入门基础班》《算法面试高频班》
签约offer: Bloomberg News
拿到offer:
Bloomberg News
LintCode 刷题福利群
微信公众号后台,回复“coding” 即可进刷题群,获取:
九章算法独家50余场高品质求职讲座无限回放1个月,价值 $45(仅前10位)
LintCode VIP 会员3个月,价值$48, 2000多道IT企业算法面试题 (仅前30位)
LintCode VIP 会员1个月,价值$18 (参与即可获得)
九章算法独家 Google、Facebook、Amazon 秋招大礼包
求职经历
我的背景是美硕,商学院 IT, 然后是在硕士在读转了 IT 专业。因为课程都很偏商,所以只有几门简单的编程或数据库的课程,完全没有涉及算法的课程。我毕业后加入了最后一个学期时实习的公司,职位是 Database engineer
做了大概一年后,机缘巧合在一个雪友的介绍下开始知道有算法这么个东西,想要转行找好的码农工,需要过这一关。于是下决心开始准备。
我是今年2月开始投简历的,花了500大元找人改了简历和linkedIn page(主要是我自己写简历水平太差再加上实在没时间改)。
收到了2个小公司的面试邀请
第一家公司基本没有算法题,见了所有人,然后最后让回家写个restful challenge, 这个我没写好,被拒了。第二家,面了两道题,valid parenthesis 还有 number of island很简单,相信大家都可以秒掉。最后的onsite是系统设计, 设计一个调查问卷。ood, 设计一个电梯。感觉小公司还是很看重你的经验的,如果你会他们要的,就留,不会就滚。
Facebook 的 data engineer 电面
这个是 hr 在 linkedin 上联系我得到的,虽然感觉和自己想要转行的前提有点不符(我想做 software engineer)但是毕竟是 facebook,还是要试一下的。感觉他们要考的东西都是我天天做的,肯定得心应手,没想到电面就挂了,电面考的是30min sql, 30mins 编程(lintcode naïve级别)。如果有同学想申请这个职位,在做 coding 时千万不要 overthinking, 我在面试的时候就试图 implement split()这个 function, 面试官直接说不知道你在干什么,能不能从上面的函数列表里直接挑一个做这步,然后看到 split function 赫然在目。然后因为类似的情况浪费了很多时间,再加上无比的紧张最终挂掉。对我打击超大,觉得自己老本行都搞不定,更别提转行了。但还是毅然选择了坚持找,所以大家也一样不要灰心。这个职位考的是对数据集,表及关系的理解,把 buisness case apply to table and relationship这一类。工作中也是主要做 sql, 和设计一些 data pipeline 一类的工作。
Amazon的 SDE 纽约组
海投亚麻,然后居然在3个月后收到hr回音,做 OA. 把 OA 面经大全翻了个遍。然后都做了,但是还是由于过度紧张,第一题完全看错了题,find all substring with length k and have k distinct character. 其实就是找所有k长度的没字符重复的词嘛,没难度,偏偏没看到那个 length k, 这样浪费了30分钟,全部重写,导致第二题来不及。大家在做时一定要仔细看题。第二题,是说给一个 tag list = [“I”, “love”,”jiuzhang”], 然后一个字符串数组 [“I”, “you”,”her”,”love”, “I”, “JiuZhang”], 让返回一个最小的含有 tag list 所有词的区间顺序无所谓。这题就是[3,5], 俩指针就好了,但是实在时间来不及。OA时还有个地方我觉得要注意就是如果时间不够,一定要让程序可以compile, 不然都不会送到 review。
课程帮助
上课篇
开始的时候一头雾水,整个过程就像一个深度优先搜索,先从 MIT 的公开算法导论课开始,发现第一节课后开始已经晕逼,然后各种网上资源,都无功而返。大概是从将近两年前听说了九章的课程,然后才终于进入了正轨。
上了一遍算法和强化之后,突然工作开始变忙,于是暂停了半年刷题并且把之前本来就半桶水的技能全部忘光。所以毅然决定再上一遍,然后突然感觉第二遍时慢慢找到了些感觉。我一点个人的建议特别是对在职的同学,一定要把上课和做题连起来,这样的话因为不用不停的回忆之前讲的内容,所以其实是省时间的,如果断了就再上一遍,因为即使是第二遍,也会有很多新的收获,我个人在第二遍课时就经历了几个顿悟的过程。还有一个经验就是高频题班在开始面试前的效果很好,尤其是对于像我一样数学和计算机基础比较薄弱的同学,可以保证如果遇到这类偏题(比如稀疏矩阵乘法,大数乘加,模拟),不会无从下手。如果连基本的语言都还不会的话,可以考虑上《九章算法基础班(python)》,先学好python,再开始刷题
刷题篇
在最开始的时候,这是最打击的部分。算法题的两大法宝,拿到题选什么算法和如何实现这个算法,这两个都不行。但我个人感觉,后者比较容易,所以可以先从实现算法开始练起(lintcode的分类阶梯训练),然后当和一些标准算法数据结构都不陌生后,再去见新题,看哪个算法可以解决,后面这一步也是我花时间最久的一步,也是我觉得我从九章课上收获最大的,因为训练的是思维模式,比如看到topk, 就可以联想到heap,看到找全部解就要想到如何搜索,看到简单图或棋盘,就要想到bfs。
还有一个我觉得帮助我很大的是分类和记录自己的做题记录,比如gitbook,或一些博客网站都可以。经常一个题做了俩礼拜以后好像从来没见过,或者说记得第一和第三步,但是忘了第二步,这时候可以回去翻一下自己从前的思路,可以发现是再哪一个思维步骤断层了,重点记这个。个人经验是写的越细越好,不然过后根本看不明白。
我每天可以用来刷题的时间很少,只有回家后大概从8点开始刷,一天的工作后状态也非常差,所以我就把节奏放慢,少刷几道然后反复根据思路刷,我喜欢一边叨叨一边写,这样可以督促自己确实明白了解题的每一步,而且也就当练练面试时的场景。这样坚持了大概7到8个月,虽然只刷了大概350左右,但基本可以保证60% bug free并且可以解释思路。这一步我想根据大家可支配时间来决定,还有就是连续坚持,不要断断续续。
准备建议
关于Bloomberg
两连败了以后,这是我剩的最后两个面试了。因为我同时申请了两个职位,两个都发了面试邀请所以就一起进行了。挺hr说彭博越来越不要求 c++了,所以像我这样从没碰过 c++的同学都可以去试试。
第一个电面
上来先问简历,然后基本数据结构实现,例如,如何减少 hash map 中的hash collision, b tree 是不是 binary tree, linked list/array/ hashmap/hashtable 啥时候该用啥这类的问题。这个一定不能不会,尤其面彭博,如果不会说明你还没准备好,可以再拖一拖。算法题是在二维矩阵中从左上向右下的路径总数,动归就好了,也可以搜索。要讲清思路再开始做题。
第二个电面
没有简历直接做题,Process log, [[1,5],[1,6],[5,7],[9-11]] 代表各个 process 的起点和终点,返回所有没有 job running 的区间。和 number of airplane in the sky 略微不同大体思路是一样的。在返回上。Follow up 是让返回最少 process running 的区间,先找到最小的数,然后返回区间是那个数就好了。最后要merge 重叠,也是 Lintcode 原题。第二题有点难度,给一个 list of new hires 和一个 list of hiring entity, 然后每一个人对每一个用人单位都有一个喜好度排序,每一个用人单位也对每一个new hires 有一个喜好度排序,问如何找出一个稳定的 match, 可以参考这个文章:
http://www.cs.princeton.edu/courses/archive/spr05/cos423/lectures/01stable-matching.pdf
(扫码即可阅读文章)
顺利拿到两个onsite安排在了同一天。
1.1. 两个 engineer, two sum 变种,找到两个最先(index最小)的相加起来等于 k 的一对数,follow up what if 是 m 个相加起来等于 K 的数?
1.2. 两个超级 senior 的 engineer, 第一个问题出奇的简单,问如果从一个 matrix 的一点出发,如果计算所有 neighbor 的和,然后 follow up 是如果加一个 Input 是找距离该点为k的行和列的和然后后面是这样,给一个 stock data stream, input 是 stock 名字和交易量, 设计一个系统实时返回 top k 交易量,各种情况分析,实现原理,复杂度分析。大家这里划重点啊,令狐老师海量数据处理原汁原味的原题,在线词频统计,这个一定要看。
1.3. 就在我觉得一切已经结束的时候,又款款的走进两位工程师,然后开始 word stream, 不需要实时,返回 alphbetical order 和词频统计。 用到 hashmap,然后比较各种 sort, 如果 Input 是 linked list 咋做? hashmap 怎么实现的,各种计算机基础知识,一道看似简单的题大约聊了30分钟,写码大概只用了5分钟。刚要松一口气, 设计电梯类,要求处理 request 和电梯停动的算法。
1.4. 老板出现然后带我去吃了个 Lunch (非常好吃的希腊餐馆,推荐大家,在大厦对面)顺便了解我找工作的动机,想要发展的方向。上午终于结束
2.1 下午依旧做题,stream words classification, 给一个 api 告诉你两个 Object 是否是同一类的,如果处理去重和不去重两种情况。然后后面一题,给 time slots of meeting room booking [[1130,1200], [1130, 1230], [1230,1400]]问最少需要多少个meeting room, lintcode 原题,number of airplain in the sky. 排序扫描线。
2.2 继续,买卖股票一次交易最大收益,然后 follow up unlimited number of trade 最大收益,有点懵,最后讨论想法思路,给了很多提示。然后系统设计,不说具体,但基本意思是,如何处理数据传输前获取服务器状态用时过长的问题。
终于在之后一天同时拿到了两个组的Offer,历时两年的学习准备终于可以告一段落了,比预期的收入大概多了40%,而且新的base是我目前薪水加奖金的2.5倍,收到通知的一刻比当年高考录取还要爽。终于可以松一口气了。最后有几个鸡汤想跟大家分享一下。
1. 参加 lintcode 每周的算法比赛,享受从3000名飞跃到500名的快乐,这个给了我很大的动力。而且也能见识不同的题。
2. 如果时间有限,就要规划出时间只留给学算法,我的特定时间是工作日每天8点以后直到睡觉。周末上下课,想刷就刷,不想刷就玩一下。
3. 多上qq群交流,安利身边的人也来学算法,然后借机站在过来人的角度给他或她讲题,增加自己的成就感也巩固学的知识最重要的是有人一同作战。
4. 用自己的工作或学校project增加自己的软技巧,与人沟通的能力,并且把自己的想法解释给别人听的能力。也可以自己对着白板bb,有用就是会有点无聊。
5. 尽量利用身边所有能用的资源,朋友内推,九章官网长期内推贴等,并且能多做几次Mock就做几次。
6. 最后就是想说,如果我这样的算法小白加脑子不灵光还没时间的人都可以,所有人只要有足够的恒心和正确的方法,都一定可以拿到自己想要的offer。
九章算法 |帮助更多中国人找到好工作
《九章算法基础班(Python)》
美西 12月1日 周六 16:00-18:00 p.m

北京 12月2日 周日 08:00-10:00 a.m
长按二维码,报名免费试听
继续阅读
阅读原文