小米算法面经秘籍

《AI未来星球》陪伴成长的人工智能社群,价值过万的各种内部资源及活动,限时特惠中,点击查看。

求职跳槽福利:为了便于大家求职、跳槽的准备,大白将45家大厂的面经,按照知识框架,整理成700多页的《人工智能算法岗江湖武林秘籍》,限时开放下载,点击查看下载。


面经整理历程:经过一年多的努力,大白整理了超过3500篇,各类大厂的算法面经资料。

并将涉及到的知识点,按照知识框架,分类汇总,每个公司整理成一篇,比如本文的小米面经

大家对照面经,可以了解心仪的公司,会根据你的简历,问哪些知识点?便于大家对掌握的知识,进行回顾梳理。

希望为大家在求职或者跳槽的道路上,提供一些帮助,为大家取得心仪的offer助力。

面经整理心得:大白也将整理所有面经的心得,写成了一篇文章,点击查看心得

其他大厂面经:国内其他大厂的面经汇总,点击查看目录

小米面经整理:江大白

1 小米面经汇总资料

1.1 面经汇总参考资料

① 参考资料:

(1)牛客网:小米面经-53篇,网页链接

(2)知乎面经:点击进入查看

(3)面试圈:点击进入查看

面经框架及参考答案:

(1)面经知识框架:点击进入查看

(2)面经参考答案:点击进入查看

1.2 面经涉及招聘岗位

(1)实习岗位类

【数据挖掘实习生】

(2)全职岗位类

【NLP算法工程师】、【计算机视觉算法工程师】、【视觉图像算法工程师】、

【推荐算法工程师】、【未来星数据算法研究员】、【信号处理算法工程师】、【相机算法工程师】

1.3 面试流程时间安排

PS以上流程为大白总结归纳所得,以供参考。

其他注意点:

● 博士只有两轮,硕士可能会有三轮技术面

1.4 小米面试心得汇总

★ 项目扣的很细,问的很深入,基本上能聊很久。

★ 面试官都非常不错,属于那种面试风格非常温和然后态度非常友好,遇到不会的时候会提示你而且会延申一下你的认知,总之面试体验非常好。

★ 整个面试下来,感觉问的基础题偏多,机器学习的内容偏多,基本没怎么聊深度学习相关的事情。工程方面的问题也有涉及,感觉应该是推荐系统早期的建设阶段,更多的工作内容偏向于工程落地实现。

★ 面试官很专业,基本上都是抠细节问问题,需要对领域有一个比较全面的认知。

★ 重点还是问项目吧,项目问的巨细,基本上每个点都会深挖,有些根据项目拓展出来的知识点一定要搞清楚呀,还有自己的项目,一定要自己挖透测,原理,公式,为什么这个方法等等。

★ 小米面试时,先自我介绍,我的习惯是经历简单介绍一下,然后自然转向准备最充分的一个项目开始详细讲,面试官感兴趣的话最好,不感兴趣的话会直接打断的。主要介绍了项目的背景,难点和解决方案,面试官关心的点主要集中在问题抽象和损失函数,讲清楚为什么这么做,项目大概聊了半小时左右。

2 小米面经涉及基础知识点

2.1 图像处理基础

2.1.1 讲解相关原理

● 讲一下SIFT原理

● 介绍LBP

● 高斯卷积核如何优化,效率提升多少?

● 图像特征检测,边缘检测用过哪些?

2.1.2 手写算法代码

● 手写中值滤波

● 积分图均值滤波如何实现

2.2 深度学习:CNN卷积神经网络方面

2.2.1 讲解相关原理

2.2.1.1 卷积方面

● 除了常用的卷积之外,知道多少种卷积,介绍一下?

● 空洞卷积的原理?

● MobileNetV2中1x1卷积作用?

● 分组卷积优点(减少参数量,从参数计算公式分析)

● dropout的原理?

● dropout 在测试时用的全部神经元,会不会有偏差,有偏差怎么办?

● 卷积神经网络和全连接神经网络都有啥区别?都有哪些层?

2.2.1.2 池化方面

● 最大池化和均值池化适用的场景?

2.2.1.3 网络结构方面

● 熟悉那种神经网络?卷积神经网络?那你说说对卷积神经网络的理解?

2.2.1.4 其他方面

● 梯度消失的解决办法?

● 测量网络大小的三种指标,参数量,flop计算量,乘加树?(有大佬知道什么是乘加树吗?被问的时候一脸懵逼。)

● BN的原理,BN的批处理处理的是什么?

● 白化和BN的区别?

2.2.2 数学计算

