字节 - 风控算法实习生面试(一、二面)面经
一面
1. 一个一个问项目
2.常见数据预处理工作(缺失值填补,离散变量编码,归一化等等)
3. 数据分箱算法了解吗?分箱算法的好处,python常用的自动分箱的库。(这个我也麻了,自动分箱在学校项目里确实很少用到)
4.了解哪些特征筛选方法?
5. K-means和GMM原理,两个有什么联系和区别
6. 还了解哪些聚类算法?聚类算法有哪些常用的距离度量方式?
7. KNN算法找到最近的样本点计算很复杂,有什么改进算法?(KD树)
8. 决策树算法按照什么标准进行分割的?随机森林算法和boosting tree有什么区别?
9. 随机森林进行特征筛选的原理是什么?(这个当时回答的不好,我本来以为是进行特征前向筛选,根据重要性排序。结果后来在网上搜索发现是向特征X注入随机噪声,计算袋外误差(OOB)变化来进行的排序)
10. 怎样解决过拟合问题?(问的循序渐进,比如我说可以数据增强,就问数据增强哪些方法;然后说加入Dropout,就问dropout在CNN中如何实现的;然后说加入BN层,就直接问那比如一个三通道的图像数据输入,BN是Normal哪个维度的数据......等等)
11. 进程/线程/协程区别。python的GIL机制了解吗?讲一讲为什么有GIL,有什么坏处,怎么解决。(这个问题属实没想到,面算法居然考了这个,回答的不太好,记不太清楚了)
算法:
第一题:走楼梯(N阶楼梯一次1步或者2步,走完多少种方法,LC简单题),就是简单的动态规划。但是他会追问,如何优化空间(两个变量);如何优化时间(快速幂乘法)
第二题:(这道题没怎么见过)给定一个二叉树,玩家1已经选择了二叉树的一个节点X;你是玩家2,你也可以选择一个开始节点。你们开始做游戏,从选择的开始节点开始感染相邻节点(只能感染未被感染的父节点或者子节点),最后谁感染的节点更多谁就赢了。题目给定了一个二叉树,二叉树的总节点个数N和玩家1选定的节点X,输出你是否能够找到一个开始节点使得你本场游戏一定不输(True or Flase)。我估计这道题是LC中等难度的,面试官说你想好了说说思路,能把伪代码写出来就行。一开始想错了,后经过提醒改正,写出了伪代码。
二面
1. 选一个项目展开讲讲(讲了学校的科研项目)
2. 讲一讲项目里用到的元学习网络Reptile。
3. 小样本学习除了这个网络以外还有了解吗?(讲了讲小样本学习网络孪生网络)你们当时为何采用Reptile而不用其他网络呢?
4. GAN网络的原理。GAN网络的损失函数如何定义的?(这个损失函数搞忘了,复习确实不到位)
5. 交叉熵损失函数是什么?写下来。为什么分类任务里面用交叉熵而不用MSE(估计看我前面没说出来GAN损失函数,就问了这个问题)
6. 常用的正则化方法?(跟一面类似,但是详细问了一下L1正则和L2正则的区别,L1 L2服从哪个分布之类的)
7. 还是问了树模型,跟一面相似。(决策树分类标准,决策树学习到的是什么?决策树怎么用于回归问题呢?)
8. 问了RNN的原理;LSTM的原理;除了LSTM还知道哪些gate RNN;写一下LSTM的公式,gate是怎么样的?(这个写LSTM公式又麻了,公式一大串根本记不清楚了,我简单说了一下LSTM的构造和RNN的不同之处,公式记不住了)
概率题
条件概率题:讲的是扔硬币,m个假硬币只有正面,n个真硬币有正面有反面。现在挑了一个硬币,扔了r次硬币全都是正面,问这个硬币是真硬币的概率。(需要在那个面试系统里面边写边讲)
算法题
正则表达式匹配那道题(LC hard难度)
三面
(今晚三面,总结一下以前的面试情况当作复习了。字节实习生要四次面试,太难了)