前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零基础到斩获BAT算法岗offer,围观复旦大佬的秋招之路

从零基础到斩获BAT算法岗offer,围观复旦大佬的秋招之路

作者头像
程序员黄小斜
发布2019-01-21 10:58:05
1.1K0
发布2019-01-21 10:58:05
举报

作者:原果

原文链接:https://github.com/zslomo/2019-Autumn-recruitment-experience

本文作者是一位复旦大佬,这篇文章的内容都来自于他的GitHub,具体见上面这个仓库链接,里面包括了他的面试总结、心路历程,以及算法岗的学习指南等内容,可以说是非常用心的一个算法岗秋招指南了,大家可以关注一下。下面正文开始!

2019年秋招计算机类面经

本菜鸡是上海东北某高校的计算机硕士,18年初自学机器学习,秋招之前在蚂蚁金服花呗实习,做营销推荐。

现offer情况详见表格,这个水平在学院排中等偏下?(非自黑),17 18的学弟学妹可以作为参考。

本repo会实时更新本菜鸡和大佬们的面经,希望在秋招的路上能帮到大家???!

秋招情况简述

投递方面,今年秋招算法岗聚堆,每个公司简历基本50%以上都是算法岗,有的甚至80%,竞争比较激烈,相对应的开发岗位比较缺。但并不代表着拿到算法岗就比拿到开发岗强,我也不知道很多做算法的对开发同学的蜜汁优越感从哪来的?。

薪酬方面,今年全线提高?,去年的薪资在25-35w之间,今年在30-50w之间,算法岗部分公司会比开发高1-3k,比如网易阿里;另一部分公司持平,比如腾讯头条。大厂薪资平均比小厂要低,尤其是yy pdd yitu等薪资非常高,BAT中腾讯最高,阿里次之,百度最低,具体薪资可以参考offershow?。一般薪水会分三档,普通/sp/ssp。但也有分的更细的,比如爱奇艺和pdd,pdd据我所知有6档,所以我也不知道我的offer算不算sp;也有少的,比如阿里;也有加个劝退档的,就是比绝大多数低。每档之间差价一般每月在2、3k左右,sp以上可能有股票和期权。ssp一般没有固定薪资,能力高的有多少给多少,尤其某些AI厂,超乎你的想象。所有的公司都可以argue薪资,所有的,BAT也可以,但一定要有竞品,一般都有提升空间。也有HR直接说不给谈的?,不知道什么意思。

不要跪舔大厂,无论是薪资还是成长上,小厂很多比大厂强,最重要的是技术。个人认为:大厂核心>小厂核心>大厂一般组>小厂一般组,另外只谈理想不给钱的行为都是耍流氓。   最后很重要的忠告,一定要多投,一定不要因为实习可以转正就放弃其他机会,也一定不要因为小公司而不屑一顾,世界变化很大,外面很精彩。

现有的面经:

? 代表SP 或比白菜高2k及以上(并不是所有公司都是3档)

? 代表待定,未出结果

? 代表白菜

? 代表

机器学习资料准备以及自学方法

1 资料、课程

人工智能太火了,资料特别多,但是鱼龙混杂,实际上经典的课程资料 paper就足够

吴恩达系列

吴恩达老师真乃人工智能届的孔夫子,在这个水平上还能致力于基础教学和入门推广功德无量啊,吴老师的课讲的也是真的好。

CS229,强推?,Stanford的公开课,网易云课堂有2008年的课件和讲义,我就是对着这个学的,打印讲义一点点对着推吧。

Coursera Machine Learning,Coursera的课比较基础,其实有了CS229就不推荐看这个了。 DeepLearning.ai,也是偏基础的课程,不过还是很值得看,对传统机器学习、CV、NLP都有一个不是很深入的讲解,作为入门很棒。

Machine Learning Yearning,这本书也是偏基础,工程向,讲了实际工程项目中调参等等东西,我学的时候只出了前几章,后面没有看过。

李沐 动手学深度学习系列

动手学深度学习,强推?,非常好的课程,李沐是机器学习的大家,在分布式机器学习领域非常有建树,除了广为人知的mxnet,还有parameter server,这里就不展开说了。李沐的课程是将门斗鱼的直播,都录了下来,在网站上还有配套的代码讲解和书籍,唯一美中不足是基于gluon,这个稍微冷门一些。

莫凡系列

莫凡python,怎么说呢,比起其他课程还是逊色不少,不过讲的很基础,而且是不多的讲解RL的中文课程。

其他公开课

CS231N,强推?,stanford公开课之二,李飞飞的cv实验室出品,讲师是大名鼎鼎的Justin Johnson,虽然是讲CV,但对DeepLearning的基础也讲的非常详细,cs229是最好的ML课程,cs231n是最好的DL课程。

