嵌入式研发笔试题(一)

慢慢积累,量到了才会质变:

1.若某线性表常用的操作是存取任一指定序号的元素和在后进行插入和删除运算,则利用()存储方式节省时间(A)

A.顺序表
B.双链表
C.带头结点的双循环链表
D.单循环链表
解析:采用顺序存储方式在已知元素序号的情况下可以直接计算出地址,当指定在线性表的最后进行插入和删除运算时,也不需要进行大量元素的移动

扩展:以下与数据的存储结构有关的术语是(ABC)[多选]

A.循环队列
B.链表
C.哈希表
D.栈
解析:循环队列、链表和哈希表都属于存储结构的描述,而栈属于逻辑结构描述

2.设数组data[m]作为循环队列的存储空间。front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为(D)

A.front=front+1
B.front=(front+1)%(m-1)
C.front=(front-1)%m
D.front=(front+1)%m
解析:循环队列中出队操作后头指针需在循环意义下加1,因此为front=(front+l)%m。

拓展:
在循环队列中用数组A[0.m-1]存放队列元素,其队头和队尾指针分别为front和rear,则当前队列中的元素个数是 (D) 。

A.(front-rear+1)%m
B.(rear-front+1)% m
C.(front-rear+m)% m
D.(rear-front+m)% m
解析:循环队列中,队头指向的是队首元素的前一个位置,队尾指向队尾元素所在位置。所以当前队列中的元素个数是(rear-froot+m)%m。
嵌入式研发笔试题(一)_第1张图片
解析:本题考查队列的基本知识。队列也是一种特殊的线性表,只允许在一端进行插入,另一端进行删除运算。循环队列就是将实现队列的A[M]的第一个元素A[0]与最后一个元素A[M-1]连接起来。在循环队列中用队头和队尾表示队列满的条件是(Q.rear+1)%m==Q.front。

3.int main(){fork()||fork();}共创建几个进程(B)

A.2
B.3
C.4
D.5
嵌入式研发笔试题(一)_第2张图片
解析:首先,父进程fork后,给父进程返回子进程pid,此时为真,逻辑或语句不再执行,但是fork出的子进程是复制的父进程,此时PC程序指针也在当前位置,而且子进程的返回值是0,逻辑或语句为假,继续执行,注意此时进入子进程,多以子进程fork出孙子进程,不论子进程返回的是孙子进程的pid,还是孙子进程返回的是0,已经没有代码了,程序停止,main函数结束。所以孙子进程不再fork了,是因为没有代码了。

4.下列说法错误的是 (BC)[多选]

A.当top等于数组的大下标值时则栈满
B.栈不能对输入序列部分或全局起求逆作用
C.top=0 时为空栈,元素进栈时指针 top 不断地减 1
D.利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,这种形式的栈也称为顺序栈
解析:B错误,top= -1时为空栈,top=0只能说明栈中只有一个元素,并且元素进栈时top应该自增。
D错误,栈的特性(先进后出)就决定了可以作为求逆元素的辅助空间。所谓求逆运算就是ABC依次入栈,输入CBA。

5.下面算法中可以判断出一个有向图是否有环的是(BD)[多选]

A.求短路径
B.深度优先遍历
C.广度优先遍历
D.拓扑排序

分析:判断无向图 中是否存在回路(环)的算法描述
如果存在回路,则必存在一个子图,是一个环路。环路中所有顶点的度>=2。
算法:
第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一。
第二步:将度数变为1的顶点排入队列,并从该队列中取出一个顶点重复步骤一。
如果最后还有未删除顶点,则存在环,否则没有环。
有向图是否有环的判定算法,主要有深度优先和拓扑排序两种方法。

6.( ACD)面向对象程序设计语言不同于其他语言的主要特点。[多选]

A.继承性
B.消息传递
C.多态性
D.封装性

7.TCP/IP模型的体系结构中,ICMP协议属于( A)。

A.网络层
B.应用层
C.数据链路层
D.传输层
嵌入式研发笔试题(一)_第3张图片
8.向一个栈顶指针为h的带头结点的链栈中插入指针s所指的结点时,应执行(D)

A.h->next=s;
B.s->next=h;
C.s->next=h;h->next=s;
D.s->next=h->next;h->next=s;

9.25匹马赛跑,每次只能跑5匹马,快能赛几次找出跑得快的3匹马?赛跑不能计时,并假设每匹马的速度是恒定不变的。请给出答案并描述比赛过程。
答:第一~五局:分成5个组,可以得出5个组的第一名;
第六局:5个第一名一起跑,这样可以得出快的那一匹;
第七局:可能成为2,3名的再赛一次,包括快组的2,3名,次快组的1,2名,第三快组的第1名。所以一共是7次

10.在局域网络内的某台主机用ping命令测试网络连接时发现网络内部的主机都可以连同,而不能与公网连通,问题可能是©。

A.主机IP设置有误
B.没有设置连接局域网的网关
C.局域网的网关或主机的网关设置有误
D.局域网DNS服务器设置有误

解析:
A 主机IP地址有误 不对,若是主机IP地址有误的话内网也不会通的
B 没有设置连接局域网的网关,也不对,因为若是没有连接局域网网关,局域网内也不会通,不可能所有主机都是两两连接吧
C局域网的网关或主机的网关设置有误, 局域网的网关设置有误,是可以的,主机的网关设置有误,那么内网也不会通的
D局域网DNS服务器设置有误也是不对的,DNS域名解析,那么IP地址有可能是通的.

11.若一棵具有n(n>0)个结点的二叉树的先序序列与后序序列正好相反,则该二叉树一定?( C)

