CVTE的软件支持工程师的笔试题主要分为选择题(20道)和编程题(2道),考查内容主要是C语言、Linux操作系统为主。编程题都比较简单,没有什么难度;选择题涉及的范围还是比较广的。不过有三点比较“坑”的地方:
只能被系统进程
只能被多个进程互斥
只能被用户进程
可被多个进程
KEY:D
GPIO可以用于外部SDRAM进行高速传输
GPIO可以用于模拟Flash的接口,对Flash存储器进行读写操作
GPIO可以由CPU编程决定方向,但不能查询其状态
CPU可以通过编程,决定GPIO是输入、输出的通信功能,但不能是双向的
KEY:ACD
42.9%
60%
66.7%
40%
KEY:B
同步与互斥
并行执行与资源共享
相互独立与互相制约
资源的分配和独占性
KEY:D
data段
bss段
堆区
栈区
KEY:D
2、1
4、3
2、4
1、4
KEY:B
将一个元素序列进行逆序
实现函数或过程的递归调用及返回处理时
可执行程序的装入与卸载
链表节点的申请和释放
KEY:B
解答:栈是一种后进先出的数据结构。将一个元素序列逆置时,可以使用栈也可以不用。链表节点的申请和释放次序与应用要求相关,不存在“先申请后释放”的操作要求。可执行程序的装入与卸载,也不存在“后进先出”的操作要求。对于函数的递归调用与返回,一定是后被调用执行的先返回。
chmod a+x g+w file1
chmod a+x o+w file1
chmod 775 file1
chmod 765 file1
KEY:AC
char str[20] = "0123456789";
int a = strlen(str);
int b = sizeof(str);
10、4
10、20
4、20
4、4
KEY:B
IIC可以实现全双工,SPI不能实现全双工
IIC的数据输入输出用的是一根线,SPI则分别为数据输入和数据输出两根线
IIC的抗干扰能力比SPI强
SPI适合长距离传播
KEY:D
顺序存储完全二叉树
双向链表
数组
顺序存储栈
KEY:ACD
文件A叫做文件B的软链接或符号链接
它们的文件索引信息中文件的链接数并不会因为这种关系发生变化
它们的文件的索引信息inode号是相同的
访问文件A其实就是访问文件B
KEY:C
一个管道可以实现双向数据传输
一个管道只能由一个读进程和一个写进程对其操作
进程对管道进行读操作和写操作都可能被堵塞
管道的容量仅受磁盘容量大小限制
KEY:C
2
3
4
1
KEY:B
MMU作为转换器,将程序和数据的虚拟地址(编译时的连接地址)转换成实际的物理地址,即在物理主存中的地址
MMU提供了一些资源以允许使用虚拟存储器
在带MMU的操作系统控制下,运行的任务必须知道其他与之无关的任务的存储需求情况,这就简化了各个任务的设计
MMU提供的一个关键服务是使各个任务作为各自独立的程序在其自己的私有存储空间中运行
KEY:C
2n-1
2n
2n+1
2n+2
KEY:A
可以使用top命令分析CPU使用,内存使用,负载等情况
可以使用free查看内存整体的使用情况
可以使用cat /proc/meminfo查看内存更详细的情况
以上描述都不正确
KEY:ABC
主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释
makefile文件保存了编译器和连接器的参数选项
在Makefile不可以使用include关键字把别的Makefile包含进来
默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件, 找到了解释这个文件
KEY:ABCD
int x, y, z;
x = y = 5;
z = ++x || ++y;
6
5
1
不确定
KEY:B
#include
void main()
{
short *p, *q;
short arr[15] = { 0 };
p = q = arr;
p++;
printf("%d", p - q);
printf("%d", (char *)p - (char *)q);
printf("%d", sizeof(arr) / sizeof(*arr));
return 0;
}
011
1215
121
1115
KEY:B
输入一个整型值N(>10)代表杨辉三角的阶数,例如输入3,输出
1
1 1
1 2 1
同时输出第N阶的值相加之和,例如第3阶(1+2+1=4)。
解答:杨辉三角形,比较简单:
#include
int main()
{
int n;
scanf("%d", &n);
int i, j, a[100][100], m = 0;
for (i = 0; i <= n; i++) {
for (j = 0; j <= n; j++) {
a[i][0] = 1;
a[i][i] = 1;
}
}
for (i = 2; i <= n; i++) {
for (j = 1; j <= i - 1; j++)
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
for (i = 0; i <= n; i++) {
for (j = 0; j <= i; j++) {
printf("%d ", a[i][j]);
if (i == n) {
m += a[i][j];
}
}
printf("\n");
}
printf("%d ", m);
return 0;
}
例:输入34567,每一位加上5之后变成8 9 10 11 12,替换第一位和最后一位后输出29018。
提示:请实现encode函数:
char *encode(const char *psw_in, char *psw_out);
解答:主要掌握怎么将int与char之间如何进行转换就可以了,逻辑什么的倒是蛮简单:
char *encode(const char *psw_in, char *psw_out) {
int i;
char temp;
for (i = 0; i < 6; i++)
psw_out[i] = (psw_in[i] - '0' + 5) % 10 + '0';
temp = psw_out[5];
psw_out[5] = psw_out[0];
psw_out[0] = temp;
return psw_out;
}