● conv和dwconv的参数量和FLOPs计算公式?

● MobileNetV2 module的参数量和FLOPs计算?

2.2.3 公式推导

● Softmax原理,推导?

2.2.4 激活函数类

● Softmax的损失函数?

2.3 深度学习:RNN递归神经网络方面

2.3.1 讲解相关原理

● LSTM的原理?

● LSTM和RNN区别?

● LSTM每个门的公式还会写吗?

2.4 深度学习:CNN&RNN通用的问题

2.4.1 基础知识点

● 超参数选择方法,参数类别多时,如何优化?

2.4.2 模型评价

● AUC,ROC含义?

● 召回率是什么?

● AUC公式

● PR和AUC的区别?

2.5 传统机器学习方面

2.5.1 讲解相关原理

2.5.1.1 数据准备

2.5.1.2 特征工程

① 特征降维

● 数据量大,聚类算法为什么要进行降维?(计算量,维数灾难)

● KSVD原理?

② 特征选择

● 特征选择的常用方法?

● 如何判断哪些特征是重要的,特征重要性如何计算?step-wise。

2.5.1.3 有监督学习-分类和回归方面

① 分类回归树(集成学习)

● bagging和boosting的区别?

● 随机森林和bagging算法有哪些区别?

● GBDT和RF,算法思路,优缺点?

● 集成模型一定比简单模型好吗?为什么?

● 随机森林和gbdt区别?rf和gbdt哪个容易过拟合?

● xgboost的默认深度?

● 为什么集成学习里用决策树模型比LR这些弱模型的区别?

A.基于bagging:随机森林

● 介绍下随机森林?

● 随机森林的原理?

● 面试官问了下随机森林代码调参应该调哪些参数,如何调参?

● 查看结果的指标都有哪些?这些指标的具体含义?

B.基于boosting:Adaboost、GDBT、XGBoost

● gbdt,xgboost模型的比较?gbdt如何分裂?

● LightGBM和xgboost区别? lightgbm 为什么 更快?

● LR和GBDT的区别?

● lightGBM,XGBoost,GBDT怎么分裂,怎么着最优找分裂点?(xgboost如何选择最优分割点)

● lightGBM怎么调参的,网格搜索有没有用过,过拟合先调节哪个参?

● lightgbm创建每棵树时速度是均匀的吗?(不会)

● lightgbm训练时和特征数目更相关还是样本数目更相关(不会)

● 连续特征值在lightgbm中如何找到分界点?

● lightgbm该如何调参:找最佳组合-怎么找的-暴力找的-网格搜索有没有用过?

● lightgbm如果过拟合了,首先调哪几个参数?

● gbdt的梯度为什么能代替残差?

● gbdt的损失函数是什么?

● gbdt如果有100棵树,每棵树的输出是什么(我觉得是拟合的上一步输出与目标值的残差,但是具体公式不清楚)

● 介绍xgb

(1)gbdt和xgb的区别(居然没有问lgb)

(2)怎么选最优分裂节点,怎么加速,预排序有什么作用,怎么分箱,等宽还是等深

(3)怎么处理缺失值的,预测时候缺失值怎么办

② 逻辑回归LR

● LR损失函数公式?

● LR与SVM的区别是什么?并深挖,如LR和SVM的推导可不可以用梯度下降?

● 推导 LR,写出loss和梯度

③ SVM

● SVM的原理说一下?

● SVM的损失函数是啥?

● SVM的目标函数,为什么能用拉格朗日乘子法讲原始最优化问题转化为极大极小问题,数学原理是什么(不会,面试官也说这个问题有点难了)

④ 朴素贝叶斯(Naive Bayes)

● 朴素贝叶斯为什么“朴素”?(属性相互独立)

⑤ 决策树(DT)

● 信息增益和信息增益比的区别?

● 描述决策树,如何选特征,怎么划分,怎么剪枝,介绍信息增益?

2.5.1.4 无监督学习-聚类方面

● KMeans怎么初始化?

● 讲了下DBSCAN和K-means的区别?

● 讲一下DBSCA?

2.5.2 手推算法及代码

2.5.2.1 手推公式

● 手推GBDT公式(要体现找分裂点的过程)

● 手推逻辑回归?

● 手推xgboost?

2.5.2.2 手写代码

● 手写kmeans?

2.6 深度学习&机器学习面经通用知识点

2.6.1 激活函数方面

● 深度学习常见的激活函数以及它们的特点?

2.6.2 网络优化梯度下降方面

● 深度学习常见优化方法有哪些?

● 介绍一下梯度下降的原理?

2.6.3 正则化方面

