华为嵌入式软件工程师试题汇演示教学.doc
《华为嵌入式软件工程师试题汇演示教学.doc》由会员分享,可在线阅读,更多相关《华为嵌入式软件工程师试题汇演示教学.doc(19页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、Good is good, but better carries it.精益求精,善益求善。华为嵌入式软件工程师试题汇-(1)什么是预编译,何时需要预编译:答案:、总是使用不经常改动的大型代码体。、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。(2)char*constpcharconst*pconstchar*p上述三个有什么区别?答案:char*constp;/常量指针,p的值不可以修改charconst*p;/指向常量的指针,指向的常量值不可以改constchar*p;/和charconst*p(3)chars
2、tr1=abc;charstr2=abc;constcharstr3=abc;constcharstr4=abc;constchar*str5=abc;constchar*str6=abc;char*str7=abc;char*str8=abc;cout(str1=str2)endl;cout(str3=str4)endl;cout(str5=str6)endl;cout(str7=str8)endl;结果是:0011str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。(4)以下代码中的两个sizeof
3、用法有问题吗?C易voidUpperCase(charstr)/将str中的小写字母转换成大写字母for(size_ti=0;isizeof(str)/sizeof(str0);+i)if(a=stri&stri=z)stri-=(a-A);charstr=aBcDe;coutstr字符长度为:sizeof(str)/sizeof(str0)endl;UpperCase(str);coutstr(Y)?(Y):(X)/结尾没有;14。int(*s10)(int)表示的是什么啊?答案:int(*s10)(int)函数指针数组,每个指针指向一个intfunc(intparam)的函数。16交换两个
4、变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3;答案:有两种解法,一种用算术算法,一种用(异或)a=a+b;b=a-b;a=a-b;ora=ab;/只能对int,char.b=ab;a=ab;ora=b=a;18.#include#includevoidgetmemory(char*p)p=(char*)malloc(100);strcpy(p,helloworld);intmain()char*str=NULL;getmemory(str);printf(%s/n,str);free(str);return0;答案:程序崩溃,getmemory中的malloc不能返回动
5、态内存,free()对str操作很危险19.charszstr10;strcpy(szstr,0123456789);产生什么结果?为什么?答案:长度不一样,会造成非法的OS20.列举几种进程的同步机制,并比较其优缺点。答案:原子操作信号量机制自旋锁管程,会合,分布式系统?21.进程之间通信的途径答案:共享存储系统消息传递系统管道:以文件系统为基础22.进程死锁的原因答案:资源竞争及进程推进顺序非法23.死锁的4个必要条件?答案:互斥、请求保持、不可剥夺、环路24.死锁的处理?答案:鸵鸟策略、预防策略、避免策略、检测与解除死锁25.操作系统中进程调度策略有哪几种?答案:FCFS(先来先服务),
6、优先级,时间片轮转,多级反馈26.类的静态成员和非静态成员有何区别?答案:类的静态成员每个类只有一个,非静态成员每个对象一个?27.纯虚函数如何定义?使用时应注意什么?答案:virtualvoidf()=0;是接口,子类必须要实现28.数组和链表的区别答案:数组:数据顺序存储,固定大小连表:数据可以随机存储,大小可动态改变29.ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?答案:应用层表示层会话层运输层网络层物理链路层物理层tcp/udp属于运输层TCP服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。与TCP不同,UDP并不提供对IP协议的
7、可靠机制、流控制以及错误恢复功能等。由于UDP比较简单,UDP头包含很少的字节,比TCP负载消耗少。tcp:提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好udp:不提供稳定的服务,包头小,开销小30:(void*)ptr和(*(void*)ptr的结果是否相同?其中ptr为同一个指针答案:.(void*)ptr和(*(void*)ptr值是相同的31:intmain()intx=3;printf(%d,x);return1;问函数既然不会被其它函数调用,为什么要返回1?答案:mian中,c标准认为0表示成功,非0表示错误。具体的值是某中具体出错信息32,要对绝对地址0x100000赋
8、值,我们可以用(unsignedint*)0x100000=1234;那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?答案:*(void(*)()0x100000)();首先要将0x100000强制转换成函数指针,即:(void(*)()0x100000然后再调用它:*(void(*)()0x100000)();用typedef可以看得更直观些:typedefvoid(*)()voidFuncPtr;*(voidFuncPtr)0x100000)();33,已知一个数组table,用一个宏定义,求出数据的元素个数答案:#defineNTBL#defineNTBL(sizeo
9、f(table)/sizeof(table0)34。线程与进程的区别和联系?线程是否具有相同的堆栈?dll是否有独立的堆栈?答案:进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。每个线程有自己的堆栈。DLL中有没有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题。因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是EXE中的线程所调用,那么这个时候是不是说这个DLL没有自己独立的堆栈?如果DLL中的代码是由DLL自己创建的线程所执行,那么是不是说DLL有独立的堆栈?以上讲的是堆栈,如果对于堆来说,每
10、个DLL有自己的堆,所以如果是从DLL中动态分配的内存,最好是从DLL中删除,如果你从DLL中分配内存,然后在EXE中,或者另外一个DLL中删除,很有可能导致程序崩溃35。unsignedshortA=10;printf(A=%un,A);charc=128;printf(c=%dn,c);输出多少?并分析过程答案:第一题,A0xfffffff5,int值为11,但输出的是uint。所以输出4294967285第二题,c0x10,输出的是int,最高位为1,是负数,所以它的值就是0x00的补码就是128,所以输出128。这两道题都是在考察二进制向int或uint转换时的最高位处理。(二)1.-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华为 嵌入式 软件工程师 试题 汇演 教学
限制150内