最近终于做好了选择,决定从杭州“搬迁”到了上海,一切安顿好之后,终于有功夫可以好好整理一下近期面试遇到的一些问题以及自己的一些小经验啦,希望对同样有跳槽需求的同行小伙伴们有些小小的帮助。
【注】文末提供面试技术交流群
首先,简单做一下自己的背景介绍啦~
本人 NLP 算法程序媛一枚,18 年 6 月有幸在达摩院的翻译平台实习并转正,19年 1 月硕士毕业后,于同年 2 月加入该团队,主要从事术语挖掘与文本质量相关的工作。这次参加了腾讯、字节、美团、b 站、虾皮、小红书、知乎、华为、微博、携程、网易这几家公司的社招面试,除了 b 站、美团和网易(知乎后面不打算继续面了,本来就是用来练手的;华为流程太慢了,也和 hr 终止了流程;美团和 b 站主要是因为没有对应职级的 hc 了),有幸拿到了其余 6 家公司的 offer。22 年 1 月中旬离职,“搬迁”至上海,加入某互联网。
除了携程只有一轮技术面,并且无算法题之外,其余公司几乎都是 3 轮及以上的技术面,并且必定会考算法题。对于每一家公司,如果你能通过所有技术面的话,大概需要做 2-3 个左右的算法题目,所以刷题是必须的!我大致统计了一下,近乎两个月我大概参加了 30 场技术面,从这些面试过程中大概总结出如下结论:
(1) 第一轮基本都是简历面,会问一些你简历项目中的一些细节问题,以及衍生出来的基础知识,面完以后,一般会让你做 1-2 个题目(大部分是 1 道)
(2) 第二轮和第一轮相差不是特别大,还是基于简历上的项目及衍生技术问题;除此之外,面试官会问你一些和他所涉及的业务相关的一些技术问题,最后一般会做1-2个题目(大部分是 1 道)
(3) 第三轮,基本是负责人面试,项目细节不会多问,基本都是大方向上的一些技术问题和业务相关的问题。这个的话,可以向内推的同学进行大致的咨询,问问他们整个团队主要做什么,然后可以相应准备一下;第三轮很少会有算法题
(4) 关于算法题
每一轮面试中,如果有算法题,最好能准确做出来,那样大概率可以进入下一轮面试;
如果完全没思路,那基本属于凉凉;如果思路正确,写得不是特别对,那还有百分之七十左右的概率进入下一轮;
面试过程中,遇到比较困难的题目,如果没有思路,可以先写一版复杂度较高的方法,然后再问下面试官是否可以给些提示;
最差的情况,实在不会,询问面试官是否可以换一个题目(主要看面试官肯不肯给换),如果换题目了,那就必须得做出来,不然凉凉,这个我操作过。
另,题目大部分以 leetcode 中等难度为主,而且原题的比例也比较高,或者就是原题的稍微变形;极少数 hard 题目,我碰到过三次,一次美团,一次虾皮,一次字节
(5) 小厂可以找猎头,大厂还是找靠谱的同学内推吧
(6) 以上结论适用于工作 2-3 年的小职级同学
面完整体感觉下来,大概排了个序:腾讯(微信) > 字节(抖音电商)、美团、华为 > 虾皮、b站、知乎、小红书、网易 > 微博、携程。
由于之前实习转正以后就躺平了,没有参加过秋招,因此刷题对于我来讲,是一件非常痛苦和困难的事情。我准备了许久,21 年 8 月份开始在 leetcode 上刷题,然后 11 月初才把简历投出去,并且在面试过程中我还是继续刷题的,最后总共大概刷了 200 多道题目。
在这里给那些和我一样刷题有困难的小伙伴们推荐一个不错的刷题教程:
https://www.programmercarl.com
我当时回溯是真的一点也不会,看 leetcode 上的题解也比较吃力,后来无意间在题解上看到了这个网站,我就按照这个网站的教程来进行学习了。除了回溯类型的题目,像树、递归、动态规划和背包问题,作者都写得非常详细,也非常容易懂,总之亲测十分有用!这个网站上除了 hard 的题目我没做,其余的差不多都做了。做完这个教程的题目以后再回过头重新去刷力扣 hot 100 的题目(LeetCode 热题 HOT 100),就会发现容易许多了,然后会发现题目会有挺多 overlap(手动嘻嘻.jpg),除此之外,还刷了剑指 offer 的题目,以及自己不是特别熟练的类型题目。
知道我离职后,也有许多同学朋友咨询我,大概就是要刷多少道题目才可以去面试,其实这个是因人而异的。这个问题我之前也问过跳槽的朋友,得到的答案却大相径庭。有人告诉我刷两三百道,有人说刷完力扣 hot 100 就够了,也有人说只刷了 50 多道。所以你看,其实问这个没什么意义,主要还是看自己的掌握能力。把常考的题型做过以后,要是能举一反三,那刷 50 道就够了。但是要是你的基础和我一样,今天做过这个题目,隔了几天又没思路忘记了,那还是老老实实刷吧,我的经验表明题海战术最终还是有用的。
我的面试策略是想拿一些小公司先练练手,然后再去面自己心仪的厂子。但是我小厂面太多了,导致我 12 月才开始面大厂,其实是有点浪费时间和精力的。如果对算法题比较自信的同学,可以在小厂上积累一些经验之后,直接面大厂。我 11 月初简历投出去后,面了一些小厂:主要是小红书、携程、微博、知乎。直到 12 月,我才开始面比较心仪的厂子:主要是 b 站、美团、虾皮、腾讯、字节(排列顺序即为心仪顺序)。
接下来的内容,主要是我当时记录的一些面试中遇到的问题和算法题目,有需要的小伙伴可酌情参考~~
<小红书> 上海小红书1面 项目提问: 1、远程监督会造成出错误标注,你是怎么解决的?比如有一个词叫做松下,句子是松下问童子 2、为什么语言模型的PPL分可以作为衡量句子的质量好坏的标准?你PPL分的归一化是怎么计算的? 3、其他就是问我远程监督NER中提出的两个优化点,问我motivation以及这样设计算法的意义(主要因为写了一篇论文,虽然没中) 基础知识 1、softmax的导数的值域 2、决策树是如何选择特征的? 3、GBDT的基学习器之间是否可以并行? 4、一个不均匀的硬币,怎么抛掷才能公平 5、没有考算法题目 上海小红书2面 项目相关问题 二面面试官的提问比较aggressive,就是一直说我这样做没有意义,真的要气死,差点和他怼起来… 基础知识 1、Bert中的位置编码是绝对的还是相对的 2、CNN中的1x1卷积的作用 3、LSTM中的记忆门、遗忘门的作用 4、防止LSTM梯度消失(or爆炸),做了什么优化?->GRU相关知识,LSTM与GRU中门机制的区别 5、是否BERT全面优于LSTM等模型 算法题:实现类似消消乐功能 删除连续出现大于等于3次对的数字 输入[1,2,3,3,3,4,4,4,4,5] 输出 [1,2,5] 加面(二面后直接hr面了): 上海小红书3面 简单问了项目情况,介绍了他们那边的业务场景,基本属于闲聊模式吧 ----------------------------------------------------------------------- <携程> 上海携程(无笔试题,因为面试的推荐岗位,大都是机器学习的知识点,仅一轮技术面,比较简单吧,可能是看中了我的背景) 1、问我项目中的规则引擎是怎么做的(也许他们内部也写了很多规则,所以才对我的规则引擎比较感兴趣吧,手动捂脸) 2、GBDT中的一些细节,决策树中的特征数如何选择的; 3、原问题大概是GBDT中样本你们是如何采样(没听明白问题,然后面试官举了一个例子,我说你想说的是不是交叉验证啊,他说是的),交叉验证的优缺点,缺点是样本太少的情况下,仍然无法避免过拟合 4、因为回到了GDBT中可以通过boosting的方式拟合残差使得误差变小,面试官问我,如何解决方差的问题,当时没回答上来… ----------------------------------------------------------------------- <新浪微博> 杭州新浪微博(一面) 1、你是否了解其他跨语言预训练模型?mBERT与XLM的区别,你为什么选择XLM? 2、CRF的损失函数是怎么计算的,不用写公式,大致说一下 算法题: 链表的排序(归并) 杭州新浪微博(二面) 1、问我从comparable data 中挖掘双语术语的论文里面的细节,讨论我论文中的问题 2、远程监督NER产生的不完整标注如何解决,我详细说了一下简历中提到的两种优化方式,面试官问我具体代码是怎么实现的,给他口述了一下 3、问我GPT-2的原理(因为项目中用到了) 算法题(2道,简单题) a. 写multi head self-attention伪代码 b. 写一个矩阵转置的实现 例如 3*2的矩阵转成2*3 杭州新浪微博(三面) 1、先做代码题,实现基于词典的分词(没做出来,嘤嘤嘤) 2、项目相关问题,总体上问我的项目的落地情况以及应用价值 ----------------------------------------------------------------------- <知乎> 北京知乎1面 基础知识:bert相关的一些,主要包括bert的结构以及mask机制 算法题: leetcode原题:116. 填充每个节点的下一个右侧节点指针 北京知乎2面 基础知识: 1、什么是过拟合和欠拟合,以及防止过拟合的方法有哪些 2、常用损失函数有哪一些?为什么一般交叉熵损失用于分类而均方差损失用于回归? 3、CRF中的损失函数是如何计算的? 算法题: 二叉树的最近公共祖先 (当时不会,让他换了一个题目,树的层序遍历,做出来了) 北京知乎3面 基础知识: 1、介绍fast_align 和simalign的工作原理(项目中有涉及) 2、word2vec中词表过大时怎么进行训练加速的? 负采样具体怎么做的? 3、语言模型PPL分是如何计算的 4、NER中为何用CRF? 5、正负样本分布不均匀时如何解决 6、机器学习中的评价指标有哪一些 算法题: 给你一个字符串”ABC”,写出它的全排列 ----------------------------------------------------------------------- <腾讯> 上海腾讯云1面 项目中的问题比较多 基础问题: 1、说一下Transformer的结构 2、BERT和GPT-2的区别 3、还问了我研究生时期的ijcai的论文 算法题: 组合:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。 牢骚:其实我面完自我感觉良好,code题目也做出来了,然后第二天还发短信告诉我通过了一面,结果等了十来天没联系我,找老同学帮我看了看,说是挂了,但是面评还不错,可能不太match吧… 深圳腾讯微信1面 1、讨论项目中的问题,问我技术点 基础知识: 1、BERT的结构,如何mask 2、XLM的结构,它是怎么做的,position embedding是怎么样的 没有算法题 深圳腾讯微信2面 1、大多数聊项目中的问题 基础知识 1、语言模型相关的知识点 2、电商标题的BERT+BILSTM+CRF模型中,你是怎么做finetune的 3、BERT+BILSTM+CRF过拟合了,解决方案有哪些,分别从训练方式、数据角度,和模型结构上来说 4、NLP中的数据增强怎么做(因为我做的是电商,所以从电商标题数据中,讲了一些实体词替换的策略) 5、开放性问题,结合他们的业务场景,问我如何做视频内容和视频标题的文本质量评估(可能是因为我在阿里也做了相关文本质量评估的项目) 深圳腾讯微信3面(总监面,聊了1.5h) 1、针对我的过往项目来提问 2、微信面的是视频号搜索,面试官给了我几个场景,问我如何做搜索(主要从deep learning出来前与后的时代,问我分别怎么做) 算法题: 题目二选一,我选了一道自己做过的,为leetcode 34 总结:其实我的项目经历和这个岗位还是有很大的gap的,但是这个总监人还挺好的,本来面试时间是1小时,却和我聊了1.5小时,面试将近尾声时,还问我“你知道为什么我要多和你聊这么久吗?”(哈哈哈~~) 他问我怎么看待技术和业务,为何我现在想从达摩院出来并且找的岗位都是偏向业务的,为什么毕业就去了达摩院。 我回答的比较真诚吧,我说我现在想来其实有些后悔的,如果再给我重来一次,我可能就不会选择达摩院了。 深圳腾讯微信4面(交叉面试) 1、介绍项目一个自己觉得最有成就感的项目 2、主要还是聊NER的技术点,问我为什么现在中文NER在标注的时候都是基于字的而不是基于词的 3、聊我为什么选择从达摩院离开,关于这个问题后面衍生出了很多职场上的问题,我回答的有些许激进,但后面还是极力圆场,手动捂脸。 总结:因为是本科大神老同学内推的,然后深圳岗位hc比较多,所以我这边相当于开了个“后门” 吧,我技术面4面就可以了(网传微信面试技术面都是六七面起步)。 我同学也十分给力,助攻很到位,会告诉我应该怎么准备,也会及时给我发面评,增加我的信心。后来他告诉我几乎他们组都在给我助攻了,那边同事让他发了一些正例和负例的面试样例给我做参考,真的十分感谢! 所以我对这个部门的印象特别好,hhh~~最后我把offer拒了,哎,主要还是深圳离家太远了(要是上海岗就好了,皱眉) ----------------------------------------------------------------------- <美团> 上海美团点评(推荐方向)1面:直接是负责人面的 都是问我他们业务上碰到的一些问题,包括,如何做人工标注,人工评价的指标如何与模型的评价指标关联起来,以及遇到极端情况时, 比如样本中大部分是正样本,极少数是负样本时,想提高负样本的召回时该怎么做?面到结束,说想找级别高一点的,然后转到了另一个部门 上海美团点评 1面 主要还是聊项目中的问题,聊了将近50分钟 算法题: 下k个排列(只写出了下一个排列) 上海美团点评 2面 没有问基础问题,都是聊项目 Code:1143.最长公共子序列 上海美团点评 3面 聊项目,接着是问点评业务相关的开放性问题 1、如何从用户的评论信息里面抽取重要信息 2、文案抽取和文案生成的方法有哪些 3、结合给出的业务场景,关键词如何抽取 牢骚:哎,最后挂了,我以为稳赢的,还是很可惜的~最后内推的朋友告诉我说是因为没有hc了,负责人觉得尚可,但不至于额外去申请hc,还是自己不够优秀吧 上海美团点评-搜索技术中心-NLP算法工程师 一面: 1、NER中CRF的作用,损失函数是什么 2、描述一下BERT的结构 3、语言模型PPL分的原理 算法题: 给两个字符串,输入:s="asdgb" t="sg" 输出 sdg 二面: 1、学术界远程监督NER的方法有哪一些? 2、autophrase的算法 3、聊项目中的问题 ----------------------------------------------------------------------- <字节跳动> 杭州字节(抖音电商)1面 问了项目中的一些内容 基础知识: 1、说一下你知道的预训练语言模型 2、序列标注的标注方法有哪些,有什么区别? 3、语言模型PPL分怎么计算,原理是什么?如何定义句子的流利度 算法题(2道) 1、写多头self-attention机制的伪代码 2、链表K个节点一组进行翻转 杭州字节(抖音电商)2面 问了项目中的一些内容 基础知识: 1、主要和跨语言预训练语言模型相关,说了mBERT和XLM 2、如何找实体词的跨语言同义词 算法题: 无重复字符的最长子串 杭州字节(抖音电商)3面 主要聊一些开放性问题 1、抖音电商和淘宝有什么区别 2、你觉得小红书这款app的优缺点有哪些(因为我第一个问题说没有用过抖音(手动捂脸,如果我是面试官,我可能就把这个候选人挂起了)玩的比较多的是小红书,因此问我这个问题了。PS:我本来想在面试前安装的,熟悉一下,结果忘记了,我可真是个大聪明啊~~) ----------------------------------------------------------------------- <b站> 上海b站商业化广告团队 b站1面 开头纯瞎聊,问我为何离开达摩院,以及为何选择投b站这个部门 基础知识: 1、什么是GBDT,以及它的输出是什么,做分类时阈值如何筛选? 2、为什么PPL作为语言模型的衡量指标,描述一下PPL分的计算和代表的含义 算法题: 搜索旋转排序数组 上海b站2面 基础问题: 1、GPT-2和基于LSTM结构的语言模型相比,有何优点? 2、NER中不用CRF会有什么问题? 算法题: 二维平面中给定2n个坐标点,是否可以找到一条直线,将其一分为二 牢骚:b站的二面题目没有做出来,但是后来问hr还是过了面试的,hr面面完以后都提交薪资流水了,后续催了好几次,结果告诉我没有hc了,哎,我真的好气啊,还是自己不够优秀,毕竟二面题目没做出来 ----------------------------------------------------------------------- <华为>: 一面: 1、和我讨论我的论文里面的一些细节,以及有什么可以优化的点 2、问我BERT的结构,以及问我为什么用BERT+Bi-LSTM+CRF结构而不是BERT-CRF 3、详细介绍Transformer结构,以及对应模块输入输出的shape 4、模型太大时怎么办?蒸馏是怎么做的 算法题:(2道) leetcode48 旋转图像 leetcode199 二叉树的右视图 PS:华为流程真的巨慢巨慢,后来我已经拿到心仪offer了,那边二面都还约不上。主要还是自己不懂拒绝,先给安排了hr面,后来想想真的好累啊,二面我直接拒绝了。
我大部分看的都是上海的机会,因为杭州的机会实在太少了。其实字节我面的是杭州岗位,本来是可以留下来的,毕竟我的朋友大都在杭州,而且离家实在太近了。但是由于一些原因,在 21 年六七月份的时候,我就计划着从杭州去上海工作,所以最终还是和 hr 更改了 base 地。希望今后在上海可以顺顺利利,开开心心的吧,继续加油~~
非常感谢在跳槽面试过程中给予我帮助的朋友和同学们。
昨天下午,一小姐妹还和我语音,问我一些刷题以及面试的问题,其实我特别感同身受。对于那些正在准备跳槽的同行小伙伴们,要相信,努力还是会有收获的,加油呀。
只身在外追逐梦想,完成目标的每一位你们也希望你们能为自己勇敢的选择而感到骄傲
目前已开通了技术交流群,群友已超过1000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友