2024国家智能网联汽车创新中心首期中阶营导学自测

本次笔试共两部分,题型为单选或多选,满分100分。
第一部分为rust编程知识,共20小题,40分;
第二部分为操作系统知识,共30小题,60分;请认真作答!
*
基本信息:
姓名:
姓名:
邮箱:
邮箱:
一、rust编程知识(20道)(每题2分,多选题少选、错选不得分)
*
1.下列关于rust中关键字unsafe不正确的是()【单选】
A.Unsafe关键字是rust中用于标识不安全代码的标记
B.用于编译器的保护机制,过滤可能导致不安全代码的操作
C.unsafe代码块不会强制执行内存安全保证
D.通过unsafe关键字来切换到不安全rust,接着可以开启一个新的存放不安全代码的块
*
2.下面是一段rust代码
let nums = vec![1,2];
let temp = &*nums;
判断temp的类型()【单选】
A.&[i32]
B.i32
C.[i32]
D.Vec<i32>
*
3.用rust语言对a数组进行初始化定义,以下正确的是()【多选】【Multiple】
A.let a:[i32;5]= [1,2,3,4,5]
B.let a:[String;5] = ['h','e','l','l','o']
C.let a = [1;5]
D.let a = ['h','e','l','l','o']
*
4.下面这段代码的输出是()【单选】

fn main(){

    let a = String::from("Hello");

    let b = a;

    println!("{}",a);

    println!("{}",b);

}

A.编译错误
B.运行时错误
C.输出两个"Hello"
D.输出一个"Hello"和一个空行
*
5.关于rust语言,以下说法错误的是()【单选】
A.rust变量在默认情况下是不可变的,可以通过mut关键字让变量变为可变的
B.rust中每一个值都被一个变量所拥有,该变量被称为值的所有者
C.使用泛型参数,并不是必须要在使用前对其进行声明
D.dyn关键字只用在特征对象的类型声明上,在创建时无需使用dyn
*

6.下面这段代码的输出是()【单选】

fn main() {

    let x: i32 = 10;

    {

        let y: i32 = 5;

        println!("x 的值是 {}, y 的值是 {}", x, y);

    }

println!("x 的值是 {}, y 的值是 {}", x, y);

}

A.x的值是5,y的值是10
B.无法编译
C.x的值是5,y的值是10
D.x的值是5,y的值是10和一个空行
*

7.下面这段代码是否可以成功运行( )【单选】

fn main() {

    let x: i32 = 5;

    {

        let x = 12;

        assert_eq!(x, 5);

    }

assert_eq!(x, 12);

}

A.可以
B.不可以
C.不确定
*

8.下面这段代码的运行结果是()【单选】

fn main() {

    println!("{}, world", x);

}

fn define_x() {

    let x = "hello";

}

A.hello,world
B.world
C.hello
D.编译错误
*
9.在下列Rust代码空缺部分中填入相应的代码,能够正常运行( )【单选】

    ___①______

    struct Apple{

         size: i32,

    }

    fn borrow_apple(apple: __③___  Apple) {

        println!("borrow can access variable{:?}", apple);

        apple.size=20;

    }

    fn main() {

        let mut apple:Apple = Apple {size:10};

        borrow_apple(__②___  apple);

        println!(" apple is alive {:?}",apple);

    }

A.①不填 ②:&mut ③:&mut
B.①不填 ②:& ③:&
C.①:#[derive(Debug)] ②:&mut ③:&mut
D.①:#[derive(Debug)] ②:& ③:&
*

10.下面这段代码的运行结果是()【单选】

#[derive(Debug)]

struct Foo;

impl Foo {

    fn mutate_and_share(&mut self) -> &Self {

        &*self

    }

    fn share(&self) {}

}

fn main() {

    let mut foo = Foo;

    let loan = foo.mutate_and_share();

    foo.share();

    println!("{:?}", loan);

}

