百度23届秋招研发岗A卷

百度23届秋招研发岗A卷 2024/12/16

1.下面关于 SparkSQL 中 Catalyst 优化器的说法正确的是(ABC)

A.Catalyst 优化器利用高级编程语言功能(例如 Scala 的模式匹配)来构建可扩展的查询优化器

B.Catalyst 包含树和操作树的规则集

C.Catalyst 有不同的规则集处理不同的查询阶段

D.Catalyst 没有特定的库来处理关系查询

2.编程题-小红走矩阵

小红拿到了一个字符矩阵,矩阵仅由'r'、'e'、'd'三种字符组成。她初始站在左上角,每次可以走到一个相邻的字符上(每个字符上、下、左、右最多4个相邻)。但有个限制,小红不能从'r'走到'd',从'e'走到'r',从'd'走到'e',其他情况都能走。

小红想知道,从左上角走到右下角至少需要多少步?

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;

/*
思路
类似于迷宫问题,最少移动步数 bfs寻找最优解
*/

int n,m;
char g[505][505];
bool vis[505][505];
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};

struct node{
    int x,y,cnt=250001; //从原点到该位置的最短步数
};

//检查是否可以由b得到a
bool check(char a,char b){
    if((a=='d'&&b=='r')||(a=='r'&&b=='e')||(a=='e'&&b=='d')) return false;
    return true;
}
int bfs(int x,int y){
    queue<node> q;
    q.push({x,y,0});
    vis[x][y]=1;
    while(!q.empty()){
        node now=q.front(); q.pop();
        if(now.x==n&&now.y==m) return now.cnt;
        for(int i=0;i<4;i++){
            int nex=now.x+dx[i],ney=now.y+dy[i];
            if(nex<=0||nex>n||ney<=0||ney>m) continue;
            if(!vis[nex][ney]&&check(g[nex][ney],g[now.x][now.y])){
                //可以移动
                q.push({nex,ney,now.cnt+1});
                vis[nex][ney]=1;
            }
        }
    }
    return -1;
}
int main() {
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        string s;
        cin>>s;
        for(int j=0;j<m;j++){
            g[i][j+1]=s[j];
        }
    }
    cout<<bfs(1,1);
    return 0;
}

3.下面关于 Spark 的说法错误的是(AD)

A.RDD 的特点:可分区、可序列化、可修改

B.Spark Job 默认的调度模式是 FIFO

C.Spark 比 MapReduce 框架性能快

D.Spark R 是 Spark 的四大组件之一

解析

RDD 的特点:可分区、可序列化、可持久化,不可修改

Spark 的四大组件:1、SparkStreaming:针对实时数据进行流式计算的组件;2、SparkSQL:用来操作结构化数据的组件;3:GraphX,Spark面向图计算提供的框架与算法库;4:MLlib,一个机器学习算法库。

4.如下4个选项表示了四种入栈次序,以及最少需要的栈空间len,最后保证都可以得到出栈序列"sequence",len值错误的是(C)

A.cneuqese 7

B.uqeseecn 4

C.seecneuq 5

D.eneesquc 5

5.一组记录的关键码为(21,88,19,45,13,25,66,33,18),则利用快速排序的方法,以第一个记录为基准,从小到大排序得到的一次划分结果为(B)

A.18,13,19,21,45,25,66,88,33

B.18,13,19,21,45,25,66,33,88

C.18,13,19,45,21,25,66,33,88

D.18,13,19,21,25,45,33,66,88

解析

首尾分别设置指针i和j,与基准元素比较,如果j指向元素小于基准,那么将j指向元素交换到前面,然后切换到i指针同理比较;如果j指向元素大于等于基准,那么位置不变,j--。

6.给定数组 [1,5,11,30,45,47,47,50],若要查找某一元素是否存在,使用二分查找,则至多需要查找(4)次。

7.当一个 B 类地址的子网掩码为 255.255.252.0,每个子网最多可以有多少主机数? 当一个 C 类地址的子网掩码为 255.255.255.252,每个子网最多可以有多少主机数(1022,2)

8.小明居家办公时需要将计算机本地的ssh公钥文件(id_rsa.pub)安装到实验室远程主机(root,ip 地址为:192:168:7:2)对应的账户下,可以通过以下哪个命令完成(C)

A.ssh-add -i ~/.ssh/id_rsa.pub root@192.168.7.2

B.ssh-agent -i ~/.ssh/id_rsa.pub root@192.168.7.2

C.ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.7.2

D.ssh-keygen -i ~/.ssh/id_rsa.pub root@192.168.7.2

解析

本题考查Linux的系统安全。

ssh-add适用于把专用密钥添加到ssh-agent的高速缓存中,A错误。

ssh-agent适用于保存公钥身份验证所使用的私钥,B错误。

