某团top频率面试题整理

结合面经,收集到的各种信息如下:

目录

    • 算法
    • CODING
      • 1 可以解决
      • 2 需要再看
      • 3 完全不会
    • 工程
    • 项目
    • 一面面试题

算法

  1. 强行介绍了下正在参加的比赛。问了下lightgbm的参数。
  2. gbdt,xgb原理,区别,xgb做了哪些优化
    GBDT的原理(基本思路)
    梯度提升决策树,是一种迭代的决策树算法,通过构造多棵决策树,并将决策树的结果累加起来作为最终的预测输出。每一轮迭代中,构建的新的树拟合的是损失函数在上一轮预测值的负梯度值。
    XGBoost的原理(基本思路)
    XGBoost是陈天奇设计的一套基于gbdt的可并行计算的机器学习工具,通过构造多棵决策树,并将决策树的结果累加起来作为最终的预测输出。在每一轮迭代中,都要最小化目标函数,最小化的过程中借助目标函数的二阶泰勒展开都得到关于树叶子节点权重的最优值。
    XGBoost相比GBDT做的优化点
    1)GBDT以传统CART作为基分类器,而XGBoost 支持线性分类器,相当于引入L1和L2正则化项的逻辑回归(分类问题)和线性回归(回归问题);
    2)GBDT在优化时只用到一阶导数,XGBoost对代价函数做了二阶Talor展开,引入了一阶导数和二阶导数。XGBoost支持自定义的损失函数,只要是能满足二阶连续可导的函数均可以作为损失函数
    3)XGBoost在损失函数中引入正则化项,用于控制模型的复杂度。正则化项包含全部叶子节点的个数,每个叶子节点输出的score的L2模的平方和。从Bias-variance tradeoff角度考虑,正则项降低了模型的方差,防止模型过拟合,这也是xgboost优于传统GBDT的一个特性。
    4)当样本存在缺失值时,xgBoosting能自动学习分裂方向,即XGBoost对样本缺失值不敏感;
    5)XGBoost借鉴RF的做法,支持列抽样,这样不仅能防止过拟合,还能降低计算,这也是xgboost异于传统gbdt的一个特性。
    6)XGBoost在每次迭代之后,会将叶子节点的权重乘上一个学习率(相当于XGBoost中的eta,论文中的Shrinkage),主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点;
    7)XGBoost 工具支持并行,但并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值),XGBoost的并行是在特征粒度上的。XGBoost在训练之前,预先对数据进行了排序,然后保存为(block)结构,后面的迭代中重复地使用这个结构,大大减小计算量这个块结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行
    8)可并行的近似直方图算法,树结点在进行分裂时,需要计算每个节点的增益,若数据量较大,对所有节点的特征进行排序,遍历的得到最优分割点,这种贪心法异常耗时,这时引进近似直方图算法,用于生成高效的分割点,即用分裂后的某种值减去分裂前的某种值,获得增益,为了限制树的增长,引入阈值,当增益大于阈值时,进行分裂
  1. XGBoost的原生语言为C/C++,这是也是它训练速度快的一个原因。
  1. RNN lstm原理
  2. CNN原理
  3. 神经网络怎么补全缺失值的,XGBoost怎么补全缺失值的,和LGB的区别
    XGBoost如何补全缺失值
    稀疏感知: 会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,计算增益后选择增益大的方向进行分裂即可
    LGB如何补全缺失值
    类似
  4. XGB分类和回归的树有什么不同吗,介绍一下两者的决策树
    XGB用于分类的树
    XGB用于回归的树

    没什么不同,只是损失函数不同
  5. 小样本学习么
  6. deepfm吗,知道fm吗,我说是推荐算法
  7. NLP啊,知道怎么处理词向量吗,知道WORD2vex吗,知道怎么分词
  8. 如何防止过拟合,你都采用了哪些方法,还有哪些你没有用到的方法;
  9. xgboost原理,怎么防过拟合
    XGB如何防止过拟合
    GBDT正则化:
    1 设定学习率,构建每一棵新树时都不是完全拟合残差
    2 对弱学习器CART树进行剪枝
    3 子采样,每棵树选择部分特征和数组
    4 正则化约束
  10. boosting和bagging在不同情况下的选用
  11. LSTM原理,与GRU区别
  12. EM算法推导,jensen不等式确定的下界
  13. xgboost和lightgbm的区别和适用场景
  14. LR的推导,损失函数
  15. gbdt推导和适用场景
    GBDT适用场景:所有回归问题,设定阈值的二分类问题。
  16. DNN的梯度更新方式
    21.LSTM结构
    为什么能解决梯度问题
    BN是解决梯度消失问题的
    梯度消失梯度爆炸分别有哪些方法
    例如:残差连接、梯度截断
    简单RNN的反向传播(bptt)
    10个step的RNN反向求导有多少梯度(10个)
    SoftMax + CrossEntropy的反向梯度求导
    FM GBDT XGBoost 能否并行?
    特征选择能否并行?
    机器学习算法中 GBDT 和 XGBOOST 的区别有哪些?
    过拟合怎么处理,处理特征(L1L2)形象的表示一下L1L2,如果lamd变大,L1的正方形变大还是变小
    https://blog.csdn.net/red_stone1/article/details/80755144

  1. dropout
  2. batch normalization
  3. L1正则和L2正则

