第一面:上来三道题,然后问基础知识
算法题:
- 链表反转 简单题
- 寻找字符串中最长的无重复的子串
Leetcode 3. Longest Substring Without Repeating Characters - 选择字符串中最长的所有字母出现次数>=k的子串
Leetcode 395. Longest Substring with At Least K Repeating Characters
基础知识:
-
对C++熟悉吗?用过boost库吗?hive呢? 指针和引用有啥区别
-
你对Linux熟悉什么?
-
数据库中 having与where的区别(对数据库的SQL语句的了解)
- “where”是一个约束声明,在查询数据库结果返回之前对数据库的查询条件做一个约束,即返回结果之前起作用,“where”后面不能跟聚合函数;
- “having”是一个过滤声明,在查询数据库结果返回之后进行过滤,即返回结果之后起作用,“having”后面可以加聚合函数;
-
Xgboost对于lightgbm的改进? Gbdt or 随机森林呢?
-
LR的损失函数(极大似然估计+交叉熵损失函数)
-
LR为什么用极大似然估计,损失函数为什么是log损失函数(交叉熵)
https://www.cnblogs.com/stAr-1/p/9020537.html -
交叉熵损失函数的公式,与极大似然损失的异同点呢?
https://blog.csdn.net/weixin_37567451/article/details/80895309
https://blog.csdn.net/b1055077005/article/details/100152102
第二面:上来先问项目,里面的实现的细节,最后做算法题
- K-means算法的基本思想?项目中Kmeans中k是怎么确定的?什么时候迭代结束?
- tf-idf的含义
- 爬虫模块有延迟怎么办?
- 你熟悉哪些深度学习中的算法? (围绕着深度学习问的)
- Adam优化器的原理,深度学习中的其他优化器? (有哪些优化方法)
mini-batch梯度下降法,Momentum梯度下降法,RMSprop以及Adam优化算法 - 深度学习中如何解决梯度爆炸和梯度消失?
batch normalazation,吴恩达上课说的初始化权重可以有效缓解这个问题 - 如何防止过拟合呢?你用过哪些?
- Bert原理,解决什么问题?
- attention原理。为何你项目里不用maxpooling而是用attention(有什么好处),这里你是如何实现的?怎么设计的?
- Sigmoid的公式?用它有啥优点或好处?
算法:
- 二叉搜索树中查找比指定值小的最大值(考虑各种情况)
https://www.cnblogs.com/xiayy860612/archive/2012/10/16/2726861.html
写代码需要更快,而且是最优解。(也有需要和面试官稍微沟通,但是面试官希望的是直接做题,告诉他正确思路直接写代码,然后给代码给他看)
学习相关知识
- 一文搞懂极大似然估计 https://zhuanlan.zhihu.com/p/26614750
L2正则化为何能避免过拟合?
- 一:直觉上,正则化参数设置很大,让参数W很小,甚至很多为0,减少许多隐藏单元的影响,最终这个网络会变得更简单。
- 二:如果正则化参数(W^2前的系数)变得很大,参数W很小,z也会相对变小,此时忽略b的影响,z会相对变小,实际上,z的取值范围很小,这个激活函数,也就是tanh曲线函数会相对呈线性,整个神经网络会计算离线性函数近的值,这个线性函数非常简单,并不是一个极复杂的高度非线性函数,不会发生过拟合。
dropout为何能避免过拟合?
- 直观上理解:不要依赖于任何一个特征,因为该单元的输入可能随时被清除,因此该单元通过这种方式传播下去,并为单元的四个输入增加一点权重,通过传播所有权重,dropout将产生收缩权重的平方范数的效果,和之前讲的L2正则化类似;实施dropout的结果实它会压缩权重,并完成一些预防过拟合的外层正则化;L2对不同权重的衰减是不同的,它取决于激活函数倍增的大小
- 第二个直观认识是,我们从单个神经元入手
batch normalization
Z = WX + b
a = sigmoid(Z)
对每一层的Z值进行归一化,然后服从某种分布,比如均值为beta, 方差为gama的分布(两个参数),每一层的分布可以不同。
Batch Norm 为什么奏效?
- 原因一:
- 原因二: