超全大厂算法岗百问百答(阿里/腾讯/滴滴/美团)

之前在准备秋招的时候,每次看到牛客网上那些大神手握七八个大厂的offer,就羡慕到不行,那会儿自己的机器学习算法水平还没法搬上台面,顶多也就是看了几个课程、做了两个比赛的水平,然后比赛还没得到任何的名次,就真的开始焦虑到不行,周围好多小伙伴都在大厂开始实习了,而我真的扪心自问,几乎零实习经历,算法也没系统性的推导过,leetcode也才偶尔刷一刷,大概刷了二十来题吧,用灾难来形容那时候的状态也不为过,我开始慌了,然后就开始静下心来各种找经验贴,牛客可谓是大佬云集,大概在这里看了十来篇,知乎上也看了好几篇,总结出了我觉得秋招算法岗的几个重点考察方向:自我介绍、项目介绍、算法细节、数据结构与算法题,接下来我一一来说一下这四个方向的细节。

- 自我介绍

自我介绍说得好,一定会给面试官留下深刻的好印象,而且这一块全是自己来措辞,要突出的重点也是你自己来把控,所以从你的叙述中,面试官是可以听得出你对这个项目的熟悉程度以及你的思考深度的,所以,提前准备就尤为重要了,面试的时候要把每一个项目按照一定的逻辑叙述出来,在算法项目里面最为重要的当然是数据、特征、模型、效果,按照这个框架给讲清楚了,面试官听得轻松,接下来的面试阶段也会更流畅一些,因为面试官是会捕捉你的自我介绍里面的关键词的,以待之后的问答环节向你连环提问,这就暗含了一个tip,就是你所讲出来的,一定要做到比面试官更懂,那些做的含糊的东西就不要搬进来了,否则迟早会露馅。

- 项目介绍

这是重中之重,项目会体现一个面试者的综合素质。那我们这种没有实习经历的该咋办呢?好办,去参加比赛,争取拿比赛的名次,然后把比赛里用到的算法搞的滚瓜烂熟的,面试官必然会对你项目中的细节展开,让你解剖一些他有疑问的点,比如正负样本的选取、特征处理、模型的细节,再比如你的比赛中用到了树模型,就得知道所有树模型相关的知识点,我随便举几个例子:XGBoost为什么对缺失值不敏感?相比普通的GBDT,XGBoost怎么处理缺失值?为什么xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度? 等等这种细节式的提问,一旦你回答的含糊其辞,面试官就必然会扣分的,所以千万不要怀着侥幸心理,觉得面试官不会问到,墨菲定理告诉我们,凡是可能出错的事就一定会发生,这些都是可以准备的,明明几乎是开卷考试了,为啥不提前去想好怎么回答,而要去考场上绞尽脑汁想个四不像的回答出来呢。比赛平台的话,大家肯定知道,像阿里天池、kaggle等等都是大家常参加比赛的平台。

- 算法细节

面试官除了考察在项目中出现的算法的细节之外,还会就你的机器学习算法基础进行提问,我这里大概总结下比较重要的一些,传统算法: 逻辑回归、朴素贝叶斯、树模型(random forest/Adaboost/xgboost/lightgbm)、SVM、PageRank、聚类;一些机器学习的理论,非平衡问题、过拟合问题,交叉验证问题,模型选择问题;推荐系统:协同过滤、FM/FFM、LS-PLM、Wide&Deep、DeepFM、DIN、DIEN、ESMM、Embedding、召回、EE、性能评估;这些算是算法岗的核心,此外,一些代码语言的考察,也会是有一些面试官很看重的,比如C++/python/Spark等,当时为了准备这一项,我把我能想到的题都转化为了问答的形式,自问自答地去做准备,我在文章的最后把所有的题都列了出来。大家可以按照这个去准备,或者选择其中的一些。因为我面的是推荐算法岗位,所以会比较偏重这方面,后期如果我有时间,可以拓展到其他的领域,比如自然语言处理、计算机视觉等等。推荐的书的话,也是牛客上大神的一些经验,李航《统计学习方法》、《百面机器学习》、《百面深度学习》、《深度学习推荐系统》、周志华的《机器学习》。当然看完这些书是绝对不够的,看了不等于你掌握了,你循着我给你列出来的问题清单去过一遍,自己心里回答一遍,或者直接写出来,这样效果绝对顶,我在秋招的时候,真的几乎可以秒答,尽在自己的掌握之中。我也会在我的公众号陆续发布这些问题的解答,基本上已经写完了,大家也可以看我的网站,网站、公众号介绍在下面中有,欢迎大家一起交流。