ssh-copy-id可以把本地的ssh公钥文件安装到远程主机对应的账户下,C正确。

ssh-keygen适用于ssh生成、管理和转换认证密钥,D错误。

9.下列所给选项中,哪个不是MBR的组成部分(A)

A.开始标志

B.主引导程序

C.分区表

D.结束标志

解析

本题考查Linux的磁盘管理。

MBR主引导记录(Master Boot Record)由3个部分组成:

1)主引导程序,负责从活动分区中装载,并运行系统引导程序,B选项包括;

2)分区表,含4个分区项,每个分区表项长16字节,C选项包括;

3)结束标志,占2个字节,固定为55AA,D选项包括。

MBR是位于磁盘最前边的一段引导,没有开始标志,故题解为A。

10.牛牛系统中现在有三个进程,分别是牛1、牛2和牛3,这三个进程共享同一个缓冲区来完成消息处理,牛1负责把消息放入缓冲区,牛2负责在缓冲区中对消息进行加工,牛3负责把消息从缓冲区读出,现请问牛1和牛3之间的制约关系是(互斥和同步关系)、

解析

并发进程因为共享资源而产生相互之间的制约关系,可以分为两类:

①互斥关系,指进程之间因相互竞争使用独占型资源(互斥资源)所产生的制约关系;

②同步关系,指进程之间为协同工作需要交换信息、相互等待而产生的制约关系。

本题中两个进程之间的制约关系是同步关系,进程牛3必须在进程牛1将数据放入缓冲区后才能从缓冲区中读出数据。

此外,共享缓冲区是互斥访问的,所以它们也具有互斥关系。

11.关于下面 C++ 代码的执行结果说法正确的是(CD)

|-------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <iostream> class Test { public``: ``Test() = ``default``; ``~Test() { ``std::cout << ``"~Test" << std::endl; ``} ``void print1() { ``std::cout << ``"print1" << std::endl; ``} ``virtual void print2() { ``std::cout << ``"print2" << std::endl; ``} }; int main() { ``{ ``Test *t = nullptr; ``t->print1(); ``t->print2(); ``} ``std::cout << ``"I'm OK" << std::endl; ``return 0; } |

A.程序输出中包含 ~Test

B.程序使用空指针调用 print1,因此会崩溃

C.程序使用空指针调用 print2,因此会崩溃

D.如果将 virtual 去掉,那么程序就能正常执行

解析

本题考察对象成员函数和虚函数的理解。

Test() = default; 表示编译器会自动生成一个默认构造函数,这个构造函数不接受任何参数,也不执行任何操作。

~Test()析构函数 ,当一个 Test 类的对象被销毁时(例如对象超出作用域、被删除等情况),这个析构函数就会被调用。

print1 是一个普通成员函数 ,保存在代码区,编译后已经存在,且没有使用类中的任何成员,因此可以使用空指针调用

print2 是一个虚函数 ,通过虚函数表进行定位,而虚函数表的指针需要对象创建才有,因此空指针调用虚函数无法找到虚函数表,会出现异常

如果将 print2 变为普通函数,那么就可以正常使用(print2 也没有使用任何类成员)。因此 D 选项正确。

12.下列说法中错误的是(BD)

A.不可以将构造函数声明为虚函数

B.当构造一个对象时先执行构造函数体内的内容,再初始化各个成员变量

C.构造函数不能带返回值,也不能返回void

D.类成员变量初始化顺序由构造函数初始化列表顺序决定

解析

构造函数不能被声明为虚函数,因为虚函数的调用依赖于虚表(vtable),而虚表是在对象构造完成后才被设置好的。因此,构造函数不能是虚函数。

B选项当构造一个对象时,先初始化各个成员变量,再执行构造函数体内的内容;D选项,类成员变量初始化顺序由成员变量在类定义中的声明顺序决定的

构造函数不返回任何值,甚至连void也不能作为返回类型。构造函数的目的是初始化对象,而不是返回值。

13.在 C++ 中,以下关于静态成员函数与普通成员函数区别,说法正确的是(ABC)

A.普通成员函数有 this 指针

B.普通成员函数可以访问类中任意成员

C.静态成员函数没有 this 指针

D.静态成员函数可以访问类中任意成员

解析

A. 普通成员函数有this指针 :正确。普通成员函数(非静态成员函数)确实有一个隐含的this指针,它指向当前对象。这个this指针是成员函数的第一个参数,虽然它不需要在函数参数列表中显式声明。

B. 普通成员函数可以访问类中任意成员:正确。普通成员函数可以访问类中的任意成员,包括静态成员和非静态成员。

C. 静态成员函数没有this指针 :正确。静态成员函数没有this指针,因为静态成员函数不属于任何特定的对象,它们属于类本身

