算法社招-BAT头条快手美团滴滴面试分享附面经题库

面经

0. 面试情况大背景

阿里 腾讯 百度 头条 美团 滴滴 快手

我就我自己对于这几个公司的面试感觉进行一下我的认识和分享。

移动端推荐关注「小李杜的科幻年」

字节跳动社招内推:job.toutiao.com/s/JrB3K

字节跳动校招内推码是:AAAV33F

内推可以比自己投递效率高,也更容易过简历,更可以一起讨论学习啊!希望可以和大家学习,一起进步!

本文章私以为适用于校招以及工作1-3年的同学准备面试。

下面是面经正文:

正常的一二面主要是项目+coding,coding时间请维持在20min以内解决。最好是15min解决,然后自己可以用5min检查一下问题,或者和面试官沟通一下自己的思路,以及应对一下面试官的follow up

百度 阿里 美团 滴滴 搜狗 360三面是人生面 + 部分的技术视野面 + 职业规划面(好像有的也有coding吧,人忘记了)

头条快手 三面技术面+人生面+职业规划面 会有coding

简历的制定思路

1,项目中应当有一到两个重点项目突出

2,项目介绍建议采用STAR法则进行说明。项目应该有章有节的说明,第一项第二项之类,并且将最重要的产出等放在最前面。

3,另外在写项目的时候,这个项目具体用了什么框架,还是自己手写的网络,遇到了什么困难,介绍同理。

1. 自身条件

开水团的18届小白菜,中间由于个人原因离开互联网一阵子。等到自己思考认为想要重新回到互联网的时候,重新下定决心回到互联网。

方向是算法岗(其他岗位太难了,我做不来)

2. 准备周期及时间

2020年2月开始断断续续的刷题+准备,三月底开始面试,面试一直持续到六月底。收获的offer基本也算是满意了吧。

自己应该关心的东西:公司文化和具体的制度

3. 投递方式:

内推为主,猎头为辅。

首先一定不要自己投递,这个就不说了。

内推,最好的是找到直接部门中的人,级别越高越好,但是人家得愿意给你说好话(基本是可以当你面试官这个级别的就够了,再高的你认识,你也不用看我在这里bb),记住一定要找会做事的。并不是你关系好就完美了,但是也不一定会内推呀,内推不是简简单单的给你把简历扔系统那样(对字节跳动感兴趣的同学,请私聊我,内推+简历修改+面试指导~~~)。

猎头要找靠谱一点的,这个靠谱怎么定义呢,就是认识时间比较久,他找你不是赚人头费,而是将你维系成自己的朋友,或者合作伙伴,至少是个人脉吧,不然你就是个商品,自己拿捏把握吧。小白程序员如果搞不清楚,还请找人内推(比如我呀)

4. 面试流程

我会先写出通用流程,再写出特别流程,职级用阿里的职级来解释。

一般来说,p6及以下是三面,以上是四面。再高的p8以上就不知道了。三面的内容构成差不多,基本信息+项目+coding,其中头条会多一点数学题的考察,这也是大家众所周知的吧。下面我就拆分这三个内容来讲,主要是以NLP等算法岗位来说。

4.1 基本信息

主要介绍个人基本情况,请一定要将自己认为是亮点的地方说出来,不管是你的论文,还是你的项目都可以,但是要点出来,不能展开来说。时间请限制在3min内,最好2min。可以自己对自己说一下看看。

4.2 项目

项目分为两个part,其中第二part分为两种类型。

Part 1. 利用r-star法则将自己做的项目讲述出来。我对star做了一点修改,只要项目足够亮眼,可以一句话点题,说出自己的项目带来的价值,以在面试官心中留下先声夺人的印象。这一部分主要是你讲,他听。

Part 2. 面试官对你的项目进行问询,然后你来回答,除了你没有讲出来的一些细节的问询之外,一般会有两种:

类型一:实现细节拷问,这部分会拷问你对业务上的一些问题是怎么处理的,工程问题是怎么实现的,为什么这么做,你承担了什么角色,你和别人怎么协作,等问题

