2019年的秋招,比往年来的都更早一些,今年的算法岗位面试者,大多也都焦虑一些。
因为学习算法的人数远比前后端多,但其招聘人数远比后者少,因此竞争尤为激烈。我面试的岗位都是自然语言处理算法工程师,本篇文章主要讲述我的秋招历程。
今年我面试了百度、阿里、腾讯、美团、网易、京东、快手、拼多多、字节跳动,目前面试基本结束,等待 offer 阶段。
收到了百度、阿里、腾讯、美团、京东、拼多多的 offer,其余的在等待,问题不大。
一、面试准备
1.1 简历制作
我的简历上,比较突出的是两部分,一是实习经历,曾经在创业公司和字节跳动实习过,现在在微信实习;二是比赛经历,参加了一些自然语言处理的比赛,获得了冠亚军的奖项。说实话,实习经历够了,比赛经历也够了,缺的是学术论文的经历,也是接下来尝试突破的方向。
花了几天的时间专门修改简历,删繁就简,将丰富的经历压缩到一页篇幅。很多人做简历使用 word,但我总觉得用起来挺不方便,所以自己设计了个ppt 模板,用它来制作简历。整体风格简约,比较符合互联网面试官的审美。
建议大家多花点时间润色简历,毕竟这是面试官对你的第一印象,多下点心思,制作过程也是对个人经历的复盘总结。
1.2 算法刷题
我将算法考察分为硬算法和软算法,硬算法指的是编程基础,软算法指的是机器学习算法基础。
针对硬算法,我从三月份开始,基本每天坚持做一道 leetcode 算法题。以下是我的提交记录,每个格子代表一天,颜色越深,表示刷题数目越多,时间跨度是三月份到七月底。
之后为什么没有再刷呢,因为我刷题的时候喜欢总结,做了两百道题目之后,常见知识点已经掌握了,面试时算法题基本都能够做出来。以下我整理的常见概率题和算法题目录。
针对软算法,就在网络上搜索面经,例如牛客网、技术公众号、csdn等等,在面试相应的公司之前,先检索下该公司岗位常考察的算法题目。简历上提及的算法,例如LR、GBDT、CNN/RNN/LSTM,原理一定要懂,常考察的公式需要掌握推导流程,例如手写SVM推导、神经网络反向传播推导流程。以下是整理的一些机器学习面试资料目录,学习之后,面试时候就能和面试官斗智斗勇了。
1.3 简历项目
简历上的项目,要用心来总结提炼,言简意赅,用最少的文字展示自己。写上去的项目,面试时候问到的概率非常大,所以要保证能够熟练讲解每个项目,可以按照三要素来介绍,项目分工、项目成就、心得成长。
第二部分谈谈面试公司的经历,因为我没有及时记录面试情况,这里仅列出能够想起来的考察点。
二、面经
「百度」百度大搜,提前批,从事百度大搜Ranking排序相关业务,三轮技术面。
编程题:1、矩阵m行n列,每个格子面积为1,问面积为k的小矩阵有多少个;2、手写快速排序。
算法题:决策树模型,回归树细节考察;机器学习算法对偶优化KKT条件;聊项目。
「阿里」天猫精灵部门,提前批,从事天猫精灵音箱对话相关业务,三轮技术面,一轮交叉面,一轮HR面。
编程题:1、如果有一个字典,如果快速判断一个词是否出现在字典内?思路:字典树;2、BFS最短路径。
算法题:LR 公式推导,与 Softmax/SVM 区别;判别模型生成模型;DNN方向传播推导;VAE思想;Memory NetWork介绍。
「腾讯」微信模式识别中心实习转正。实习直通转正,不经过实习转正答辩。
实习编程题:1、链表排序,思路是使用归并排序;2、c/c++ 实现 atoi 函数,也就是字符串转整数,需要考虑到细节处理,例如正负数、空格等。
实习算法题:RNN/GRU/LSTM区别与联系;介绍Bert,讲讲其中的 Pos-embedding公式,谈谈自己理解的 Attention 机制。
「美团」自然语言处理中心知识图谱组,北斗计划,解决北京户口,三轮技术面,一轮总监面,一轮HR面。
编程题:1、有百亿条记录,某些记录可重复,按照记录出现的概率进行采样,最优的时间、空间复杂度;2、无重复数字的数组全排列;3、有重复数字的数组全排列。
算法题:主要是问项目,讲解项目时会问到算法的原理,例如LSTM的公式,Bert中Attention的公式。
「网易」网易有道自然语言处理组,三轮技术面、一轮HR面。
编程题:1、n和有序数组,求前k大;2、最短路径,
算法题:主要问项目,对项目细节考察很仔细。
「京东」广告质量部,提前批。先在架构部面试了三轮,然后转到广告质量部面试了两轮,一轮HR面。
编程题:1、有两个玻璃球,小球从高于某个高度下落会砸碎,楼有100层,求小球会被砸碎的临界高度;2、快速排序。
算法题:LR结合随机梯度下降的优化求导过程,CNN/RNN讲解,聊项目,探讨业务开放场景。
「拼多多」广告算法,学霸批。
编程题:1、写开平方 sqrt 函数,思路二分法,需要注意小数的特殊处理;2、二叉树非递归中序遍历。
算法题:聊项目,给了到业务场景开饭题,要求提出解决方案,解决真实问题。
「字节跳动」:人工智能实验室,超级工程师计划,四轮技术面。
编程题:1、给定矩阵,从左往右底层,从上往下递增,求某个数是否出现在矩阵中;2、判断二叉树左右子树是否对称。
算法题:SVM讲解推导、Bert讲解、VAE讲解、Attention机制理解、项目讲解。
「快手」:多媒体内容理解部门,快star计划,三轮技术面,一轮总监面。
编程题:1、字符串中回文子串个数;2、一个字符串中,所有的字符出现两次,仅有一个字符出现一次,求该字符,用异或即可解决;3、一道动态规划题目。
算法题:L1和L2正则区别,数学解释;常见的损失函数;GRU的公式;聊项目;出了道开放式题目,要求解决方案。
总结下,技术面中,如果项目丰富,会聊项目,所以好的实习、竞赛经历很重要;没有项目会考察基础算法比较多;技术面都会有编程题,难度不大,基本不超过 leetcode 的中等难度。
总监面就是聊聊实际问题的解决能力,未来的职业规划,对公司的看法等等;
HR面就是看看有哪些offer,打算在哪工作,薪资的预期,为什么想要来这个公司(要学会大夸特夸)。
最后,祝大家 offer 多多,新年大吉(拜个早年 ^O^ )