- 数据结构与算法题

这个也相当关键,有的公司甚至会根据你在这个方面的表现优劣决定你的去留,像头条是出了名的动态规划大师,老喜欢考一些中等或者hard的题,让人头疼。很多非计算机出身的因为本身没有基础,练习的不到位,就可能当场思路不清晰。我的建议是先按照专题来刷,比如像动态规划、滑动窗口专题、双指针、快慢指针、topK等等,刷个200题左右,然后就可以随机去刷了,一定要多刷题,这是强调一百遍都不为过的面试法则。推荐的书的话有《剑指offer》,网站的话可以找leetcode中文网。

好了废话少说,种一棵树最好的时间是十年前,其次是现在,如果觉得你的算法功底不够在秋招过程中斩获offer的话,那就从现在开始一一攻克,没什么难的。我也会陆陆续续在我的网站和公众号更新关于算法相关的问答、面试经验、内推等等内容,如果有兴趣的话可以关注一波,这个号我的预期是长期做,也会用心去做,希望可以给算法的同学带来切切实实的帮助。

- 网站:http://ml-union.cn
- 公众号:阿药算法


以下就是上面提到的我整理的问题,我还会持续更新这个列表,后期主要的写作领地就在公众号了,估计牛客也不会常来,欢迎大家来加我的微信,一起交流。

- 个人微信:ayao-algo


一、机器学习百问百答

逻辑回归

-  推导一下逻辑回归的损失函数,并解释其含义。
-  在广告LR模型中,为什么要做特征组合?
-  为什么 LR 模型要使用 sigmoid 函数,背后的数学原理是什么?为什么不用其他函数?
-  为什么LR可以用来做点击率预估?
-  满足什么样条件的数据用LR最好?换句话说,为了LR工作的更好,要对数据做一些什么处理?
-  逻辑斯蒂回归能否解决非线性分类问题?
-  给一个有m个样本n维特征的数据集,LR算法中梯度的维度是多少?
-  逻辑回归损失函数为什么使用最大似然估计而不用最小二乘法?
-  如何求解逻辑回归的参数?
-  SVM 和 LR 有什么异同?分别在什么情况下使用?
-  为什么LR不适合用MSE?
-  为什么逻辑回归需要先对特征离散化?
-  并行LR的实现
-  逻辑回归(Logistic regression)在金融领域有什么应用呢?

朴素贝叶斯

-  什么是贝叶斯决策论?
-  你知道什么叫做朴素贝叶斯吗?
-  公司里面男性有60人,女性有40人,男性穿皮鞋的人数有25人,穿运动鞋的人数有35人,女性穿皮鞋的人数有10人,穿高跟鞋的人数有30人。现在你只知道有一个人穿了皮鞋,这时候你就需要推测他的性别是什么。如果推测出他是男性的概率大于女性,那么就认为他是男性,否则认为他是女性。
-  你能给我说说朴素贝叶斯有什么优缺点吗?
-  “朴素”是朴素贝叶斯在进行预测时候的缺点,那么有这么一个明显的假设缺点在,为什么朴素贝叶斯的预测仍然可以取得较好的效果?
-  什么是拉普拉斯平滑法?
-  朴素贝叶斯中有没有超参数可以调?
-   朴素贝叶斯中有多少种模型?
-  你知道朴素贝叶斯有哪些应用吗?
-  朴素贝叶斯是高方差还是低方差模型?
-  朴素贝叶斯的假设条件是什么?优缺点分别是什么?
-  朴素贝叶斯是如何进行参数估计的?
-  贝叶斯学派与频率学派有何不同?
-  逻辑回归与朴素贝叶斯有什么区别?

树模型

