一路披荆斩棘,我是如何成功拿到四大Data Scientist offer的?

一路披荆斩棘,我是如何成功拿到四大Data Scientist offer的?

昨天
小编的朋友圈被一盘番茄炒蛋广告刷屏了妈妈凌晨四点从床上爬起来

给远在他乡的儿子视频教学如何做番茄炒蛋

直戳留学生的软肋

 

但是

我认识的留学生们

并不会因为一盘番茄炒蛋吵醒熟睡的爸妈

相反

他们会和父母说自己过的很好

然后忍着思念 耐着寂寞

一边默默赶due一边实习

希望毕业后能找个好工作

不辜负父母的期望

 

今天

数据应用学院学员Stella想跟大家分享她的求职心得

希望能够帮助到正在找工作的小伙伴们

自我介绍
Stella,今年八月份毕业于美东某知名大学,数学博士学位。从去年(2016)十一月投出第一份简历,经过十一个月的找工,最终选择了四大之一Data Scientist职位。
教育背景博士期间我做的是概率和随机过程的理论研究,不涉及任何数据和实际应用。本科的时候只上过两门基本的统计课程:数理统计和多元统计分析,这是我所知道的所有的统计知识。

研究生三年级的时候选了一门统计系的课程:data mining, 朦朦胧胧的开始了数据科学的奇妙旅程。不过在当时上完课之后,并没有继续花更多的时间去探索数据科学,只是觉得这个方向还蛮有意思的,更多的时间精力都放在了自己的课题研究上,满心希望毕业后能找到一个博后职位。

到了博士第五年,才下定决定去业界工作。一开始纠结于找quant,还是找数据科学。找quant, 虽然自己对随机分析比较熟悉,本科也是学金融数学的,而且之前的系里去业界的师兄师姐也都是去投行的,没有做数据科学的先例;对于数据科学,欠缺的知识要比quant的更多,准备起来的时间必然更久,然而自己对数据科学好像更感兴趣,所以还是决定找数据科学家的职位。

如果你有足够的时间精力,学习能力也比较强的话, 可以都准备,毕竟还是有很多知识技能是重复的。

教训博士期间对于自己的职业规划一定要清晰,早做准备。但凡不是百分之一千的肯定自己以后就是要找教职的,都应该留出一点时间来了解下找工作的信息以及如何准备。

但这是一个悖论,不知道这个教训的人,大概看不到这个文章,知道这个教训的,不用看这个文章。

不管你知不知道这个教训答应我

文章还是要看的!

因为后面都是满满的干货

拿好小本本记重点啦

知识技能储备
网上关于数据科学家所需的技能已经很多了。不管通过什么课什么资料学到,都可以。但是我单是在搜素相关资料,选择上哪门课时, 也是花了不少时间。所以下面大概列下我所上过的课程和用到的一些资料吧,并且简单的介绍下,希望可以帮大家省一部分时间。
Python
因为大一的时候编程学的是C++,第一门编程语言,学的比较糊里糊涂的。而且学过后再也没有用过,就把编程入门的课重新上了一遍,打打基础。后来发现data scientist用的更多的是各种packages, 所以可以直接去学习numpy, pandas, matplotlib 等这些怎么用,节省时间。我之后又快速的上了datacamp 的一些课程:<https://www.datacamp.com/>

coursera的 <https://www.coursera.org/learn/python-data-processing>

当然这只是一些例子,关于data science with python的课程很多,选择一两个就好,更多的是通过做项目来练习,或者通过学习kaggle上其他人的kernels来提高,效果会更好。

