给找机器学习/算法岗工作的同学们的一些建议

转自:https://bbs.pku.edu.cn/v2/post-read.php?bid=99&threadid=16510824

 

本人是数院统计专业毕业,在某大公司做算法方面的工作,面试过不少人。

 

有不少学弟学妹找我咨询过机器学习/算法方面的求职,其中不乏不是数学、统计、或计算机出身的同学。虽然我们北大的同学在简历筛选流程中优势较大,算法岗的面试难度着实不小,尤其是对于非科班出身的同学来讲。主要有以下方面:

第一,数学基础欠缺。我和同事在面试的时候都喜欢问一些比较基本(不代表简单)的机器学习算法的数学理论,常见的比如:Logistic回归的损失函数和梯度分别是多少、SVM的数学推导、GBDT回归的梯度代表什么?一些不需要很强计算能力,但是很考验功底的概率论小题我的一些同事也非常喜欢问,比如:如何生成概率为pi/4的事件?这些问题普遍都是会的人觉得很简单,不会的人觉得很难。因此非常建议大家掌握机器学习的算法的具体原理,最好手动推导过这些算法的数学部分,而不是走马观花地看一遍。相信大家都有体会,看答案总觉得不难,但是自己不一定能想到。当然数学基础好的同学可以自动忽略这条建议。概率论的话短期提高不容易也不经济,建议靠刷题,前提是要理解而不是死背。机器学习算法推荐Andrew Ng在Stanford开的CS229,网上资料都有,比coursera上的入门课要清楚得多。

第二,算法底子薄。大家应该都上过计概和数算吧,但是真正学好的应该是少数。算法岗对于算法的要求虽然比不上更加工程的码农,但是对于基本的数据结构和算法还是要求要会的。之前看到一个段子是一个面试官对求职者说“虽然你也不算太强,但是我好不容易面到一个会写动态规划的,就给你offer了吧”。其实就我个人的面试经历而言,很多求职者基本不会写程序,可能只是sklearn、tensorflow、pyspark掉包侠。检查自己是否够格的一个rule of thumb就是看自己是不是Leetcode Medium难度的题基本没问题。像BFS、DFS、DP还有树、链表、数组的各种常见题都需要掌握,不求深但求广。如果完全没有方向就直接挂掉了,但是如果能蹦出个名词至少面试官还能给你点引导也许就能搞定了。不求Leetcode刷光,但是一定要写一些代码,而不是纯看别人代码。道理类似数学要自己推导。如果时间非常紧张,建议优先刷高频题或面经,剩下的题只看想法不写代码。

第三,没有insight。要知道,在实际工作中,70%靠业务理解,30%靠技术。因此我们在选拔的时候,非常希望求职者能够对于我们的业务有一些自己的理解,有相关实习经验更佳。例如我是在广告组,那么至少是期待求职者知道CTR是什么意思的,不然可能准备的关于CTR预测的面试题要先背景介绍了。我认识的搜索组的同事问算法题喜欢让大家写个intersection of two arrays,但是包装在inverted index的背景下,如果不了解搜索引擎的基本原理那么就连题目都看不懂。网上能找到的资料确实比业界落后了不知道几年,但是依旧是很有价值的。如果对搜索引擎的原理感兴趣可以看一下Stanford开的CS276材料,介绍得还算全面。

第四,实际动手能力弱。有一些童鞋可能并没有特别好的实习经历,也许只有个应用多元统计的课程项目这种数据量小到夸张,或者是MatLab做的本研之类的。这些项目不能说没有价值,但是从我们业界角度,确实都是toy project。虽然并没有期望一个应届毕业生一入职就能上手,但是还是非常希望有过大数据工具的经验和一些编程经验。如果实在没有机会可以做个Kaggle项目,虽然老套,但是有用。SQL、Spark这些至少写几个小程序也会很有帮助。我见过很厉害的数院学弟,SQL根本没写过,一问三不知。其实这些只是上手的话都一两天就够了。

 

还有一个建议就是要对症下药。要好好准备一个几乎是必考却很容易被忽视的问题: “你有什么问题要问我的吗?”这个问题如果问得有新意会是很好的加分点。我遇到过的一部分求职者一看就都不知道我们组是干什么的,也感觉不到对我们组有特别的兴趣。一些负面教材例如,“没什么问题”,“你都几点下班啊”,“你们的新人培养方案是怎样?”这些问题算是中规中矩,可能确实是会影响你的决定和将来工作体验的问题。但是站在面试官的角度,这些问题跟我们组没有太直接的关系,而且其实是过了面试之后适合跟HR讨论的问题。最好能体现出强烈的对该组的业务有兴趣,可以了解一下这个组的业务和需要的技能,问一下这个组有什么计划之类的(有一些面试官不喜欢这个问题,而且这个问题比较适合manager round问)。比如明天要去面B的搜索部门了,那么多看看搜索引擎的内容,多看看B的最新面经。临时抱佛脚往往还是很有用的,因为记忆比较新。当年本科期末考试不也都是这么过来的哈哈。有一个技巧是在电话面试的时候了解这个组的业务,那么在onsite面试前特意了解这个业务的相关业界知识,就解决了之前提到的没有insight的问题。

 

最后推荐几个链接

http://www.dscademy.com/probability-theory/problems/ 概率论练习

http://www.dscademy.com/applications/information-retrieval/ 搜索引擎原理介绍

http://www.dscademy.com/applications/recommender-system/ 推荐系统介绍

http://infolab.stanford.edu/~ullman/mmds/ch9.pdf Stanford大数据挖掘课程的教材中的推荐系统介绍

http://www.dscademy.com/languages/sql/ SQL基本语法

https://sqlzoo.net/ SQL练习

http://www.dscademy.com/languages/spark/ Spark教程

http://www.dscademy.com/languages/spark/problems/ Spark练习题

你可能感兴趣的:(神经元网络)