2020暑期实习BAT算法岗面经
  本人基本情况:211本硕,本科电子信息工程,硕士通信与信息系统,典型的非科班,无论文,两段实习经历(均为算法岗,非大厂,一段CV,一段NLP)。 
   offer情况: 
   百度——推荐策略部——算法工程师(已offer) 
   阿里——阿里云智能事业群——阿里云——基础产品事业部——神龙计算平台——算法工程师-机器学习(已获意向书)
 
   腾讯——互动娱乐事业群IEG——腾讯游戏数据中心——算法工程师-机器学习(已offer)
 
   阿里: 
   技术面共四轮(其中一轮交叉面),HR面试一轮。
 
   一面:未预约,直接打来电话面试。(1h 40min,代码给了非常久的时间,笔者C++代码写了上百行) 
   1. 介绍自己参与的CV项目(笔者曾参与过一个做行人属性识别的图像分类的项目,对某些经典CNN模型以及图卷积网络有所了解)
 
   在介绍项目时穿插提问了很多经典问题:过拟合(笔者回答了Early stop, Dropout, 正则化等技术的原理以及个人理解),梯度消失(笔者从初始化和Normalization两个角度回答),学习率调整策略等
 
   2.为什么GCN难以训练
 
   笔者从Over smoothing,梯度消失等方面回答
 
   3.C++中的内存泄漏是怎么发生的?
 
   4.如何避免C++中发生内存泄漏?
 
   5.服务器上运行的服务已经发生了内存泄漏时如何处理让服务器恢复到正常状态?(这个真不会。。。) 
   6.编程题:C++语言,在阿里伯乐在线测评系统上写代码 
   // 评测题目: 最少新建道路条数
// 已知有N个城市,城市编号1...N
// 已知M条路,每条路表示为(x_i, y_i), xy分别为城市编号
// 现在需要新建道路,确保任意两个城市之间,是可以通过一条或者多条道路联通
// 求解能够达到此目的的最小道路条数
 // 已知有N个城市,城市编号1...N
