高级农民
积分 4167
大米 颗
鳄梨 个
水井 尺
蓝莓 颗
萝卜 根
小米 粒
学分 个
注册时间 2017-11-17
最后登录 1970-1-1
2018(10-12月) -ME 博士 +fresh grad 无实习或全职 | 内推|BayArea湾区 码农类General 全职 @
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
一直在地里看大家的面经,看大家的经验分享,最近有空,把自己在2018年的经历写出来,让大家有个参考,希望对一些同学有参考价值。
-baidu 1point3acres 毕竟不是文科生,文笔很烂,也不会打草稿,所以,写得很散,记流水账一般,请包涵。
另外,我也不是大牛,连牛都算不上,弱得不能再弱的弱鸡一枚,如果想要横扫FLAG这样的结果的同学,请忽略我的帖子,还请轻喷,轻喷,多谢多谢。
一. 背景和动机
我是2015年毕业的PhD,火坑专业,毕业之后,在湾区的一个国家实验室开始了苦逼的科研之路。在来湾区之前,听说过湾区的码农工资高,但是一直在东部读书,所以总是抱有一些怀疑的态度,觉得,嗯,可能只是一小撮码农是那样的动辄几百K的包裹吧,大多数人可能还是路人那样的。直到自己来了湾区,身边的码农朋友多起来了,才发现,靠,自己奋斗的终点,其实还不如人家码农的起点。再也不能自欺欺人了,再也没有办法坐得住了。还不算太老嘛,不想掩饰自己内心对于金钱的渴望,就想着搞一把吧,凭啥自己拿这么点钱啊。而且,湾区的生活成本确实高啊,从长远考虑,不转码,真的挺不容易的。而且,不患寡而患不均,心里真的会不平衡。这就是动机。
国家实验室的唯一好处就是简历好看一些,绿卡拿到手的时候,这个title也就彻底失去价值了,剩下的也就是尽力去做转行这个事情了。
背景也很简单,自己的专业跟代码一点狗屁关系都没有,除非你觉得在matlab里面写几个for loop也算是写代码的话,那我就跪了。好在当时读PhD的时候闲得蛋疼,去修了一个统计的双学位,这也成为了自己敢转行的一个原因和动力吧。不过,这也是双刃剑,之后会讲,有好有不好。嗯,我做这些所有的事情都是用业余时间,因为要上班啊,挣钱养家糊口啊。
二. 准备之路
我觉得大多数人不会看第一条的,哈哈,都是想看看怎么准备的吧。嗯,我觉得自己的经历也犯了很多错误,我也会一一讲出来。尽可能地按照版块来讲吧。
1. 定位
这个是最难的,也是最重要的。如我之前所说,因为自己有统计的学位,而且当时的data science极其火,所以就头脑发热去选了这个。也是觉得这个自己能学起来,不像刷题转码那样毫无头绪,或者说更是一片空白。 之后就把很多统计的知识都捡起来了,还学了很多关于machine learning,deep learning的东西,额,大概花了我半年的时间吧。其实效果很不好,很不好,很不好。简单来讲,就是这几个原因:a. 行业经验缺乏,因为不管是做什么数据,其实对数据的认识,理解,对行业的认识理解都很重要;光有统计知识是远远不够的,现在的公司在找人的时候,巴不得你对这个行业一清二楚,尤其是小公司;所以,这个是一个很大的原因;b.应用太小了,虽然这个ML, DP, AI很火,但是,其实没有几个地方真的用到了这个,尤其是在盈利的公司,更不会用这个了;你学了那么多酷炫的招数,没有用武之地; c. 待遇和市场其实还是比码农要差一些的;d. 那些ML, AI这样的知识不是你通过一个辅导班就能学会的,每个点都可以毕业无数个博士,对数学的要求也极高,否则只是一个被科普了的level;
那半年碰壁之后,开始刷题转码了,效果比自己预想得要好很多,所以,我觉得这个定位其实挺重要的。原因其实还是供求关系决定的,没有几个单位需要太多的数据科学家,真正需要的还是在一线能够写代码的工人。
2. 学习资料
这个学习主要分为几个大的方向,基础统计知识的学习,ML的学习,算法和刷题的学习,工具的使用。. .и
基础统计知识是最快捡起来的,两个星期就差不多了,主要的就是基本的概率轮,统计学,国内正常受过大学教育的,应该都会。有一些常用的,比如说anova,比如说假设检验,这个要熟练一些就好了,注意举例。
ML的学习花了很多时间,用了挺多资料的,可是觉得,嗯,贪多嚼不烂吧。我看了text book,觉得这个是理解最快的,可是里面的数学成分还是挺重的,原理都很简单,也不难理解,只是数学部分有点恶心。可是,我觉得这些原理知道了,也用处不大,人家不care,真正在用的时候,没有人特别在意原理的细节,都是直接调用包裹就好了, 各种参数的选取也是更多跟经验有关,看看document,跑跑数据试试也就完事了。 当时花了很多时间去想明白SVM,想明白random forest,各种boosting之类的,没用,其实面试你的人也只会用包裹而已,你学会的,他们也不一定会。Anyway,我还是说一下,我用的资料是韩家炜的书,另外一个学习资料是国内的一个辅导班,叫做炼数成金,里面有一个课叫做机器学习,嗯,是我听过的讲的最好的,难易程度刚刚好,可以够装逼,又不会太吃力。还有就是烂大街的吴恩达的ML入门课,其实都是范范地讲了一下,不真的深入了解的话,也很难复述出来。
算法和刷题,这个就不用说了,没什么,就是拿时间磨出来的。MIT的算法课,看过一些,可是挺深入的,我觉得没有必要搞那么深入,也一下子吃不动。geeksforgeeks上一些DS和Algorithm的科普就差不多了。另外,数据结构真的挺重要的,我面试的时候被面过heap的问题,就是因为基础知识太薄弱,才被虐的。我觉得,刷题只是手段,真正需要掌握的是数据结构和算法。如果只是为了刷题而刷题,这个好像真的不对。当然,个人意见。我用过的算法和刷题的还有DATA STRUCTURE FOR PYTHON,算法的话,BFS, DFS, 分治等等,各种总结都看看,各种分析都听听,就会好很多,还是那句话,刷题只是手段,不是目的。这道题宁可不会,也要把知识点搞懂,如果这道题知识点都搞不懂,你做出来也意义不大,这个后面会细讲。
工具的话,我在自己准备之前只会matlab里面最简单最简单的,当成一个高级计算器用而已。所以,基础为0,或者为负数吧,所以也就是从头学起了。最先学的语言就是Python,可是,真心不觉得python是一门很适合用来理解数据结构的语言。当时学它只是因为它很容易上手,和matlab极其相似,也很简单。嗯,如果再要学的话,我觉得Java会好很多。当然,这个东西是萝卜白菜,各有所爱。Python有很多个工具,比如说SciPy, NumPy, Pandas之类的,还有更高级的关于ML的Sk Learn之类的。嗯,除此之外,还学过一些乱七八糟的工具,比如说R,甚至SAS,涉猎过一点点pyspark,还学过一点点基础的SQL。嗯,不过真正有用的其实一门语言就够了。后面这些工具,其实更多的是熟练度,不是一两天就够的。比如说R里面那些关于画图的包裹,你除非天天在手上玩,否则只是比一般人多知道这个名字而已,真要干点啥,还是得去google,真没啥意义,还不如直接放弃算了。同样的感受也来自于SQL,网上有一些SQL的学习教程,比如说w3school之类的,一天就能学完,看过去挺简单的,可是,额,这个完全不是公司面试要求的level,你写过几年SQL的人,和一个就学了一天SQL基本语法的人,面试的时候的表现是完全不一样的。嗯,这些东西的存在,只是为了简历上的关键字吧,个人感觉。
3. 辅导班
嗯,现在各种各样的辅导班真是层出不穷。我先声明,我没有收任何辅导班的好处,也没有辅导班会傻逼到给我好处。所以,仅仅是一家之言,个人感受。
总体来说,家贫人丑,舍不得上辅导班,能省则省。不过,因为是转行,不上辅导班的话,总觉得简历上太贫瘠,所以,大概还是上过这些辅导班吧。我一个一个列出来:
a. 九章:我上过他的基础算法班,强化班,这两个班都很不错,算是给数据结构和算法开了个好头,不至于像无头苍蝇一样无处下手了。这个也是性价比最高的班了,100多块钱,挺实惠的。另外还上过九章的系统设计班,这个,个人感觉有点太散,big picture和details的把握不是很好,听完了之后还是要做很多的功课,反复消化,才能转化为自己的东西。还有一个刷题点睛班,这个感觉就挺鸡肋的,都是一些比较easy和medium的题目,个人感觉不是特别推荐。远不如基础班和强化班性价比高。. Χ
b. coursera: 嗯呐,这个便宜,哈哈。在这里上了好多辅导班,比如说吴恩达的ML入门,比如说John Hopkins University的Introduction to Data Sceince 系列课,有十门课,主要是讲R的运用比较多,一些工具的使用,比如说R的画图的包,markdown等等等等,一些基本的数据处理分析的技巧。这个课本身挺好的,可是,这种技巧更多的是依赖熟练度,你在辅导班能用上的强度和工作强度差别太大了,很难指望你在辅导班上的练习就可以让你用得很熟练,充其量只是入个门而已。不要太指望这个会让你发生奇迹。还有其他的一些课程,都比较零散,比如说AWS的应用,AB Testing之类的 。
c. 炼数成金:这个是国内的一个网校,我个人很喜欢。里面的ML的课程难易结合的极其完美,够装逼,又不会太难学不会。我只上了里面的ML的课程。其他的课程,我没有发言权。
d. BitTiger: 也就是太阁网,貌似现在倒闭了,额,那我就不多评价了吧。
总体来说,辅导班没有那么神话,可以带你入门一些东西,但是,其实想想也就明白了,你花一两个星期,或者个把来月业余时间能自学学会的东西又能有多复杂呢?这样做的结果,必然是不精。不过没办法,转行嘛,必须得在简历上堆砌一大堆相关的经历,技能和project才可以啊,所以,有一些该上的还是要上,但是,投入太多,比如说像太阁那样的几千刀,额,觉得性价比还是挺低的,不要期望太多就好了。如果你自己自学能力够的话,效果并不会比你自己自学好多少。不过它有一个很大的好处就是资料的搜集,你不用再去纠结看什么,或者是再去纠结哪里找资料了,辅导班都会给你搞定,通过辅导班,你会有一个比较系统的计划。所以,如果是不差钱的同学,可以考虑吧。只是真心不要觉得自己花了几千刀,报了辅导班,只要跟着他们,你就能一路拿到offer了。额,亲,醒醒,你如果真的只是这样的智商的话,那还是暂时先别考虑刷题了,听听郭德纲的段子可能更有意思。
4. 简历
我还是花了一些时间在简历上的,这里倒不是真的指编辑简历的时间,而是为了在简历上build这些关键字。通过那些辅导班啊,通过那些网课啊,我还是可以在简历上写得一些吹吹牛的project,不过其实真的关系不大。明眼人一眼就能看出来,你丫就是个弱鸡,毫无疑问。所以,这个简历只可以混过HR的肉眼,不过这也够了。.google и
网上到处都是简历的模板,不用太在意,能混过HR就可以了。大部分公司,在面试你的时候,都不知道你的简历是什么鬼样子的,很多人面完你了,都没看过你的简历。
5. 面试
OK,我准备差不多一年的时间,前半年都把心思花在了统计和ML上面,捎带刷了刷题。嗯,以为data scientist可以不需要刷题,所以,我就傻啦吧唧的在准备半年之后就冲上去了。怎么说呢,看过去很美,其实很惨。我在这一轮面了很多公司,但是,几乎全部止步于电话面试或者是take home exam,online assignment之类的,连一个onsite都没有。这些公司包括Uber,Pinterest, Airbnb,Quora等,还有一堆国内的小公司,比如说京东,苏宁,滴滴打车,阿里,等等等等。另外一些像Intuit这样的公司,我面得也很多,可是都在第一轮就挂了。因为本来就是去试水的,所以,并没有很难过,可是还是觉得方向错了。因为所有的公司在电面的时候,没有人会来问你ML的具体知识点,或者是公式推导,人家关心的,都是你有没有相关的经验。这种经验绝不是你上上辅导班,或者听听讲座就能明白的,而是你真的要在这个领域内有工作经验。真正让自己改变定位的,应该还是Uber的面试,我可以具体讲一下:
这算是我面的第一个大公司了,海投之后就有了面试,比自己想象中的快好多好多,可能还是因为教育背景比较能唬人吧。Anyway,电面却极其惨烈。一个random on weight 这样的题目,都不会写,写得坑坑洼洼。一个简单版本,一个难的版本,因为对python和R的不熟,搞得要来回切换,一个是用python写完的,一个是用R写完的,呵呵。估计面试官都懵逼了,这个弱鸡。我明明是用这道题来热身的,你丫扯了半天蛋,哎,算了。.
但是,面试官最后给我的反馈却是,无论你的DS有多好,在一个团队里,需要的码农的量远远大于DS的人。比如说他们团队,有300人左右,可是真正会用到ML,做决策的DS的角色只有二三十人,绝大多数人都是在implement或者是achieve这些PM或者是DS的idea而已。醍醐灌顶,从此之后,决定,学那么多没用的,不如学一招鲜,吃遍天。没什么别的出路了,刷题转码吧。
. 1point3acres.com
嗯,重新捡起数据结构的课本,重新学习算法。花了三个月的时间,胆子又肥了,开始投简历。简历上也做了很大的修改,尽量让自己不要那么向DS靠拢了, 而是更多的向码农的方向偏吧。这一轮面试也挺多的,FLAG的面试全有了,还有Adobe, Yelp, Snapchat这样的公司。这里四个是FALG全跪的面经:(PS. 我最后接受的是snap的offer,给的package还可以,哈哈,而且老天帮忙,去年年底入职,相当于抄了个底). Χ
https://www.1point3acres.com/bbs ... ewthread&tid=513663 . Χ
https://www.1point3acres.com/bbs ... ewthread&tid=514141
https://www.1point3acres.com/bbs ... ewthread&tid=514128
. From 1point 3acres bbs
https://www.1point3acres.com/bbs ... ewthread&tid=513669
. 1point3acres
. ----
嗯,大牛们可以忽略我这样的弱鸡了。对于转行的人来说,看过去面试机会不少,虽然表面上说不在意你的经历,但是,其实一面试,一聊天,还是能一眼看出来你不是写代码的人,你只会刷题。所以,这种时候,面试的时机就很重要了,要看公司是否急着招人,多让朋友去打听打听。我不指望自己会去横扫,也其实没必要,offer有一个就够了,多了也是浪费,当然你要攒齐七个offer去吹牛逼的话,那就当我没说。. 1point3acres
其实整个面试中,我个人觉得最重要的还是刷题,这也是唯一一个你可能通过短期内高效突破的点了。你的教育背景,你的工作经历,你的项目经历,这些,都不太可能会有太大变化了。至于你在网上上的那种个把月的网课,比如说什么两个月成为职业数据科学家,嗯,醒醒,别逗了,ML里面都不知道能毕业多少个PhD了,你两个月也就是系统性的被科普了一下。这个和你自己去google一下ML十大算法,然后好好看看,效果差不太多。
我从外行的角度来讲一下刷题的感受:最开始对刷题嗤之以鼻,觉得是奇技淫巧,所以,一直不屑于刷题,总是想着投机取巧,靠着一点小聪明去刷。嗯,这样确实能刷掉一些题,但是,只是一些很基础的题,对于算法和数据结构其实没有帮助。我还是觉得,刷题只是手段,数据结构和算法才是目的。如果一道题目过来了,对你的这两个点没有太大帮助,其实,刷出来与否意义都不大。比如说LC里面有两道题,一道题目是判断一个科学计数法的数字是否合理,另外一道题目是类似于word设计排版,左对齐或者是中间对齐这样的功能;这两道题做的时候,磨了好久,考虑各种边界条件,可是,事实是,对数据结构和算法的认识,并没有什么提高。换位思考一下,如果自己以后有机会去面试别人了,我也不会出这样的题目的,因为考察不出东西来,也没有必要让被面试者在面试现场把所有的corner case都想到,这太没有意义了,面试官自己都记不住吧。有一些题目,虽然不难,但是确实很经典,对于算法和数据结构的理解帮助挺大。比如说大家都做烂了的number of islands,BFS是常规套路,但是,如果是后面的升级版,那么就一定要上并查集了;这样的题目我觉得对自己的帮助和启发更大。真正让自己花了很多时间的其实还是DFS这个算法,而在数据结构中,无数次被问到的则是heap方面的知识,不知道面试官为什么那么热衷于问这个。所以,我自己的建议是,不要那么着急上来就去刷题,先沉下心,好好看看数据结构和基本算法,其实两三个星期也就足够足够了。刷题是让你知道,自己在这两个方面还有哪些欠缺,还有哪些理解上的误区和不足。好比一个简单的sort,有那么多个方法,真的搞懂了吗,时间复杂度,空间复杂度,为什么最优,什么情况下是最差,什么时候又是average?面试官在和你面试的时候,不会简单的听你说一句,嗯,这个的时间复杂度是多少多少,而是你最少能装模作样的跟别人解释出来,为什么是这样的。你是通过程序的运行分析出来的吗,还是通过主方法分析出来的呢?还是凭直觉?脑子里还是要备着这些最基础的只是点的,要不然,刷完题了,聊啥啊。-baidu 1point3acres
其实如果是自学的话,学到这里也差不多就到了自学的瓶颈了,很难再有很大提高。我自己的经历是,面试到最后的时候,大概刷题的数量在350左右,其中hard大概有80多道,剩下的一般easy,一般medium。我也就不再刷新题目了,没有意义,这些老题目都没有把握说随便拎出来一道就可以AC。其实,题目的数量不是很重要,有一些题目,自己即使做完了,还是不太会,即使你做过很多遍。这里尤其想要讲的是关于动归的题目,很多时候的感觉是貌似有套路,可是,总是差那么一点点,就是差一点点,不知道为什么答案里面的状态方程和转移方程都那么完美,自己就是差一点点。不过好在这种题目不是特别多,所以,要做很细致的归纳总结工作。面试官那里也没什么新题,毕竟人家也要工作的,没空天天来整新题给你面试。所以,我都是把它们总结好,上考场前花半天,再重新全部都过一遍,哪怕背,他妈的也背下来了。当然,不是真的要你背,光背不会扯,肯定也是不行的。
后面的面试,让我觉得最舒服和常规的就是FACEBOOK了,可能是和它当时在狂招人有关,所以,简直就是教科书般的面试,就是大家想象中的那种啥废话都没有,嗯,做题,然后系统设计扯一波,完事儿。可是,自己偏偏把FACEBOOK放在第一个面了,那时候才刷了150道题吧,手生,手嫩,稀里糊涂就上去了,悔死了。如果是把FACEBOOK放在最后,觉得自己应该还挺有信心的。所以,要投简历的小伙伴们,可以考虑把facebook放在后一些面,用一些别的公司来练手。Google是自己面的最难的,没有原题,题目很诡异,不常规,我跪得也是心服口服,嗯,别说再给我一小时了,你就是再给我一天,我那题也不会做。实力差太远了,没办法。
还有一个建议,给地里的小伙伴。条件允许的话,尽可能快去面试,投一波简历,去试试,这个是我的真心建议。因为,你永远准备不完的。你刷题的速度,可能还没有LC出题的速度快。不要幻想着自己某一天能刷完,不现实,也没必要。安安心心刷个200题,不用别的,就拿FACEBOOK的高频和面经刷完,这就200多个了,足够你去应付所有公司的第一轮面试了。去试一下自己的水,简历上的不足,刷题上的不足,系统设计的不足,等等等等。不要把所有的宝押在一个时间段。我当时就是因为信心缺乏,所以,一直到准备了半年之后才去投简历,才发现自己的定位都不对,才刷题转码的。有时候,找工作真的运气很重要,很重要,多去试试。没有人告诉你,你刷了200道,就一定不如那个刷了300道的。说客观一点,如果你在面试的时候碰到的不是原题,那么,如果这道题目不是很明显的套路的话,其实难度就最少提了一级。可能在LC里面只是Medium的,但是,在那种情形下,对你而言,就跟hard差不多了。好在,大部分公司都还是良心公司,都是在高频和题库里打转,所以,真的早动手,把简历搞起来,刷题恶心想吐的时候,不要歇着,投投简历去,播下希望的种子。从你播下种子的那一刻,到你有机会去onsite,一般都要一个多月的时间了,这段时间,也够你刷不少题了。.
嗯,我大概就只是想到了这么多吧。码农不易,我是转行,也不易。不过看着paycheck和股票,哈哈,所有的阴霾一扫而光!嗯,没错,我就是这么势利,哈哈!这他妈不就是我最初想转行的初心嘛!
祝大家好运,有想法的话,可以一起交流啊!还是那句话,这只是我的个人经历,我只是个弱鸡,大牛请勿喷,在此谢过!
上一篇:亚麻招fresh phd给13w的包?为什么? 下一篇:美国Lenovo V.S. 深圳腾讯 data analyst intern 比较