A.编译报错
B.运行报错
C.Foo
D.空,什么都没有
*
11.以下关于str、&str、String的说法错误的是()【单选】
A.str字符串是DST动态大小类型
B.str是一种字符串类型,而&str则是一种对字符串的引用类型
C.String是一种不可变的、堆分配的字符串类型
D.String拥有所有权,而&str只是对字符串的引用
*
12.以下关于move、copy和clone的说法正确的是()【多选】【Multiple】
A.move关键字在rust中通常用于显式地将所有权从一个变量转移到另一个变量
B.copy trait:类型具有copy特质时,它表示在进行赋值操作时会发生复制而不是移动
C.clone trait表示类型可以通过显式地调用clone方法进行克隆
D.move、copy、clone都不会发生所有权的转移
*
13.以下关于智能指针的说法错误的是()【单选】
A.Box<T>是一种堆分配的智能指针,它允许将数据存储在堆上而不是栈上,并且具有确定的大小
B.Rc<T>是引用计数智能指针,它可以使多个引用指向相同的数据,并在最后一个引用被丢弃时释放数据
C.Arc<T>是原子引用计数智能指针,它与Rc<T>类似,但可以在多线程环境中安全地共享
D.Box<T>并不是唯一所有权的指针
*
14.下面关于rust中常量的说法错误的是()【单选】
A.关键字是const而不是let
B.定义常量可以不用指明类型(如 i32)
C.常量可以在任意作用域进行定义,其生命周期贯穿整个程序的生命周期
D.常量的赋值只能是常量表达式/数学表达式,也就是说必须是在编译期就能计算出的值,如果需要在运行时才能得出结果的值比如函数,则不能赋值给常量表达式
*
15.下面这段代码的执行结果()【单选】

fn main() {

    let vec0 = Vec::new();

    let mut vec1 = fill_vec(vec0);

    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);

    vec1.push(88);

    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);

}

fn fill_vec(mut vec: Vec<i32>) -> Vec<i32> {

    vec.push(22);

    vec.push(44);

    vec.push(66);

    vec

}

A.vec1 has length 3 content `[22, 44, 66]` vec1 has length 4 content `[22, 44, 66, 88]`
B.vec1 has length 3 content `[22, 44, 66, 88]` vec1 has length 4 content `[22, 44, 66, 88]`
C.编译错误
D.vec1 has length 3 content `[22, 44, 66]` vec1 has length 3 content `[22, 44, 66]`
*

16.下面关于rust中生命周期的说法错误的是()【单选】

A.引用的生命周期描述了引用在程序中有效的时间范围。当引用超出其生命周期范围时,就不能再使用它,以避免出现悬垂引用
B.在函数签名或结构体中,可以使用生命周期参数来声明引用的生命周期。生命周期参数以双引号(”)开头
C.rust 编译器在某些情况下会自动推断引用的生命周期,而不需要显式地指定生命周期参数或注解
D.rust 的生命周期系统确保了内存安全和线程安全,同时提供了对引用的精确控制
*

17.下面关于rust所有权的说法正确的是()【多选】

【Multiple】
A.在 rust 中,所有的数据都有一个对应的所有者,这个所有者负责管理内存资源的分配和释放
B.rust 的所有权规则包括移动(move)、借用和复制(copy)等,这些规则确保了内存的安全管理
C.当将值传递给函数时,所有权可能会被转移给函数,如果需要在函数内部使用值而不转移所有权,可以使用引用进行借用
D.对于实现了 copy trait 的类型,在将其赋值给另一个变量时,原来的变量将不可以继续使用
*

18.下面关于rust的crates的说法正确的是()【多选】

【Multiple】
A.Cargo 是 Rust 的官方构建系统和包管理器,它负责管理 Rust 项目的依赖、构建、测试和发布等任务。使用 Cargo 可以很方便地添加、更新、删除和搜索 crates
B.rand:用于生成随机数的库,支持多种随机数生成算法。Rand 提供了生成随机数、随机数序列、随机洗牌等功能,适用于密码学、模拟、游戏开发等场景
C.对于 rust 而言,包是一个独立的可编译单元,它编译后会生成一个可执行文件或者一个库
D.同一个包中不能有同名的类型,但在不同包中就可以
*

19.关于rust的格式化输出,错误的是()【单选】

