柏楚电子 - 嵌入式开发工程师 - 笔试
❗❗如果本文对您有帮助,请不要吝啬您的评论、点赞、收藏与小花,这对我非常重要!谢谢!❗❗
本文所涉及的题目均为基于个人学习和理解重新表述的内容,仅供学习交流之用,不代表任何实际考试题目。如有雷同,纯属巧合。
岗位:嵌入式开发工程师(J10383)
题型:8 道选择题,2 道填空题, 3 道问答题,2 道编程题
1、选择题
1.1
若处理器有 32 位地址,则它的虚拟地址空间为 ==(B)== 字节
- A. 2G
- B. 4G
- C. 100k
- D. 640K
解答:
32 位地址能访问 2^32 个不同的地址,2^32=4GB,因此选项 B 正确
1.2
在操作系统中,进程是 (1) 的最小单位,而线程是 (2) 的最小单位 ==(A)==
- A. 资源分配,CPU 调度
- B. CPU 调度,资源分配
- C. 内存管理,文件管理
- D. 文件管理,内存管理
1.3
以下程序运行后的输出结果为 ==(D)==
#include <stdio.h>
void fun(const char** p) {
int i;
for (i = 0; i < 3; i++)
printf("%s", p[i]);
}
int main() {
const char* s[6] = {"ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWX"};
fun(s);
printf("\n");
return 0;
}
- A. ABC
- B. ABCDEFGH
- C. AEI
- D. ABCDEFGHIJKL
1.4
对于如下 C++ 程序,请问输出结果是 ==(C)==
#include <iostream>
int main() {
int a = 1, b = 3, c = 2;
while (a < b < c) {
++a;
--b;
--c;
}
std::cout << a << " " << b << " " << c << "\n";
return 0;
}
- A. 1 3 2
- B. 2 2 1
- C. 3 1 0
- D. 4 0 -1
解答:
关键通过循环条件判断循环执行了几次
第一次判断循环条件a < b < c
从左向右依次判断,首先a < b
满足(a=1,b=3
),因此为 1 (true),后面判断1 < c
仍然满足(c=2
),因此循环条件满足进入循环
第二次判断循环条件,首先a < b
不满足(a=2,b=2
),因此为 0 (false),后面判断0 < c
满足(c=1
),因此最终循环条件满足再次进入循环
第三次判断循环条件,首先a < b
不满足(a=3,b=1
),因此为 0 (false),后面判断0 < c
也不满足(c=0
),因此最终不再进入循环,此时a=3,b=1,c=0;
1.5
若给定如下定义,如果令指针 p 指向 array 数组,那么,*(p+3)
表示的是 ==(C)==
int array[8];
int *p;
- A. 元素
a[4]
对应的数据 - B. 元素
a[4]
对应的地址 - C. 元素
a[3]
对应的数据 - D. 元素
a[3]
对应的地址
1.6
【多选】堆和栈的区别包括 ==(ABD)==
- A. 栈(stack)是由系统自动分配的。例如,声明函数中一个局部变量
int b;
,那么系统自动在栈中为 b 开辟空间。堆(heap)需要程序员自己申请,并在申请时指定大小 - B. 堆在操作系统中有一个记录空闲内存地址的链表,当系统收到程序的申请时,系统就会开始遍历该链表,寻找第一个空间大于所申请空间的堆节点,然后将该节点从空闲节点链表中删除,并将该节点的空间分配给程序
- C. 堆是向高地址扩展的数据结构,是一块连续的内存区域,栈是向低地址扩展的数据结构,是不连续的内存区域
- D. 堆是由 malloc() 等语句分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来很方便。栈由系统自动分配,速度较快,但程序员一般无法控制
解答:
堆栈都是连续的内存区域,但是从堆或栈上申请内存时可能申请的内存间连续,也可能不连续
1.7
关于 virtual void Draw() =0
,下面说法正确的是?==(ACD)==
- A. 它是纯虚函数
- B. 它在定义它的类中必须实现
- C. 定义它的类不可实例化
- D. 如果一个类要继承一个 ADT 类,必须要实现其中的所有纯虚函数
解答:
C++ 中定义一个纯虚函数时需要使用关键词
virtual
和 =0 对函数修饰,拥有纯虚函数的类称为抽象类,该纯虚函数仅仅提供了一个接口,无需在基类中实现,派生类在继承过程中则必须重新实现该纯虚函数
1.8
有关 Linux 进程和线程的描述,正确的有?==(ABCD)==
- A. 在 linux 中,进程比线程安全的原因是进程之间不会共享数据
- B. 进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)
- C. 进程一资源分配的最小单位,线程程序执行的最小单位
- D. 进程有独立的地址空间,线程没有单独的地址空间
2、填空题
2.1
有如下类定义。请问在 32 和 64 位操作系统中,sizeof(B) 的值分别为 (1) 和 (2)?
class A {
public:
int fun1() {
return _a1;
}
virtual void fun2() {}
private:
int _a1;
static int _a2;
};
解答:
- 8
- 16
int _a1;
定义了一个私有成员变量,在 32/64 位操作系统上均占用 4 字节
static int _a2;
定义了一个静态成员变量,不属于某个对象,不计入对象大小
virtual void fun2()
定义了一个虚函数,虚函数会引入虚函数表指针,指针在 32/64 位操作系统上分别占用 4/8 个字节
考虑字节对齐,在 32 位系统上占 8 字节,在 64 位系统上占 16 字节
2.2
查看下列代码,在大端模式下,请问 result 的值是多少 (1) ?
unsigned int val[2];
unsigned short result;
val[0] = 0x12345678;
val[1] = 0xAA5555AA;
unsigned short *pVal = (unsigned short *)val;
pVal = pVa
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。