附加:算法导论 6.046J,大名鼎鼎的MIT算法导论公开课,虽然不是ML/DL向,但是基础算法还是要会的,毕竟算法工程师首先是工程师,课程较难,很多名校本科上过这门课,大部分没有上过,还是有必要抽空看看的

2 书籍

《CS229讲义》,为啥把这个单独拿出来说呢,因为这个讲义真的就是一本书,有详细的推导过程,并且很多同学看公开课会忽略讲义,一定注意。

《统计学习方法》 李航,机器学习最常用的书,人称小蓝书,其实这本书不适合入门,里面很多推导晦涩难懂,但是讲的很详细。有些地方的推导方式和写作习惯跟吴恩达不一样,所以两个一起看有时候会很迷。

《机器学习》 周志华,人称西瓜书,不仅封面是西瓜,里面的例子也全是西瓜。难度比《统计学习方法》简单不少,还有各种西瓜例子,入门首选。

3 项目

其实这块是最难的,因为自学,实验室也没有项目,实习没有基础也难找,尤其我年初自学,3月份就开始暑期实习招聘,再找一个实习肯定来不及,好在我们有kaggle!

kaggle,强推kaggle!!!!? ? ?

在开始kaggle之前,请看看Kaggle的三个Getting Started比赛,分别是手写识别(CV),泰坦尼克预测(分类),房价预测(回归),这三个比赛就是教学比赛,kernel和discuss版块有大量的教学,好几个会长篇讲如何基本的使用DNN、xgb、lgb、sklearn这些工具,和如何开始做机器学习。

当你开始打featured的比赛的时候,有一点要明确,去打比赛不是为了赢,你是个没有基础的初学者,很可能也没有队友,只能solo,想拿名次就算了,打kaggle的目的是为了学习,为什么选kaggle不选天池或其他比赛呢?因为kaggle的氛围非常非常open,讨论区和kernel区一定会有人给出自己的完整思路和代码,不仅有base model,还有各种有用的数据处理代码,甚至很常见到前10的队伍公开自己的思路甚至代码!这是其他比赛不具备的,你可以在看别人代码,改进自己代码中成长。

4 积累

这是自学最欠缺的,没有积累,尤其是科研积累,没有人带自己想搞出一篇工作就免了吧,但是熟读某个方向的paper,对该方向有深入了解是必须的,如果仅仅是达到见过或者会用的程度,肯定拿不到offer的。具体的积累看是什么方向,github上有很多repo是经典paper集合比如这个repo,可以对照着看,也要关注该领域顶会每年的文章,还有就是对自己项目中用到的model、方法的相关工作要熟读。

5 计划

时间紧迫,给自己定一个清晰的计划还是很重要的,笔者自己是打印了一份日历,然后把暑期实习、秋招等关键时间点和自己计划完成的deadline日期做上标记,每天干过的事情标在当天的日期上,然后划掉这一天,每天看着时间会有紧迫感促进你学习。

6 老师

自学没有老师,但俗话说三人行必有我师,周围相关方向的同学,该请教就请教,有些东西自己搞是搞不出来的,但会的同学随便点你一下这块就过去了。记得请教过你的大佬吃饭。

面试经验总结

  • 缘分很重要?。
  • 编程能力很重要。
  • 基础很重要。
  • 面试有套路,常问的问题和面试官的面法都差不多,想去的公司千万不要第一个去,套路不懂的时候去大概率挂。
  • 不要怼面试官,即使他错了,委婉的说出你的想法和面试官的错误,不止我一个这样挂了。
  • 面试过不过不一定是你实力强不强,有可能是就没有HC了。
  • 不要硬怼热门方向,今年某厂和某厂和某厂AI部门几千人投简历,HC 10个,不是找死。
  • 尽量把面试官往你熟悉的地方带,如果反了,可能悲剧。
  • 面试过的问题全记下来,大概率重复。
  • 刷过的题一定记住了,一看题刷过,最优解忘了是很悲催的,我面试的遇到算法题读研期间都做过,但是就有两道想不起来最优解法了。
  • 控制时间,控制时间,面试时长是有限制的,算法题一般最后出,前面吹太high后面算法题只剩几分钟时间写就GG了。
  • 算法题和概率、智力题都是可以求tips的,解不出来可以问一问,这个没问题的,面试官的提示下解出来可能给80分,不要提示,自己又没有好解法可能就20分。

机器学习算法岗秋招准备