类型二:算法细节拷问,这部分会拷问这个算法的细节,你对算法的理解,你为什么在这里使用这个算法,你承担了什么,存在什么可能的问题,你怎么解决的等问题。

有一些公司会要求你的算法创新性,有一些会要求你对算法的落地实用性,这个完全看面试官来定,无法进行判断(话说,你有一个顶会,但是去面试一个以业务效果为主的部门,或许只能当个好看来使了;反之,人家要求算法创新,你大讲业务效果,也不对胃口。这个时候就发现,内推人可以告诉你这个部门主要是做什么的,你就可以把握自己和对方是否match,以免浪费彼此的时间)。

所谓的专业知识点,一般是在这个部分进行考察的,社招很少会忽然扔掉你的NLP简历,开始考察你CNN在图像上的作用,问问你vgg是什么yolo是什么特点之类。但是你的简历上的涉及到的知识点,一定要清楚呀~。【关于NLP的知识点,我会另外开一系列整理一下】

4.3 coding

coding这部分可以说是最难也是最简单的部分。我的coding准备时间约5个月,比较久,毕竟离开互联网很久,而且自己又是一个小白菜。

一般面试的coding内容主要有以下几个点:

基础排序,BFS/DFS,二分法,二叉树、分治法,哈希,堆栈,双指针,动态规划,链表的基础操作。

我们说万变不离其宗,主要的面试coding内容如上所示,具体会问什么题目,每次都会有所区别,但是主要内容都是上面说的这些,只要基本内容掌握了,基本就可以应对所有面试中出现的题目了。

至于题库,主要是以leetcode为主,但是刷题的时候可以按照具体的顺序进行,需要自己自行安排。

我在文章的最后附录了一份我整理的面经题库,希望可以帮助大家。

至于怎么刷题,怎么准备,我会另外系列整理一下,这里的内容已经不少了。

4.4 每一轮面试会有细微的区别,我会详细讲一下自己的经历以及自己对于面试的认识,btw coding都是一样的,我就不仔细说了,主要说一下项目这里。

一面:一般是你未来的同事(或许在级别上会高一些),面试内容在项目上就是我上面解释过的内容,但是这里的面试主要在广,不在深,浅尝辄止,主要在一到两个项目中出现过的知识点上有一定认知,不会卡壳的解释出来,即便有某个知识点不知道也没有关系。

二面:一般是你的项目负责人级别。这里的面试在深,不在广,会就某一个项目中的某一个点挖深,或者某几个点挖到中间。这个度根据你面试的难度进行把握,会有所不同。

三面:一般是你的主管,说白了就是你的leader。这里的面试一般会考察你的知识点理解能力,较少会根据简历问,除非他对某个项目特别感兴趣。这里就问的可能会比较抽象的问题,会脱离实际项目。我自己瞎举个例子,如果你面试的是机器翻译岗位,可能会考察一下你是否知道IBM model,现在DL大行其道,那对于HMM和CRF的了解如何,n-gram呢?如果都不知道,那么DL到底了解有多少,BERT以及BERT的变种怎么理解的,bert背后的原理以及有没有思路来优化bert等等等等【我瞎说的哈,我也不是主管,写了写还是有点浅了,具体来说,可以考虑你要写一篇论文这样,主管在考察的时候就在考察你是否具备发现足够写一个论文/专利或者解决一个具体新问题的创新点的能力】。除此以外,考察理论点是很好的一种方式,比如就正则开始考察,这一个点就可以问很多了。【头条快手三面必coding】

四面:并没有经历过很多四面,不过可以说一下我的感觉,四面的时候,会希望你可以hold一条线,一个问题,不仅可以解决交代给你的【较复杂业务线】(注意不是任务),或者你可以自己发现问题并解决的能力【不是小问题,格局要相对大一些】。