A.print! 将格式化文本输出到标准输出,不带换行符
B.println! 将格式化文本输出到标准输出,但是在行的末尾添加换行符
C.format! 将格式化文本输出到 String 字符串
D.println!("{:04}", 42);会输出 ”42”
*
20.下列说法错误的是()【单选】
A.rust中的字符是 Unicode 类型,因此每个字符占据 4 个字节内存空间
B.rust中的字符串是 UTF-8 编码,也就是字符串中的字符所占的字节数是变化的(1 - 4)
C.在rust中数组 array的长度是可以变化的
D.如果使用超出数组范围的索引来访问数组元素会导致程序崩溃退出
二、操作系统知识(30道)(每题2分,多选题少选、错选不得分)
*
21.下列选项中,降低进程优先级的合理时机是()【单选】
A.进程的时间片用完
B.进程刚完成I/O,进去就绪队列
C.进程持久处于就绪队列
D.进程从就绪状态转为运行态
*
22.以下哪些属于操作系统的基本特征()【多选】【Multiple】
A.并发性
B.安全性
C.共享性
D.虚拟性
*
23.关于并发和并行的说法正确的有()【多选】【Multiple】
A.并行指的是同时进行多个任务
B.并发指的是多个任务的同时发生,但不一定同时执行
C.在单机(单CPU)系统内进程只能并发执行,不能并行
D.并发和并行是对同一现象的两种不同称呼,本质是一样的
*
24.下列选项中,不是操作系统关心的主要问题的是()【单选】
A.管理计算机硬件
B.设计并提供用户与计算机硬件之间的接口
C.管理计算机中的信息资源
D.高级程序设计语言的编译
*
25.进程的基本特征()【多选】【Multiple】
A.独立性
B.并发性
C.异步性
D.动态性
*
26.在UNIX系统中运行以下程序,除去main最多可额外再产生几个进程?()【单选】

int main(){

      fork();

      fork() && fork() || fork();

      fork();

}

A.9
B.10
C.19
D.20
*
27.Linux的文件目录权限644,对其它人(非目录拥有者)而言,有什么权限()【单选】
A.可读可写
B.可读可写可执行
C.可读
D.可写
*
28.在操作系统中,驱动程序的功能包括以下哪个选项()【单选】
A.提供硬件设备与操作系统之间的接口
B.实现用户界面和图形显示
C.管理系统内存
D.实施网络通信协议
*
29.RISCV特权级架构对应正确的是()【单选】
A.0---00---机器模式
B.1---01---用户/应用模式
C.2---10---虚拟监督模式
D.3---11---监督模式
*

30.计算机操作系统属于什么软件()【单选】

A.应用软件
B.系统软件
C.工具软件
D.办公软件
*

31.下列关于实时系统的特征错误的是()【单选】

A.具有多路性特点
B.很好的独立性
C.广泛而且突出的交互性能
D.高可靠性
*
32.Linux可以用什么命令查看内核版本()【单选】
A.hostname
B.id
C.whoami
D.uname -a
*
33.Linux程序运行后,文件句柄0,1,2分别是()【单选】
A.标准输入、标准输出、标准错误
B.标准错误、标准输入、标准输出
C.标准输出、标准输入、标准错误
D.都不是
*
34.在内核编译的过程中,我们要清楚内核的配置文件.config,但不清楚一些补丁文件,可以执行哪条命令()【单选】
A.make clean
B.make remove
C.make mrproper
D.make disclean
*

35.为了描述进程的动态变化过程,采用了一个与进程相联系的(),根据它而感知进程的存在。【单选】

A.进程状态字
B.进程优先数
C.进程控制块
D.进程起始地址
*

36.进程从运行状态变为阻塞状态的原因是()。【单选】

