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的看法等一系列开放性问题?

本文由 大白智能 作者:凯哲 发表,其版权均为 大白智能 所有,文章内容系作者个人观点,不代表 大白智能 对观点赞同或支持。如需转载,请注明文章来源。

发表评论

This site is protected by wp-copyrightpro.com