秋招是个大而全的考试,虽然套路差不多,但每个公司都有自己的风格和侧重点,想要变成收割机,你必须深谙这一点,并做好充分的准备。

本文可能会更大程度的站在一个没有paper并且偏重推荐、机器学习的角度讲,对于研究岗或者深度学习的岗位帮助可能不大。

自己的准备当然是重中之重,知识技术、定位规划、心理心态都要做好,当然技术是最重要的一环,但一定不能忽略了其他方面,没有短板有长处,把自己包装成一个特点突出的木桶才能神挡杀神佛挡杀佛。

技术

计算机基础

重要程度:⭐️⭐️

本部分大多出现在笔试中,面试中也略有出现。

计算机基础虽然不是重点,但是很容易被忽略掉的内容,一来是本科学的课程,研究生早忘光了;二来很多同学觉得我是搞算法的,这些不是开发问的问题么?殊不知计算机基础是非常重要的部分,算法工程师首先要是一个工程师,对计算机不够了解怎么做出更鲁棒的网络结构,怎么能提高计算效率?

这部分主要是4门最重要的基础课和对linux操作部分:计算机网络、操作系统、组成原理、数据结构。网络和操作系统是非常常问的学科。

其中最常问的是操作系统,参考书目:《操作系统概念》就是恐龙书啦。内核、进程、线程、调度算法、死锁等等都是常问问题。

计算机网络,参考书目《计算机网络》,其中TCP协议、还有拥塞控制都被问过。

组成原理,参考书目《计算机组成与设计 硬件/软件接口》,比较少见吧。

数据结构,参考书目《算法导论》,求复杂度,红黑树、B+树的一些结构和优点,有些跟算法题一起考察了,也不太分得清,求算法复杂度是最重要的部分,主定理背一背就搞定。

Linux操作,参考书目《鸟哥的linux私房菜》,讲真问的还挺多,不过都是基本操作,比如查找啊,几千条数据的移动啊之类。

编程语言

重要程度:⭐️⭐️⭐️

本部分笔试中非常常见,面试中也比较常见。

公司都会对语言有要求,再次强调,不要以为自己是算法岗就可以忽略语言和计算机基础部分。一般来说,根据公司和业务的不同对语言的要求也不一样,很多是会一种即可,不过对口是最好的嘛,比如腾讯是c++,阿里是java,百度是c++,其他大部分是java,python一般都要求,阿里有些还要求sql,毕竟在阿里,算法工程师 = sql工程师(开个玩笑)。

C++,参考书《c++ primer》当字典书吧,常见问题:多态、虚函数,指针、函数指针,指针函数,宏和内联,内存分配类问题。

Java,参考书...算了我觉得java没有参考书,笔者是个野路子出身,直接看了spring框架就杠杠造了,java方面面试没有问过,并不是很懂。

Python,没有参考书,人生苦短,请看文档。修饰符、多线程等基础问题,还有numpy、pandas的一些问题,这里其实还涉及到常用的深度学习框架,TF最多吧,笔者基本没有被问到,有的同学被问过,网上可以看看他们的面经。

数学

重要程度:⭐️⭐️⭐️⭐️

本部分笔试中非常常见,面试中也比较常见。

机器学习的知识说白了无非就是数学,但这里的数学特指面试官会单独问的一些数学知识。讲真啊,无论是笔试还是面试,笔者感觉自己总会碰到几道线代、概率、统计或者高数题。

尤其是概率题,几乎必考,大多是古典概型,什么不外乎摸球、抽牌求概率之类,有些需要算一算,有些可以直接往统计分布上靠,比如百度的一道面试题:n个人进餐馆吃饭,把帽子放在衣架上,走的时候随机拿一顶,问拿到属于自己帽子的人数量的期望,你要用排列组合算也可以算,但是往二项分布上想可以直接得到答案:每个人拿对概率是p= 1/n,期望不就是E_x=np=1嘛。

统计考察的也很多,毕竟传统机器学习就是统计,常用的分布,性质,变换清楚熟记就可以。还有一种题也很常见,就是给你某个概率1/n的随机数生成器让你求一个概率1/m的生成器,算法导论课后有类似的题,其实套路都一样,就是扔掉重来,比如给你一个均匀的正4面体,给出一个方案,得到每个数概率为1/7的随机数生成器,4<7<16,那就投两次,随便选7种排列,其他全部重新投就ok了。

线代部分主要还是跟着机器学习知识一起考的,比如PCA SVD神马的。

高数比较少,旷世的笔试题有很多这方面的考题,其他考的较少。

算法题

重要程度:⭐️⭐️⭐️⭐️⭐️

