B站2021算法笔试题,选择题部分剖析三

作者 | 梁唐

出品 | 公众号:Coder梁(ID:Coder_LT)

大家好,我是梁唐。

今天我们接着之前,继续看B站2021算法岗校招笔试题选择题的最后一个部分。

题目来源于牛客网,感兴趣的同学可以点击阅读原文跳转。

第一题

分布式系统的CAP原则指分布式系统在三个要素中只能兼顾两点。下列不属于三要素中的是

这道题考察的是对分布式系统基本的了解,CAP是分布式系统当中的基本原则。

其中的C指的是consistency,即一致性,A指的是availability,即可用性,P指的是partition tolerance,即分区容错性。

事务性并不是CAP中的要素,别和数据库ACID四原则弄混。

第二题

对于n个带权样本的随机有放回带权采样,采样m次。最优时间复杂度为?

表面上来看,这题考的是时间复杂度,其实本质上是在考察算法。

加权有放回采样速度最快的算法叫做alias采样算法,它的时间复杂度分为两个部分,预处理部分和采样的部分。其中预处理部分的复杂度是O(n) ,每次采样的复杂度是O(1) ,加起来的复杂度是O(n+m) ,故选B。

简单介绍一下算法,显然,所有样本被抽中的概率和是1。算法上来会先对每一个样本的概率乘上N(样本总数),这样得到的概率和就是N。我们把每个样本的概率分布画出来:

其中有些大于1,也有一些小于1,但是均值肯定是等于1的。

接着我们把这个柱状图进行均摊,将长度超出1的部分分摊到其他柱上。确保每个小方格面积为1,并且每个小方格内最多只有两个样本,分摊之后得到的图如下:

这样一来我们会得到两个数组,一个数组存的是事件i占据比例prob,在这个例子当中就是[2/3, 1, 1/3, 1/3]。第二个数组存的是填充的样本编号alias,在这个例子当中就是[1, null, 0, 0]。

我们在采样的时候会出两个随机数,第一个随机数在0-n之间,用来选择列。第二个随机数在0-1之间,如果它小于prob[i],那么选择样本ii,否则选择样本alias[i]。

大家感兴趣可以算一算,看看这样得到的结果是不是符合预期。

第三题

关于机器学习中FM算法(Factorization Machines) 与MF算法(Matrix Factorization),以下说法正确的是?

这道题考察的是对FM算法和MF算法的理解。

这两个算法都涉及向量交叉,有一些相似的地方,存在一些迷惑性。其中FM算法核心思想是使用向量交叉来计算二阶参数的系数,是推荐系统中的经典模型。MF算法是用来分解大规模的矩阵,将一个长和宽都非常巨大的矩阵分解成三个规模更小矩阵的乘积,达到压缩存储空间,以及表示user和item向量的效果,也是推荐系统中的经典算法。

从目的上来看,两者的目的完全不同,可以排除选项A。

选项B很有迷惑性,它的前半句是正确的,FM算法的确引入了二阶交叉特征。但后半句不对,FM算法本身的初衷正是为了解决二阶样本过于稀疏的问题,所以B也可以排除。

C算法是正确的,FM算法给每一个特征赋予了向量,用向量之间的内积来计算交叉特征的权重,MF算法则将user-item的庞大矩阵拆解成user向量和item向量,都可以看成是一种embedding。

第四题

下面哪一方法可以判断出一个有向图是否有环(回路)

算法基础题,节点的度可以判断是否存在欧拉回路,最短路径可以求最短路径,但不能求出是否有环,同样也可以排除D选项。

拓扑排序可以判断是否有环,如果还存在节点入度大于0,但又找不到入度为0的节点,那么说明存在环。

第五题

机器学习训练时,Mini-Batch 的大小优选为2个的幂,如 256 或 512。它背后的原因是什么?

通过排除法也可以知道选B。

梯度下降算法的速度和mini-batch的奇偶性显然没有关系,不使用偶数损失函数不稳定也站不住脚,所以排除AC。

其实严格说起来B选项也有一点不太准确,因为主要不是为了符合内存要求,而是符合线程的要求,CPU或GPU的线程数都是2的幂。

总体来说这题不是非常严谨,可以忽略。

第六题

以下哪些是bert预训练时学习的任务?1. Masked LM 2. NER 3. NSP 4. Capitalization Prediction Task

bert基础题,奈何老梁不做NLP,也不知道……

正确答案是C。

第七题

在以下的哪一个数据集上,一般不使用 Hidden markov model?

隐马尔可夫理论题,了解隐马尔可夫模型的话会知道,它是一个针对序列的算法,含有一条可见状态链和一条隐含状态链。

其中股票的价格、每日访问用户数、中文分词之间都是序列数据,只有电影评分数据集完全是离散的,没有时序的关系。

故选B。

第八题

假设数据集的输入x和输出y均为实数,数据集中有三个数据点如下: {(x,y)}={(0,1), (1,1), (2,0)}。在线性回归模型(y=a+bx+noise)下, 使用留一法(Leave One Out)交叉验证得到的均方误差是多少?

这道题比较麻烦一点,首先我们要清楚什么是留一法。

留一法的意思是,将数据平均分成k份,每次用k-1份进行训练,留下一份作为验证,一共进行k次,这是一种解决训练样本不足的方法。

由于我们只有3条数据,所以对应每次会用2条进行训练,一条验证。首先是(0, 1), (1, 1),训练之后得到的模型为y = 0x + 1。在(2, 0)位置的误差是1。

第二次选择(1, 1), (2, 0),得到的模型为y = -x + 2。在(0, 1)处的误差也是1。

第三次选择(0, 1), (2, 0),得到的模型为y = -0.5x + 1,在(1, 1)处的误差是0.5。我们把这三个误差综合起来算均方差,也就是\frac {\sqrt{1^2 + 1^2 + 0.5^2}} 3 = 0.75 ,所以选C。

到这里这一次笔试的所有选择题就和大家盘点完了,三道算法题之前写过一道,还剩下两道,之后会抽一期文章一起写了。

总的来说,这个笔试的难度还是可以的,涉及的知识面以及难度都不算太低,甚至老梁这个老江湖都有不会的。如果分数要求高的话,想要通过可能也不是太容易。为了面试找份好工作辛苦准备,结果倒在笔试上实在是太遗憾了,老梁有过类似的经历,所以才会有写一写这些题解的想法。

尤其是这两年市场行情不是非常好,找工作不是一件容易的事,希望能够帮助到一些小伙伴吧。

感谢大家的阅读~

原文地址:https://cloud.tencent.com/developer/article/2117573

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340