R
在学校上data mining的时候homework,quiz, project都是用R的,所以基本上把an introduction to statistical learning上的例子都过了一遍,缺点就是没有ggplot, dplyr。 所以又上了datacamp 的ggplot,dplyr。 其实这些包可以自己通过documents来学,但是如果你和我一样,喜欢听别人讲,听完了练习,那datacamp的课程还是不错的,而且不断更新。同python 一样,我觉得学习Kaggle上的kernels是最好的学习方式。
SQL
我是通过这门课 coursera duke <https://www.coursera.org/learn/analytics-mysql/home/welcome> 入门的。比较喜欢那个美女老师,这门课也提供了很多的练习,但是项目很难写到简历上,单独作为一个project 分量不足。她还开了一门tableau的课程。tableau上手比较快,学精比较难。但是tableau是一个可以快速学习然后放到简历上的技能。Udemy上的 the ultimate mysql bootcamp 我也上过,用cloud9还是很方便的。 <https://www.udemy.com/the-ultimate-mysql-bootcamp-go-from-sql-beginner-to-expert/learn/v4/overview>

最初觉得sql比较简单,上完课之后也没有再练习了,每次面试前抱一下佛脚,很没有底气去面试。后来为了克服这种没底气的恐惧,有一段时间就每天早晨起来在 <http://www.sql-ex.ru/> 上写几个query. <http://sqlzoo.net/wiki/SQL_Tutorial> 的也做过,比sql-ex上的简单。也有同学推荐<http://sqlfiddle.com/>,自己写schema,然后练习。 sql 远不是写一些query那么简单。很多时候数据的链接以及一些异常情况处理仅仅通过上课是了解不到的。在上DAL的课程中,做推荐系统的项目时,接触了sqlalchemy。 不过幸运的是,我在面试中,从没有被问到过sql的问题,但是sql的重要性是毋庸置疑的。

Hive
是在上数据应用学院的Data Scientist <https://www.dataapplab.com/course/dscn/> 课上接触到的,做作业时花了很久,又因为我忘记保留答案,后面发现还要提交query, 所以做了两遍,后来又单独练习了一遍,到最后感觉基本重要的都cover到了。 后来又上了udemey 的一门hive 课程。
Machine Learning
machine learning是我花时间比较多的一块儿,主要是因为这块和其他所有技能相比,涉及到的数学比较多,个人比较感兴趣。

  • coursera (university of washington) 的machine learning specialization <https://www.coursera.org/specializations/machine-learning> 实际的例子比较多, code 也是用python, 用graphlab package很方便。
  • Andrew Ng 的machine learning: 这个不用多说,必选。比起上一个,强调算法,但是也不会很数学,作业用matlab, 对于理解算法本身很有帮助。后来我又看了Ng在Stanford 开的cs229: <http://cs229.stanford.edu/> 理论性比较强,对SVM的推导讲的很好。
  • udacity Machine Learning Engineer Nanodegree 很多项目可以放到简历上,但是可能因为上过的人比较多,避免重复性,还是要斟酌。除了supervise and unsupervised learning, 还有用reinforce learning 实现的一个smart cab和一个用CNN做图像识别的项目。现在CNN的那个项目中规中矩,主要是练习下tensorflow, 在之前是用CNN识别街道数字串,用到Goodfellow 的一篇论文Multi-digit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks。简历上有tensorflow 应该算是一个加分项吧。
  • 数据应用学院课程中的项目可以展示, 问题背景也是和工业紧密结合,用到的知识xgboost, recommendation system, GIS, NLP 等都很热门。
  • An introduction to statistical learning. 必读书
  • The Elements of  Statistical Learning 经典书(还有很多其他的好书,但是我没有完整读下来,所以也就不列出了。)

Machine Learning更多的是反应在简历的项目里面。一开始我的简历没有可写的项目,只能把data mining课上做过的四个项目拿来,虽然用到的算法并没有和现在简历的项目相差很多,但是项目的背景,复杂度都不是很有卖相,所以一开始简历关很难通过。后来不断的自己找一些感兴趣的问题,找数据,跑模型,但是完整性展示性还是不怎么的。之后上了udacity的课程,项目背景也算是有意思,并且完整,但是请一个老师修改简历时,她说她看过一个类似的,都是在udacity上课的同学的。我们系的一个同学的项目基本也是这几个, 但是他面试的时候展示了对于deep learning的了解,读过相关paper,加上当时那个职位希望后面做一些 Long short memory term model, 所以在经过若干考验后,他也顺利拿到offer。