A.输入或输出事件发生
B.时间片到
C.输入或输出事件完成
D.某个进程被唤醒
*
37.按照作业到达的先后次序调度作业,排队等待时间最长的作业被优先调度,这是指()调度算法。【单选】
A.先来先服务法
B.短作业优先法
C.时间片轮转法
D.优先级法
*
38.系统出现死锁的原因是()。【单选】
A.计算机系统发生了重大故障
B.有多个封锁的进程同时存在
C.若干进程因竞争资源而无休止地等待着,不释放已占有的资源
*
39.()是指将作业不需要或暂时不需要的部分移到外存,让出内存空间以调入其他所需数据。()【单选】
A.覆盖技术
B.对换技术
C.虚拟技术
D.物理扩充
*
40.进程的页表内所维护的地址是()【单选】
A.进程中每一页/page的页框/frame地址
B.进程中每个页框/frame的页/page地址
C.每个进程的虚拟内存地址
D.以上都不是
*
41.在采用分段方案进行内存管理的系统中,一个进程被分为()【单选】
A. 大小不同的一些分区
B. 大小相同的一些段
C. 大小不同的一些段
D. 以上都不是
*
42.虚存管理和实存管理的主要区别是()【单选】
A. 虚存分逻辑地址和物理地址,实存不分
B. 实存要求一程序在内存必须连续,虚存不需要连续的内存
C. 实存要求一程序全部装入内存才开始运行,虚存允许程序在执行的过程中逐步装入
D. 虚存以逻辑地址执行程序,实存以物理地址执行程序
*
43.在以下设备树代码里,reg的表示方式哪个是正确的?()【单选】
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
pcie_ctrl_reserved: pcie_ctrl@8fd00000 {
compatible = "bst,pcie-ctrl";
reg = ??? ;
no-map;
};
};
A.reg = <0x8fd00000 0x100000>
B.reg = <0x0 0x8fd00000 0x100000>
C.reg = <0x0 0x8fd00000 0x0 0x100000>
D.reg = <0x0 0x8fd00000 0x0 0x100000 0x100000>
*
44.下列关于在设备树中interrupt-parent的描述,以下哪个是正确的?()【单选】
A.在同一套系统中,设备树中所有节点的interrupt-parent配置是相同的
B.对interrupt-parent进行设置时,其可以是GPIO控制器
C.interrupt-parent指明了该外设连接的中断控制器
D.当某一设备节点没有设置interrupt-parent时,说明该设备不具有中断功能
*
45.关于I/O设备的描述,以下错误的是?()【单选】
A.I/O传输方式主要有PIO、Interrupt、DMA这三种方式
B.DMA允许设备直接将数据传输到内存中,而不必通过CPU来直接处理
C.同步与异步的区别在于当数据从内核拷贝到用户空间时,用户进程是否会阻塞/参与
D.阻塞IO模型、多路复用IO模型属于同步IO模型,非阻塞IO模型、异步IO模型属于异步IO
*
46.下面关于内存管理,描述正确的是?()【单选】
A.编译后,每个目标模块都从0单元开始编址,称为该模块的物理地址
B.物理地址空间是指内存中物理单元的集合,他是地址转换的最终地址,进程在运行时执行指令和访问数据最后都要通过物理地址来存取主存
C.分页的思想是:把主存空间划分为大小相等且固定的块,每个线程以块为单位进行划分
D.段页式管理是段式管理与页式管理方案结合而成的,具有它们两者的优点,所以执行速度提升
*
47.以下关于Rust中动态分配描述正确的是?()【单选】
A.使用#![no_std]特性后,通过Rust标准库std来支持操作系统内核的动态内存分配
B.在内核中支持动态内存分配,Rust核心库core没有动态内存分配的功能,可以利用 alloc 库定义的接口来实现基本的动态内存分配器
C.在 Rust 中,与动态内存分配相关的智能指针有Box<T>、Vec<T>、Rc<T>、RefCell<T>、Mutex<T>
D.如果违反借用规则,所有的智能指针都不会在编译阶段运行通过
*
48.以下属于快速响应式调度算法的是()【单选】
A.先来先服务(FCFS)算法
B.时间片轮转算法
C.高响应比优先(HRRN)算法
D.短作业优先(SJF)算法
*
49.字符设备驱动的特点中不包括()【单选】
A.字符设备就是一个字节
B.其按照字节进行读写操作设备
C.读写数据是分先后顺序的
D.开放源码
*
50.关于ArceOS,以下说法错误的是() 【单选】
A.ArceOS由apps、crates、modules组成
B.ArceOS能够拓展成微内核架构和宏内核架构
C.ArceOS、MirageOS、MINIX都是基于Unikernel架构
D.ArceOS将应用程序和内核捆绑在一起形成一个单一的可执行映像,该映像可以直接运行在虚拟机或裸机上
Powered By www.wjx.cn
Report