-  谈谈你对熵、信息增益和信息增益比的理解?
-  ID3算法的划分标准是什么?
-  ID3算法有什么缺陷?C4.5算法是如何解决ID3的缺陷的?ID3和C4.5存在什么缺陷?
-  C4.5是如何处理缺失值的?
-  C4.5的划分标准是什么?
-  C4.5算法的缺陷是什么?
-  基尼系数的的定义及其优势是什么?
-  CART是如何在特征值缺失的情况下进行划分特征的选择?
-  选定该划分特征,CART模型对于缺失该特征值的样本该进行怎样处理?
-  决策树出现过拟合的原因及其解决办法?
-  决策树剪枝有哪些策略?其优缺点分别是什么?
-  C4.5采用的剪枝方法是什么?
-  CART是如何处理类别不平衡问题的?
-  CART是如何对连续值处理的?
-  请你说一下ID3、C4.5和CART三者之间的差异。
-  CART算法为什么选用gini指数?
-  C4.5算法是如何处理连续值的?
-  决策树是如何处理缺失值的?
-  如何计算决策树的各特征重要程度?
-  如果特征很多,决策树中最后没有用到的特征一定是无用吗?
-  决策树需要进行归一化处理吗?
-  既然使用神经网络也可以解决分类问题,那SVM、决策树这些算法还有什么意义呢?
-  决策树和条件概率分布的关系?
-  CART的剪枝策略是什么?
-  如果由异常值或者数据分布不均匀,会对决策树有什么影响?
-  决策树和其他模型相比有什么优点?
-  决策树与逻辑回归的区别?
-  分类树和回归树的区别是什么?
-  如何理解决策树的损失函数?
-  sklearn中的决策树是否应该用one-hot编码?
-  简述随机森林的步骤
-  随机森林是否会出现过拟合?
-  随机森林为什么不用分训练集和测试集?
-  随机森林是如何处理缺失值的?
-  随机森林与GBDT之间的区别
-  随机森林与SVM的比较
-  说一说随机森林的优缺点
-  简述一下 Adaboost 的权值更新方法
-  推导一下Adaboost的样本权重更新公式
-  训练过程中,为何每轮训练一直存在分类错误的问题,整个Adaboost却能快速收敛?
-   Adaboost 的优缺点?
-  AdaBoost 与 GBDT 对比有什么异同?
-  请简述一下GBDT的原理
-  为什么回归树可以作为GBDT的迭代学习器?
-  GBDT是如何用于分类问题的?
-  为什么GBDT将CART回归树树分成m棵二叉树(每棵树只有两个叶子节点),而不是求一棵m+1层的二叉树(最多有2m个叶子节点)?
-  GBDT是如何进行正则化的?
-  gbdt的残差为什么用负梯度代替?
-  GBDT的优势有哪些?
-  GBDT中的缩减的作用是什么?
-  为什么基于残差的GBDT不是一个好的选择?
-  梯度提升树中为什么说目标函数关于当前模型的负梯度是残差的近似值?
-  为什么xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?
-  为什么在实际的kaggle比赛中,GBDT和Random Forest效果非常好?
-  GBDT怎么用在点击率预测中?
-  GBDT中的梯度怎么计算的?是谁对谁的梯度?
-  m×n数据集,如果用GBDT,那么梯度是几维?或者是与树的深度有关?或者与树的叶子节点的个数有关?
-  随机森林和GBDT的异同点
-  机器学习算法中GBDT与Adaboost的区别与联系是什么?
-  介绍一下XGBoost的原理
-  XGBoost与GBDT有什么不同
-  RF和GBDT的异同点
-  XGBoost为什么使用泰勒二阶展开
-  XGBoost的并行化部分是如何实现的?
-  XGBoost为什么快?
-  XGBoost中叶子结点的权重如何计算出来?为什么叶子节点得分可以用来衡量树的复杂度?
-  XGBoost中的一棵树的停止生长条件
-  请推导一下Xgboost
-  XGBoost算法防止过拟合的方法有哪些?
-  XGBoost如何处理不平衡数据
-  比较LR和GBDT,说说什么情景下GBDT不如LR
-  XGBoost中如何对树进行剪枝
-  使用XGBoost训练模型时,如果过拟合了怎么调参?
-  XGBoost如何选择最佳分裂点?
-  XGBoost的Scalable性如何体现
-  XGBoost如何评价特征的重要性
-  XGBooost参数调优的一般步骤
-  XGBoost模型如果过拟合了怎么解决
-  XGBoost为什么对缺失值不敏感?相比普通的GBDT,XGBoost怎么处理缺失值?
-  XGBoost的正则化是如何实现的?
-  XGBoost和LightGBM的区别
-  XGBoost是如何求Hessian矩阵逆的?
-  xgboost算法中使用近似算法求取分割点如何理解?
-  LightGBM相较于XGBoost有什么优缺点?
-  请介绍下常见的几种集成学习框架:boosting/bagging/stacking
-  为什么集成学习会好于单个学习器?
-  请简述下模型的方差与偏差的含义?
-  集成学习中的基模型一定是弱模型吗?
-  请计算一下模型的总体期望和总体方差
-  为什么Bagging中的基模型一定要为强模型?
-  为什么Boosting框架中的基模型必须为弱模型?

特征工程

-  机器学习中,有哪些特征选择的工程方法?
-  广告点击率模型中,LR, GBDT+LR, FM, DNN等模型的优点和缺点?实际效果如何?
-  多标签(multi-label)数据的学习问题,常用的分类器或者分类策略有哪些?