其他:有些公司面试会视频使用牛客,有些会使用电话,有些会先项目,有些会先coding,有些会使用牛客coding,可能还要跑起来,可能还要跑全量数据,这都不是确定的,而且和面试官有关系。即便有时候,你面试没有通过,请不要灰心,这就和找对象一样,不合适就是不合适,不喜欢就是不喜欢,强行在一起也没有意义,你说对吧~

5. 面试注意点

a) 工作内容(这部分内容,互联网人都知道,要关注大背景,大盘,小盘听听就好了,进去之后会有新的安排。大方向不错,你好好干,roi不会低的)

i. 团队规模

ii. 团队发展方向

iii. 团队的发展规划

iv. 所在团队和其他团队的关系

v. 面试的时候感觉面试官是否nice,二面是否nice/认可,三面对你是否认可。原因是一面二面和你平时的交集最多,对你nice和认可度特别重要。三面nice与否不重要,关键是是否认可你,两个人的观点,对问题的看法是否一致,有工作经验的同学应该会有感觉。

b) 待遇

i. 成长/晋升机制

ii. 男女比例(这个就看你自己感觉了hhh)

iii. offer薪酬待遇:薪酬的构成:cash和期权/股票,期权/股票怎么拿,怎么换成钱

iv. 上下班时间以及中午和下午的休息时间。

c) 是否和自身职业规划一致(职业规划可以在下文中看)

6. 职业规划与国内形势分析

个人职业规划

自己要有对自己的定位,要知道自己希望在一到两年内成长为什么样的人。不要做太远的规划,没必要,世界变化这么快。也不要太近,时间太短了你什么都做不到。BTW,不要担心做不到,到时候,成长后的你一定有办法应对到时候的情况。

要考虑好自己为什么要来这个公司,图什么,自己想要什么,又想为止付出什么。社招和校招是不一样的,校招可以懵懂一点,或者去大公司慢慢适应一下,自己学习(实习过很多公司的人就有这个优势了)。社招,除了熟悉业务,熟悉公司的阶段,后面对你的要求会越来越高,需要自己掌握才可以。

国内形势分析

目前我对国内互联网公司的分析,主要从工作的角度来看。

百度:当之无愧的国内互联网黄埔,撑起了互联网的大半江山,对于低p的同学来说很有价值,特别是技术上,还有几个核心部门,都超级难进,也有很多大佬。

AT:第一梯队,总部在杭州和深圳。建议还是去总部,要承担跳槽不方便的风险。校招培训非常好,社招感觉一般了吧,三年内的可以考虑,以后的就没必要的,你的风格已经形成了,过去打碎重立不一定好。整体建议和百度一样

TMDK:第二梯队,相比上面的几个更有组织活力(这个词从刘江老师那里听来),相对的给年轻人的机会会更多一些,也有更多的尝试机会。对个人的要求比较高,需要自己自驱力很高,这一点我觉得很重要,毕竟年轻人相对上面的更多一些,自己要接受身边的人比自己年轻,比自己强,并且要学会从peer身上学习,从前辈身上学习;自己主动跟别人学,和等着别人来指导自己,结果可能是一样的,但是效果区别蛮大的。

其他大公司:从公司层面来说,综合名气没有上面那几个大,年纪也会稍微大一点(似乎是的吧),但是都有自己的杀手锏,对于对应方向来说,过去觉得是很值的,因为我只对NLP比较了解,所以就举例瞎说几个,其他的不太了解了:

搜狗:NLP方向唯一一个上市的公司。

360:安全方向的大佬。

网易:各种牛逼的游戏,网易云音乐,有道等几条线。

创业公司:Face++,商汤等几个AI独角兽,猿辅导、soul、陌陌等几个hot startups等,都是很红火的公司,由于我不太懂,就不乱说了。有兴趣的可以搜索一下毕业后去大公司还是小公司的帖子,我觉得说的很好了,就不浪费时间重复了。对于社招来说~~~,见仁见智吧。

写在最后:

社招和校招有点不一样,大家在社招的时候最好对自己的认知,和对自己的职业发展都有所规划,对于他人的想法也可以有选择的,有思考的接受,可以帮助大家更好的应对和准备面试吧。