// 已知M条路,每条路表示为(x_i, y_i), xy分别为城市编号
// 现在需要新建道路,确保任意两个城市之间,是可以通过一条或者多条道路联通
// 求解能够达到此目的的最小道路条数
  // 思路:BFS或者DFS应该都可以找到城市簇即可。
 
 
   二面:预约,视频面试(2h)
 
   1.介绍自己参与的CV项目和NLP项目
 
   介绍NLP项目的时候提问了了BERT等预训练模型的相关知识,以及Attention技术的相关知识。
 
   2.谈一谈模型压缩的相关知识 
   三大角度:蒸馏,剪枝,量化。笔者分别介绍了三大角度的基本原理。
 
   还有一些零碎的知识:低秩分解,ALBERT中的参数共享,深度可分离卷积,Inception V3中的大卷积核替代方案等。
 
   3.剪枝与正则化的联系
 
   笔者从结构化剪枝与非结构化剪枝分别对应Lasso和Group Lasso的角度来回答,这也导致面试官引入了下一个问题。 
   4.结构化剪枝和非结构化剪枝
 
   5.CV中的目标检测基本算法
 
   笔者谈了YOLO,SSD,Fast R-CNN,由于笔者并未参与过与目标检测相关的项目,所以只了解一些经典算法。
 
   6.特征金字塔FPN的作用
 
   7.C++语言中的继承体系。
 
   8.C++语言中的多态。
 
   9.数据不平衡问题 
   笔者不光从欠采样过采样等经典解决办法的角度回答。另外回答了一些其他方法:GAN(ICCV 2019 best paper:SinGAN),特征空间增广,改进训练方式(源数据训练特征提取backbone,欠采样或过采样训练分类器),Loss加权,使用AdaGrad优化器等。。。 
   10.优化器
 
   SGD,SGD with momentum,NSGD,AdaGrad,AdaDetla,RMSProp,ADAM,NADAM,RADAM+LookAhead等。
 
   三面(交叉面):预约,电话面试(17min)
 
   据笔者了解,阿里交叉面主要是为了防止作弊,挂人的可能性较小,但是不排除。 
   1.介绍预训练语言模型
 
   ELMo,BERT,Transforler-XL,XLNET,ERNIE,RoBERTa,ALBERT,ELECTRA。。。笔者从BERT的mask LM以及NSP任务出发讲解了BERT后续各大预训练的改进。
 
   各大预训练语言模型可能不能从头到尾讲起,笔者线是介绍了BERT,然后从BERT的预训练任务出发,比如介绍了ERNIE中对mask LM的改进,ALBERT中将NSP任务替换为SOP任务等。。。 
   2.Attention原理
 
   主要讲的是Transformer中Multi-Head Scaled Dot-Product Attention。注意,这里有一个Mask Attention机制,它对于Transformer Decoder和XLNet的实现原理非常重要,同学们如果了解相关知识点,一定要对这个Mask Attention知识点进行深入的理解。 
   3.Multi-Head Attention中如何优化Muti-Head的计算?
 
   笔者并无相关底层优化经验,所以回答:借助CNN底层计算原理,将多头变换展开为二维矩阵(填充大量0),将多头变换转为矩阵乘法运算。
 
   四面:未预约,电话面试(1h)
 
   1.介绍CV,NLP相关项目,调参经验 
   重点介绍了学习率调整策略(固定step衰减,余弦衰减,余弦循环学习率等) 
   寻找最优学习率的方法(学习率从小到大观察Loss)
 
   Warmup与优化器的搭配使用(笔者主要是谈Adam与Warmup的搭配使用,解释了Warmup的一些直觉上的理解,这个建议大家去看看知乎)
 
   固定参数训练的相关经验(笔者回答了如何使用Pytorch和Tensorflow如何固定参数训练,主要讲代码怎么写的。。。)
 
   模型陷入局部极小(或者鞍点)的处理办法(优化器选择,短时间增大学习率等方法)
 
   2.MobileNet的原理
 
   深度可分离卷积,从参数数量以及计算量角度与传统卷积对比分析
 
   宽度因子,分辨率因子
 
   MobileNet与Xception以及ShuffleNet的对比 
   3.是否测试过MobileNet在不同计算设备上的运行速度? 
   这个真没有。。。
 
   4.数据结构:最大堆最小堆的概念,归并排序时间复杂度,稳定排序和非稳定排序,二叉搜索树的递归定义
 
   HR面试:预约,视频 (16 min)
 
   1.自我介绍
 
   2.学习成绩,GPA
 
   3.论文,专利
 
   4.职业规划
 
   5.为什么选择这个岗位
 
   总结:阿里的考察非常全面,一二面考察偏重基础,四面考察偏重业务,交叉面比较简短。笔者为通信专业,非科班,这里要提醒非科班的同学一定要重视基础,尤其是数据结构,不能光刷题,要系统的仔细的学习这门课程!!! 
   腾讯: 
   笔者是提前批录取,无笔试,非内推。
 
   笔者经历2轮技术面,一轮HR面。
 
   一面:电话面试(1h)
 
   1.自我介绍
 
   2.简述GCN的原理
 
   笔者从直觉角度(特征聚合,特征变换)回答,这个角度与空域图卷积非常类似(实际上GCN有着充分的理论基础保证,所以还应该从谱图卷积的角度回答,详见问题5) 
   3.介绍你所了解的GCN的变体
 
   这里笔者结合近两年看过的GCN相关的论文,讲了一些关于GCN的改进 
   4.GCN有什么问题
 
   笔者仍然从Over smoothing,梯度消失等方面回答
 
   5.如何从标准的谱图卷积过渡到现在的典型GCN。
 
   谱图卷积——切比雪夫多项式近似频域卷积核——取一阶近似并对切比雪夫系数进行化简
 
   6.GraphSAGE的基本原理。
 
   7.GraphSAGE中的聚合方式。
 
   8.GraphSAGE与GCN的的区别。
 
   这个问题是非常重要的,要从Transductive和Inductive的角度去解释GraphSAGE和GCN的本质区别。 
   9.Spark中Map-Reduce的原理。
 
   二面:电话(1h)
 
   1.自我介绍  
   2.GCN,GraphSAGE,GAT等模型的联系和区别 
   3.GAT和Attention的联系和区别 
   笔者认为实际上GAT是早期的Attention技术中的Local Attention的一种特殊形式。 
   4.介绍一下你所了解的在大规模图上构建GCN的方法 
   5.GCN,GAT,GraphSAGE哪一个更适合于大规模图?为什么? 
   6.传统图嵌入算法:Deepwalk,Node2vec的原理以及区别? 
   这两种算法都是源于Word2vec,Node2vec在Deepwalk的基础上添加了两个超参数用于控制随机游走的倾向(DFS和BFS) 
   7.在大规模图上使用Deepwalk,Node2vec会出现什么问题?
 
   笔者并无相关经验,不过笔者了解NLP中关于Word2Vec中采样的长尾分布问题,所以将这个问题类比到Deepwalk和Node2vec中。 
    8.Map-Reduce原理  
   9.Q-Learning和DQN的区别? 
   这个是强化学习的问题,笔者只了解过一些经典强化学习算法,并未真正参与过相关项目。 
   DQN使用一个NN代替Q-Learning中的Q表,Q-Learning无法处理某些状态空间S非常大的场景(Q表太大,无法存储和更新),所以使用神经网络代替Q表输出Q(s, a)。 
   HR面: 
   1.自我介绍 
   2.以往的实习经历中你认为自己学习到了哪些经验? 
   3.你觉得你自己对于这个岗位来说最大的优势是什么?
 
   总结:笔者面试的腾讯游戏数据中心的复杂网络处理组,主要工作就是处理大规模社交网络图。腾讯的考察风格与阿里不同,腾讯考察内容几乎全部都是与Graph处理相关的,非常贴合实际业务,需要同学们对某一个方面有着非常细致深入的了解。 
   百度:由于百度是3月份面试的,印象并不深刻,当是也并未做面经,这里笔者尽力回忆。 
   百度共三面,一二面为技术面,三面为部门主管面。 
   一面:电话(1h) 
   1.介绍自己参与过的推荐系统项目(笔者的大神级别的师姐从事推荐系统相关研究,笔者曾给大神师姐打杂) 
   2.介绍了一些经典的推荐系统算法。 
   协同过滤(基于用户,基于内容),矩阵分解及其后续改进(PMF等,建议大家去搜索博客园刘建平老师整理的博客,言简意赅) 
   3.介绍了一些基于深度学习的推荐算法 
   BPR(贝叶斯个性化排序)系列,CDL(基于MF架构引入自编码器提取item特征),CML(度量学习范畴),NCF,RRN(基于RNN建模用户历史偏好),基于强化学习的推荐算法等。 
   4.C++多态 
   编程题:有环链表(剑指Offer面试题23) 
   二面:电话(1h) 
   1.重点聊了推荐系统项目。 
   笔者曾经参与过基于异质信息网络的推荐系统算法研究,对于该研究,面试官提出很多细节问题: 
   1.异质信息网络中的异质信息是什么,如何构建异质信息网络
 
   利用user,item,tag等信息构建异质信息网络,异质信息包含user,item,tag等  
   2.如何从异质信息网络中提取user,item的Embedding
 
   Deepwalk,Node2vec等Graph Embedding方法
 
   3.Deepwalk,Node2vec的区别  
   4.Node2vec中分别以BFS和DFS的方式游走会对最终的推荐结果产生什么影响? 
   该问题在Node2vec的论文中有阐述 
   5.metapath(元路径)有了解吗? 
   6.使用metapath(元路径)的好处  
    笔者是从物理意义角度回答的
   
   2.BPR(贝叶斯个性化排序)的理解 
   笔者认为BPR能够利用大量的隐式反馈,这是最重要的。传统MF等方法只利用显示反馈,导致大量的Embedding更新不足。 
   编程题:删除链表节点 
   主管面:电话(1h) 
   不是技术面,就是谈谈职业规划,想来做什么样的工作的。。。 
   百度这边,由于是推荐策略部,考察推荐算法相关的内容多一些。 
   --------------------------5.12日更新----------------------------
 
   对阿里腾讯中的部分面试题做了细化 
   更新了百度面经 
#阿里巴巴实习##阿里巴巴##腾讯##百度##算法工程师##实习##面经#