SVM

-  关于SVM中,对常数C的理解?
-  机器学习SVM中关于函数间隔为什么可以设置为1?
-  机器学习有很多关于核函数的说法,核函数的定义和作用是什么?

优化算法

-  优化算法
-  什么是梯度下降法?
-  用梯度下降训练 SVM 会有什么问题?
-  最小二乘、极大似然、梯度下降有何区别?
-  最优化问题中,牛顿法为什么比梯度下降法求解需要的迭代次数更少?
-  为什么nn的较大问题是会陷入局部最优时,不选用凸函数作为激活函数?

损失函数

-  请解释一下损失函数的定义
-  请说说你对逻辑回归损失函数的理解
-  请说说你对平方损失函数的理解。
-  请谈谈你对指数损失函数的了解。
-  请谈谈你对Hinge合页损失函数的了解。
-  请你对逻辑斯谛回归和SVM的损失函数进行一下对比。
-  对于逻辑回归,为什么说平方损失函数是非凸的?
-  如何把SVM的推导和损失函数联系起来?
-  神经网络如何设计自己的loss function,如果需要修改或设计自己的loss,需要遵循什么规则?
-  softmax和cross-entropy是什么关系?
-  神经网络的损失函数为什么是非凸的?
-  深度学习中有哪些常用损失函数(优化目标函数)?
-  神经网络中,设计loss function有哪些技巧?
-  神经网络中,为何不直接对损失函数求偏导后令其等于零,求出最优权重,而要使用梯度下降法(迭代)计算权重?
-  在用交叉熵损失函数时,只希望惩罚 0.4~0.6 这样模糊的值,应该怎么改?

正则化

-  请解释正则化的含义。
-  正则化与数据的先验分布有什么关系?
-  L1 相比于 L2 为什么容易获得稀疏解?
-  L1正则为什么能让系数变为0?L1正则怎么处理0点不可导的情形?
-  深度学习怎么防止过拟合?
-  目标函数中同时使用多个L1和L2正则化项的情况,应该怎么求解?

AUC

-  请解释一下AUC。
-  AUC和准确率一定是正相关的吗?有什么内在关系吗?
-  精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么?
-  为什么accuracy、precision、f1-score、recall得分都很高但是AUC得分低?
-  机器学习中,F1和ROC/AUC,关于多分类如何做指标评估?
-  如何解决离线和线上auc和线上点击率不一致的问题?
-  为什么AUC对正负样本比例不敏感
-  AUC要到多少才算好?
-  AUC的概率解释。

非均衡数据

-  机器学习中有哪些非均衡数据集的处理方法?
-  请简述一下SMOTE采样方法是如何来处理非平衡数据的?
-  原始的SMOTE算法存在什么问题?如何改进?
-  请简述一下Tomek Links欠采样方法。
-  请简述一下NearMiss方法
-  EasyEnsemble算法是如何解决非平衡数据的问题的?
-  BalanceCascade算法是如何解决非平衡数据的问题的?
-  SMOTE过采样和Tomek Links欠采样算法是否可以结合起来?

二、推荐系统百问百答


浅层模型

-  请简述基于用户的协同过滤UserCF的推荐过程。
-  在基于用户的协同过滤中,如何计算用户的相似度?
-  基于用户的协同过滤UserCF存在哪些缺陷?
-  请简述基于物品的协同过滤ItemCF的推荐过程。
-  请简述一下基于物品的协同过滤算法的离线工程实现(spark)
-  协同过滤算法计算过程中的大规模稀疏矩阵相乘在spark中的现有方案(multiply)有什么缺陷?如何改进?
-  请简述协同过滤算法的优缺点
-  实际业务中,为了让协同过滤对业务产生更大的价值,我们在使用该算法时需要注意哪些问题?
-  协同过滤算***存在冷启动的问题,主要体现在哪里?
-  协同过滤算法可以用于哪些推荐业务场景?
-  请简述近实时协同过滤算法的工程实现
-  矩阵分解的原理是什么?求解的主要方法有哪些?
-  如何从深度学习模型的角度来认识矩阵分解模型
-  矩阵分解算法中,隐向量的长度k的取值是如何影响效果和工程开销的?
-  请简述奇异值分解的过程。奇异值分解存在什么缺陷?为什么不适用于互联网场景下的求解?
-  请简述梯度下降法求解用户-物品隐向量的过程。
-  如何解决矩阵分解中用户和物品打分偏差的问题?
-  逻辑回归模型预估相较于协同过滤,最大的优势是什么?其推荐过程是怎么样的?
-  请推导逻辑回归的数学形式。
-  请推导梯度下降法求解逻辑回归参数更新的过程。
-  逻辑回归作为CTR预估模型的优势与缺陷是什么?
-  在工业界,很少将连续值作为LR模型的特征输入,而是将连续特征离散化为一系列0、1特征,优势是什么?
-  CTR预估中所有的特征进行两两交叉,并对所有的的组合赋予权重的方法存在什么缺陷?
-  FM的原理是什么?与矩阵分解有什么联系?
-  FM相较于POLY2为什么泛化能力更好?在工程上有什么优势?
-  FFM相较于FM有什么改进?
-  FM的训练复杂度是多少?怎么推导?FFM的训练复杂度是多少?
-  为什么GBDT可用于特征选择和特征组合?
-  GBDT+LR组合模型中,GBDT是如何生成特征向量的?
-  GBDT+LR有什么优点和缺陷?
-  请简述阿里妈妈提出的LS-PLM模型的原理与数学形式。
-  LS-PLM模型的优势有哪些?
-  LS-PLM模型与深度学习模型有什么联系?

