如何准备机器学习工程师的面试 ？
最近全远程地面了不少机器学习工程师（Machine Learning Engineer）职位，也拿到了国外大厂FAANG和国内TMD的offer。之前准备的时候得到了家人朋友的帮助，也借鉴了不少知友的意见和推荐，包括 @王喆 的专栏和两本书，特别感谢。刚好借此机会总结一下回馈平台。 机器学习工程师不同于一般的软件工程岗位，在一般编程的考察基础上会有很多机器学校理论与实践的考察。 这里就数据结构/算法、编程语言、机器学习理论、机器学习实战、系统设计、行为面试、项目经验和面试八大方面为要点来介绍一下我是怎么思考和准备面试的。 对于工程类的面试来说数据结构和算法是基础中的基础，如果这部分做不好的话其他的机器学习高级方法都是无源之水，无本之木。 这部分内容主要是学习/复习和刷题。如果对数据结构不熟悉的话建议先看一下书或者网上教程。 可以在LeetCode做或者别的类似平台做，不需要太难，不过熟能生巧没有个200-300题的训练量不好意思出来面试。当然刷题要分类、钻研、总结、举一反三， 光做不想是难有提高的。  这个部分内容之前很多知友大神也都分享过了，我之前也回顾了一下，这里就不太赘述了。 机器学习工程师 有点是统招，一般编程语言不太关键，会一种就可以，比如常用的Python。不过有些领域比如自动驾驶或者IoT，需要相对高的特定语言（Python / C++）的掌握，对语言的编译实现和运行有一定的理解。如果没有经验的话就要好好准备一下，不然很难拿到面试或者通过面试。下面就是一些与语言相关的面试题目示例，大家可以感受一下。 Python C++ 对C++面试准备感兴趣的朋友可以看看我的另一篇回答， 里面详细讲解了如何零基础准备C++的面试。 机器学习主要准备了两个部分，一部分是经典的算法和理论知识，另一方面是前沿的（深度学习）的方法和实践。经典算法和理论知识主要是用看书+总结的方法掌握。下面几本书都比较推荐。英文的看Introudction to Statistical Learning 或者Elements of Statistical Learning，经典教材讲解细致。 中文的教材可以看西瓜书 （周志华 机器学习。还有 @王喆 的百面机器学习和推荐系统，内容很新又接地气。如果面做广告或者推荐系统的职位的话，找来看一看帮助很大。   看了书注意总结方便理解和复习，如下例。有一些基础的模型公式要能够会推导，比如logistic regression， gradient descent， decision tree， k-means。 更进一步的话，能够用Python或者Tensorflow实现就更好了。 深度学习可以的话根据职位和项目经验着重看一下CNN、RNN、LSTM、Bert一些内容和在计算机视觉、自然语言处理或是广告推荐方面的应用。 答主准备的时候是以网课和博客为主， 以相关论文和教材为辅来准备的。这样入门快上手快，又有一定的深度。事先看看其他答主的问题示例也会对学习有帮助，因为这样就更有目的性。 网课主要可以看Andrew Ng 的Deep Learning 和 Hung-yi Lee （李弘毅）的课程频道，一个英文一个中文，讲得都非常好。  实战部分包括两个重点， 一个是机器学习方法在实践的常见问题和解决办法，另一个是机器学习系统的设计。常见问题这部分特别看经验，如果工作中接触不到的话，一定多看看相关的博客文章，有条件的话多做做小项目。 设计方面多侧重考察如何从头到尾搭一套ML系统，必考题目之一就是如何设计一个基于机器学习的搜索/推荐系统。 北美这边的这边的ML Design面试可以参考一亩三分地的帖子 浅谈ML Design推荐系统面试心得, ask me anything。 面试回答这类问题最好有自己熟悉的框架/套路，不然思路容易乱。答主一般喜欢从这几个方面由浅入深地回答： 准备的时候也按这几个方面准备，每个环节多掌握几种方法和技巧（比如不要只谈Regression 或者只会Deep Learning的业务）。下面一种更完整的ML设计流程。 软件系统设计在社招里面的考察频率不低，也是一个体现能力经验的重头戏，千万不要忽视。  我一般是仔细研究下面这三个网站的资料，再配合相关的技术博客和面试真题来准备的。值得一提的是，机器学习工程师面试里这部分内容可能会结合上述实战里面机器学习系统设计考察。 答主一般是边看边总结，最后在在线文档（Dropbox Paper 或者Google Doc）里整理出一个设计框架和小抄（cheat sheet）。 下面就节选之前总结文档里的部分要点。 有工作/实习经验的候选人一般都会被问到做过的实际项目或者最近的项目，而且一般是面试一开始闲聊的时候就问。 谈项目的时候卡壳或者说不出所以然是一个很大的丢分项目。因此，面试前一两天一定要细致地过一遍项目里面的设计和技术细节，以及产生的影响。 我个人喜欢用STAR的框架来归纳总结项目的要点大纲， 用知识表格的形式总结项目用到的技术知识要点和拓展。 面试之前以elevator pitch （1 min） 和 详细介绍 （5min）的形式口头练习讲工作经验， 努力讲一个有血有肉的好故事。  一般onsite面试里面都有一轮HR或者高级主管来面的行为面试，谈人生谈理想谈危机谈处理。如果其他技术满分过关因为没有准备挂掉了行为面试那就得不偿失了。 准备的话就多总结总结做的项目的各种困难和解决之道。如果要面Amazon这种地狱级别的行为面试，或者想准备得很充分，建议熟悉亚马逊领导力准则14条，并能够把每一条对应到自己的经历。 STAR原则在这里也很适用。 知己知彼，百战不殆。面试的最终目的是回答好面试的问题找到一份工作而非纯粹学习知识，为了达到这个目的我们就需要多看之前的面试题目和经验。  知道目标公司要考察什么，才能有针对性的准备不是。 这方面的信息可以在一亩三分地或者牛客网查到。个人的经验是在电话面试的一周前，onsite的1-2周前开始有针对的看面经，把找到的面试题目和可以想到或者找到的题目总结在一个在线文档（高级一点的话可以写在Anki 卡片里面）里复习，比如下面的例子。   参考资料 