王同学-硕士研究生毕业5年3个月提升成为阿里巴巴算法工程师

王同学-硕士研究生毕业5年3个月提升成为阿里巴巴算法工程师
王同学-硕士研究生毕业5年3个月提升成为阿里巴巴算法工程师

我先简单说下我的情况

硕士研究生毕业5年,大厂数据分析经验,现已入职一家企业,做机器学习算法相关工作。会写sql,之前学过python视频,但是还不够熟练,需要从头开始一步步巩固python的编程能力,尤其是pandas等数据处理能力,模型的调用和调参能力等等。由于工作需要,初步设计从金融数据分析切入,中期学习机器学习相关项目的实践,后期加入NLP深度学习部分提高。希望三个月能完成课程学习。

之前自学了3个月,总是遇到各种问题坚持不下去,学的特别不成体系,就找到了拜师,我师父是美团的,特别专业,测评后给我制定了学习计划,很多时候老师一句话,我就能少浪费好多时间。如果没有师傅,我很可能就放弃了,下面我分享下我整个学的过程

一、计划方案

工作学习的时间安排

所谓“凡事预则立,不预则废”,一个好的学习计划和时间安排一定是成功的的保证。在跟师傅沟通过之后,在老师给你建议的基础上我又给自己制定了计划 。大体上我的时间安排如下:

7 – 8 点 跟踪师傅的计划学习课程,整理笔记

20 – 22点 师傅给我规划的leedcode刷题以及学课程

工作“划水”时间一般都是整理面试题

周六周日集中4-5个小时看论文,看书,刷题

如果准备的时间只有两三个月,那么至少要保证自己每周不低于10-15个小时的学习时间

目标导向

目标企业

首先你要想清楚,你下一次换工作的追求是什么。每个人的追求不一样,可以是为了薪资,可以是为了职级,可以是为了家人,也可以是为了更好的提升等等,无论目的是什么,自己都要明确好。我的建议是目光尽可能长远一点,综合多方面因素进行考虑衡量。比如说一味的追求高薪资是没错的,但是如果仅仅是在1000 – 2000 范围内进行纠结挑选,其实是没意义的,薪资待遇差不多的情况下,要更多关注公司的平台,工作的内容,个人的兴趣和发展方向等等。我个人的面试公司基本圈定在BAT TMD,最后面试下来薪资待遇其实都差不多,关键不一样的是职级、工作内容、个人兴趣等。职业生涯是一场高达30年的马拉松,一定要做好长久作战的准备,眼光要放远,选择一份工作的时候不能仅仅局限当下,要充分考虑到这份选择会给你以后带来什么。

我见到很多同学选择工作只看钱,我不觉得这有什么错,但这绝对不是最优选择。一个人的财富大部分集中在35岁甚至是40岁之后,因为那个时候是你事业的巅峰期,财富累积的速度会超出你早年工作收入的数倍。所以我们要站在一个更高的角度去思考自己这一次工作选择能够带来除了金钱收入以外的东西.

二、数据结构和算法

数据结构和算法

准备时间:三个月

准备资料:《算法》第四版、《剑指OFFER》、Leetcode、《程序员面试宝典》

准备方法:

第一个月
如果你对数据结构和算法还处于小白阶段,比如链表、二叉树、排序、栈和队列等常用的概念都不清楚,那么你首先要做的是先去学习一下基础知识。我强烈推荐的是《算法》第四版这本书,理由如下:

使用JAVA语言,代码规范优美。即使你不会JAVA也没关系,书的第一章节会教会你基础的JAVA知识

涉及到了几乎全部常用的数据结构:链表、二叉树、排序、栈和队列、字符串等

图文并茂,几乎每一种算法都给出了图的解释,强大到令人窒息

官方提供了JAR包,你可以直接调用

以上仅仅是此书的部分优点,更强的一个理由是:此书配备了官方算法视频教程,作者亲自讲解,核心内容言简意赅,非常受用。