深度模型

-  请简述Deep Crossing的网络结构。
-  Deep Crossing中的残差单元有什么作用?
-  NeuralCF在矩阵分解模型的基础上,做了哪些改进?
-  PNN相较NeuralCF和Deep Crossing有哪些改进?优势是什么?
-  PNN中特征交叉有哪些方式?分别是怎么样的?
-  PNN模型的优势和局限性是什么?
-  如何理解Wide&Deep模型的Memorization?
-  Wide&Deep中的Memorization存在哪些缺点?
-  如何理解Wide&Deep模型的Generalization?
-  Wide&Deep中的Generalization存在哪些缺点?
-  请简述Wide&Deep的模型结构。
-  Wide&Deep在训练的时候采用了Joint Training,有什么好处?
-  wide&deep论文中作者是如何应用wide&deep来做推荐的?
-  为什么wide&deep模型用ftrl和adagrad两种优化方法?
-  Wide&Deep模型的创新和优势是什么?
-  在应用场景中,哪些特征适合放在Wide侧,哪些特征适合放在Deep侧,为什么?
-  wide&deep模型中为什么要将连续特征离散化?
-  Deep&Cross相比Wide&Deep作了哪些改进?Deep&Cross模型的Cross网络是怎么操作的?
-  FNN模型的提出主要是为了解决什么问题?它是如何解决的?
-  FNN的模型结构是什么样的?
-  FNN模型中是如何使用FM来初始化Embeddiing层参数的?
-  DeepFM提出的动机是什么?
-  DeepFM中FM层与NN层是共享特征Embedding的好处是什么?
-  DeepFM相较于Wide&Deep有什么改进?为什么这么改进?
-  NFM相比Wide&Deep有什么改进?为什么这么改?
-  用户对于商品的兴趣有哪些特点?DIN是如何去捕捉用户兴趣的这些特点的?
-  对于用户兴趣的捕捉,我们一般有哪些方法?
-  DIN的输入是怎么处理的?
-  DIN的激活单元是如何设计的?
-  为什么增加叉乘作为输入?
-  为什么使用简单的MLP实现AU呢?
-  DIN中使用激活函数Dice替代经典的PReLU激活函数,优势是什么?
-  DIN使用了一种自适应正则,它的动机是什么?
-  DIN论文中使用了GAUC作为评价指标,它的好处是什么?
-  DIEN引入序列信息的动机是什么?
-  请绘制DIEN各层的结构?兴趣抽取层和兴趣进化层。
-  CVR预估到底要预估什么?
-  与CTR预估不同,cvr预估中面临的数据稀疏和样本选择偏差分别指的是什么?
-  ESMM是如何解决样本选择偏差问题的?
-  ESMM是如何解决数据稀疏问题的?
-  ESMM的结构基于“乘”的关系设计而不是基于除的原因是什么?
-  解释一下ESMM的目标函数

Embedding