个人看法,仅供参考,欢迎交流。

字节内推,请私戳我~,一起进步呀!!!

附录:

月薪税后计算器:salarycalculator.sinaapp.com

基础算法题库

这些题目是我从各大网站,blog上面找来的,然后自己总结了一下,应该可以cover 90%的题目了。即便有不同的题目,也是基于这些出来的,大家加油!

0. 基础:

排序:三种

二叉树的遍历:前中后三种,递归非递归【注意后序非递归有两种】,层次

二叉树的基于前中恢复什么的

1. 单词接龙系列

2. 股票买卖系列:LEETCODE 123

求股票的最大利润,例如[1, 3, 1, 8, 10, 3],只能买卖一次,计算最大收益

能买卖无数次,计算最大收益

只能买卖两次,计算最大收益

3. 背包问题系列

4. 链表:

如何判断两个单链表是否相交并找到交点,这个题没反应过来,所以答得并不好,只大概给了个思路。

4.1 k个有序链表的合并【考虑一下递归和非递归】

4.2 链表反转【递归和非递归两种方法】

4.3 链表排序【递归归并和非递归两种】

4.4 相关链表的公共节点(要考虑不相交的情况)

4.5 删除链表重复节点。如1-2-3-3-5-5-6 变为1-2-6

4.6 两个单链表找到第一个公共节点

4.7 判断链表有环,找一个链表中的环

4.8 一个链表,1->2->....->n,请原地折叠,输出1->n->2->n-1...;(辅助栈;快慢指针+逆序+合并)

4.9 两个链表表示两个整数,相加输出一个链表。(这么简单我还错了一个小点,进位标志位重置的问题啊啊啊)

5. 数组:

5.1 两个有序数组的合并

5.2 多个有序数组的合并【小堆,时间复杂度】

5.3 长度为n的数组中有一个数字出现了n/2次,快速找到这个数。

5.4 1.非递减数组中查询某个目标值出现个数。解法:二分查找左右边界。

5.5 排序数组中绝对值不同的个数

5.6 一个整数数组A,求Ai-Aj的最大值Max,i<j,

5.7 两个数组求交集

5.8 给你一个无序[1,5,2,7,3,8,2],在给你一个数字n=11,请查找和大于等于n的最小数组(必须连续,长度最小),该题中就是[3,8],长度2(lc原题)

5.9 一个无序数组,怎样找和为100的两个数。(1、排序O(nlgn)+二分;2、哈希表(O(n)))

6. 二叉树:

6.1 二叉树中两个节点的最远距离

6.2 判断是否是完全二叉树

6.3 二叉搜索树的时间复杂度

6.4 leetcode 124 二叉树最大路径和

6.5 完全二叉树输出最后一个节点【完全二叉树最后一个节点】

6.6 一个二叉搜索树,求两个节点之间的最长路径(不一定是从根到叶子)(lc原题,递归)

6.7 一个二叉树(没有其他特征),找两个节点的最近公共父节点。(有三种不同的类型,要搞清楚每一种)

6.8 给定一个二叉树,求出这个二叉树的宽度。没提交代码,写了一下面试官说ok就下一个了

leetcode.com/problems/c

7. 字符串:

7.1 长度为n的字符串中包含m个不同的字符,找出包含这m个不同字符的最小子串。

LeetCode 76. Minimum Window Substring. Hard

1、leetcode34(简单变形)

2、leetcode560

3、leetcode206

4、leetcode148

5、leetcode786

leetcode 56

leetcode 3

leetcode 105

leetcode 856

8. DFS:

8.1 全排列等

9. DP:

9.1 正则表达式匹配。

9.2 Leetcode #72(hard), 字符串的编辑距离

9.3 最长上升子序列

BFS:

- 岛计数问题 dfs

混合:

用两个队列实现栈的入栈和出栈操作。

编辑于 08-24

文章被以下专栏收录