我推荐的学习方法是在一个月内集中突破学习此书,采用看书+看视频+写作业三者合一的方式交叉进行。我敢保证,每天2-3小时,一个月后你一定会发生质的变化,就看你能不能坚持了~

第二个月

上面属于“磨刀不误砍柴工”,现在刀磨好了,接下来就要“砍柴” — 刷题!

一上来先不要去做LEETCODE,1000多道题真的能唬住人。先从国内程序员“面试宝典”入手,学习《剑指OFFER》这本书。书中有66道题目,涵盖了很多经典的算法题,我想国内很多面试官都应该或多或少的刷过这本书。

可以在牛客网网找到对应的刷题链接,每天保证至少刷3题,一定要做到刷一题吃一题,不仅要弄清楚题目本身,还要弄明白它背后的算法知识点,最好能够将这种知识点衍生出来的其它算法题一并弄明白。

我建议的方法是:思考题目 -> 写出思路 ->写出答案 -> 看论坛优秀解答 -> 重新撰写答案 -> 思考总结

特别注意:第一次刷题不会做是很正常的,我经常是1小时一道题都解不出来。原因很简单:因为我们练的少。这个时候就考验一个人的耐心和毅力了,你是继续厚着脸皮刷下去还是打退堂鼓,这就是成败的关键。量变引起质变,题目刷多了,感觉就上来了,解题套路就掌握了。

第三个月

这一阶段我理解为冲刺阶段,你需要经过大量习题的练习,形成一套解题思维和套路。无需质疑,Leetcode是你最佳的选择。但是面对1000多道题目,想要刷完几乎是不太可能的,这个时候就需要一些策略来应对。首先,leetcode题目永远是越来越多的,不要探求刷到量,而要追求刷题的质量。很多题其实都是同一种方法的变种,你只要掌握这一类的解法就可以触类旁通。比如说二叉树的遍历,如果你能深入掌握DFS,BFS,前后中等这些知识点,那么遇到的任何题目只要理解题意就可以答出。另外,LEETCODE提供了TOP100这一类的题目排名,这些都是最常见的一些题目,考的比重尤其多。我在面试的时候被三家公司考到二分查找,这些题目都是TOP100里的原题,所以如果时间不够,那么久刷TOP100这一类的排行榜题目吧。最后,如果你经济允许,可以买个会员,这样就能看到每一道题被哪家公司考过,甚至可以查看某家公司的题库,准不准确就真的是仁者见仁智者见智了,我也无法考证~

我的建议是每天3-5题,耗时2-3小时,如果一道题目15分钟还没有思路,不要犹豫,立刻去看答案,看完答案自己一定要尝试去理解,然后能写出代码并且写一段总结。要注意一点,遗忘是人类的本性,刷题也是如此。很多题你刷一遍是不够的,尤其是那些你没有思路参考别人答案的题目,那么怎么办呢?无他,唯手熟尔!其实就是多练多刷几遍!

当你刷的题量达到200 – 300的时候你就会产生质变,会对常用的题型产生一种解题的固定套路。

三、机器学习

机器学习

准备时间:三个月

准备资料:《统计学习方法》、《百面机器学习》、知乎知识点收集、相关论文

准备方法:

这一块一定是算法工程师面试的核心重点。从现在企业面试来看,已经很少会问到SVM,朴素贝叶斯这一类的传统机器学习。多集中在LR,树模型,梯度优化等业界用的比较多的领域。但这不代表SVM之类的传统模型不重要,只不过我们可以在准备的时候有重点的梳理知识。

李航的《统计学习方法》绝对是“面试宝典”级别的,建议面试前要花很大的精力来钻研这本书。现在已经涵盖了监督和无监督学习两大类,书籍很厚,全部看完有必要,但是可能时间上来不及。我给出个人面试时候遇到题目的一些重点章节建议。请注意:这本书最好全部掌握学习!

第一章的统计概率,要能知道

LR回归与最大熵,考的最多的一块

决策树相关算法,考的很多

集成学习,GBDT、Adaboost、随机森林,我认为这是必考

聚类模型K-MEANS,DBSCAN。我简历项目中提及到,所以面试问的比较多

