机器学习算法岗秋招准备

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

孙子曰“知己知彼,百战不殆”。在秋招的时候,“己”当然是我们自己,“彼”就是你面的公司。所以在准备阶段不仅仅要武装自己,还要懂公司的套路。

本文可能会更大程度的站在一个没有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权利却比前几个面试官大的多,可以直接决定你的生死,所以技术之外,个人的定位规划、对公司的理解、愿景就很重要了,自我剖析、个人定位,这些往往是终面这个级别的大佬们所看重的。

秋招就是斗智斗勇,就像因为考题有套路,考试不一定100%反应能力一样,秋招也有套路。A会80%的知识,但很可惜面试官问的都是后20%,那结果一定悲剧;B只会40%的知识,但恰巧包含了面试官问的那20%,恭喜你,你就是sp。

准备秋招就像打仗,对对手了解的深,就能不战而屈人之兵。

收集信息

什么公司什么时候提前批,什么时候正式批,招什么岗位。公司业界风评如何,技术如何,这些在你投递之前必须搞清楚,很多同学都会因为错过投递或者干脆不知道公司而错过机会。笔者在百度提前批的时候就没有收集好信息,本来是内部直招,挂了一个可以投另一个没有限制,笔者以为挂了就凉了,错失机会。

提前批&内推

内推其实没有以前那么有用了,也许只能保证你的简历不石沉大海,可以说,以前的内推是面笔试,直通车,没有内推就笔试;现在是有内推就笔试,没有内推就没戏。不过如果是部门直招就不同了。这种一般都免掉笔试,而且部门自己招人可以直接进入改部门工作而不用大类分配,如果是学长内推还有更大的sp几率。

针对面试官

期末考试是有重点的,还可能有往年或者课后的原题,面试也一样。前面说过,很多面试官年年都是老三样,而且面谁都是这些题。所以面试前疯狂找面经对着准备,很大几率碰原题。更狠一点可以假装有事往后拖一批(如果面试不止一批),然后问前一批同样岗位的同学问过什么问题,如果更幸运遇到了同一个面试官,那你的技术面就没什么问题了。

了解公司情况

很多业务大公司都做,但是做的水平就很不一样,不仅公司跟公司不一样,公司内部的组实力差距也非常大,所以一定要考察清楚。内部同学/学长啊,面试官水平啊,业界风评啊,这个组有没有公开的工作或者发表的paper啊,都是衡量标准。

一定要避免坑,应届生第一份工作很重要,如果不慎进了一个外表光鲜内在稀烂的组,工作这个头就开不好了。

积极总结面试经验

面试后第一件事不是如释重负的玩,而是记录自己遇到的面试题,尤其是错的或者没答好的,查清楚。同一个岗位,不同公司很大程度上是重复的,因为重点就是那些个嘛,A公司认为重点的,B公司认为是重点也会考察。这也是学长的面试复习法效果的由来:不准备,先面一些不想去的公司,以面试代复习,面了几家后,后面的公司就好说啦。另外,总结经验并分享出来,不仅是对自己的成长,也是帮助他人,毕竟你在搜面经的时候也希望别人有分享的吧。

总结

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

本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » 机器学习算法岗秋招准备

Leave a Reply

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多