BN的原理你知道吗,讲一下,楼主blablabla。。。。。

  1. BN为啥可以缓解过拟合,详细讲一下

  2. BN有哪些需要学习的参数啊,BN训练和测试是怎么做的?

  3. 除了BN,你还知道那些其他的加速收敛的方法(楼主说到了归一化),面试官说,和BN差不多的那些你了解吗?(GN, IN, FN)

  4. BN一般用在网络的哪个部分啊?

  5. 激活函数了解哪些啊?说一下,楼主说了sigmoid,tanh,ReLU, leaky ReLU, PReLU, ELU,random ReLU等

  6. ReLU有哪些缺点啊,怎么解决的?其他的解决方法你知道吗?

CODING

1 可以解决

  1. 二叉树非递归前序遍历,写完让说了以下思路
    思路:使用栈即可
  2. 合并两个排序链表并删除重复值
    思路:指针
  3. 字符串最长不重复子串(leetcode48)
    思路:滑动窗口
  4. 给定整数n,求离根号n最近的整数
    思路:二分法
  5. 构建树的类,树递归遍历,树非递归遍历
  6. 算法:从右边看被遮挡的二叉树,求露出的node(Leetcode 199 二叉树的右视图)
    思路:类似“之字形遍历二叉树”,保留每一层最右边的节点,可以使用栈存储(节点、深度)对。
  7. 无重复的全排列
    思路:回溯法
  8. 有重复的全排列
    思路:去重即可
  9. 最大子序和
    思路:动态规划
  10. 数组中最长字符串组合(剑指offer 把数组排成最小的数的某种变形)
    面试者:这个没有写,说出了改写Arrays comparator接口排序和hashMap查找。
    我的思路:比较规则为字符串a+b和b+a的大小比较,冒泡排序。
  11. 满二叉树第i层有多少个节点,n层的满二叉树共有多少个节点
    存疑,完全满二叉树若有h层,其节点数为 2 h − 1 2^h-1 2h1
    满二叉树第i层的节点个数可以用代码算出来
    共有多少个节点也可以用遍历程序算出来
    完全二叉树的节点个数(leetcode222)
    此题利用完全二叉树的性质,倒数前两层可能不填满,但前面的层一定都是满的。
    如果左子节点层数==右子节点层数,往右边找;
    如果左子节点层数!=右子节点层数,往左边找;
  12. 反转链表
    思路:prev指针指向空节点,cur指针指向当前节点,next指针指向cur.next;循环做
  13. 堆排序
    思路:完全二叉树,(大顶堆)父节点值>子节点值。
    三个函数:heapify(子结构堆化), build_heap(构建堆), 堆排序
  14. 剪绳子(剑指offer)
    思路:贪心法(绳子段数尽量分成长度为3的,剩下长度为4的话分成两个2);动态规划法(分解考虑)
  15. 移动0(leetcode283)
    思路:快排取轴思想,计数思想
  16. 2sum (leetcode 1)
    思路:哈希表
  17. 快速排序
    思路:选择轴值,排序
  18. 翻转二叉树
    思路:递归和迭代两种方式。迭代,使用栈
  19. 合并两个有序链表?
    思路:两个指针分别指向两个链表,再需要一个辅助指针
  20. 如果链表是无序的怎么合并成一个有序链表?
    思路:将单个无序链表转为单个有序链表,再进行合并。
  21. 接雨水(leetcode 42)
    思路:按列求,找左边最高的和右边最高的中最矮的,计算。
  22. 3sum (leetcode 15)
    思路:数组排序,固定三个数中最左边的值,其后面设定头尾指针,往中间走求和遍历。注意去重。
  23. 嵌套数组,展开成一维
    思路:判断每一个元素是不是数组,若是则递归;不是,将元素append到结果数组中。