-  Embedding技术为何对深度学习推荐系统来说非常重要?
-  请简述Word2Vec的原理和结构。
-  为了加快Word2Vec的训练,采取了什么方法?
-  谈谈你对Item2Vec的理解,它的局限是什么?
-  请简述双塔模型的结构,其中物品塔的作用是什么?
-  模型结构越复杂越好吗?特征越多越好吗?
-  DeepWalk的主要思想是什么?说出算法步骤
-  Node2Vec中的同质性和结构性指的是什么?他们与DFS和BFS的对应关系如何?
-  请写出Node2Vec的节点间跳转概率公式。
-  举例说明Node2Vec的同质性和结构性在推荐系统中的直观解释。
-  EGES的提出主要是为了弥补DeepWalk的缺陷的,怎么弥补的?
-  请简述EGES模型的结构,并简述每一层的做法。
-  Embedding在深度学习推荐系统中有哪些应用?列举三个方向。
-  Embedding作为深度学习模型的训练会存在什么问题?
-  Embedding有哪些预训练方法,分别介绍一下.
-  请简述Embedding作为召回层的过程。
-  请简述局部敏感哈希的原理及其在推荐系统中的作用。

召回

-  假设物品库数量达到百万级别,如何设计方法从这个数量级别的物品中推荐给用户top10的物品,同时可以减少计算的压力?
-  排序为什么比召回更受关注?
-  召回模型有什么显著区别于排序模型的特点?
-  为什么不能只拿"曝光未点击"做召回模型的负样本?
-  召回模型是如何对负样本进行随机采样的?
-  使用随机采样样本做负样本有什么缺陷?如何解决?
-  推荐系统中为什么要有召回?在推荐系统中召回和排序有什么异同?
-  推荐系统召回是怎么实现热门item的打压?
-  CTR预估与推荐系统的目标存在什么gap?
-  现实推荐系统只按"预估CTR"排序吗?
-  为什么CTR预估只适用于具备“真负”样本的场景?
-  推荐系统中有哪些场景是无法获得真负样本的?如何解决?
-  请简述基于embedding的召回方法,优势是什么?
-  Airbnb召回算法中的listing embedding召回是如何选择正负样本的?
-  Airbnb召回算法中的user/listing-type embedding召回是如何选择正负样本的?
-  Facebook的EBR算法是如何选择正负样本的?
-  召回为什么要求具有隔离user与item特征的解耦性?具体怎么解耦?
-  在召回场景下,为什么往往采用Pairwise LearningToRank来构建排序的相对准确性?
-  优化召回Pairwise LearningToRank使用的损失函数可以有哪几种形式?
-   Pinterest的PinSAGE是如何构建正样本的?
-  请简述DSSM模型的原理
-  DSSM的输入层将文本映射到低维向量空间转化成向量 会存在什么问题?
-  请简要描述DSSM是如何应用于召回的?结构是怎样的?
-  请简述一下DSSM的优缺点
-  DSSM中的负样本为什么是随机采样得到的,而不用“曝光未点击”当负样本?
-  请简述百度的双塔模型
-  请简述YoutubeDNN的结构和其原理
-  请简述用户多兴趣网络MIND的出发点是什么,描述其结构?
-  SDM是如何结合用户长期和短期兴趣建模的?其结构如何?


特征工程

-  让你设计一个推荐系统的特征工程,你会怎么去设计?包括用户侧、物品侧和上下文特征。
-  在进行特征处理时,对连续型特征怎么处理?
-  在进行特征处理时,对类别型特征怎么处理?

探索与利用

-  当新用户注册或新物品入库的时候,该怎么给用户提供满意的推荐服务,以及怎么将新物品推荐出去,推荐给喜欢他的用户?
-  简述探索与利用的含义。
-  Greedy算法的原理是什么?有什么缺陷?
-  请简述Thompson Sampling方法的原理和步骤。
-  请问UCB方法是如何解决冷启动中的探索和利用问题的?
-  简述LinUCB的原理与具体的做法。

特征评估

-  模型的实时性是如何影响推荐系统的效果的?
-  客户端是如何做到对于实时特征进行实时推荐的?
-  流计算平台是如何进行准实时特征处理的?
-  分布式存储系统HDFS和分布式批处理平台在推荐中的作用有哪些?
-  请简述offline/nearline/online训练方法和步骤。
-  请说出几种离线评估的指标。
-  请说出P-R曲线、ROC曲线和AUC的含义和关系。
-  如何巧妙地绘制ROC曲线?
-  线下AUC提升,一定会带来线上指标的提升吗?为什么?
-  为什么要进行AB测试?相比离线评估的优势是什么?
-  AB测试是如何设计分层和分流机制的?

三、深度学习

