前言回顾篇
作者是一名今年参加秋招的朋友,本文写在秋招结束后。
背景为211本硕&计算机科班,无论文无实习,去年趁着暑假时间做了两个竞赛,名次top20这样子,研究生主要是做城市计算的,涉及到机器学习、深度学习、强化学习和图方面的一些算法和内容,导师不怎么管,所以这些理论知识基本都是自学的,其中强化学习是因为疫情在家,觉得开学要找工作了,只靠机器学习和深度学习估计没啥竞争力,所以硬着头皮把强化学习的理论给啃了下来,希望能添加点亮点;剑指offer在家刷了一遍,6月份开学开始刷leetcode,大概刷了150道左右吧,刷的题不是很多,所以后面面试考算法题不是特别顺利,笔试难点的公司基本挂掉。
秋招的基本情况如下:提前批:vivo、字节、京东、好未来、寒武纪;正式批:BIGO、海康威视、华为、文远知行。目前拿到了字节和好未来的意向书,vivo HR面没过,京东offer审批没过,其它的公司基本都到了HR面,有些还没出结果。其实其它公司也投了,但是基本笔试挂,可能刷题还是不够吧。 提前批offer 8月初就确定了,所以秋招心态都很放松,从8月起就开始在实验室摸鱼,题也不好好刷了,但是又觉得不能放松,所以就每天还是坚持复习算法,又把图和自然语言的一些流行算法给学了下,扩充下自己的知识面。然后这周刚好面完华为,主管面也通过了,就觉得秋招差不多就结束了,也圆满了,下周继续磕盐去。
趁着有时间,把此次秋招历程总结一下,希望能对还在继续秋招的同学有所帮助,愿每个同学最后都会收获自己想要的offer。
在这里也欢迎各位从事算法的小伙伴加入我们,一起交流学习,一起进步。
如下仅为部分面经,墙裂欢迎各互联网大佬来撩。
具体面经分享
反复被捞之字节跳动篇
春招找实习那会儿,投了字节的实习,那会儿也是想试试,不过就不过吧,就当为秋招攒经验了,实习那会儿确实没过,但是第一次面挂了之后,又捞了我一次,第二次我拒了,那会儿没把握,就算过了也不能去实习。字节的提前批开始的很早,那会儿也没想着要去字节,所以就想拿来练手,就投了大家觉得比较难的AI Lab,果然被虐了,二面时写算法题写不出来,直接被质疑是不是计算机专业的,就特别气自己不争气,然后就下定决心秋招再也不投字节;但是呢一周之后,又接到了字节HR的电话,我本着练手的想法就答应了,倒是没想到后面能过,还蛮意外的。所以这么反复下来,我能过字节全靠捞和反复被鞭尸,提前批前后大概面了6面,都是技术面,考了10多道基础算法题,所以面完字节之后突然有了莫名的底气。面完之后也没HR面,过了两周之后就发意向书了。
汇总面经如下:
自我介绍 + 项目。
- 介绍RL:DQN的基本原理和改进点;DQN和SARSA的区别;探索的参数固定的时候,DQN什么情况下学不到东西?什么情况下,SARSA学的比DQN好?MC和TD的区别;value-based和policy-based的区别;SAC的基本原理,V网络和Q网络的目标函数;TD3和DDPG的区别;reinforce的原理,目标函数和梯度值;有什么方法可以使得RL训练稳定?TRPO和PPO的原理和区别;贝尔曼期望方程的公式;Actor和Critic的目标函数公式;一般的策略梯度的函数。
- ML&DL:GBDT的原理;lightGBM的原理;介绍一下常用的优化器;。
- 图:GCN的过程,中间的分解的每个参数的意义。
- 比赛:比赛的背景、组队情况、任务分工、数据处理、特征提取、模型选择等过程。
- 算法题:三个盒子分别放的球为:“红 红”,“红 蓝”, “蓝 蓝”,第一次取出一个红球后,取出两个红球且为第一个盒子的概率。
- 算法题:给定一个n*n的字符盘,和一个字符串,看该字符串是否出现在字符盘中。
- 算法题:给定一个只读数组 l,长度是M,最小值是a,最大值是b,l 中的元素两两各不相等。给定内存 O(N) << M, 要求找出 l 的中位数。
- 算法题:二叉树的前序和中序遍历序列,重建二叉树。
- 算法题:2、3、5为质因子,求第100个数。
- 算法题:有两个很大的文本文件,里面存URL,求同时在两个文件中的URL集合。
- 算法题:从左上角走到右下角的最短路径;多叉树中两个节点的最近公共祖先。
- 算法题:求一个只包含0和1的数组中包含k个1的最长子数组的长度;朴素贝叶斯的实现;一个圆上任取三个点,问这三个构成锐角三角形的概率。
效率贼高之好未来篇
好未来也是投的提前批,一个下午2轮技术面和HR面全部面完,一面通过了之后,继续下一面,不过就直接告诉你不过,所以面试效率特别高,我就特别喜欢这一点。面试官态度也不错,面试过程也比较顺利,回答的都挺顺的,导致反问环节我比较大胆,问面试官是好未来是996吗?面试官居然不知道996这个意思,还跟我确定了下意思,最后笑着说不是,一般是975这样子,偶尔项目做不完会加班,但不是常态。HR面是个小姐姐,很活泼很热情,全程笑着和我聊,我们就聊得特别开心哈哈。
汇总面经如下:
自我介绍 + 项目。
- RL:问了下SARSA和Q-learning的区别,AC算法。
- ML&DL:常用激活函数优缺点、11和l2正则化;SVM的原理,常用核函数,如何选择合适的核函数?
- 比赛:问了下比赛比赛、一些关键特征。
- 其它:自己的优势是啥?感兴趣的方向。
- HR面:项目难点、自己的优缺点、对自己的未来规划、对好未来的印象如何?
- 算法题:单词消消乐,比如:”abbbc”, 最后剩下:“ac”;给出一个数组和一个数字k,要求长度大于k的各个连续子数组的中位数中最大的哪一个中位数。
面评颇好之京东篇
京东的3轮技术+1轮HR面试,我的面评还蛮好的,可惜最后offer审批没过,印象比较深刻的是一面是个小姐姐面的,一开始我两都没开摄像头,然后我问要开摄像头吗?小姐姐说你想开就开,哈哈,最后我看她没开我也没开,不然只有我开还蛮尴尬的,小姐姐说话声音也好听,全程说非常好,最后我反问说我面试过程有什么不足吗?小姐姐说我说的太多太细了,她意思就是说答到点子上就好了,不用展开说,如果需要她会再问的;写算法的时候,先让我写个快排,我打开IDE刚写了个框架,小姐姐哈哈地笑着说这道题你是不是刷过,我哈哈地笑着说是的,哈哈,那不用写了,就过吧,特别爽快。
汇总面经如下:
自我介绍 + 项目。
- ML&DL:Adaboost、GBDT、XGB、LGB的区别;GBDT如何防止过拟合;传统决策ID3、C4.5、Cart的区别;常用的分类算法有哪些;常用的非线性分类算法有哪些?textRank的原理;HMM的原理;word2vec的原理;self-attention的原理;bert的原理;过拟合和欠拟合的现象和解决方法;ResNet的原理,为什么能解决梯度消失问题?从多个角度分析L2正则化为什么能防止过拟合;CNN为什么会比DNN好;CNN pooling的梯度回传。
- 场景题:在无上下文的情况下如何看两个词是否是同义词?;q=“0-6 个月婴儿奶粉”检索1段奶粉商品,在没有查询的关键词时如何解决?
- 算法题:快排实现;蓄水池算法;纸牌博弈问题。
佛系之寒武纪篇
寒武纪7-22号投的优招,7月底那会面了一面,中间隔了整整一个多月没任何消息,以为挂了,结果9月初安排了二面,现在又过了10多天,也没下文也没感谢信,不知道啥时候才能有个结果了,真的佛系;面试也很佛系,一面30分钟左右,还行问了下技术,二面不到10分钟,搞得面试时我也很佛系。
汇总面经如下:
自我介绍 + 项目。
- C++的static关键字、三大特性、动态性如何体现、虚函数和纯虚函数、new和malloc的区别(这是一面问的,主要问C++,还有一些不太记得了);以下是二面的问题,感受一下寒武纪的佛系哈哈。
- 是否有想用的项目呢?那目前论文发表情况呢?你相对于其他同学的优势在哪里?我们为什么要招你呢?我看你一面面试官给你的评价里有写编程能力薄弱,你怎么说?那你还有什么问题要问吗?没有什么问题我们面试就结束了哈。(二面感觉像HR面)
- 算法题:无(佛系的连算法题都不考)。
随意之海康威视篇
海康威视的随意体现在面试比较随意,算法题不要求写代码,说出思路就好,每轮面试时间不长,大概30分钟;面试前先打电话聊了下,20分钟左右,说是预面试,看符不符合意向,再进行后续的正式面试,结果这个就算是一面了哈哈。二面面试官是做cv的,看我做强化学习的,就没咋问,说给我推另一个组,也是做强化学习和图的,和我比较合适,然后三面面试官的部门是做RL和图的,上来就说我们很match哈,所以我在答问题的时候,还没答完,就说,好了,我知道你会了哈哈,最后让我等HR面。
汇总面经如下:
自我介绍 + 项目。
- Python的装饰器作用;import导包的查找过程;GCN能用于很深的网络吗?pooling操作能用于很深的网络吗?能用于有向图吗?
- RL:DQN的改进、DDPG的原理、贝尔曼期望方程和贝尔曼最优方程什么时候用。
- 算法题:给出一些二维坐标系上的点,从中找出一个矩性,面积最大且这些点都不在矩形内部。
偏爱C++之BIGO篇
BIGO应该比较缺C++,笔试题考挺多C++的知识点,然后面试考算法题时,问我常用什么语言,我说常用python,C++会基本语法,然后面试官说那就拿C++写吧,哈哈。BIGO目前面了3轮技术面,还在等HR面。其中算法题和项目花的时间比较长,所以其它的问的较少一些。
汇总面经如下:
自我介绍 + 项目。
- ML&DL:DNN的BN训练时和测试时是怎么做的?公式是什么?为什么还有做放缩和平移?你觉得使用GBDT之后,还需要做人工特征交叉吗?为什么?如果把id也当成特征,会出现什么情况?sigmoid的公式;感兴趣的方向、了解的一些推荐算法有哪些?
- 算法题:找大小为N的数组中topk小的数,先用二分法,二分法写完了分析时间复杂度和空间复杂度;如果这N个数放不进内存中怎么办?那大顶堆的时间复杂度是多少?还有什么改进方法吗?map-reduce怎么做?
- 算法题:字符串模式匹配题(暴力解),KMP怎么做呢?时间复杂度是多少。
- 算法题:1000桶水,其中一桶有毒,问用几只小白鼠能找出这桶有毒的水,可测多轮。(从2进制编码优化到5进制编码)
面试车祸现场之文远知行篇
可能大家没怎么听说过这个公司,这个公司做自动驾驶的,在广州已经开始试运营了,我看了他们的试驾视频,感觉很智能,技术很先进。一共5轮技术面,我目前走完了二面,每轮面试时长一个小时,别看面试时间长,一大半时间在聊天哈哈,一面和二面的面试官都非常的nice,就很随意,但不是敷衍,态度很友好,我被问到暂时答不上来时,就哈哈地说,没关系,那我们问下一个问题吧。考算法题也是慢慢来,先让你定义结构,先写个最简单的,再改进一下;考场景题说,我们就探讨一下,答不上来也没关系,他们在公司都是大家一起愉快地讨论的。特别是面试官一口的广式普通话,就很亲切,所以我对这家公司好感满满。
之所以说是面试事故主要是二面那会儿,晚上在宿舍面的,面试途中几个室友回来了,开门见我在面试,为了不入镜,就从我身后半爬着过去,我瞬间被这几个逗比室友逗的不行,笑场不止,一度笑出声并且不能顺利地答题,跟面试官边说了好几个不好意思,但还是一度停顿,就控制不住笑;逗比室友见我好一会儿没结束,又爬出去操场散步去了,我全程面试就一直强忍着笑,但是功力不够,就一直咧着嘴笑着把这场面试面完了。面试官还是一如地问我问题,也没说啥,但是他一定可疑惑了。到最后我也忘记解释了,我也不知道该怎么解释,真是形象尽毁,算是面试事故了。
因为大部门都算是聊天,所以面经也没啥整理的,要是把聊天过程记录那可太长了,就把考的算法题写下吧。
汇总如下:
自我介绍 + 项目。
- 算法题:寻找二叉树的最长路径,再写个多叉树。
- 算法题:二维矩阵,从左到右递增,从上到下递减,找到指定的数。
- 算法题:从左上角走到右下角的最短路径。
- 场景题:a(1,2,4)、b(2,4,5)、c(2,4,5,6),其中a、b、c是文件夹,1,2,4之类是文件夹下的文件,如果两个文件夹存在重复文件,则删除其中一个文件夹,保留文件数最多的那个文件夹。
执念之华为篇
之所以说华为是我的执念,不如说是我们学校每个人的执念吧,我们从上大学起就听说华为怎么怎么样啊,身边很多师兄师姐去了华为,即使最后没去,那也是投过华为,面过华为的,所以觉得如果毕业前没面过华为,是不圆满的,哈哈,所以秋招面完华为之后,就觉得可以圆满结束秋招了,收到华为通知过了HR面的短信,比拿到其它公司的意向书还开心。
华为的面试难度因人而异,我室友就说感觉她问的好简单,然后一看我,问的多还难,其实我也这么觉得有点难,幸好我面试前又复习了一遍,不然真的要凉凉哈。
汇总面经如下:
自我介绍 + 项目。
- 解释笔试题的思路。
- ML&DL:k-means的原理、过程、k值选择;类别不平衡怎么处理、常见激活函数的优缺点、贝叶斯公式、LR原理;GBDT的原理;GBDT和XGB的区别;bagging和boosting的区别;SAC算法原理;GCN和CNN的关键区别;共享权重的好处;在纸上推导2层感知机(前向传播和梯度计算);对条件概率的理解;熵、相对熵、KL散度公式;归一化的作用;C++的垃圾回收机制;马尔科夫性质。矩阵的秩;奇异值分解的理解和公式。
- 其它:学过哪些课程?数学方面的有哪些?机器学习方面的有哪些?常用的编程语言;常用的深度学习框架;项目中遇到问题怎么解决?研究生成绩如何?
- HR面:聊了下项目,性格偏乐观还是悲观?最近有没有遇到不开心的事情?怎么解决的?对华为的看法?有没有其他的offer?如果华为过了会选择去哪里?其它公司给的薪资是多少?
总结篇
今年秋招算法岗确实灰飞烟灭,诸神黄昏,有些公司投晚了HC基本没有了,很多公司算法笔试的难度也很大,笔试不好基本没面试机会,我很庆幸我在提前批投了一些公司,不用笔试,拿到提前批的offer给了自己底气,不然按照我后面笔试一家挂一家的惨状我真的要自闭。即使笔试过了面试难度也不低,所以想拿个算法的offer并不容易。
算法其实考的东西还蛮多的,所以我在复习的时候就把基础的常考的知识点都分类整理出来,然后一个一个去看原理看公式看推导,看完了去网上搜关于这个知识点的面经,然后整理出来答案,确保自己理解了这个知识点。这个前期可能比较费工夫,进度会比较慢。但是当你把这个知识体系搭起来并一点一点完善,做到融会贯通之后,后期会发现真的省心,特别是你经过几轮面试之后,这些知识点就牢牢记在你脑子里了,以后面试前也不用慌,不用再复习一遍。我大概到8月初就完成了这个工作,后续基本就没怎么再复习。
关于刷题,我感觉我前期在leetcode上也刷了不少题,但是后面还是会忘记,经常看到同一道题就想不起来怎么做,我也没好好整理我刷过的题,后来看到我室友把她做过的题目都分类整理成文档,并写了自己的理解和代码,等到后续复习的时候看一眼就知道思路了。我就觉得她这种做法挺好的,她还自夸说感觉自己代码写得可优雅,简直就是艺术,后续要把这份文档卖了挣钱哈哈(大家如果想要可以联系我,看下逗比室友的代码艺术)。
最后希望这篇总结能给同学们一点帮助,大家都能拿到想要的offer。