个人感觉项目要有一个很好的背景,要解决一个有意义的至少是对公司有意义的问题,然后加上一些算法结果,最后最好能够可视化。

Algorithms
这块我自己准备的不是很充分。四月份在加州一个IT 公司面试失败后才意识到,data scientist 也是要刷题的。后来有上过coursera stanford的算法课,算是理清了要考的点,获得一些技巧。 在数据应用学院的 data science 课程中,也有老师帮着总结data scientist要掌握的重点。 对于ds的同学,面试时遇到算法的题目不会很难,基本上是leetcode上easy的难度。一些常用的经典的算法,还是要在理解的前提下记住,并能够比较灵活的运用。这是一个关于算法可视化的网站:<http://www.cs.usfca.edu/~galles/visualization/ClosedHash.html>知道了目标后,最重要的还是练习,练习,再练习。 在练习中要注意的有几个方面有

  • 按 topic 练习: 对于ds, sort and search 比较重要。
  • think loud 这是google 对于白板面试code的一个指导:<https://www.youtube.com/watch?v=XKu_SEDAykw>
  • 在白板上练习, 可以和同学一起mock.
  • big O, 最优解 <http://bigocheatsheet.com/> 面试的时候,可能一下子不能想出最优解,可以先写出基本解,然后一步一步优化。可能有的面试官反而喜欢看到你思考的一个过程,而不是一上来就给出一个背下来的最优解。
  • 重复练习:有的算法很容易忘记,所以要经常重复写 理解后再记忆
Probability and Statistics
这部分比较值得一提的是A/B test. 当时面试quora的时候,被问到了一些, udacity 上有一门关于A/B test的课程,其他地方没有找到相关的课程,有一些blog 有些介绍,但本质上是统计的假设检验。我在数据应用学院时,和几个同学组成了一个学习小组。在找工作期间, 互帮互助。组内几个同学对于统计概率总结了一些学习网站:

  • https://simplystatistics.org/page/2/https://www.udacity.com/course/intro-to-descriptive-statistics–ud827http://onlinestatbook.com/2/index.htmlhttps://onlinecourses.science.psu.edu/stat414/https://www.youtube.com/watch?v=Bu7OqjYk0jMhttp://www.wzchen.com/probability-cheatsheet/

基本的概率分布都在这里的cheat sheet里面了,面试应该不会超出这个。

Hadoop and Spark
感觉这个不会也不是太影响,但是会可以加分。Hadoop: udacity 有一门课程介绍的算是比较清楚的。另外在数据应用学院也有一节课的介绍。

Spark: 正在学习,没有在简历里面提到。

Kaggle比赛和简历项目
参加kaggle的重要性不用说了,但是比较花费时间,如果没有时间,可以学习一些高票的参赛者的solutions. 如果恰好某个比赛的行业背景和你申请的公司差不多,帮助应该是不小的。我去年十月份的时候参加了第一个,没有花太多精力,最后结果可想而知,不是很好,也没有很突出的地方,就没有写在简历里面。其实这里有一个感想就是:选择做什么项目的时候要谨慎,是不是和你想去的公司的所在行业一致,虽然不一致也没什么,很多算法都是各个行业通用,但是如果通过做项目,能够了解到某个行业的一些business,还是有好处的。在投入精力做项目的时候,最好有一个计划,保证能够完成。我有几个都是因为各种原因,没有完成,浪费了时间精力。在找工作的那种压力下,功利一点来讲,你该不该做什么事的标准就是这个事对你的简历提升有没有帮助。当然在和面试官交流的时候,你从失败的不完整的项目中学到的知识经验还是有间接的帮助的。我自己简历上的内容没有行业的一致性,多少感觉这是一个弱点,没有纵向的深度。

以上都是硬件要求学习方法都告诉大家了

可不能只看不练哦

简历的那些事
 