-  请写出常用的损失函数,平方损失、交叉熵损失、softmax损失函数和hinge损失函数。
-  为什么深层神经网络的训练的难度很大?主要有哪几方面的原因。
-  请你用实例说明一下前向传播和反向传播
-  在深度学习中引入非线性激活函数的作用是什么?
-  请说出常用的激活函数,并画出他们相应的图像。
-  如何选择激活函数?请说明各种激活函数的特点。
-  Relu激活函数的优点是什么?
-  请说明Softmax激活函数的定义及其作用?Softmax激活函数如何应用于多分类?
-  在深度模型训练时,为什么需要batch size?如何选择合适的batch size,对结果有和影响?
-  请说明BN的原理,为什么要进行批归一化?
-  什么是模型微调fine tuning?请说明fine-tuning 模型的三种状态,各自的特点是什么?
-  为什么无监督预训练可以帮助深度学习?
-  权重偏差初始化有哪些方法?分别说明他们的特点。
-  设置学习率的作用是什么?常用的学习率衰减方法有哪些?说明他们各自的特点
-  深度学习中有哪些防止过拟合的方法?
-  请说出几种常用的优化算法,以及他们各自的特点。
-  深度学习中如何平衡方差与偏差?如果偏差过大我们应该怎么做?方差过大呢?
-  请说明Dropout的原理,在训练与测试的时候dropout会有什么区别?
-  深度学习中常用的数据增强方法?
-  如何理解 Internal Covariate Shift?

四、C++百问百答

基础

-  变量的作用是什么?创建变量的语法是什么?
-  C++中常量的作用是什么?请写出定义常量的两种方式。
-  请举几个C++中预先保留的关键字的例子
-  short类型、int类型、long类型和long long类型所占用的内存空间分别是多少?
-  sizeof关键字的作用是什么?
-  字符型变量所占的内存空间为多少?它在存储的时候有什么特点?
-  请举几个你常用的C++中的转义字符?
-  C++中前置递增和后置递增的区别是?
-  写一个三目运算符的例子?并解释一下。
-  switch case语句中break的作用是什么?
-  一个for循环语句中的起始表达式、条件表达式、末尾循环体和循环语句的执行顺序是什么?
-  break语句和continue语句的作用是什么?

数组

-  数组的特点是什么?如何定义数组?
-  一维数组的名称和其内存地址的关系是什么?
-  如何定义二维数组?二维数组的名称和其内存地址的关系是什么?

函数

-  说明形参与实参的含义。
-  值传递的含义是什么?对形参和实参的影响是什么?
-  函数声明的作用是什么?

指针

-  指针的作用是什么?指针变量和普通变量的区别是什么?
-  指针所占内存空间有多大?
-  常量指针、指针常量有什么区别?
-  值传递和地址传递有什么区别?

结构体

-  如何创建一个结构体?请写出两种方法。
-  如何创建结构体数组?
-  结构体指针如何访问结构体的成员?
-  结构体如何嵌套结构体?举个实例
-  结构体可以作为参数向函数传参吗?

内存

-  请简述C++程序在执行时各个内存区块(代码区、全局区、栈区、堆区)的功能特点。
-  new操作符的作用是什么?怎么使用?

引用

-  引用的作用是什么?其本质是什么?
-  引用在作为函数参数时,和值传递、地址传递有什么区别?
-  常量引用的作用和写法分别是什么?
-  在写函数默认参数时,有什么需要注意的?

重载

-  函数重载需要满足什么条件?

封装

-  封装的意义是什么?
-  类的成员和行为的访问权限有哪些?分别是什么样的?
-  类和结构体的区别是什么?
-  将成员属性设置为私有的优点是什么?

初始化

-  构造函数和析构函数的作用是什么?
-  构造函数语法是什么?构造函数有什么特点?
-  析构函数语法是什么?析构函数有什么特点?
-  构造函数调用规则是什么?
-  请解释C++中的深拷贝与浅拷贝?
-  C++中初始化列表语法是什么?
-  B类中有对象A作为成员,A为对象成员,当创建B对象时,A与B的构造和析构的顺序是谁先谁后?
-  静态成员的特点是什么?
-  类内的成员变量和成员函数是分开存储的吗?非静态成员变量占用对象空间吗?
-  this指针的作用是什么?
-  const修饰成员函数会起到什么效果?关键字mutable的作用是什么?
-  C++中友元的作用是什么?全局函数、类、成员函数作为友元分别是怎么实现的?
-  继承的方式有哪几种?其权限是什么样的?
-  子类可以继承父类的私有成员吗?
-  父类和子类的构造函数和析构顺序是什么样的?
-  当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据?
-  菱形继承会带来什么问题?C++中是怎么解决的?
-  静态多态和动态多态有什么区别?
-  多态的满足条件和使用条件是什么?
-  多态有什么优点?
-  纯虚函数的意义是什么?语法是什么样的?他和抽象类有什么关系?
-  解释虚析构和纯虚析构的含义、语法及其区别?
-  如何建立函数模板?其作用是什么?需要注意什么?
-  普通函数与函数模板有什么区别?其调用规则是什么?
-  具体化函数模板是为了解决什么问题?
-  类模板的作用是什么?语法是什么样的?与函数模板区别有什么区别?
-  类模板中成员函数创建时机是什么
-  请解释STL中的容器、算法和迭代器。

