Bigo算法面经秘籍
《AI未来星球》陪伴成长的人工智能社群,价值过万的各种内部资源及活动,限时特惠中,点击查看。
求职跳槽福利:为了便于大家求职、跳槽的准备,大白将45家大厂的面经,按照知识框架,整理成700多页的《人工智能算法岗江湖武林秘籍》,限时开放下载,点击查看下载。
面经整理历程:经过一年多的努力,大白整理了超过3500篇,各类大厂的算法面经资料。
并将涉及到的知识点,按照知识框架,分类汇总,每个公司整理成一篇,比如本文的Bigo面经。
大家对照面经,可以了解心仪的公司,会根据你的简历,问哪些知识点?便于大家对掌握的知识,进行回顾梳理。
希望为大家在求职或者跳槽的道路上,提供一些帮助,为大家取得心仪的offer助力。
面经整理心得:大白也将整理所有面经的心得,写成了一篇文章,点击查看心得。
其他大厂面经:国内其他大厂的面经汇总,点击查看目录。
Bigo面经整理:江大白
1 Bigo面经汇总资料
1.1 面经汇总参考资料
① 参考资料:
(1)牛客网:Bigo面经-26篇,网页链接
(2)知乎面经:点击进入查看
(3)面试圈:点击进入查看
② 面经框架及参考答案:
(1)面经知识框架:点击进入查看
(2)面经参考答案:点击进入查看
1.2 面经涉及招聘岗位
(1)全职岗位类
【计算机视觉算法工程师】、【Bigo推荐算法工程师】、【图像增强算法工程师】、【NLP算法工程师】、【强化学习算法工程师】、【图形图像算法工程师】
1.3 面试流程时间安排
PS:以上流程为大白总结归纳所得,以供参考。
其他注意点:
● 有的是外地的,会用zoom进行远程面试,有的也可能三面都是电话面
1.4 Bigo面试心得汇总
★ 感觉bigo的编程题跟之前面试的不太一样,比较开放性
★ 感觉基础还是问得比较多的,不过主要是基础,延伸不会很多
★ 问得还是比较全面的,python、C++、算法、项目,都会涉及
★ 个人感觉BIGO的面试体验还挺独特的,全程没有怎么问DL,XGBOOST,GBDT,LR这样的问题,倒是统计与优化这些问的特别深,我感觉非常有意思。
★ BIGO笔试简单,但面试难度的话,就我所知的算法岗,个人认为不亚于任一大厂,用一个面C++的朋友的话说,BIGO面试问的非常硬核,很学院派,跪得很服气。而且周围拿到offer的不乏清北大佬、手握n篇(n>=2)顶会paper。
★ 签约以后,HR给每个人分配了一个导师,一般是以后的leader。和我对接的是前辈是中科院的博士,在雅虎AILAB和凤巢工作过n年,对于导师的资历还是很满意的。
★ 有的人,在第一面之前,可能会有笔试,不过不太难。
(1)编程题好像是3-4题,纯算法题均不超过剑指offer的难度,机器学习涉及到AUC的并行计算方式等等
(2)概率题1-2题,例如算贝叶斯,红球白球等
(3)机器学习基础2,例如避免过拟合的方法等烂大街的
2 Bigo面经涉及基础知识点
2.1 图像处理基础
● SIFT的原理讲一下?
● 了解的图像纹理描述方法?(讲了LBP等)
2.2 深度学习:CNN卷积神经网络方面
2.2.1 讲解相关原理
2.2.1.1 卷积方面
● 卷积底层的实现方式,在caffe里这个方法叫什么名字?(im2col)
● 空洞卷积了解吗?
● dcn可变形卷积讲一下?
● 亚像素卷积,一般上采样会有哪些问题?
● 上采样方法都有哪些?
● dropout在训练和测试时不同,怎么保证测试结果稳定?
● dropout的原理说一下?
● 感受野的计算/增大感受野
2.2.1.2 网络结构方面
● Vgg和Resnet讲一下? ResNet的优缺点说一下
● 网络结构的演进,从AlexNet到DenseNet?
● 各种分类网络简述,mobilenet具体实现?
● 感觉他们用的还是手机端的多一点,问了resnet和resnext的发展历程和优缺点?(还得多准备一些),我只是简单的谈了谈,并没有深入讲,还问了mobilenet。
2.2.1.3 其他方面
● 批正则化BN的原理和作用,在训练和测试时有什么不同?
● BN针对的是哪个维度?计算的维度?
● 梯度消失和梯度爆炸的原因?处理梯度消失的方法?
● 多任务学习中每部分损失函数的权重确定?
● Batch normalization的原理?在训练和预测中的差异?
2.2.2 数学计算
● 卷积的计算量,depth-wise的计算量?
2.2.3 公式推导
● 卷积后特征图大小的计算公式?
● 手写了三层神经网络的反向传播?
● 如果给定卷积核的尺寸K,输入尺寸WH,padding为P,步长为S,空洞卷积参数d=1,给出卷积之后的尺寸计算公式?(面试官将空洞卷积参数设为1,其实就是常规卷积,降低了难度,重点是怎么计算空洞卷积实际覆盖的尺寸)
2.2.4 手写算法代码
● numpy写卷积操作
2.3 深度学习:RNN递归神经网络方面
无
2.4 深度学习:CNN&RNN通用的问题
2.4.1 基础知识点
● 数据不平衡怎么办?
● 训练的时候为什么要分成训练集、验证集?
2.4.2 模型评价
● 介绍AUC,AUC的范围,手写AUC代码?
● 评价标准,精确率,召回率讲一下?
● MAP计算方式?AUC怎么计算?
● ROC曲线,他的横坐标和纵坐标?如果正负样本不均匀ROC曲线会变吗?
● 探讨了现在使用的图像评价指标的不合理性?
2.5 传统机器学习方面
2.5.1 讲解相关原理
2.5.1.1 数据准备
无
2.5.1.2 特征工程
① 特征降维
● PCA了解吗?
● PCA原理和执行步骤?
● PCA作用,奇异值分解?
② 特征选择
无
2.5.1.3 有监督学习-分类和回归方面
① 分类回归树(集成学习)
● XGBoost思想,具体怎么做的,怎么选取特征的?
● Xgboost在多分类与二分类过程中有什么不同?Xgboost的原理?
● Boosting是在对上一次训练结果的残差进行拟合,为什么这么说呢?
● Adaboost/GBDT分别拟合了什么残差?
② 逻辑回归LR
● 逻辑回归怎么推导出来的?
● FM模型的原理?相较于LR的优势在哪里呢?
③ SVM
● SVM的具体实现机制,整个流程?
● SVM的目标,用到的数学方法?(其中具体问了KKT条件是什么和为什么),有哪些trick?(其实是问的核函数),还问了松弛因子和惩罚因子。
● 推导SVM对偶问题,讲解SMO算法?
● SVM拉格朗日乘子的原理?SVM的软间隔?
● KKT条件内容和原理?
④ 朴素贝叶斯(Naive Bayes)
● 说一下贝叶斯优化? (各种抠细节,从高斯过程回归,说到贝叶斯优化,到一些优缺点和改进形式,每一步都很细)
2.5.1.4 无监督学习-聚类方面
● Kmeans解释下?
2.5.2 手推算法及代码
● SVM的数学公式以及推导过程?
2.6 深度学习&机器学习面经通用知识点
2.6.1 损失函数方面
● 写一下RPN的损失函数?(多任务损失:二分类损失+SmoothL1损失)
● 推导交叉熵求导?
● 交叉熵和KL散度的联系?
2.6.2 激活函数方面
● Sigmoid和Relu区别,为什么现在都用Relu而不用Sigmoid?
● Relu和Sigmoid的优缺点说一下?
2.6.3 网络优化梯度下降方面
● 牛顿法的收敛速度,是不是一定比梯度下降快?(举反例)
● 牛顿下降的几个phase,KKT的仔细描述?
● 梯度下降步长选择问题?(回溯法,两阶段优化法,梯度积累法)
● 除了梯度下降,线性回归还能怎么求解?
2.6.4 正则化方面
● 常用的正则化方法有哪些?
● L1和L2正则化的区别?
● L1和L2正则化各有什么特点?为什么会有这样的特点?
2.6.5 过拟合&欠拟合方面
● 缓解过拟合的方法?
● 树模型会不会过拟合,树模型防止过拟合的方法?
3 Bigo面经涉及项目知识点
3.1 深度学习:CNN卷积神经网络方面
3.1.1 目标检测方面
● 介绍Faster R-CNN原理?
● RCNN->Fast RCNN->Faster RCNN的内容?
● Faster RCNN, SSD, yolo之间的区别?
● 写一下RPN的损失函数?(多任务损失:二分类损失+SmoothL1损失)
● RPN损失中的回归损失部分输入变量是怎么计算的?
● RoI Pooling是怎么做的?有什么缺陷?
● 目标检测有一个类别AP很低怎么办?
3.1.2 图像分割
● FCN有了解过吗?
● 在人像分割中,针对头发这种区域的分割,往往处理不是很好,怎么改进?
● 如何在分割中利用周围像素点进行建模,提高分割结果?
3.1.3 超分辨
● 超分辨率问题设计深度网络上的注意事项和主要关注点,超分辨率问题和别的问题有什么区别?
● 从结构原理上对比超分最先进的网络特点以及优缺点?
● 为什么超分没有用L2 loss?
● 超分辨率部分,自己做了哪些创新?
● SubPixel的原理是什么?它的尺寸变换公式是什么?比如给定输入shape:NCHW,subPixel之后的shape是多少?(假设上采样因子为4,即扩大4倍)
(这个地方跟面试官的观点有些冲突,我的答案是N(4C)(2H)(2W),面试官认为应该是N(C/4)(2H)(2W)。最后他强调了一点,就是上采样不会增加参数计算量)
3.1.4 图形图像方面
● 渲染管线相关:
简单介绍渲染管线,从顶点着色器到片元着色器
● 顶点着色器和片元着色器分别用于做什么?在顶点着色器里主要进行什么操作?
● 光照的计算可以在顶点着色器进行吗?可以在片元着色器进行吗?两者有什么区别?
● 在顶点着色器中一般会对法线做什么修改?
● 顶点着色器主要进行哪些坐标转换?从世界坐标系中转换到模型坐标系中的变换矩阵是怎么得来的?
● 对于一个世界坐标系下有一个子空间(子空间三个坐标轴可能不会相互正交),子空间中有一个向量,如何将该向量变换到世界坐标系中?
● 片元着色器之后还会进行什么操作?
3.2 深度学习:RNN递归神经网络方面
3.2.1 自然语言处理NLP
● Transformer的原理?Transformer在训练过程中有哪些可以 调整的超参?Multi-head attention的原理?
3.3 强化学习
● 针对我的强化学习推荐系统项目,问了强化学习如何做重排序问题?
● 场景题,用强化学习做推荐我会怎么做,从召回到精排整个流程设计,算法使用DDPG?
● 强化学习推断的时候时间复杂度太大怎么解决?
3.4 机器学习方面
3.4.1 推荐系统
● 问了下wide&deep中有没有遇到预训练的embedding,接到deep网络中由于前者参数的scale较大带来的问题?怎么解决?面试官说可以用两个网络,一个固定deep网络参数,一个固定embedding
● 你对推荐系统的了解?
答曰:了解了推荐系统的主流框架,召回方法,排序模型,并简单介绍了基于embedding相似度的召回和FM模型。
4 数据结构与算法分析相关知识点
4.1 数据结构与算法分析
4.1.1 线性表
4.1.1.1 数组
● 从两个排序好的数组中找出中位数?(合并数组,分奇偶求中位数,也很简单)
● 数组中只有一个出现一次的数,其余的数出现两次,怎么找到这个数?衍生: 优化空间复杂度、时间复杂度,如果出现一次的数有两个怎么解决?
● 给一个数组,随机shuffle数组使得每个值在每个索引处出现的概率相等,也是给两个API(int random(),返回0-65535的任意值或者int random(a,b),返回[a,b)区间内的任意值),最后还要证明自己的方法保证概率相等?
● 二维数组从左往右递增,从上往下递增 、写了O(M+N),面试官问有没有有O(log(n))的,二分的没答出来?
4.1.1.2 链表
● 链表循环右移k位?
4.1.2 树
● 二叉树输出最右节点?
● 每个二叉树节点都有一个高度,一个人站在右边向左看,输出这个人能看到的节点?
● 二叉树从根节点出发的最大路径
● 二叉树从任意节点出发最大路径
4.1.3 排序
● 千万级的数,选出最小的100个数!
● 寻找N个数中,第K大的数
4.2 算法思想实战及智力题
4.2.1 算法思想实战
● 螺旋矩阵的题目
4.2.2 智力题
● 一个硬币有一面比较厚,总是倾向于翻到这一面,利用这个硬币如何实现公平?
4.3 其他方面
4.3.1 数论
● Hessian矩阵的求逆与计算量问题?(正则化,Hessian矩阵的近似)
● 说一下运筹学和凸优化?(问的很细,说了梯度下降,牛顿法,KKT,单纯形,混合整数规划)
4.3.2 计算几何
● 给四个点的坐标,判断四个点是不是能够构成菱形?
● 一个单位球,均匀产生球表面的坐标?提示:用极坐标。
4.3.3 概率分析
● 算一个贝叶斯概率的问题,就是教科书上非常喜欢问的一个人诊断某种疾病阳性,问真实的得病概率?
● 一个圆,圆上有三个点,构成锐角三角形的概率?答案:1/4
● n个红球,m个白球,A,B两个人轮流不放回取球,谁先取到红球谁获胜,求A获胜的概率?
● A,B两人轮流和电脑下象棋,A赢的概率0.8,B赢的概率0.7,赢了的人继续下,输了换人,求最终A和B共同对电脑获胜的概率?
● 丢十个硬币,七个正面,用贝叶斯概率求正面朝上的概率?
4.3.4 矩阵运算
● 给一个矩阵(n*m),求出矩阵中每两行的cos相似度,放在一个n*n的矩阵里,可以用两个API(matmul(a,b)和reduce_sum(a,1))?
● 矩阵顺时针打印?
4.3.5 其他
● A-B+C……一个表达式,假设所有变量都是int32,求问交换运算符号会不会影响求值结果?int32换成float,会不会影响求值结果?取具体的例子说明。
● 最大连续字序列的和与积,求和的说了一下思路,求积是手撕的?
● 从一个低字节的int型变量中分别提取每个字节的数据?
● 求属于最大子段积,是积不是和?
● 最大连续子列,要求能够保存多个相同的最优情况的起始点?
4.4 Leetcode&剑指offer原题
● Leetcode 53:连续子序列的最大和
● Leetcode 358:重排一个数组,让相同数字的间隔>=d,返回重新排列后的结果?
5 编程高频问题:Python&C/C++方面
5.1 python方面
5.1.1 网络框架方面
● pytorch中train和eval下有什么不同?
● 熟悉和常用哪些框架?
5.1.2 基础知识
5.1.2.1 内存相关
● python实现深拷贝?
● Python的浅拷贝和深拷贝(字符串的拷贝)
5.1.2.2 区别比较
● python2和python3的区别?(print, raw_input, xrange, 整除除法)
● mutable和immutable(后来有详细地问 a="abc", a+="d" / a=[1], a.append(2) 时的内存变化引导我)
5.1.2.3 讲解原理
● python继承封装多态,线程和进程,多线程?
● 类的继承和基类
● 装饰器,@property
● python3中基类怎么运作的?
● “==”的具体实现机制
● python中的数据类型?
● python什么数据是可比较的,什么是不可比较的?
5.2 C/C++方面
5.2.1 基础知识
5.2.1.1 线程相关
● 线程间通信
● 进程和线程讲一下?
5.2.1.2 区别比较
● 左值引用和右值引用
● 指针传递和引用传递
5.2.1.3 讲解原理
● C++中虚析构函数的作用、static的作用和特点?
● C++中什么是左值什么是右值?
● 有哪些线程锁?(生产消费者模型)
5.2.1.4 讲解应用
● 一个类A派生出类B,其中类A的析构函数不为虚,然后new一个子类对象并强制转换成父类,再delete这个对象会产生什么问题?
● 一个类A派生出类B,A中有一个虚方法,在A的构造函数中有调用该方法,此时new一个子类对象并强制转换成父类,会分别调用哪些函数?
6 操作系统高频问题:数据库&线程&常用命令等
6.1 数据库方面
无
6.2 操作系统方面
● 浅、深拷贝区别?
7 技术&产品&开放性问题
7.1 技术方面
● 写代码的时候,为什么要声明训练语句和测试语句?
● 结合precison,求解自动驾驶中图像推导的多少秒发生一次错误?
7.2 开放性问题
● 你对自动驾驶的看法,对REID的看法等一系列开放性问题?
本文由 大白智能 作者:凯哲 发表,其版权均为 大白智能 所有,文章内容系作者个人观点,不代表 大白智能 对观点赞同或支持。如需转载,请注明文章来源。