改简历
 改简历的过程和找工作的过程一样长,我基本上至少每个月改一次。找同学改,找已经工作了的师兄师姐改,每次都能找到需要修改的不妥的地方。简历的修改也是自我提升的过程。修改的主要地方是用更好的project 替换之前的质量低的project。 增加skills。排版之类的在改了几次后就不会有更大的变动了。对不同的公司要个性化处理,做好记录哪份简历投了哪家公司,因为面试的时候,除了job description, 简历就是考试大纲。

一开始我用的是Latex写的简历,因为改起来格式不会像word 那样得手动调整。但是有的公司会用tracking system,关键词匹配,或者抽取简历的信息自动填写一些表格,Latex里面的一些符号就会被提取,总之不是很方便。最后还是使用了word, 然后转化为pdf, 或者直接上传word 格式的简历。

投简历
我一共申请了104家公司,包括全职和实习,大部分都是海投。内推的几家收到的回复确实很快,所以如果你有很好的资源,不要浪费,师兄师姐或者朋友他们真的很愿意帮忙。我因为麻烦别人时心理会有负担,加上海投的也有几个回复,给我一种海投也还行的幻觉,就没去找很多内推。所以申请的结果和意料一样,大部分都是没有回复,明确拒绝的有9家,明拒和默拒结果没什么区别,但是对心情的影响还是很大的,尤其是有一家在我刚投了的第二天就给据信,让我怀疑自己适合不适合当数据科学家。走过来之后,就觉得完全没必要那么悲观,可能只是不匹配而已,并不代表你不是其他公司的最佳人选。而且人的能力是动态变化的

在104家公司里,通过简历关的大概只有18家,有三家因为实习时间在我OPT开始之前,所以不了了之。但是当时我极力给对方留下个好印象,希望有全职机会的可以再次联系,但是这种希望一般很渺茫。 在18家里面,两家是通过内推得到的机会。最后onsite了三家, 拿到一个offer

时间安排
大部分情况下,前几个面试失败的几率比较大,所以建议一开始不要投自己的dream company。 投简历的时间要均匀,虽然不同公司的回复快慢不同,但是不会差很多,如果一股脑儿都在一个时间点投了, 可能面试准备不过来。同时也要尽量使得同一段时间,不能只有一家公司。因为你不想在同一个时间段,只得到一家的offer, 失去比较的可能性。
 关于面试  
对于接到面试邀请的邮件后,约到什么时候的面试比较好这个问题我纠结了很久。个人感觉是:

如果是和HR聊,那么准备时间不需要很久,二天之内要搞定,除非HR时间排不开。尽快搞定,加快速度就是增加机会

如果技术面,那么我差不多需要四五天的时间,但是随着后面对简历的多次重复,对知识的复习熟悉,也不会需要那么久的准备时间。

对于onsite,从收到onsite的邀请(还没有安排面试当天的时间表)到onsite 当天,我觉得至少要给HR十天的时间,如果HR定机票,可能你要约到二周以后。因为把那么多面试官聚到一起,本来就不是一件容易的事情。我第一次onsite时候,约的是一周之后,当时担心拖的太久,印象不好。结果到了onsite的前两天晚上,HR还没有定好机票,第一个onsite的那一周,紧张的没有睡过一个安稳觉。

下面具体说下各个阶段的面试
HR环节
第一站
通过简历关后,HR可能联系,约半个小时左右的面试,了解下背景,看看背景匹配不。正常情况下这一步都没有问题,我会在这种面试前对公司的基本情况了解下,从公司官网,youtubes视频采访,glassdoor,一些新闻,LinkedIn 等,还有专业些的同学看财务报表,总之找到能找到的所有信息,但是还是会有很多想了解的找不到,然后就写下来,如果问题合适,就作为最后和HR聊天的问题。

然后就是准备一些behavior questions的回答,比如<https://www.thebalance.com/top-behavioral-interview-questions-2059618> 准备过程中相当无聊。其实在和HR聊天过程中,他们也不会干巴巴的问这些问题,都是以聊天形式的。

