专栏 | 九章算法

网址 | www.jiuzhang.com

作者:CMN 九章学员,上过《Python算法入门基础班》《算法面试高频班》

签约offer: Bloomberg News

拿到offer: Bloomberg News

求职经历

我的背景是美硕,商学院 IT, 然后是在硕士在读转了 IT 专业。因为课程都很偏商,所以只有几门简单的编程或数据库的课程,完全没有涉及算法的课程。我毕业后加入了最后一个学期时实习的公司,职位是 Database engineer。

做了大概一年后,机缘巧合在一个雪友的介绍下开始知道有算法这么个东西,想要转行找好的码农工,需要过这一关。于是下决心开始准备。

我是今年2月开始投简历的,花了500大元找人改了简历和linkedIn page(主要是我自己写简历水平太差再加上实在没时间改)。

1.收到了2个小公司的面试邀请

第一家公司基本没有算法题,见了所有人,然后最后让回家写个restful challenge, 这个我没写好,被拒了。第二家,面了两道题,valid parenthesis 还有 number of island很简单,相信大家都可以秒掉。最后的onsite是系统设计, 设计一个调查问卷。ood, 设计一个电梯。感觉小公司还是很看重你的经验的,如果你会他们要的,就留,不会就滚。

2.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 一类的工作。

3.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。

课程帮助

1.上课篇

开始的时候一头雾水,整个过程就像一个深度优先搜索,先从 MIT 的公开算法导论课开始,发现第一节课后开始已经晕逼,然后各种网上资源,都无功而返。大概是从将近两年前听说了九章的课程,然后才终于进入了正轨。

上了一遍算法和强化之后,突然工作开始变忙,于是暂停了半年刷题并且把之前本来就半桶水的技能全部忘光。所以毅然决定再上一遍,然后突然感觉第二遍时慢慢找到了些感觉。我一点个人的建议特别是对在职的同学,一定要把上课和做题连起来,这样的话因为不用不停的回忆之前讲的内容,所以其实是省时间的,如果断了就再上一遍,因为即使是第二遍,也会有很多新的收获,我个人在第二遍课时就经历了几个顿悟的过程。还有一个经验就是高频题班在开始面试前的效果很好,尤其是对于像我一样数学和计算机基础比较薄弱的同学,可以保证如果遇到这类偏题(比如稀疏矩阵乘法,大数乘加,模拟),不会无从下手。如果连基本的语言都还不会的话,可以考虑上《九章算法基础班(python)》,先学好python,再开始刷题。

2.刷题篇

在最开始的时候,这是最打击的部分。算法题的两大法宝,拿到题选什么算法和如何实现这个算法,这两个都不行。但我个人感觉,后者比较容易,所以可以先从实现算法开始练起(lintcode的分类阶梯训练),然后当和一些标准算法数据结构都不陌生后,再去见新题,看哪个算法可以解决,后面这一步也是我花时间最久的一步,也是我觉得我从九章课上收获最大的,因为训练的是思维模式,比如看到topk, 就可以联想到heap,看到找全部解就要想到如何搜索,看到简单图或棋盘,就要想到bfs。

还有一个我觉得帮助我很大的是分类和记录自己的做题记录,比如gitbook,或一些博客网站都可以。经常一个题做了俩礼拜以后好像从来没见过,或者说记得第一和第三步,但是忘了第二步,这时候可以回去翻一下自己从前的思路,可以发现是再哪一个思维步骤断层了,重点记这个。个人经验是写的越细越好,不然过后根本看不明白。

我每天可以用来刷题的时间很少,只有回家后大概从8点开始刷,一天的工作后状态也非常差,所以我就把节奏放慢,少刷几道然后反复根据思路刷,我喜欢一边叨叨一边写,这样可以督促自己确实明白了解题的每一步,而且也就当练练面试时的场景。这样坚持了大概7到8个月,虽然只刷了大概350左右,但基本可以保证60% bug free并且可以解释思路。这一步我想根据大家可支配时间来决定,还有就是连续坚持,不要断断续续。

3.准备建议

1.关于Bloomberg

两连败了以后,这是我剩的最后两个面试了。因为我同时申请了两个职位,两个都发了面试邀请所以就一起进行了。挺hr说彭博越来越不要求 c++了,所以像我这样从没碰过 c++的同学都可以去试试。

2.第一个电面

上来先问简历,然后基本数据结构实现,例如,如何减少 hash map 中的hash collision, b tree 是不是 binary tree, linked list/array/ hashmap/hashtable 啥时候该用啥这类的问题。这个一定不能不会,尤其面彭博,如果不会说明你还没准备好,可以再拖一拖。算法题是在二维矩阵中从左上向右下的路径总数,动归就好了,也可以搜索。要讲清思路再开始做题。

3.第二个电面

没有简历直接做题,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, 可以参考这个文章:

www.cs.princeton.edu/courses/arc…