D. 静态成员函数可以访问类中任意成员:错误。静态成员函数只能访问静态成员变量和其他静态成员函数。它不能直接访问非静态成员变量,因为非静态成员变量属于对象,而静态成员函数不属于任何特定的对象。

20.在Linux中,有一个名为test的文件如下所示,执行awk '{print $NF}' test命令将输出

1,2,3,4

5,6,7,8

9,10,11,12

end

test1 1,2,3,4

test2 5,6,7,8

tet3 9,10,11,12

tst4 13,14,15,16 end

解析

awk '{print $NF}' 是一个 awk 命令,用于打印每行的最后一个字段。

这里的**$NF 是一个特殊变量,表示当前行的最后一个字段**

当你运行这个命令时,awk 会读取输入的每一行,分割成字段(默认使用空白字符作为分隔符),然后打印每行的最后一个字段。

14.查询student_table中男生、女生的平均年龄(忽略age为NULL的记录),以下正确的是(B)

表中全部记录如下:

|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 | +------+------------+------------+------+------+ | id | name | birth | sex | age | +------+------------+------------+------+------+ | 1005 | | | NULL | 21 | | 1006 | 王五 | 2000-08-06 | 女 | NULL | | 1008 | 张三 | 2002-12-01 | 女 | 20 | | 1010 | 李四 | 2001-01-01 | 男 | 23 | | 1011 | 李四 | 2002-08-06 | 女 | 23 | | 1012 | 张三 | 2001-12-01 | 女 | 20 | | 1013 | 赵六 | 2000-09-06 | 男 | NULL | |

A.SELECT sex ,average(age) FROM student_table WHERE sex IS NOT NULL GROUP BY sex ;

B.SELECT sex ,avg(age) FROM student_table WHERE sex IS NOT NULL GROUP BY sex ;

C.SELECT sex ,sum(age)/count(*) FROM student_table WHERE sex IS NOT NULL GROUP BY sex ;

D.SELECT sex ,sum(age)/count(sex) FROM student_table WHERE sex IS NOT NULL GROUP BY sex ;

解析

CD:错误,count(*)是全部记录,count(sex) 是sex不为NULL的记录,需要用【sum(age)/count(age)】才正确!!avg默认不计入NULL;

15. 如果要选择Student_A和Student_B表中公共部分,并按照class_id降序输出,请问该如何补全以下这段SQL语句(A)(注明:只需要输出Student_A或Student_B的student_id和student_name字段)SELECT student_id, student_name FROM Student_A __________________;

A.INTERSECT SELECT student_id, student_name FROM Student_B ORDER BY class_id DESC;

B.EXCEPT SELECT student_id, student_name FROM Student_B ORDER BY class_id DESC;

C.INTERSECT SELECT student_id, student_name FROM Student_B ORDER BY class_id;

D.NOT INTERSECT SELECT student_id, student_name FROM Student_B ORDER BY class_id DESC;

解析

可以使用INTERSECT获取两个集合中公共部分

A选项正确,B选项使用的是EXCEPT表示差集不符合题意,C选项是升序排序不符合题意,D选项为非公共部分,不符合题意,故本题选择A。

16.下列关于SQL的描述,错误的是(D)

A.SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)

B.SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制

C.关系型数据库中,虽然存在着多种不同版本的 SQL 语言,但它们都以相似的方式共同地来支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE)

D.Mysql、Oracle、Redis都是关系型数据库,都有相应的SQL语言

解析

Mysql和Oracle数据库是典型的关系型数据库,但Redis是非关系型数据库,是一个遵守BSD 协议的高性能的 key-value 键值对类型的数据库

相关推荐
Ares-Wang2 分钟前
ASP.net Core EntityFramework Code EF code 汇总
数据库·oracle·asp.net
huipeng9266 分钟前
第十章 类和对象(二)
java·开发语言·学习·1024程序员节
石板小湫7 分钟前
53 基于单片机的8路抢答器加记分
java·数据库·单片机
dubochao_xinxi12 分钟前
在 Termux 中安装 Docker
开发语言·数据库·python·qt
一枚生瓜子19 分钟前
黑皮书-计算机科学导论02
开发语言
码农派大星。21 分钟前
redis数据类型(二)
数据库·redis·缓存
跃渊Yuey34 分钟前
【C++笔记】AVL树
c++·笔记
小袁搬码39 分钟前
PostgreSQL17.x数据库备份命令及语法说明
数据库·postgresql·pg数据库备份
dubochao_xinxi41 分钟前
E: 仓库目录 /var/cache/apt/archives/partial 确实。 - Acquire (2: 没有那个文件或目录)
开发语言·数据库·python·qt
咖猫42 分钟前
Guava库中的`ImmutableCollections`进行集合操作的示例
java·开发语言·guava