来源于读者投稿,作者Angel。
笔试时间:.09.20,15:00——16:30
岗位:嵌入式软件工程师
题型:
单选7道
不定项选择题2道
简答1道(10分)
编程2道(60分)
单选:
1、可以作为中断使用的安全同步方式是:
Aspinlock自旋锁Bmutex互斥量Csemaphore信号量D全局变量
2、linux中改变文件属性的命令:chmod
3、linux中查找文件中匹配字符串的命令:grep
4、下列哪一种协议是靠设备地址的不同区分的:IIC
5、全局未初始化变量存在哪里:BSS段
6、代码题。
#includestdio.hvoidchange(int*,int);intmain(){inta=25,b=50;change(a,b);printf("a:%d,b%d",a,b);return0;}voidchange(int*x,inty){*x=;y=;}
答案:50
提示:如果把函数写到main之前,那么就不需要声明。而且一般我们都是把main写在文件最下面。
解析:这里只有传的指针才会改变,b没有返回值。
7、代码题。
#includestdio.hstructponyai{chara;intb;shortc;void*d;};intmain(){structponyaihw;printf("%d\n",sizeof(hw));return0;}
64位linux下:24,内存对齐8*3=24,(void*)=位linux下:16,8*2,(void*)=4
8、答案:7
#includestdio.hintmain(){unsignedchara=2,b=5;printf("%d",(int)a^b);return0;}不定项选择题:
1、OSI网络模型中,下列不属于应用层协议的是?
2、进程间通讯:
(1)管道/无名管道(2)信号(3)共享内存(4)消息队列(5)信号量(6)socket
注意:临界区则是一种概念,指的是访问公共资源的程序片段,并不是一种通信方式。
线程通讯(锁):
(1)信号量(2)读写锁(3)条件变量(4)互斥锁(5)自旋锁
简答题:
linux内存碎片化的定义,可能的原因以及可以避免或者缓解的方式?
定义:内部碎片与外部碎片
在页式虚拟存储系统中,用户作业的地址空间被划分成若干大小相等的页面,存储空间也分成也页大小相等的物理块,但一般情况下,作业的大小不可能都是物理块大小的整数倍,因此作业的最后一页中仍有部分空间被浪费掉了.由此可知,页式虚拟存储系统中存在内碎片.
在段式虚拟存储系统中,作业的地址空间由若干个逻辑分段组成,每段分配一个连续的内存区,但各段之间不要求连续,其内存的分配方式类似于动态分区分配.由此可知,段式虚拟存储系统中存在外碎片.
换一种问法也是一样的:
在内存管理中,“内零头”和”外零头”个指的是什么?在固定式分区分配,可变式分区分配,页式虚拟存储系统,段式虚拟存储系统中,各会存在何种碎片?为什么?
解答
/p>
在存储管理中内碎片是指分配给作业的存储空间中未被利用的部分。
在固定式分区分配中,为将一个用户作业装入内存,内存分配程序从系统分区表中找出一个能满足作业要求的空闲分区分配给作业,由于一个作业的大小并不一定与分区大小相等,因此,分区中有一部分存储空间浪费掉了.由此可知,固定式分区分配中存在内碎片.
外碎片是指系统中无法利用的小存储块。
在可变式分区分配中,为把一个作业装入内存,应按照一定的分配算法从系统中找出一个能满足作业需求的空闲分区分配给作业,如果这个空闲分区的容量比作业申请的空间容量要大,则将该分区一分为二,一部分分配给作业,剩下的部分仍然留作系统的空闲分区。由此可知,可变式分区分配中存在外碎片.
简言之:
在固定分区管理算法中,分给程序的内存空间往往大于程序所需的空间,这剩余部分的空间不能被其他程序所用,这就是”内部碎片”
随着存储区的分配和释放过程的进行,在各个被分配出去的分区之间会存在很多的小空闲区,暂时不能被利用,这就是”外部碎片”.
避免方式:
1、依据可移动性组织页是防止物理内存碎片的一种可能方法.
2、虚拟可移动内存域避免内存碎片
编程题
1、用C写一个function,可以获取一个文件名的宏定义。
输入filename.h
输出FILE_NAME_H
#includestdbool.h#includestdio.h#includestring.hchar*GetFilenameDefine(char*filename,char*target_str,inttarget_str_size){//获取头文件的宏定义字符串}intmain(){chartarget_string[0]={0};charfilename[0]={0};scanf("%s",filename);printf("%s\n",GetFilenameDefine(filename,target_string,sizeof(target_string)));}
大家可以自己实现。
2、比较字符串是否相等。
case90%,有什么我没考虑到的吗?
#includestdbool.h#includestdio.h#includestring.hboolCompareString(char*str1,char*str2){//请判断两个字符串是否相等intret;ret=strcmp(str1,str2);if(ret==0){return0;}else{return1;}}charstr1[0];charstr2[0];intmain(){scanf("%s",str1);scanf("%s",str2);printf("%d\n",CompareString(str1,str2));return0;}
更多嵌入式笔试面试题目看这篇文章
嵌入式笔试面试题目系列(汇总)
··················END··················
点击