嵌入式Linux面试试题库汇总.docx
《嵌入式Linux面试试题库汇总.docx》由会员分享,可在线阅读,更多相关《嵌入式Linux面试试题库汇总.docx(26页珍藏版)》请在冰点文库上搜索。
嵌入式Linux面试试题库汇总
嵌入式Linux系统基础试题库
一.不定项选择题:
1.对于如下的定义,说法正确的有(A)
int*pb,pc;
A、pb是一个指向整数的指针,pc是一个整数
B、pb和pc都是指向整数的指针
C、这个定义是错的
D、这个定义是对的,但在编译时会出现告警
2.以下描述正确的有(D)
A、sizeof(long)等于4.
B、short类型的指针p,p++表示指向下一个字节。
C、inta=0xffff0000,a的值为-65535.
D、unsignedchar类型的取值范围是0~256.
3.以下代码正确的是(C)
A、chara[]={“ABC”};
B、chara=”k”;
c、chara[4]={0};
d、chara[11]=”Helloword!
”;
4.下面的网络协议中,面向连接的的协议是:
A。
A、传输控制协议B、用户数据报协议C、网际协议D、网际控制报文协议
5.Linux文件权限一共10位长度,分成四段,第三段表示的内容是。
C
A、文件类型B、文件所有者的权限
C、文件所有者所在组的权限D、其他用户的权限
6.终止一个前台进程可能用到的命令和操作B。
A、killB、+CC、shutdownD、halt
7.在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是D。
A、-mB、-dC、-fD、-p
8.下面关于i节点描述错误的是A。
A、i节点和文件是一一对应的(每个文件都有唯一一个索引结点号与之对应,而对于一个索引结点号,却可以有多个文件名与之对应)
B、i节点能描述文件占用的块数
C、i节点描述了文件大小和指向数据块的指针
D、通过i节点实现文件的逻辑结构和物理结构的转换
9.一个文件名字为rr.Z,可以用来解压缩的命令是:
D。
A、tarB、gzipC、compressD、uncompress
10.一台主机要实现通过局域网与另一个局域网通信,需要做的工作是C。
A、配置域名服务器
B、定义一条本机指向所在网络的路由
C、定义一条本机指向所在网络网关的路由
D、定义一条本机指向目标网络网关的路由
局域网络连接其它网络的网关,24192.168.1.0/局域网的网络地址11.
地址是192.168.1.1。
主机192.168.1.20访问172.16.1.0/24网络时,其路由设置正确的是B。
A、routeadd–net192.168.1.0gw192.168.1.1netmask255.255.255.0
metric1
B、routeadd–net172.16.1.0gw192.168.1.1netmask255.255.255.0
metric1
C、routeadd–net172.16.1.0gw172.16.1.1netmask255.255.255.0
metric1
D、routeadddefault192.168.1.0netmask172.168.1.1metric1
12.下列提法中,不属于ifconfig命令作用范围的是D。
A、配置本地回环地址B、配置网卡的IP地址
C、激活网络适配器D、加载网卡到内核中
13.在局域网络内的某台主机用ping命令测试网络连接时发现网络内部的主机都可以连同,而不能与公网连通,问题可能是C。
A、主机IP设置有误
B、没有设置连接局域网的网关
C、局域网的网关或主机的网关设置有误
D、局域网DNS服务器设置有误
14.不需要编译内核的情况是D。
A、删除系统不用的设备驱动程序时B、升级内核时
C、添加新硬件时D、将网卡激活
的方法name=12中变量的赋值有四种方法,其中,采用shell在15.
称A。
A、直接赋值B、使用read命令
C、使用命令行参数D、使用命令的输出
16.D命令可以从文本文件的每一行中截取指定内容的数据。
A、cpB、ddC、fmtD、cut
17.下列不是Linux系统进程类型的是D。
A、交互进程B、批处理进程C、守护进程D、就绪进程
18.内核不包括的子系统是D。
A、进程管理系统B、内存管理系统C、I/O管理系统D、硬件管理系统
19.若一台计算机的内存为128MB,则交换分区的大小通常是C。
A64MBB128MBC256MBD512MB
20.在TCP/IP模型中,应用层包含了所有的高层协议,在下列的一些应用协议中,B是能够实现本地与远程主机之间的文件传输工作。
AtelnetBFTPCSNMPDNFS
21.用ls–al命令列出下面的文件列表,D文件是符号连接文件。
A-rw-rw-rw-2hel-susers56Sep0911:
05hello
B-rwxrwxrwx2hel-susers56Sep0911:
05goodbey
Cdrwxr--r--1helusers1024Sep1008:
10zhang
Dlrwxr--r--1helusers2024Sep1208:
12cheng
22.DNS域名系统主要负责主机名和A之间的解析。
主机别名D网络地址C地址BMAC地址AIP.
23.WWW服务器是在Internet上使用最为广泛,它采用的是B结构。
A服务器/工作站BB/SC集中式D分布式
24.NFS是C系统。
A文件B磁盘C网络文件D操作
25.Linux文件系统的文件都按其作用分门别类地放在相关的目录中,对于外部设备文件,一般应将其放在C目录中。
A/binB/etcC/devD/lib
26.如果限定程序的栈的大小是1K字节,则以下代码,运行时会出错的有(C)
A.foo.c
staticintiA[512];
intmain()
{returnθ;}
B.foo.c
intmain()
{
staticintiA[512]
returnθ;
}
C.foo.c
intmain()
{
intiA[512]
returnθ;
}
D.foo.c
intmain()
{
Int*piA
piA=malloc(512*sizeof(int));
returnθ;
}
27.以下代码最后一次打印结果是(C)
voidfun(intiInputNum)
{
staticintiCount=1;
iCount=iCount+iInputNum;
Print(“\niCount=%d”,icount+iInputNum);
}
for(i=1;i<3;i++)
{
Fun(i);
}
A.iCount=3B.iCount=4C.iCount=6D.iCount=5
28.关于以下代码,输出结果是(A)
VoidFun()
{
Inti;
Intx[3][3]={1,2,3,4,5,6,7,8,9};
Int*p;
P=&x[1][1];
For(i=0;i<4;i+=2)
Printf(“%d”,p[i]);
}
A.57
B.59
C.13
D.15
29.以下语句中,能够判断uiNum(unsignedint整除的8)可以被ACD)有(*8A、If(((uiNum/8))==uiNum)==1))、Bif((uiNum%8)==θ)if((uiNum&θ×θ7、C.
D、if(((uiNum>>3)<<3)==uiNum)
30.关于以下代码,描述正确的有(ABCD)
代码Ⅰ:
constchar*pcStr=”abcdefg”;
char*pcStr=”abcdefg”
代码Ⅱ:
voidstring_sizeof(charszStr1[10])
{
charszStr2[10]=”12345”;
printf(“%u,”,sizeof(szStr1));
printf(“%u\r\n,”,sizeof(szStr2));
return;
}
intmain()
{
string_sizeof(”12345”);
代码Ⅲ
pcStr[3]=”a”;
代码Ⅳ
unsignedintuiA=100;
printf(“%s\r\n,”,uiA);
return0;
}
A、代码Ⅰ,const修饰符表明pcStr指针不能再次被赋值,也就是说不能指向其他缓冲区.
B、代码Ⅱ,程序的运行结果是“4,10”.
C、代码Ⅲ,对pcStr[3]的赋值会导致程序访问非法地址.
D、代码Ⅳ,打印unsignedint时不应该使用“%s”,会导致程序访问非法地址。
31.关于结构的大小,以下描述正确的有(AB)
structA_SstructB_S
{{
unsignedshortus1;unsignedcharuc1;
unsignedshortus2;unsignedintuc2;
unsignedshortus3;unsignedshortus3;
};};
unionC_UunionD_U
{{
unsignedintui1unsignedchar
uc2;
unsignedcharuc2;unsignedshortus3;
ui1;
unsignedintunsignedshortus3;
};};
A、结构structA_S的大小是6
B、结构structB_S的大小是12
C、联合unionC_U的大小是12
D、联合unionD_U的大小是12
32.有如下链表和节点D,将D替换B,并删除B,以下代码正确的有(AD)
单链表:
ABCpstNextpstNextAA
PstApstB
D
partD
双链表:
pstNextpstNext
BACpstPrepstPre
PstApstB
D
pstD
structSLL
{
structSLL*pstNext;/*下一结点*/
};
structDLL
{
structDLL*pstNext;/*下一结点*/
*/
前一结点structDLL*pstPrev;/*
};A.
pstB=pstB->patNext;
pstD->pstNext=pstB;
pstA->pstNext=pstD;
free(pstB);
B.
pstA->pstNext=pstD;
pstD->pstNext=pstA->pstNext-pstNext;
free(pstB);
C.
pstA->pstNext-pstNext-pstpre=pstD;
pstD->pstNext=pstA->pstNext->pstNext;
pstD->pstpre=pstB->pstpre;
pstA->pstNext=pstB->pstNext-pstpre;
free(pstB);
D.
pstD->pstNext=pstB->pstNext;
pstD->pstNext->pstpre=pstD;
pstD->pstpre=pstA;
pstA->pstNext=pstD;
free(pstB);
33.实现从IP地址到以太网MAC地址转换的命令为:
C。
A、pingB、ifconfigC、arpD、traceroute
34.在vi编辑器中的命令模式下,键入B可在光标当前所在行下添加一新行。
A、B、C、D、A
35.用命令ls-al显示出文件ff的描述如下所示,由此可知文件ff的类型为A。
-rwxr-xr--1rootroot599Cec1017:
12ff
A、普通文件B、硬链接C、目录D、符号链接
36.删除文件命令为:
D。
A、mkdirB、rmdirC、mvD、rm
37.DHCP是动态主机配置协议的简称,其作用是可以使网络管理员通过一台服务器来管理一个网络系统,自动地为一个网络中的主机分配___D______地址。
A、网络B、MACC、TCPD、IP
38.为了保证在启动服务器时自动启动DHCP进程,应将A文件中的dhcpd=no改为dhcpd=yes。
A、rc.inet1B、lilo.confC、inetd.confD、httpd.conf
39.对文件进行归档的命令为D。
tar
、Dgzip、Ccpio、Bdd、A.
C。
40.改变文件所有者的命令为
cat、chownDtouchB、C、A、chmod
41.某32位系统下,C程序,请计算sizeof的值(A).
charstr[]=“”;
char*p=str;
intn=10;
请计算
sizeof(str)=?
()
A、17B、16C、15D、18
42.某32位系统下,C程序,请计算sizeof的值(B)
charstr[]=“”
char*p=str;
intn=10;
请计算
sizeof(p)=()?
A、5B、4C、6D、3
43.这段程序的输出是(B)
voidf(char**);
main()
{
char*argv[]={ab,cd,ef,gh,ij,kl};
f(argv);
}
voidf(char**p)
{
char*t;
t=(p+=sizeof(int))[-1];
printf(%s,t);
}
A、abB、cdC、efD、gh
44.在给定文件中查找与设定条件相符字符串的命令为:
A。
A、grepB、gzipC、findD、sort
45.建立一个新文件可以使用的命令为D。
A、chmodB、moreC、cpD、touch
46.在下列命令中,不能显示文本文件内容的命令是:
D。
A、moreB、lessC、tailD、join
47.文件权限读、写、执行的三种标志符号依次是A。
A、rwxB、xrwC、rdxD、srw
48.Linux文件名的长度不得超过C个字符。
A、64B、128C、256D、512
49.进程有三种状态:
C
A准备态、执行态和退出态B精确态、模糊态和随机态
C运行态、就绪态和等待态D手工态、自动态和自由态
文件由六个域组成,每个域之间用空格分割,其排列如crontab.50.
下:
B。
A、MINHOURDAYMONTHYEARCOMMAND
B、MINHOURDAYMONTHDAYOFWEEKCOMMAND
C、COMMANDHOURDAYMONTHDAYOFWEEK
D、COMMANDYEARMONTHDAYHOURMIN
二简答题
1、简述堆和栈的区别
答:
栈是编译器自动分配和释放,申请空间小,申请速度快,向低地址扩展的连续区域,存放内容多数有自动进行。
堆是程序员申请和释放,申请空间较大,相对较慢,向高地址扩展的不连续区域,存放内容程序员自己安排。
2、栈和队列有何区别?
答:
1、队列先进先出,栈先进后出
2、队列一口插入一口删除,而栈都是一个口
3、遍历数据的速度不同,栈需要开辟空间来遍历数据,而队列只需要指针完成。
3、TCP和UDP之间的区别?
答:
TCP:
传输控制协议,是一个基于连接的可靠的字节流服务,双方交换数据是必须先建立连接,才能传输数据。
超时重发,数据校验,丢弃重复数据,保证数据从一端传到另一端。
UDP:
用户数据报协议,是一个简单的面向数据报的运输层协议,不可靠,效率高。
4、进程和线程的区别?
答:
1、线程是组成进程的基本单位。
2、进程有独立的地址空间,线程也有一些自己的堆栈和局部变量,但是线程没有独立地址空间,一个进程死掉,整个程序就死掉
5、进程间通信的方式都有哪些,有何区别?
答:
1、管道,socket,共享内存,消息队列,信号量级
、共享内存:
效率非常高2
6、哪些情况会导致内存泄露?
如何避免内存泄露?
答:
1、堆内存泄露,一般是指malloc,realloc,New,而未对应的用free或delete释放。
2、系统资源泄漏,指程序使用系统分配的资源或函数,如socket,handle等,而未用相应的函数释放掉。
避免方法:
养成良好的编码习惯,在涉及内存代码编写时要谨慎。
7、声明和定义的区别?
答:
声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存。
而定义就是分配了内存。
8、int(*a[10])(int)表示什么?
答:
int(*s[10])(int)函数指针数组,每个指针指向一个intfunc(int
param)的函数。
9、gdb调试的用法?
以file.c为例
答:
编译gcc–gfile.c–ofile,然后gdbfile运行即可进入GDB调试环境,这时可以设置断点进行跟踪调试例如:
breakmain,然后run,接下来next(简称n),回车就直接默认前一个命令,可以打印变量或指针值printi,遇见函数输入step会进入函数执行,否则不进入。
10、关键字static的作用是什么?
答:
关键字static有三个明显的作用:
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2)在模块内(但在函数体内),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其他函数访问。
它是一个本地的全局变量。
3)在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。
那就是,这个函数被限制在声明它的模块的本地范围内使用。
11、inline与宏的区别
答:
宏:
预处理阶段不经过安全检查直接替换,不可以对数据成员进行操作。
Inline:
编译器经过安全检查之后替换函数调用,既提高代码效率,又经过安全检查,而且还可以对数据成员进行操作。
12、有关内存的思考题
voidGetMemory(char*p){
char*GetMemory(void)
{
p=(char*)malloc(100);}voidTest(void){char*str=NULL;GetMemory(str);strcpy(str,helloworld);printf(str);}请问运行Test函数会有什么样的结果?
答:
程序崩溃。
并不能传递动态内存,GetMemory因为一直都是NULL。
strTest函数中的将使程序崩strcpy(str,helloworld);溃。
charp[]=helloworld;
returnp;}voidTest(void){char*str=NULL;str=GetMemory();printf(str);}请问运行Test函数会有什么样的结果?
答:
可能是乱码。
因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原现的内容已经被清除,新内容不可知。
voidGetMemory2(char**p,intnum){*p=(char*)malloc(num);}voidTest(void){char*str=NULL;GetMemory(&str,100);strcpy(str,hello);printf(str);}函数会有什么样的结果?
Test请问运行答:
hello
(1)能够输出
(2)内存泄漏
voidTest(void){char*str=(char*)malloc(100);strcpy(str,“hello”);free(str);if(str!
=NULL){strcpy(str,“world”);printf(str);}}
请问运行Test函数会有什么样的结果?
答:
篡改动态内存区的内容,后果难以预料,非常危险。
因为free(str);之后,str成为野指针,if(str!
=NULL)语句不起作用。
13.写一个“标准”宏,这个宏输入两个参数并返回较小的一个。
答案:
#defineMin(X,Y)((X)>(Y)?
(Y):
(X))
14.什么是预编译,何时需要预编译:
答案:
1、总是使用不经常改动的大型代码体。
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头。
15.请问以下代码有什么问题:
intmain()
{
chara;
char*str=&a;
strcpy(str,hello);
printf(str);
return0;
}
答案:
没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。
虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。
16.关键字volatile有什么含意?
并举出三个不同的例子?
答案:
提示编译器对象的值可能在编译器未监测到的情况下改变。
交换之后a=3,b=5,交换两个变量的值,不使用第三个变量。
即17.
a=5,b=3;
)