A.结点均无左孩子的二叉树
B.结点均无右孩子的二叉树
C.高度为n的二叉树
D.存在度为2的结点的二叉树
解析:
原理如下:
先序遍历顺序是:M-L-R;
后序遍历顺序是:L-R-M;
可以看到,只有中间的结点(M)顺序变化了,左右结点相对位置是不变的。那可以推断出,要满足题意的话“二叉树的先序序列与后序序列正好相反”,说明整个二叉树左子树或者右子树有一个没有(遍历就成了,先:M-L ;后:L-M 或者 先:M-R ;后:R-M )也就是必然是一条链.

12.在Linux系统中, 哪个文件你可以存储用于创建用户目录的系统用户默认文件?(D)

A./usr/tmp
B./etc/default
C./etc/skel
D./etc/users

13.下面这段代码的输出结果为:(A)

#include
void change(int*a, int&b, int c)
{
c=*a;
b=30;
*a=20;
}
int main ( )
{
int a=10, b=20, c=30;
change(&a,b,c);
printf(“%d,%d,%d,”,a,b,c);
return 0;
}

A 20,30,30
B 10,20,30
C 20,30,10
D 10,30,30

解析:
该题考察函数传参问题。
1,指针传参 -> 将变量的地址直接传入函数,函数中可以对其值进行修改。
2,引用传参 -> 将变量的引用传入函数,效果和指针相同。
3,值传参 -> 在传参过程中,首先将c的值复制给函数c变量,然后在函数中修改的即是函数的c变量,然后函数返回时,系统自动释放变量c。而对main函数的c没有影响。
a为指针传递,b为引用传递,c为值传递。
*a = 20; b = 30; a和b的值确实发生了修改。而c只是将值复制到形参,在函数内的操作并不会影响c的实际值,因此c还是为原来的30.

14.FTP服务和SMTP服务的端口默认分别是©

A 20与25
B 21与25
C 20,21与25
D 20与21

解析:21端口用于连接,20端口用于传输数据
进行FTP文件传输中,客户端首先连接到FTP服务器的21端口,进行用户的认证,认证成功后,要传输文件时,服务器会开一个端口为20来进行传输数据文件。

15.线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为©

A O(i)
B O(1)
C O(n)
D O(i-1)

16.有一个如下的结构体:
struct A{
long a1;
short a2;
int a3;
int *a4;
};
请问在64位编译器下用sizeof(struct A)计算出的大小是多少?(A)

A 24
B 28
C 16
D 18
解析:
32位编译器:32位系统下指针占用4字节
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器:64位系统下指针占用8字节
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
Win64下:long 8字节、short 2字节、int 4字节、int* 8字节,C++中内存对齐,按最大长度对齐:8+(2+4+2(补齐2字节))+8 = 24字节

17.对一个含有20个元素的有序数组做二分查找,数组起始下标为1,则查找A[2]的比较序列的下标为(B)

A 9,5,4,2
B 10,5,3,2
C 9,6,2
D 20,10,5,3,2

解析:
(high-low)/2+low = middle; 下标从1开始,因为查找查找A[2], low始终为1;
20-1)/2+1=10;
(10-1)/2+1 = 5;
(5-1)/2+1 = 3;
(3-1)/2+1 = 2;
我们还可以参考此网站

18.操作系统采用缓冲技术,能够减少CPU(A)次数,从而提高资源的利用率。

A 中断
B 访问
C 控制
D 依赖

解析:
引入缓冲的主要原因包括:缓和CPU与I/O设备间速度不匹配的矛盾;减少对CPU的中断频率,放宽对中断响应时间的限制;提高CPU和I/O设备之间的并行性。所以采用缓冲技术,可减少对CPU的中断次数,从而提高系统效率。

19.在一个10阶的B-树上,每个树根结点中所含的关键字数目多允许为( )个,少允许为( B)个。

A 10,5
B 9,4
C 8,3
D 7,6
解析:最多M-1 最少M/2-1 向上取整。具体情况参考此blog

20.关于红黑树和AVL树,以下哪种说法正确?(ABC)[多选]

A 两者都属于自平衡二叉树
B 两者查找,插入,删除的时间复杂度相同
C 包含n个内部节点的红黑树的高度是O(log(n))
D JDK的TreeMap是一个AVL的实现

解析:红黑树和avl树都属于自平衡二叉树;
两者查找、插入、删除的时间复杂度相同;
包含n个内部结点的红黑树的高度是o(logn);
TreeMap是一个红黑树的实现,能保证插入的值保证排序。

21.Linux执行ls,会引起哪些系统调用(BCD)【多选】

A nmap
B read
C execve
D fork
解析:任何shell都会执行 exec 和 fork,而ls会执行read三个加起来

22.设栈S和队列Q的初始状态均为空,元素a,b,c,d,e,f,g依次进入栈S。若每个元素出栈后立即进入推列Q,且7个元素出队的顺序是b,d,c,f,e,a,g,则栈S的容量至少是?(C)

A 1
B 2
C 3
D 4

23.设fp已定义,执行语句fp=fopen(“file”,“w”);后,以下针对文本文件file操作叙述的选项错误的是:(ACD)【多选】

A 可以随意读和写
B 只能写不能读
C 可以在原有内容后追加写
D 写操作结束后可以从头开始读

24.重载(overload)和重写(override)的区别?(AC)[多选]
A 重载:是指允许存在多个同名函数,而这些函数的参数表不同
B 重载:是指子类重新定义复类虚函数的方法
C 重写:是指子类重新定义复类虚函数的方法
D 重写:是指允许存在多个同名函数,而这些函数的参数表不同

25.以下()属于线性分类器佳准则?(ACD)【多选】

A 感知准则函数
B 贝叶斯分类
C 支持向量机
D Fisher准则

你可能感兴趣的:(Linux)