大疆 - 嵌入式工程师 - 笔试
❗❗如果本文对您有帮助,请不要吝啬您的评论、点赞、收藏与小花,这对我非常重要!谢谢!❗❗
本文所涉及的题目均为基于个人学习和理解重新表述的内容,仅供学习交流之用,不代表任何实际考试题目。如有雷同,纯属巧合。
岗位:嵌入式工程师(上海)
题型:20 道选择题,10 道多选题,10 道判断题,3 道编程题
1、选择题
1.1
在一个计算机系统中,编译器为了能够生成 CPU 可以正常执行的指令往往需要对不同数据类型做类型转换,在一个 C 程序中如果发生数据类型自动转换,下列不属于隐式类型转换的是?==(B)==
- 算术运算、逻辑运算、赋值表达式中运算符两侧数据类型不相同时
- 函数内定义的变量类型不同,编译器根据变量类型进行数据地址对齐时
- 函数调用过程中,传递的实参和形参类型不匹配时
- 函数返回值类型与函数声明的类型不匹配时
解答:
数据地址对齐与数据类型的隐式转换无关
1.2
当进程要访问某个逻辑地址中的数据时,涉及逻辑地址到物理地址的映射,是由下列哪种实现的?==(D)==
- 操作系统
- 内存管理的查表程序
- 存储管理进程
- 硬件自动转换
解答:
逻辑地址(虚拟地址)到物理地址的映射是通过内存管理单元(MMU)来进行的,主要是硬件自动转换
1.3
在 ARM 架构中,指令指针寄存器是?==(B)==
- IP
- PC
- SP
- BP
解答:
IP:ARM 中一般没有名为 IP 的寄存器,但 OSI 网络层有因特网(IP)协议
PC:程序计数器/指令指针寄存器
SP:堆栈指针,指向当前栈顶位置
BP:用于指向当前栈帧的基地址
1.4
如果 class 类中的所有成员在定义时没有使用关键字 public,private,protected,则所有成员缺省定义为?==(C)==
- public
- protected
- private
- static
解答:
类在不指定访问控制符时默认为私有成员,选择 C 选项
1.5
计算机高级语言程序的运行措施有编译执行和解释执行两种,下列论述中正确的是?==()==
- C 语言程序仅可以编译执行
- C 语言程序仅可以解释执行
- C 语言程序仅可以编译执行又可以解释执行
- 以上说法都不对
解答:
C 语言仅可以编译执行
Python 语言可以解释执行
1.6
计算机系统中采用补码运算的目的是为了?==(D)==
- 提高运算的精度
- 与手工运算方式保持一致
- 提高运算速度
- 简化计算机的设计
解答:
简化计算机的设计,因为补码统一了加法和减法的运算处理
1.7
在 Linux(不考虑rt-patch)内核中断上半部中,下列哪种操作是有问题的?==(C)==
- spin_lock(&lock)
- write_lock(&rwlock)
- mutex_lock(&mutex)
- atomic_inc(&atomic)
解答:
选项 A 为自旋锁
选项 B 为写锁
选项 C 为互斥锁,互斥锁阻塞时会使线程进入休眠状态,中断无法休眠,选项 C 错误
选项 D 为原子访问
1.8
不考虑编译自动优化,下列哪种修改最不可能优化程序效率?==(C)==
- A
int fun(int a, int b) {
return a+b;
}
//==>
inline int func_a(int a, int b){
return a+b;
}
- B
for(i=0;1<100;i++)
for(j=0;j<100;j++)
a+=b[j][i];
//==>
for(i=0;1<100;i++)
for(j=0;j<100;j++)
a+=b[i][j];
- C
void func(void){
//do something
__asm__("dmb;");
//do something
}
//==>
void func(void){
//do something
__asm__("isb;");
//do something
}
- D
struct _aligned(4) data{
int a;
int b;
};
struct data data_array[100];
//==>
struct _aligned(32) data{
int a;
int b;
};
struct data data_array[100];
解答:
选项 A,对于小而频繁调用的函数来说,使用 inline 可能会优化程序效率
选项 B,在大多数情况下,按行访问比按列访问要更有效,因为内存是按行存储的
选项 C,内联汇编指令 dmb 和 isb 都是用于 ARM 处理器中的内存屏障指令,对性能优化没有直接的影响
选项 D,将结构体的对齐从 4 字节改为 32 字节,可能会提升/影响性能
1.9
下列关于低速总线的描述哪个是错误的?==(B)==
- 当 i2c 的 scl 线是高电平时,主设备会根据 sda 线状态进行总线仲裁
- i2c 的 scl 线可以被从设备控制
- uart 波特率存在误差时连续传输的数据越多累积的误差越大
- uart 软件流控会对可传输的 payload 造成约束
解答:
i2c 的时钟线不能被从设备控制吧??
1.10
优先级继承策略是通过下列哪种方法解决的 RTOS 任务优先级翻转问题?==(C)==
- 临时增加持有资源的低优先级任务的时间片
- 临时降低高优先级任务的优先级,使其与持有资源的低优先级任务一致
- 临时提升持有资源的低优先级任务的优先级,使其与高优先级任务一致
- 临时中止持有资源的低优先级任务
解答:
优先级翻转问题主要是由优先级继承机制来避免(不是杜绝)
优先级继承是指临时将持有资源的低优先级任务的优先级提高到与高优先级任务一致,选 C
1.11
在 32 位系统上有如下所示的结构体,使用 sizeof 对其分别求值,sizeof(struct partx)
,结果依次为?==(D)==
struct part1 {
int a;
char b[0];
} __attribute__((packed));
struct part2 {
int a;
char *b;
} __attribute__((packed));
struct part3 {
int a;
char *b[2];
} __attribute__((packed));
- 4, 5, 6
- 5, 8, 8
- 5, 5, 12
- 4, 8, 12
解答:
注意在 32 位系统上 int 类型和指针均占 4 个字节
part1
相当于一个 int 变量,占 4 个字节
part2
相当于一个 int 变量 + 一个指针,考虑内存对齐后占 8 个字节
part3
相当于一个 int 变量 + 两个指针,考虑内存对齐后占 12 个字节
1.12
下列关于 RTOS 的描述错误的是?==(C)==
- 在 RTOS 任务优先级设置时,越重要的任务应该给越高的优先级
- 空闲任务主要是为了确保调度器启动后,至少有一个任务可以运行
- RTOS 在某些场景中不如裸机系统(没有操作系统)更高效
- RTOS 中任务切换需要保存和恢复任务,会产生时间和资源开销,频繁的任务切换可能会影响系统性能
解答:
RTOS 的设计目标是实时性和多任务调度,通常在复杂应用中效率高
1.13
在 x86 架构处理器并且内存采用小端序存储的情况下,若 (DS)=2000H,(BX)=0050H,(20050H)=12H,(20051H)=34H,执行 MOV AX,[BX]
指令后,AX 寄存器中的内容是?==(D)==
- 0050H
- 0012H
- 1234H
- 3412H
解答:
小端序:高字节在高地址,低字节在低地址
(DS)=2000H
,表示数据段寄存器的值为 2000H
(BX)=0050H
,表示偏移量寄存器的值为 0050H
[BX]
对应的内存地址应该为2000H*16 + 0050H = 20050H
MOV AX,[BX]
根据题意可得,从20050H
内存地址处取一字节值写入AX
寄存器,则AX
寄存器中应该为 3412H
1.14
在 C++ 中,下列关于纯虚函数和抽象类的描述哪一个是正确的?==(D)==
- 一个类中只要有一个虚函数,这个类就是抽象类
- 纯虚函数必须在基类中实现
- 抽象类不能包含非虚函数
- 一个类中只要有一个纯虚函数,这个类就是抽象类
解答:
纯虚函数是使用
virtual
和=0
修饰的函数
包含纯虚函数的类称为抽象类,抽象类中可以有非虚函数,选项 A、C 错误,D 正确
纯虚函数需要在派生类中重新实现,选项 B 错误
1.15
在 Git 中,用于撤销之前的提交并保留更改的命令是?==(B)==
- git reset
- git revert
- git checkout
- git stash
解答:
git reset
,重置当前分支到指定提交,可能会影响提交历史
git revert
,用于撤销特定提交,但不会影响提交历史
git checkout
,切换到指定分支
git stash
,临时保存未提交的更改,以便稍后使用git stash pop
恢复
1.16
组相联映象、LRU 替换的 Cache 存储器,不影响 Cache 命中率的是?==(C)==
- 增加 Cache 中的块数
- 增大组的大小
- 增大主存容量
- 增大块的大小
解答:
主存容量的增大与 Cache 容量没直接关系,因此不会直接影响 Cache 的命中率
1.17
下列 Linux 调度策略属于实时进程调度策略的是?==(C)==
- SCHED_NORMAL
- SCHED_IDLE
- SCHED_RR
- SCHED_BATCH
解答:
这里容易和操作系统的调度策略弄混(时间片轮询,先来先服务,短作业优先等)
Linux 内核中的调度策略分为实时进程调度策略(SCHED_RR、SCHED_FIFO) 和 非实时进程调度策略(SCHED_NORMAL、SCHED_IDLE、SCHED_BATCH)
1.18
下列哪种方式不能提升 ddr 内存的访问效率?==(B)==
- 提升频率
- 提升容量
- 增加位宽
- 使能预取
解答:
增加内存大小不能提升速度,选项 B 提升容量错误
1.19
下列哪种通讯总线常用差分信号?==(D)==
- UART
- SPI
- RS232
- RS485
解答:
UART、I2C、SPI、RS232 都是单端信号
CAN、RS485 为差分信号
1.20
CAN 通讯中,接收单元向具有相同 ID 的发送单元请求数,使用的是?==(B)==
- 数据帧
- 遥控帧
- 错误赖
- 过载帧
2、多选题
2.1
下列哪些属于 CPU 外部中断?==()==
- 定时器中断
- gpi
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。