附录里面的梯度法和牛顿法

当然,这本书的内容还远不够面试,机器学习的一些综合性知识以及最新前沿的模型都没有涉及。我列出以下几个必考的知识点,几乎每一家公司都会询问,供大家参考和准备

xgboost的原理

lightgbm的原理

FM的原理。最常考的就是FM和LR的区别,考到率几乎是100%

FFM的原理

正则项相关的技术,L1/L2等

另外我推荐大家购买一本《百面机器学习》,听名字就比较“功利”,但是写的真是不错。很多时候我们理解模型,知道模型的理论,但是就缺少一个合适的清晰的表达。这本书基本上就是教会你如何说明白一个机器学习问题。说到这,那么我可推荐大家去知乎上多收藏和学习一些关于机器学习知识点的文章,很多文章写的通俗易懂,不是严格的学术派,但是非常适合口语表达,换句话说就是非常适合你在面试的时候表达。
我们程序员有一个缺陷,就是表达能力较弱,明明自己掌握很深的知识,让说出来就会变得仅仅是了解这个层次。所以这一块也要多学多练,面试的时候表达的这种软技能尤为重要!

四、深度学习

深度学习

准备时间:三个月

准备资料:吴恩达《深度学习课程》、花书《深度学习》、CS231N、CS224D等

准备方法:

这一块的重要性和机器学习一样,现在的算法工程师没有不懂深度学习的,答不出来就被FAIL。

深度学习的基础知识准备我觉得要比传统的机器学习容易,但是前沿的知识准备就需要消耗大量精力了,深度学习日新月异,学的速度经常更不上技术的演进速度。从以下几个方面准备:

基础知识

无论技术怎么演进,终究是搭建在基础平台之上的。我强烈推荐以及安利吴恩达的《深度学习》课程,这是我学过的最好的入门课程。网易云课堂有中文翻译,建议大家花大块时间集中学习,顺便把课中练习题也一起做了,收获颇多。

然后可以学一下CS231N里面的讲义,打印出来,好好学几遍,你会对常见的优化算法,卷积结构有很深的认识,基本上面试难不倒你。

接着可以学习下CS224D里面的讲义,从word2vec开始,一直学到后面的transformer,你一定会对整个NLP的深度学习知识有个清晰的脉络。

我刚刚都说是学习讲义,那么课程视频有必要听么?我个人觉得斯坦福的讲义编写很完善,相比于学习视频,性价比很高,只需要一小部分时间就能掌握核心知识点。但是如果你时间充足,学习视频那自然是锦上添花。我个人仔细的学习过CS224D的视频,真的是精品中的精品!

拔高知识

深度学习日异月新,除了基础知识我个人觉得如果你想要面试拿到一个很好的OFFER,还需要在以下知识点方面进行拔高

常见的随机初始化方法

词向量相关的

常见的正则方法,包括dropout

CTR相关的模型,包括wide&deep,deepfm,deep cross,xDeepFM等

NLP相关的transformer,bert系列,attention系列等

CV相关的 resnet等

normalization相关的,包括batch_norm,layer_norm等

图向量与图卷积,最出名的就是node2vec和gcn

我仅仅是列出了我面试被经常问到的一些问题,但是深度学习涉及的范围太广了,可能还包括强化学习与GAN等,但这不是我的强项,面试虽被偶然问到,但是都没有回答出来,不过面试官也没有因此挂掉我,实话实话即可,每个人都有知识盲点!

最后再说一下深度学习的“圣经”花书《深度学习》。这本书我大概看了2/3,我觉得不太适合初学者,里面很多中文的翻译比较拗口,尤其是RNN那一章节,看的我很难受。而且整部书块头很大,让人看下去的欲望巨减。

但是这的确是一本还不错的书,在你有了一定的神经网络基础之后,这本书可以系统的帮你梳理深度学习的知识点。所以如果你有精力有时间,又喜欢文字阅读,那么就好好学一下这本书。

相关新闻

发表评论

邮箱地址不会被公开。