很多笔试只有算法题,面试几乎必考 算法题最重要的两部分之一,即使是研究岗,写好代码也很重要。很多公司面试只有这部分考察,比如ms google,很多公司作为最大重点,比如头条、滴滴,可以说,你可以没有项目经验没有paper没有实习,但你不能不会编程。

这部分很难讲,因为不同公司的偏重不一样,难度差别也很大,甚至说同一个公司不同部门,差别都很大。难度最大的是google, 非OI和ACM选手连笔试都很难通过,头条、滴滴、依图、MS难度是leetcode mid +少量hard难度,其他公司一般是mid或者easy-mid。

不过好在算法题可以刷题突击,而且有一个很明显的现象:面试难度<<笔试难度,其实非常好理解,笔试是在线oj,机器判卷,直接比对case的结果就好。但是面试要肉眼debug,这就难得多,而且很多题有多种不同解法,面试官自己也不是很懂,自己只会一种解法。如果出一道难题,没有很深功力的面试官你给出一个不同解法他短时间很难判断对错。于是乎,除了上面提到的几家公司,绝大部份的面试官都只在现场出一些经典问题,比如百度系的巨喜欢问树的深度、公共父节点、最大路径等二叉树经典题的各种变种。然而经典代表着网上解法到处都是,代表着即使不刷题,刷刷面经也可以搞定。

笔试一般是1.5-2个小时做3-5道题,难度一般是几道mid一道hard,时间很紧迫,思路正确但是怎么写都不对是常有的事。所以能提前批尽量提前批,能学长部门内推,尽量部门内推,笔试过了,算法题这部分你就成功了一半。

算法题准备最主要的是刷题,这个跟数学考试一样的,需要灵感也需要手感,很多题看似不一样,解法也不同,但大多都是一个套路,比如DP啊、DFS啊、递增栈啊,能够抓住题的考察点,接下来就是实现问题了。这个时候手感就很重要,规定时间内写对并不是件容易的事,笔者前几个公司的笔试题就因为2年没刷题没有手感,做的稀烂。刷题的网站很多,最推荐的是leetcode,好处是题多;牛客也不错,而且还有企业真题,但是很奇怪,有些企业的真题跟笔试实际做的题不太一样。另外看书的话,《剑指offer》还是非常推荐,你可能觉得这些题都考烂了,不过别笔试,今年考的还是这些题,面试官很忙的,很多永远都是老三样。

算法题的另一个准备方法,可以说是性价比最高的准备方法就是:看面经,前面说过,面试官很忙的,大部分公司并没有为了秋招单独准备题库,所以面试官考来考去都是那些题,比如同一个岗位,昨天问的问题基本就是今天要问的问题,疯狂搜面经吧,撞原题概率非常大。

机器学习知识

重要程度:⭐️⭐️⭐️⭐️⭐️

算法工程师啊,最重要的当然是你的算法能力,其实这个突击不来,很靠积累。很多东西看得多了才能融会贯通,这点好实验室,本方向出身的同学会有极大的优势,如果还有一两篇不错的工作,那你就是ssp收割机,甚至可以不需要算法题能力,笔者周围就有算法题一个不答都进大牛组的同学,没办法,积累足够深嘛。但半路出家也不是完全没有机会,这部分笔者就结合自己的自学经历讲一讲,这里主要讲机器学习常见问题:

1 逻辑回归&交叉熵(重点)LR真的是经久不衰啊,其实能问的地方好多好多,关于sigmoid函数其实可以从指数函数族的角度推导推导,然后就是交叉熵啦,最基本的就是从极大似然角度推导交叉熵。LR的基础推导看这里 。

2 GBDT系列(重点)机器学习的话,gbdt肯定是重中之重了,跟LR一样是最最最常见的问题,工业界应用也很多,打比赛就不用说,xgb lgb是历届kaggle的两把快刀。

其实gbdt没有太多可说的,无非是boosting思想啊,为啥用负梯度啊之类。重点是在lgb和xgb对传统gbdt的优化上,这部分内容很多,这个博客做了一些总结,但我觉得还是看原始paper和源码比较好。具体就不展开说了。

3 SVM

这玩意貌似去年很火?说实话啊,我没怎么见过哪里用SVM,好像就RCNN用过SVM当分类器,后来就换成了softmax,我的面试也没人问过,曾经看了好久,后来忘了还很忐忑,结果却是没有被问到。推导 @靠靠靠谱 的回答

4 RF&bagging

随机森林本身没啥东西,不过bagging的思想倒是非常有用,比赛中常用的降低过拟合方案,简单来说就是选xgb中偏差低方差高的模型,做bagging,效果非常显著。再有一点就是RF可以用oob做特征选择,效果也不错。