● L1和L2的区别?

● L1为什么能稀疏矩阵,L2为什么不能,L2为什么能解决过拟合?

2.6.4 过拟合&欠拟合方面

● 什么是过拟合?过拟合的解决办法,以及在你的项目中怎么用的?

● 深度学习中过拟合处理,BN和dropout。传统机器学习中呢?

2.6.5 其他方面

● 为什么要进行归一化?优点?(量纲,等高线)

3 小米面经涉及项目知识点

3.1 深度学习:CNN卷积神经网络方面

3.1.1 目标检测方面

3.1.1.1 讲解原理

● 目标检测中,对该任务贡献最多或者改进最大的模块或者网络设计思路?

● 讲一下anchor-based和anchor-free两者的优缺点?

● 近年来,一些新的目标检测的backbone有哪些,各有什么特点?

3.1.1.2 手写代码

● 手写nms

3.1.2 图像分割

● 目标追踪的常见方法有哪些,包括深度方法和传统方法?各自的应用场景和区别?

3.1.3 图像分类

● 问项目,知道哪些分类的网络;项目用的什么数据集?

3.2 深度学习:RNN递归神经网络方面

3.2.1 自然语言处理NLP

① CRF

● 了解CRF吗?

② Word2vec

● 介绍一下word2vec?

● node2vec原理?

● word2vec的两种模型了解吗?工程上的优化了解吗?

③ 其他

● 诸如ID类的特征如何处理,编码方式one-hot还是其他的,高维时?什么样才算高维,有没有界定?

● CBOW的网络结构写一下

3.3 强化学习

● SRGAN和ESRGAN的区别?

3.4 机器学习方面

3.4.1 推荐系统

● 介绍一下CTR预估里面的模型?

● 画一下DeepFM的示意图?然后解释一下这些的区别?

● 系统设计需要注意什么,如何设计一个系统,系统性能如何评估,需要考虑哪些指标(考察点应该是线上的系统了,指标比如内存使用率,qps,99 39 49时间之类的)

3.5 数据挖掘

● Hive与Spark区别,为什么使用Spark而不使用Hive?

● Spark常使用的参数,当读取HDFS时有一个文件过大,读取报错,添加什么参数可以解决,小文件使用的参数,如何解决数据倾斜,主要想问源码。

● 常使用的spark参数,spark源码中一些groupbykey,aggregateByKey,groupbykey源码及其区别

● 怎么保证在spark运行阶段动态分配所需的资源,需要添加什么参数,这里问题太多,很多新版本参数我根本不会

● Flink与Spark的区别,Flink的源码相关,各自的容错机制,基本思想,一次语义,源码如何实现

● Hadoop,Spark都使Yarn,介绍一下YARN,执行过程

● 业务相关问题:验证一条微博突然爆起来,应该监控哪些指标?

3.6 信号处理

● 针对项目具体发问,包括你的算法主要实现思路、和其他算法相比优势在哪?创新点在哪?

● 了解语音信号降噪的常用方法吗??因为我做的都是雷达相关的,直接说不了解了

● 问了一下数字信号处理、信号与系统的知识

● 滤波器了解吗?项目里有用过吗?怎么设计一个滤波器?

● STFT中窗函数的选择对时频特性的影响?加矩形窗和汉明窗有什么不一样?

● STFT交叠??

● 采样率是多少?1000Hz;低通抗混叠滤波器截止频率设置的多少?

● 对模拟滤波器了解吗?

● 说一下巴特沃斯滤波器的极点分布

● 短时傅里叶变换了解吗?

● 短时傅里叶变换加窗函数的作用是什么?

● 在不知道阶数的情况下,怎么得到IIR滤波器的频率响应曲线?

● 已知IIR滤波器系统函数,设计FIR滤波器?

● 怎么得到FIR滤波器的频响曲线?

4 数据结构与算法分析相关知识点

4.1 数据结构与算法分析

4.1.1 线性表

4.1.1.1 数组

● 排序好的数组,截断后,后部接到前部的前方,构建成新的数组,如何找出特定元素?

● 循环有序数组的查找(C++)二分查找变体

● m个数组,每个数组里有q个数,找出其中第k大的数

● 升序旋转数组找最小

● 两个有序数组,求其中位数,然后改进时间复杂度?

● 两个数组合并求中位数

● 子数组最大和?

● 数组中出现次数最多的K个数

● 从升序的数组中找出出现次数大于等于数组长度一半的数字?

● 包含重复数字的无序数组,找到所有加和等于target的索引对?

● 给定一个包含从0,1,2,...,n中取出的n个不同数字的数组,找到数组中缺少的数字?