这个环节有的HR会问你期待的薪水是多少,我一般会绕过去,不回答,但是有的HR很强硬,希望你给一个数字。所以在面试前还是要做一个基本的调查,虽然这步离最后的offer还很远。

大部分公司过了简历关后,直接开始安排技术面,这是我比较喜欢的模式。简历上的项目要了然于心,包括可能拓展的问题。最好的方式就是每一个项目或者经历都写一个相应的文档,每次面完一家公司,就把被问到的回答得不好的问题加上去。

曾经遇到一个面试官,对我上过的课程一一询问,挖的不深,一两句话总结下这门课是干什么的,学到了什么。和她有交集的多交流了些。Skills最好在相应的项目里面有体现。 我当时看很多公司要求会hadoop, 就上了udacity的那门课程,但是没有项目体现,被面试的时候说不出什么,很尴尬。后来去上了些应用hadoop的项目课程。这个环节我被问到的最多的就是介绍你的项目,还有解释一些机器学习的算法。机器学习的算法复习的时候可以很深,但是没有那么多时间准备,我被问到过的问题基本不出大数据应用微信号的每日一练的范围。还有的问case study, 大部分来自公司正在做的项目下的小问题,这种不太好准备,买了crack the PM interview,还没有看完。有的公司一次技术面就OK了,有的要面试两次。

技术面
第二站
有人可能说第一次面试就是拿来练手的,失败了也不要怕。作为失败后的安慰确实不错,但是有很多工作都是可以提前准备的,没有必要用真正的面试来练手。比如自我介绍,面试结束后有什么问题问面试官以表达出自己的兴趣,简历的内容是否了然于心等等。我们没有办法猜测会被问到什么具体的题目,对于很大可能会被问到的,为什么不提前准备呢?glassdoor,一亩三分地等等都可以看到面经,虽然不会被问到一样的题目,但是可以给我们一个什么感觉,什么东西是该准备的。
OnSite面试

一般面试官有三到六人,和你面试的组里有多少人有关系。一轮30mins到45mins,和面试官一对一。 有的中午会加一个和面试官一起吃午饭的环节。也有的有一个presentation的环节。虽然强度大了些, 但是我觉得能和面试官面对面,交流起来比电话更好些。我面过的三家onsite 都是偏重技术面试。第一家的时候,主要失败在算法题写的不好,没有准备充分。

Onsite 之后,该松口气? 一切成败都已经定了?那就错了。失败的很难再翻身,但是前面一直表现的很好的,也还不能放松。第二家onsite, 我一共见了六个面试官,manager只是和我开始聊聊天。本来觉得已经够了,回到家不到两天,又收到一个电话面试。这种情况下,有可能是其中一个组内的人onsite当天不在,所以要加一场。也有可能是安排和更高级别的面试官面试。

之后
一些心得
  • 把找工作当成full-time job, 投入多少都不过份。
  • 心态很重要。 这段时间遭到很多拒绝,比前半生加起来遭到的拒绝都多。五月份的时候,每天早晨都会去小跑,通过跑步,获得一天的动力。家里人也给了很多精神上的支持,在最脆弱的时候,感觉自己还有家人可以依靠。但困难终究是要自己去面对去克服。
  • 如果周围有也在找工作的同学,要团结起来。可以互相模拟面试。我特别感谢我们小组的同学,分享很多学习经验心得,还有一个同学帮我模拟面试,给了我很多建议和鼓励。
其他一些对于我有帮助的
  • 270 applications and 7 months of interviewing to land a job as a new grad
  • https://alyaabbott.wordpress.com/2014/10/01/how-to-ace-a-data-science-interview/
  • https://www.youtube.com/user/PyDataTV/videos
  • https://www.youtube.com/playlist?list=PL39P3XK_jveHE89PgwwvVPAGAj2cuxRrT
  • https://zhuanlan.zhihu.com/p/22387312
  • https://zhuanlan.zhihu.com/p/21758279