小米算法面经秘籍
《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 技术方面
● 场景分析题,如何对新闻进行实效性分析,怎么挖特征?
● 如何从大量网页中找出新闻类网页,算法设计?
本文由 大白智能 作者:凯哲 发表,其版权均为 大白智能 所有,文章内容系作者个人观点,不代表 大白智能 对观点赞同或支持。如需转载,请注明文章来源。