今日头条推荐系统算法岗日常实习面试经验

本文分享了作者在2019年3月面试今日头条推荐系统算法岗的详细经历,涵盖了一面的深度学习基础和算法题,二面的矩阵求逆与负载均衡问题,以及三面关于Python shuffle实现的讨论。面试中涉及动态规划、图学习方法与传统图谱理论的比较等技术话题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今日头条推荐系统算法岗日常实习面试经验

时间:2019年3月27日 地点:校内视频面试

一面

深度学习基础

  • Adam的原理、公式 (没答上来)

    找了一个简书的讲解,挺好的,有需要的同学可以移步简单认识Adam优化器

  • Dropout的原理 (为什么训练时有dropout测试时没有dropout,这样会发生scale的偏移吗)

    答:不会,因为训练时dropout机制会把dropout_rate = p的输出乘以1/(1-p)

  • Batch Normalization的原理

    答:在mini_batch上进行而不是在整个数据集上进行。在训练集上有BN测试集上没有BN,这样不会发生数值上的偏移,道理类似dropout,即记录下训练集上的BN参数(均值、标准差、\beta、\gamma)作为网络参数的一部分。

  • 为什么要用ReLU替代tanh/sigmoid/softmax

    答:ReLU求导的值要么是0要么是1,不会引起梯度消失或梯度爆炸

  • ResNet

    答:通过x + f(x)的结果,让深层网络获得不差于浅层网络的学习能力,从而允许网络变得更深

算法题

  • 给定数组nums和整数target,求最少用nums中的整数多少次,使得这些数之和为target。比如给定nums = [3, 5, 12], target = 13, 答案为3 (13 = 3 + 5 + 5)

    答:BFS求最少的组合(我答得太啰嗦了,面试官就没让写代码)

    标准答案是动态规划,其实是动态规划里面很经典的问题,当时没想起来(汗)
    附动态规划的题解

class Solution {
   
   public int coinChange(int[] nums, int target) {
   
       int[] dp = new int[target + 1];
       Arrays.fill(dp, 0x3f3f3f3f);
       dp[0] = 0;
       Arrays.sort(nums);
       int i = 0;
       for (i = 1; i <= target; ++i) {
   
           for (int c: nums) {
   
               if (i >= c) {
   
                   dp[i] = Math.min(dp[i], dp[i-c] + 1);
               } else {
   
                   break;
               }
           }
       }
       return dp[target] == 0x3f3f3f3f? -1: dp[target];
   }
}

结果是面试官换了一道题

  • 给定一个Y形链表和Y头部两个头指针,求第一个汇合点

    答:用两个指针r1, r2从两个头指针开始遍历(不妨记两个头指针为l1, l2),计算从l1, l2出发Y形链表的长度len1, len2. 不妨设len1 < len2, 则先将l2移动(len2 - len1)次,再将l1, l2同步移动,直到l1 == l2.

二面

  • 矩阵求逆是如何操作的?【答:高斯消元】描述过程?【答:左边一个A,右边一个I,消消消,消到左边的A变成I,右边的I就变成了A的逆矩阵】为什么可以这样算?如何证明?
    答:高斯消元由矩阵行变换组成,矩阵行变换等价于左乘另外一个系数矩阵,所以当左边的A变到I,A就左乘了A的逆矩阵,同时右边的I也左乘了A的逆矩阵得到A的逆矩阵。这就是高斯消元法的原理。(马后炮分析,面试的时候没答上来,是面试官提示的)

  • 一个负载均衡里面产生的数学问题:现在有两台服务器A和B,后台算法是A和B都有1/2的概率被访问,如果访问的服务器宕机,则会以1/2的概率继续请求两个服务器。现在服务器B宕机了,求平均访问的次数?

    答:这是一个随机变量求期望的问题。记平均访问的次数为p,

    ​ p = 1/2 * 1 + (1/2)^2 * 2 + (1/2)^3 * 3 + … + (1/2)^n * n + …

    令q = 1/2 * p = (1/2)^2 * 1 + (1/2)^3 * 2 + … + (1/2)^n * (n-1) + …

    故p = 2 (p - q) = 2 * [1/2 + (1/2)^2 + (1/2)^3 + …] = 2 * (1/2)/[1 - (1/2)] = 2

  • merge两个有序数组,写代码,写测试用例,

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值