● 一个长度为n的数组,求其中出现次数大于n/2的元素,要求线性时间复杂度,恒定空间复杂度?

● m*n的二维数组,只能往右或者往下,找最短路径?

4.1.1.2 链表

● 链表反转

● 链表对折 1 2 3 4 5 变成 1 5 2 4 3

再拆解一下题目,(灵活)

(1)找到链表的中点

(2)翻转后半段链表

(3)合并两个链表

● 判断两个单链表是否相交

● 两个链表求交点

● 链表1->2->3>4反转为1>4>2>3

● 单链表倒数第k个节点

● 用两种方法复制复杂链表

● 求取单链表的中间?(①遍历求表长,取n/2②快慢指针)

4.1.1.3 字符串

● 字符串最长不重复子串(哈希表,思路和买卖股票一样)

● 给出一个字符串,写出该子符串的全部排列组合?

● 判断字符串中括号是否对应?

4.1.2 树

4.1.2.1 二叉树

● 二叉树公共父节点

● 求二叉树的右视图?

● 用非递归的方式实现一个二叉树的删除操作,引申问题O(1)的空间复杂度怎么解决?

● 树的层序便利

● 二叉树最深、最浅深度

● 二叉树中序遍历非递归(C++)

● 宽度遍历二叉树

● N个结点的二叉搜索树有多少种组成方式?

4.1.2.2 堆

● 堆排序

4.1.3 排序

● 写一个归并排序

● topK的两种思路

● 手写快排序

● 手写堆排序

4.2 算法思想实战及智力题

4.2.1 算法思想实战

● 三色旗问题

● 买卖股票的合适时间的算法题

● 括号匹配问题,检查是否合法?如果不用栈,如何解决括号匹配问题?

● 最长回文子串,动态规划

● 股票题,一个数组,问最大收益

● 二分查找轴上索引,list = [0.0, 1.0, 2.0, 3.0],value = -1返回0,value=0.5返回0,value=1.5返回1,value=3.5返回3

4.2.2 智力题

● 马匹赛跑:25匹马,5个跑道,没有计时器,要找出前三名,最少要比多少场?答案是7

● 9枚硬币,8枚一样重,1枚比较重,最少称几次能找到最重的那枚?2次

4.3 其他方面

4.3.1 数论

● 求两个数最小公倍数(C++),最小公倍数=a*b/最大公约数,最大公约数:辗转相除法 ?

4.3.2 概率分析

● 极大似然估计的原理?然后给出一个二项分布,让用最大释然估计手推出该分布的参数?

● 一个线段分成三段,求他构成三角形的概率?

● 一个整数数组,其中有几个数字1,如何等概率抽取1个1?

4.3.3 矩阵运算

● 给定n*n矩阵,计算新的n*n矩阵。新矩阵的(i,j),是以原矩阵(i,j)为中心的m*m小矩阵的均值(m为奇数)。

● 写一个矩阵旋转90度的代码,解释一下坐标变换公式

● 给出一个二维矩阵,顺时针由外层到内层打印该二维矩阵?

4.4 Leetcode&剑指offer原题

● Leetcode 166

5 编程高频问题:Python&C/C++方面

5.1 python方面

5.1.1 网络框架方面

● 平时深度学习用什么框架?

5.1.2 基础知识

5.1.2.1 讲解原理

● 说一下Python中list的底层代码怎么实现的吧?

5.1.2.2 讲解应用

● Python包 都有哪些?

5.2 C/C++方面

5.2.1 基础知识

5.2.1.1 线程相关

● 进程与线程,线程共享的资源(堆,全局变量)

5.2.1.2 讲解原理

● 虚函数表(主要就是动态绑定,继承类调用基类虚函数,指针数组,虚函数的指针)

● 基类的析构函数为什么用虚的析构函数?(防止内存泄漏)

● 全局变量存放位置

5.2.1.3 讲解应用

● C++内存管理,预编译

6 操作系统高频问题:数据库&线程&常用命令等

6.1 数据库方面

6.1.1 基础问题

6.1.1.1 区别比较

● Left join 跟join的区别?

● Join的话,大表和小表哪个连接在前?

6.1.1.2 讲解原理

● SQL喜欢考窗口函数

6.2 操作系统方面

● 进程和线程的区别?

● 栈,队列,和堆的区别?

7 技术&产品&开放性问题

7.1 技术方面

● 场景分析题,如何对新闻进行实效性分析,怎么挖特征?

● 如何从大量网页中找出新闻类网页,算法设计?

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

发表评论

This site is protected by wp-copyrightpro.com