(扫码即可阅读文章)

顺利拿到两个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。

欢迎关注我的微信公众号:九章算法(ninechapter)。
精英程序员交流社区,定期发布面试题、面试技巧、求职信息等

商学院转CS,零算法基础,摆脱题海战术拿到 Bloomberg Offer相关推荐

  1. 为什么神经元有数千个突触,一个新皮质中的序列记忆理论(HTM算法基础)

    为什么神经元有数千个突触,一个新皮质中的序列记忆理论(HTM算法基础) Jeff Hawkins* and Subutai Ahmad Numenta, Inc., Redwood City, CA, ...

  2. Python3算法基础练习:编程100例( 21~ 25)

    往期练习: Python3算法基础练习:编程100例(1~5) Python3算法基础练习:编程100例(6 ~ 10) Python3算法基础练习:编程100例(11 ~ 15) Python3算法 ...

  3. python小白-day4递归和算法基础

    递归&算法基础 一.递归 递归函数的优点是定义简单,逻辑清晰.理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰. 使用递归函数需要注意防止栈溢出.在计算机中,函数调用是通过 ...

  4. 数据结构(二)算法基础与复杂度

    一.算法基础 1.算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作. 2.算法具有五个基本特性:输入.输出.有穷性.确定性和可行性. (1)输入输出:算 ...

  5. 2022牛客寒假算法基础集训营6 签到题5题(附基础集训营4-6签到题总结)

    1.I-A+B问题 模拟,类似于高精度,竖式运算 #include<bits/stdc++.h> using namespace std; typedef long long LL; in ...

  6. 常见算法基础题思路简析(六)-字符串篇

    2019独角兽企业重金招聘Python工程师标准>>> 常见算法基础题思路简析(六)-字符串篇 标签: algorithms [TOC] 本文对和 字符串 有关的常见算法基础题思路分 ...

  7. 任务分配算法c语言程序,程序员算法基础——贪心算法

    原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...

  8. 《Python程序设计与算法基础教程(第二版)》江红 余青松 全部章节的课后习题,上机实践,课后答案,案例研究

    (还在更新中-) 这篇博客花费了我的大量时间和精力,从创作到维护:若认可本篇博客,希望给一个点赞.收藏 并且,遇到了什么问题,请在评论区留言,我会及时回复的 这本书对Python的知识点的描述很详细, ...

  9. 《Python程序设计与算法基础教程(第二版)》江红 余青松,第十章课后习题答案

    推荐阅读 <Python程序设计与算法基础教程(第二版)>江红 余青松 全部章节的课后习题,上机实践,课后答案,案例研究 文章目录 上机实践:2~4 案例研究:基于模块的库存管理系统 上机 ...

最新文章

  1. Redis 高级特性(3)—— 持久化及数据恢复
  2. Udacity机器人软件工程师课程笔记(三十五) - SLAM - 基于网格的FastSLAM
  3. 100c之36:不同鸡的数量
  4. php导出页面word,php导出生成word的方法_PHP
  5. boost::function_types::is_callable_builtin用法的测试程序
  6. 关于might_sleep的一点说明---CONFIG_DEBUG_ATOMIC_SLEEP【转】
  7. mysql创建管理密码_mysql 创建用户与授权、修改密码
  8. Java实现递归回溯,解决八皇后问题,数据结构与算法
  9. memcached客户端_分布式算法真是吊炸天 – memcached - 第287篇
  10. 《开源框架那点事儿14》:教计算机程序解数学题
  11. Python模拟登录哔哩哔哩
  12. 人才梯队的搭建:55页集团人才梯队建设方案,梯队人员的管理
  13. BZOJ 1015: [JSOI2008]星球大战starwar 并查集
  14. element-plus Table 表格自定义列模板使用及问题
  15. 计算机多媒体技术广泛应用于各个领域,新时期计算机多媒体技术的应用与发展趋势研究...
  16. 二分图最佳匹配(KM算法)学习笔记
  17. python爬取周杰伦歌词_Python 爬取周杰伦 instagram
  18. EVE-NG 入门教程 (Mac OSX BIg Sur)
  19. 计算机原理论文2000字,计算机原理论文_计算机论文3000字_对计算机的认识论文...
  20. STM32——快速识别芯片引脚数

热门文章

  1. Typescript ---- 进阶篇
  2. MyBatis-05-笔记
  3. oss文件上传demo (精简版通用)
  4. 03-MySql数据库与JDBC day03_多表操作
  5. 谈情说爱千万条,情绪稳定第一条
  6. OSEA视频认证,技能强国,筑梦未来技能人才培养
  7. 第五篇 HTML页面基本组成之 标签元素大杂烩
  8. java泛型常用特点_Java泛型详解
  9. 告别996,几款可以提高工作效率还免费的办公软件
  10. css--两行显示省略号兼容火狐浏览器