2 需要再看

  1. 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径(leetcode113)
  2. 假设按照升序排序的数组在预先未知的某个点上进行了旋转。
    ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
    请找出其中最小的元素。
    你可以假设数组中不存在重复元素。(leetcode 153)
  3. 找到单链表的三等分点,如果单链表是有环的呢
    思路:用快慢指针,一个走一步,一个走三步。如果有环,先判断环在哪,找最后一个节点,然后用之前的无环的做法。
  4. 翻转中间由各种符号隔开的字符串(剑指offer,翻转单词顺序列)

3 完全不会

  1. 给一个字符串能分出哪些IPV4的格式
    不太确定对应到哪个题:
    https://www.cnblogs.com/insus/archive/2013/06/27/3158345.html
    https://blog.csdn.net/yangkunhenry/article/details/81222279
  2. 求一个字符串的顺序子串的个数

工程

  1. Java collection基类有哪些接口及其实现类
  2. Java线程六中状态中的几个转换函数
  3. TCP三次握手
  4. HashMap 是线程安全的吗?为什么?
  5. 从10万个数中找最小的10个,时间复杂度分析(最大堆,考虑内存) 。
  6. 两个文件,每个文件中都有若干个url,找出两个文件中相同的url
    1. hashmap和python列表查询插入复杂度

项目

  1. 十个商品,4亿个用户(听到4亿心里内心慌的要命),每个用户获取三个商品。怎么保证每个商品取到的概率一样,并且同一个用户在第二次获取的时候跟第一次的结果一样。
    内心慌,稳住!概率一样,那就是随机,那保证每次取的一样,种子数,给自己鼓掌… 面试官直接来一句种子数能保证每次取的结果一样,我记得是这样的啊!!然后问我种子数的底层,我乱扯一通。面试官让我再想想,后面就乱说,扯到了哈夫曼树思想压缩空间存4亿用户,扯到了用b+树来存,想不出来了。场景题over
  2. 主要手推了SVM,GBDT公式,问的很细,得对公式非常熟悉
  3. 项目,抓住一两个点问的比较深
  4. 如何来判断一个骰子是否是均匀的

  1. 喜欢看书吗?
  2. 概率题,抽蓝球红球,蓝结束红放回继续,平均结束游戏抽取次数
  3. 个人爱好
    自己突出的优点和缺点(这是个送命题感觉如果答了性格的缺点直接GG,我的回答可以参考一下,缺点说的是
    自己虽然功能都能很好完成但在抽象思维以及更高层次看待问题还需要进一步提升,改进是在做任务前从全局的角度思考,工作中积累经验,努力进步
  4. 学习方式和途径
  5. 你有什么问题问我的吗?(公司吸引您的有哪些地方)

一面面试题

  1. 项目
  2. 问了项目中的模型集成
  3. 简单解释LR(组织语言)
  4. 如何评判一个机器学习模型是好还是不好
  5. 评估指标有哪些
  6. 什么是AUC
  7. 编程:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S。返回满足条件的所有下标组成的列表。
    7-1. 如果数组中存在重复元素呢?应该如何解决?
    思路:可以在指针那里控制重复
  8. 分发糖果(leetcode 135)
    思路:从前往后遍历一次,从后往前再遍历一次。

你可能感兴趣的:(面经笔经)