百度 2022 提前批-数据挖掘算法工程师面经

百度 2022 提前批-数据挖掘算法工程师面经

一面

之前准备的一直都是后端的东西,实际上自己做的是很算法很理论的方向,在找工作的过程中也发现了可能如果找后端的工作我是真的没有任何优势。在师兄撺掇我投了字节的算法迅速挂掉后,投字节的客户端因为实习没过也迅速地挂掉了,萌生了要不干脆就投算法的想法。百度是投算法的第一个公司,萌生了这个想法之后 7 月 20 号投递的百度,7 月 21 号下午两点半就打电话和我约面试,约在了 7 月 22 号下午三点钟。以下记录面试的整个过程,因为没有安装如流,面试官改约的电话面试。

首先上来进入一个链接,让我直接写一个快速排序,当时有点紧张,差点就手抖写堆排序了。写完后,给了一道题,找一个数组的中位数,实际上还是考察排序的知识点。因此我就和面试官说这道题可以先用之前写好的快速排序直接排序后根据索引找到中位数,也可以构建一个 (n+1)/2 大小的堆用堆排序做。由于之前已经写了快排了,现在我用堆排序来实现这个问题。写完后问我堆是怎么构建的以及堆排序的时间复杂度。

接着让我介绍我的项目,项目特别理论,其实在没法手推演示的情况下还挺难表述的。讲述的时候可能面试官有点没听懂,回去还是要想想怎么用通俗易懂的语言将其表达出来。在这个过程中,没办法,甚至用给的写代码的链接,用latex手打了模型公式给面试官看

然后简单地考察了算法的八股,问什么时候用交叉熵损失和什么时候用 mse,虽然很简单,但是第一次面算法,之前准备的比较仓促,说的时候有点磕磕绊绊。然后问我正则化的知识,我说了 L1 正则和 L2 正则。又问我这两个正则项的区别,我秒答使用 L1 正则项会导致解的稀疏,一面就结束了,合计一小时

本来感觉项目表达的也不好,后面回答问题一开始也有点紧张有点磕磕绊绊,应该没戏,终于 7/26 打电话约的 7/27 二面

二面

二面的面试官同样很 nice!
首先上来让我先写了一个最小栈的题目,迅速写完后面试官看了没问题手撕这一part就过去了。然后开始问项目,因为对我研究的那个模型不太熟悉,让我介绍一下我的研究对象。由于上次感觉项目介绍的不好,面试前特地准备了一下,通过口述和公式结合对研究内容进行解释,这次面试官应该是听明白了。

然后开始结合场景问八股。问如果在研究的时候,用对数几率回归训练了一个模型,这时候另一个同事帮忙再做一个double check,但是比较粗心,将其中的一个特征多复制了一次,会对结果造成什么影响。听到的时候确实挺懵的,一个是对对数几率回归不是特别了解,第二个是不知道该怎么说。开始瞎说说由于该特征被复制了一次,那个特征的权重应该会被平分掉。面试官问说权重和等于原来的权重这有什么数学依据吗?看我有点懵,引导我说对数几率回归模型是一个凸模型吗?我说是的,就反应过来了,凸模型的最优解是唯一的。如果说它的权重和改变的话那说明原来得到的就不是最优解了。然后尤文说权重被平分有什么依据吗?看我说不上来就说,确实没什么依据…然后又问那这种行为对最后的auc有影响吗?我只能边思考分析给他听。auc是roc曲线下的面积,而roc曲线表示的是将每个样本的置信度作为阈值时的真正例率和假正例率的比例。而冗余的特征对整个模型的贡献是不变的,所以应该是不会有什么改变。面试官肯定了我的思路,说确实不会有什么影响。然后面试官又问那是不是意味着这种操作是可以被允许的。我说那肯定是不能被允许的。一个是这么粗心的话确实是不应该的,这也就是在这个模型中没有造成大的影响。其次是考虑比较极端的情况吧,特征被复制了很多次,特征维度的提高可能求解会变慢(瞎说的)。面试官问还有吗?我说那肯定在存储上会占用更多的存储资源。但是面试官说从结果解释性上呢?恍然大悟,原来面试官想听的是这个…确实由于特征的提高,明明是相同的特征,但是他们各自有个权重,而且这是被发现了,如果是没被发现的话很难分析特征的作用去得到我们想要的结果以及进一步优化。

场景题差不多结束了,面试官又问对正则化手段有了解吗?我简单地说了一下 L1 正则和 L2 正则。面试官问什么时候用 L1 正则什么时候用 L2 正则呢?我说 L1 正则主要是会导致解的稀疏。如果是需要进行特征筛选,对解的稀疏性有要求的时候使用 L1 正则。另外像在神经网络等模型中由于使用SGD,其实使用 L1 正则也不能得到精确的稀疏解,所以一般都是使用 L2 正则。又问我 L2 正则会对模型造成什么影响。不知道该怎么答,就说 L2 正则能够在模型过大的时候对其进行惩罚,会减小权重但不会减小到零。最后面试官又问了问有什么别的模型的调参经验吗?我说在数据挖掘比赛中可能用过一些树模型,问我lightgbm一般调啥参。我说一般是调一下树的最大深度,叶子结点的最大样本数等,去做一个预剪枝。又问我有没有nn的调参经验,我说没。最后就是反问环节了。8.1 打电话约8.2三面

三面

三面比较考察业务了。一上来就让我说一个自己做的关于实际应用方面的项目。但是基本都是看论文,推公式,实际的算法项目真没有啊,只能说了一下前面参加 Fintech 的项目。大概就是从特征筛选讲到最后模型融合以及最终的表现。说完之后她说和他们做的广告策略也挺像的,让分析一下如何根据他们的数据去分析客户是否会流失。第一次答类似的题目也答不好吧,就挺懵逼的,也不知道他们的数据有哪些属性。她说我可以自己想,她告诉我有没有…磕磕绊绊、断断续续地聊了一个多小时吧加起来,确实是没有算法相关的实操经历,还停留在理论方面。后来官网的流程就变成共享中,还是挂了

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我明白了。关于数据结构与算法的Python面经,我可以为您提供一些常见的问题和答案,希望能对您有所帮助。 1. 什么是哈希表?如何实现哈希表? 哈希表是一种数据结构,它通过将关键字映射到表中一个位置来实现快速查找。哈希表的实现需要两个部分:哈希函数和冲突解决方法。哈希函数将关键字映射到表中的位置,而冲突解决方法则处理不同关键字映射到同一位置的情况。 2. 什么是二叉树?如何实现二叉树? 二叉树是一种树形结构,它的每个节点最多有两个子节点。二叉树的实现需要定义节点类,并在节点类中定义左右子节点属性。二叉树的遍历方式有三种:前序遍历、中序遍历和后序遍历。 3. 什么是堆?如何实现堆? 堆是一种特殊的树形结构,它满足堆属性:对于每个节点x,其父节点的值小于等于x的值(最小堆)或大于等于x的值(最大堆)。堆可以用数组来实现,数组中的每个元素对应堆中的一个节点。 4. 什么是动态规划?如何实现动态规划? 动态规划是一种解决多阶段决策问题的方法。它将问题分解为多个子问题,并通过保存子问题的解来避免重复计算。动态规划的实现需要定义状态转移方程和边界条件。 5. 什么是图?如何实现图? 图是一种由节点和边组成的数据结构,它可以用来表示各种实际问题。图可以用邻接矩阵或邻接表来实现。邻接矩阵是一个二维数组,其中每个元素表示两个节点之间是否有边。邻接表是一个链表数组,其中每个链表表示一个节点的邻居节点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值