五、python百问百答

-  python中list、tuple、dict、set等类型有什么区别?
-  函数传参有哪些形式?分别有什么特点?
-  请解释python的默认参数陷阱问题。
-  请举例说明浅拷贝和深拷贝的区别
-  生成器与迭代器的概念分别是什么?
-  请简述内置函数zip的用法。迭代器的长度不一致时,是如何处理的,有什么替代方案吗?
-  高阶函数map/reduce/filter/sorted的用法分别是怎样的?举例说明。
-  闭包的概念是什么?举例说明。
-  匿名函数有什么好处?请举一个例子说明其用法。
-  装饰器的概念是什么?如何使用?
-  偏函数的概念是什么?如何使用?
-  enumerate相比range有什么优势?
-  什么是工厂函数?举例说明。
-  举例说明类属性和实例属性的区别。
-  请实例解释继承和多态的概念。
-  如何设置类内属性的访问限制?
-  如何使用__slots__?
-  定制类__str__,__iter__, __getitem__,__getattr__,__call__分别有什么作用?
-  静态方法、类方法和成员方法有什么区别
-  @classmethod, @staticmethod, @property这些都是什么?
-  __init__和__new__的区别是什么?
-  什么是Python自省?
-  python是如何进行内存管理的?
-  什么是GIL?
-  请简述python的异常处理机制。
-  你是如何如何定位python程序的bug的?在python中如何实现单步执行?
-  assert断言有什么用处?
-  类有哪些内置的属性?
-  元素为字符串的列表如何转变为空格分隔的字符串?
-  python中的is操作符是如何进行对比的?
-  请写出匹配邮箱地址的正则表达式。
-  python如何传递命令行参数的?
-  如何理解python中的线程?
-  请简述python中的多进程。


六、Spark百问百答

-  请简述RDD的概念,如何创建RDD?
-  RDD支持哪些操作?
-  RDD支持哪些操作?分别有什么特点?
-  请举例说明RDD转化操作和行动操作
-  说明RDD的惰性求值机制
-  分别说明转换操作map、flatMap、filter、distinct的作用和用法
-  分别说明转化操作union、intersection、subtract、cartesian的作用和用法
-  分别说明行动操作reduce、fold、aggregate的用法及其区别
-  为什么要对RDD进行持久化,请简述不同级别的缓存机制。
-  请简述reduceByKey、groupByKey、combineByKey的作用与区别。
-  RDD之间的依赖关系宽依赖和窄依赖的含义与区别
-  RDD中Client、Master、Worker、Driver、Executor的含义分别是什么
-  DataFrame与RDD的主要区别在于?
-  为什么Spark快于mapreduce?
-  Spark有那些组件?
-  Spark Streaming的基本原理
-  如何解决Spark中数据倾斜的问题
-  请说明SparkSQL中三种join 1.Broadcast Join 2.Shuffle Hash Join 3.Sort Merge Join的含义与区别
-  spark 能代替hadoop 吗?
-  Executor 的作用?
-  Driver 的作用?
-  spark Rdd 的缓存?
-  spark spark-submit脚本的参数有哪些?
-  宽依赖和窄依赖
-  总结Rdd算子(30个以上)
-  coalesce 和 repartition 的区别?
-  reduceByKey 和 groupByKey 的区别?
-  union 和 intersection 的区别?
-  常用的宽依赖算子和窄依赖算子有哪些?
-  DAG 如何划分stage?
-  如何划分 job?
-  Spark 持久化的选择?
-  持久化和容错的应用场景?
-  什么是累加器?
-  什么是广播变量?
-  节点和task执行的关系?
-  cluster 模式如何查看日志
-  Spark优化?
-  什么是DataFrame?
-  Rdd,DataFrame,DataSet的区别?
-  spark底层核心RDD的缓存机制、应用场景、如何使用、如何清除缓存
-  DAG有向无环图和划分stage

#面试复盘##实习##面经##笔经##校招##算法工程师#
全部评论
有答案吗大佬
1 回复
分享
发布于 2021-08-29 15:23
点赞 回复
分享
发布于 2021-08-12 23:40
联想
校招火热招聘中
官网直投

相关推荐

42 348 评论
分享
牛客网
牛客企业服务