5 决策树

怎么说呢,问的也比较少了,就是三种树,ID3,C4.5,CART,区别和剪枝记一记。

6 特征选择方法(重点)

特征选择是模型预处理的重要部分。方法很多:方差、相关系数、卡方检验、互信息、递归特征消除、基于惩罚的方法、树模型方法、单特征AUC、IV。

7 采样方法

主要有过采样和欠采样。

过采样:Smote方法及各种变种

欠采样:ensemble、nearMiss、Tomeklink、ENN

还有复杂分布的采样会用到MCMC。

8 聚类方法

也没多少,经典的就是:k-means、k-means++、meanshift、DBSCAN、EM聚类、层次聚类。

9 评估指标(重点)

精准率、召回率、ACC、AUC、F1、KS、熵系列、信息增益、CTR、CVR、MSE系列。其中AUC是重点中的重点,被问了好多次,而且很细节,包括本质意义、计算方法等等,注意AUC是有两种计算方法的,这里有介绍。

10 过拟合(重点)

起因基本不太会考,解决方法就多了,降低模型复杂程度啊,dropout啊、bagging、正则、earlystop,数据增强、交叉验证。Dropout本质也是个bagging。

11 batch normalization

这个问题下的回答很有价值 ,BN问的还挺多的。

12 梯度弥散/爆炸,怎么解决

改激活函数啊,BN啊,想lstm一样把*变+啊,加恒等映射的跳跃层啊,都可以。没有太好的文章,看看这篇讲resnet的吧。

13 激活函数,比较

sigmod tanh relu maxout... 好多,这个随便一搜就一堆,放一个不太切题的文章吧,我偶像何之源奆佬的回答,手动滑稽

14 优化方法(重点) 这就很多了,梯度下降系列、牛顿法系列,还有传统的模拟退火、遗传算法。牛顿法这回问的很多,不知道为啥。lan大神的花书讲的就很好,梯度下降的可以看这个 。这里要注意,有些面试官会让你实操,就比如给你一个方程,让你用梯度下降求解。

15 各种网络结构&模型(重点)

这个就太多了,CNN RNN就一堆,推荐的也是一堆,基本的DNN CNN RNN的forward和backprob都要熟悉,然后lstm、gru、attention也要会,还有各种encoder-decoder结构,这个就看积累了。 推荐部分有自己的一些模型,比如FM系列,lookalike、协同过滤之类的非深度学习模型,后面的W&D为首的融合模型也是搭积木。

项目

这块是很重点的部分,面试的大部分时间都是在聊你的项目,所以,写在简历上的项目一定要保证自己能说的头头是道,怎么做的,为什么这么做,最后的效果如何。还要把这样做的原因想清楚,面试官一定会找漏洞challenge你,一旦被问住了那就不好办了。

心态

人是感性动物,会随着自己的境遇和周围人的改变而受到极大影响。好的心态会帮助你超常发挥;差的心态可能直接导致秋招的失败。笔者在秋招的过程中就经历了大起大落,好在及时调整,否则肯定拿不到心仪的offer。

虽然这只能靠自己,但是有一个很重要的地方就是:不要主动打听别人的offer,我所见过的心态崩溃,几乎都是因为与别人比较:周围同学/朋友有offer自己没有,别人薪资高自己低。其实可能只是时候没到,我有个同学十一前0 offer,心情很崩溃,十一后迅速接到多个offfer call,最终拿到周围同学中薪资数一数二的工作。所以不是没offer,只是时候没到,不要瞎打听,相信自己的能力。

定位&规划

GM面或者HR面一般就不聊技术了,然而GM权利却比前几个面试官大的多,可以直接决定你的生死,所以技术之外,个人的定位规划、对公司的理解、愿景就很重要了,自我剖析、个人定位,这些往往是终面这个级别的大佬们所看重的。

总结

总之呢,秋招就是一次斗智斗勇,不仅要自己充分武装,还要清晰的了解你的“对手”,希望笔者的总结可以给大家一定的帮助,在明年的秋招厮杀中收获满满!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员江湖 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2019年秋招计算机类面经
    • 秋招情况简述
      • 现有的面经:
      • 机器学习资料准备以及自学方法
        • 1 资料、课程
          • 吴恩达系列
          • 李沐 动手学深度学习系列
          • 莫凡系列
          • 其他公开课
        • 2 书籍
          • 3 项目
            • 4 积累
              • 5 计划
                • 6 老师
                  • 技术
                  • 项目
                  • 心态
                  • 定位&规划
              • 面试经验总结
              • 机器学习算法岗秋招准备
                • 总结
                相关产品与服务
                云直播
                云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档