算法岗秋招总结【阿里,头条,美团,京东,网易,pdd】
写在前面
- 其实9月底我的秋招历程就已经结束,之后小小的放松了一段时间,又在各种offer之间纠结了一段时间,现在基本是尘埃落定了。打算趁着这个时间把自己的一些经验和经历分享出来
- 本文不会涉及到任何公司的任何面试题目(主要是自己没及时记下来,不过都大同小异)
- 本文的一切内容只是根据我自己的经历整理得出来的,可能并不适合每个人,甚至也有很多属于弯路,只作为一个参考就好~
- 我还记得刚入学的时候研三即将毕业的师兄在就业分享会上讲过下面一段话:
- 机会总是留给有准备的人
- 基础知识建设很重要
- 经历成就简历
- 面试是有一定运气成分的
- 从事一份最适合自己的工作
- 知道自己想做什么
- 知道自己能做什么
- 积极明确的职业规划&找到身边的职业榜样
关于我自己
- 机会总是留给有准备的人
- 我是从2016年5月份开始基础机器学习个领域的,之前对这个领域完全没有了解,本科期间只做过一些app开发和网站开发的工作。
- 之后在导师的指导下学习吴恩达教授的《机器学习》课程入门,在这期间了解到了Coursera这个网站,后来也为我提供了很多学习资源。
- 读研期间主要从事强化学习的研究,说研究可能太高大上了,具体从事的工作包括但不限于文档撰写,平台研发,算法研究,Unity游戏开发,等等 大概就是我是一块砖,哪里需要我我就往哪里搬
- 关于算法的学习主要是通过自学和参加各类竞赛的方式,这个之后会细说
基础知识建设
- 基础《统计学习方法》和周志华老师的西瓜书,进阶的可以看ESL或PRML
- 领域内的书和paper,CV,NLP,强化学习这个就每个人都不一样了,找自己适合的看
- 然后再推荐一下Coursera这个网站,如果你不太喜欢看书,喜欢看视频的话,这个很适合,另外这里还有编程实践的模块,理论和实践相结合,挺不错的。
- 读研期间大概在这个网站上刷了50多门课,有人问哪来这么多时间,读研期间我基本都是逃课的(不建议大家学习),然后看视频基本是1.5-2倍速播放~
- 后来也是机缘巧合帮助黄海广博士一起整理了一门课程的笔记,受到了广泛的好评~ https://mp.weixin.qq.com/s/SQrotjDuDxzREM7oi9M8sA
刷过的课都列在这里了,然后最近发现除了技术相关的,艺术人文相关的也有很多不错的~
https://github.com/shenweichen/Coursera
经历成就简历
关于竞赛
在实验室工作之余,自己也参加了一些相关的竞赛,由于时间原因和个人能力原因可能名次不是太好,不过还是学到了很多东西,也认识了很多小伙伴和大佬们,收获还是很大的
在实习期间也看到过一些同学的简历,基本都是有比赛经历在里面的,感概现在整体水平是水涨船高了
建议大家初期还是以学习为主,之后可以好好去做一个为自己的简历加分~
另外就是比如因为时间久远或者是组队分工的原因,如果一些比赛自己不是对完整方案非常清楚,就不建议写在简历上了,一定要写自己熟悉的
下面是简单例了下自己大概好好做过的一些比赛(其实还有几个划水的,就不上了)
- 2016.10 - 2016.11 2016CCF大数据竞赛-搜狗用户画像挖掘 rank 26/894
- 2017.03 - 2017.04 kesci-携程出行产品销量预测 rank2/245 https://github.com/shenweichen/ctrip14
- 2017.04 - 2017.05 京东JData算法大赛 高潜用户购买意向预测 rank 13/4242
- 2017.05 - 2017.06 腾讯社交广告竞赛 移动App广告转化率预估 rank 20/1650 https://github.com/shenweichen/Tencent_Social_Ads2017_Mobile_App_pCVR
- 2017.11 - 2017.12 2017CCF大数据竞赛 蚂蚁金服-商场中精确定位用户所在店铺 rank 20/2845
关于论文
硕士期间能发相关领域顶会的人应该是在学术方面很优秀了
但是据我了解大部分同学还是没有的,不过没关系,我们不能发,但是我们可以多读多写,领域内经典论文一定要了解,发展脉络心里要清楚,对于一些经典的方法,抽空可以去实现一下
多读paper,一方面了解一下业内的最新进展,一方面自己的知识也可以更体系化
我自己的话也是抽空实现了一下,https://github.com/shenweichen/DeepCTR
不仅能加深自己的理解,放在简历里也是加分项
关于面试
如果把面试的难度看作一个随机变量,那我们能做的就是将它的方差降低到最小。
我觉得面试官从拿到你的简历开始,就已经给了你一个打分,剩下的过程就是尝试去印证他打分的合理程度。所以在写简历的时候一定要确保简历上的内容都是自己做过且非常熟悉的。
一般一场算法岗位的技术面试考察的内容无非涉及一下几块:ML/DL/RL算法基础知识,结合简历和业务应用的相关知识,基本的编程能力,数理统计和智力逻辑题
-
我们在学习一个算法或者模型的时候,一定要学着类比和关联,比如很多人说自己熟悉逻辑回归LR,那么问问自己,下面这些内容你都了解吗?
-
LR归一化问题,什么情况可以不归一化,什么情况必须归一化,为什么
-
提到LR损失函数要能知道交叉熵,为什么是它,以它为损失函数在优化的是一个什么东西,知道它和KL散度以及相对熵的关系
-
提到LR的求解方法,比如SGD,知道SGD和BGD的区别,知道不同的GD方法有什么区别和联系,二阶优化算法知道什么,对比offline learning和online learning的区别
-
提到调参,知道模型不同超参数的含义,以及给定一个特定情况,大概要调整哪些参数,怎么调整
-
提到LR的正则,知道l1l2的原理,几何解释和概率解释
-
LR的分布式实现逻辑是怎么样的,数据并行和模型并行的区别,P-S架构大概是怎么一回事
- LR作为一个线性模型,如何拟合非线性情况?特征侧比如离散化,交叉组合,模型比如引入kernel,又可以推广到FM等model上,
-
- 个人感觉如果一场面试中大部分时间是你在向面试官输出你的知识,而不是等他来问这样的一问一答的话,那么基本就是ok的了
- 关于编程题目,leetcode多刷刷,medium难度
- 关于概率统计和智力逻辑题,这个可以去网上找一找看看