《C++笔试题集锦.pdf》由会员分享,可在线阅读,更多相关《C++笔试题集锦.pdf(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C/C+笔试、面试题目(3)4.s ta tic 有什么用途?(请至少说明两种)1,在函数中定义的STATIC变量在函数重复调用时维持其值不变,不在执行此变量的初始化代码。2 可以定义一个作用郁为当前文件的变量。2,7.引用与指针有什么区别?1)引用必须被初始化,指针不必。2)引用初始化以后不能被改变,指针可以改变所指的对象。2)不存在指向空值的引用,但是存在指向空值的指针。?8.描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性9.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈?10.什么是平衡二叉树?左右子树都是平衡二叉树且
2、左右子树的深度差值的绝对值不大于111.堆栈溢出一般是由什么原因导致的?没有回收垃圾资源。?12.什么函数不能声明为虚函数构造函数,友元函数?13.冒泡排序算法的时间复杂度是什么?0(n-2)14.写出float x 与“零值”比较的i f 语句。i f(x(0.000001&X -0.000001)?16.In tern et采用哪种网络协议?该协议的主要层次结构?tc p/ip 应用层/传输层/网络层/数据链路层/物理层?17.In tern et物理地址和IP 地址转换采用什么协议?ARP(Address Resolution Protocol)(地址解析愤者曩)?18.IP 地址的编码
3、分为哪俩部分?IP 地址由两部分组成,网络号和主机号。不过是要和 子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。?月色夫环写一下2.用户输入M,N值,从 1 至 N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。循环链表,用取余操作做3.不能做switch 0 的参数类型是:sw itch的参数不能为实型。n1、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。要用全局变量,需要使用:局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个
4、同名的局部变量,而那个局部变量的作用域就在那个循环体内?2、如何引用一个已经定义过的全局变量?答:ex t ern 可以用引用头文件的方式,也可以用ex t ern 关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用ex t ern 方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错3、全局变量可不可以定义在可被多个.C 文件包含的头文件中?为什么?答:可以,在不同的C文件中以s t a t ic形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此
5、时连接不会出错4、语句fo r(;1 ;)有什么问题?它是什么意思?答:和 w hil e 相同。5、do.w hil e 和 w hil e.do 有什么区别?答:前一个循环一遍再判断,后一个判断以后再循环6、请写出下列代码的输出内容#i n cl udem a in()(in t a,b,c,d;a=1 0;b=a+;c=+a;d=1 0*a+;prin t f(/zb,c,d:%d,%d,%d”,b,c,d);ret urn 0;)答:1 0,1 2,1 2 0?hs t a t ic全局变量与普通的全局变量有什么区别?s t a t ic局部变量和普通局部变量有什么区别?s t a t
6、 ic函数与普通函数有什么区别?全局变量(外部变量)的说明之前再冠以s t a t ic就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的
7、存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。s t a t ic函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(s t a t ic),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件?s t a t ic全局变量与普通的全局变量有什么区别:s t a t ic全局变量只初使化一次,防止在其他文件单元中被引用;s t a t ic局部变量和普通局部变量有什么区别:s t a t ic局部变量只被初始化一次,下一次依据上一次结
8、果值;s t a t ic函数与普通函数有什么区别:s t a t ic函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝2、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆)中。3、设有以下说明和定义:t ypedef un io n l o n g i;in t k 5 ;cha r c;D A T E;s t ruct da t a in t ca t;D A T E co w;do ub l e do g;t o o;D A T E m a x;则语句 prin t f(z/%dz/,s iz eo f(s t ruct da t e)+s iz
9、 eo f(m a x);的执行结果是:_ _ _ 5 2答:D A T E 是一个union,变量公用空间.里面最大的变量类型是int 5 ,占用20个字节.所以它的大小是20d a ta 是一个struc t,每个变量分开占用空间.依次为int4 +D A T E 20+d oub le 8 =3 2.所以结果是20+3 2=5 2.当然.在某些16 位编辑器下,int可能是2 字节,那么结果是int2+D A T E 10+d oub le 8 =204、队列和栈有什么区别?队列先进先出,栈后进先出5、写出下列代码的输出内容#i nc lud e int inc(int a)(re tu
10、rn(+a);int multi(int*a,int*b,int*c)(re turn(*c=*a*b);)type d e f int(FU N C I)(int in);type d e f int(FU N C 2)(int*,int*,int*);void show(FU N C 2 fun,int a rgl,int*a rg2)(I N C p=&inc;int te mp=p(a rgl);fun(&te mp,&a rgl,a rg2);printf(%d n”,*a rg2);ma in()(int a;show(multi,10,&a);re turn 0;)答:1107、
11、请找出下面代码中的所以错误说明:以下代码是把一个字符串倒序,如“a b e d”倒序后变为“d e b a”1#i nc lud e string.h,z2、ma in()3、4、c ha r*src=,he llo,world”;5、c ha r*d e st=N U L L;6 int le n=strle n(src);7、d e st=(c ha r*)ma lloc(le n);8、c ha r*d 二 d e st;9、c ha r*s=src le n;10、while(le n-!=0)11、d+=s-;12、printf(%s”,d e st);13、re turn 0;14
12、、答:方 法 1:int ma in()c ha r*src =he llo,world”;int le n=strle n(src);c ha r*d e st=(c ha r*)ma lloc(le n+1);要为 0 分配一个空间c ha r*d =d e st;c ha r*s=&src le nT ;指向最后一个字符while(le n-!=0)*d+=*s-;*d =0;尾部要加 0printf(/s n,d e st);fre e(d e st);使 用 完,应当释放空间,以免造成内存汇泄露re turn 0;)方法2#i D e lud e#i nc lud e ma in()
13、(c ha r str 口=“he llo,world”;int le n=strle n(str);c ha r t;for(int i=0;ile n/2;i+)(t=str i;str i=str le n-i-1;str le n-i-l=t;printf(s,str);re turn 0;l.-l,2,7,28,126 请问28 和 126 中间那个数是什么?为什么?第一题的答案应该是4 3 T=6 3规律是3-1(当 n 为偶数0,2,4)n3+l(当 n 为奇数 1,3,5)答案:6 32.用两个栈实现一个队列的功能?要求给出算法和思路!设 2 个栈为A,B,一开始均为空.入队:
14、将新元素push入栈A;出队:(1)判断栈B是否为空;(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;(3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是0(1),比上面的几种方法要好。3.在 c语言库函数中将一个字符转换成整型的函数是a tool()吗,这个函数的原型是什么?函数名:a tol功 能:把字符串转换成长整型数用 法:long a tol(c onst c ha r*nptr);程序例:#i nc lud e#i nc lud e int ma in(void)(long 1;c ha r*str=98 7 6 5 4 3 2”;1=a t
15、ol(I str);printf(string=%s inte ge r=%ld n”,str,1);re turn(0);)2.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C+中应用什么实现?c用宏定义,C+用 inline3 .直接链接两个信令点的一组链路称作什么?PPP点到点连接4 .接入网用的是什么接口?5 .vo ip 都用了那些协议?6 .软件测试都有那些种类?黑盒:针对系统功能的测试 白合:测试函数功能,各函数接口7 .确定模块的功能和模块的接口是在软件设计的那个队段完成的?概要设计阶段8 .en um s t rin g(xl,x2,x3=1 0,x4,x5,x;问
16、x=0 x8 0 1 0 0 5,0 x8 0 1 Of4 ;9.un s ign ed cha r*p l;un s ign ed lo n g*p 2;p l=(un s ign ed cha r*)0 x8 0 1 0 0 0;p 2=(un s ign ed lo n g*)0 x8 1 0 0 0 0;请问p l+5=;p2+5=;三.选择题:1.E t ht ern et 链接到I n t ern et 用到以下那个协议?A.H D L C;B.A RP;C.UD P;D.TC P;E.I D2.属于网络层协议的是:A.TC P;B.I P;C.I C MP;D.X.2 53.Wi
17、n do ws 消息调度机制是:A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;4.un s ign ed s ho rt ha s h(un s ign ed s ho rt k ey)(ret urn (k ey)%2 5 6)请问ha s h(1 6),ha s h(2 5 6)的值分别是:A.1.1 6;B.8.3 2;C.4.1 6;D.1.3 2四.找错题:1 .请问下面程序有什么错误?in t a 6 0 2 5 0 1 0 0 0,i,j,k;fo r(k=0;k =1 0 0 0;k+)fo r(j=0;j 2 5 0;j+)fo r(i=0;i 6 0;i+)把循环
18、语句内外换一下2 .t t defin e Ma x_C B 5 0 0vo id L m iQueryC Sm d(St ruct MSgC B *p m s g)(un s ign ed cha r ucC m dNum;fo r(ucC m dNum=0;ucC m dNum Ma x_G T_L en gt h)(ret urn G T_L en gt h_E RROR;)五.问答题:1.I P Pho n e的原理是什么?I PV62.TC P/I P通信建立的过程怎样,端口有什么作用?三次握手,确定是哪个应用程序使用该协议3.1 号信令和7号信令有什么区别,我国某前广泛使用的是那一
19、种?4.列举5 种以上的电话新业务?高级题6、已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此结点,然后删除。s ln o det yp e*D elet e(s ln o det yp e*H ea d,in t k ey)中 if(H ea d-n um ber=k ey)(H ea d=Po in t er-n ext;free(Po in t er);brea k;)B a ck =Po in t er;Po in t er=Po in t er-n ext;if(Po in t er-n um ber=k ey)(B a ck-n ext=Po in t er-n
20、ext;free(Po in t er);brea k;vo id delet e(No de*p)(if(H ea d=No de)while(p)有一个1 6 位的整数,每 4位为一个数,写函数求他们的和。解释:整数 1 1 0 1 0 1 0 1 1 0 1 1 0 1 1 1和 1 1 0 1+0 1 0 1+1 0 1 1+0 1 1 1感觉应该不难,当时对题理解的不是很清楚,所以写了一个函数,也不知道对不对。疑问:既然是1 6 位的整数,1 1 0 1 0 1 0 1 1 0 1 1 0 1 1 1 是 2 进制的,那么函数参数怎么定义呢,请大虾指教。答案:用十进制做参数,计算时按
21、二进制考虑。/*n 就 是 1 6 位的数,函数返回它的四个部分之和*/char Su m OfQu at er s(u n s ig n ed s ho r t n)(char c=0;in t i=4;do(c+=n&1 5;n =n 4;w hil e(-i);r et u r n c;)有 1,2,.一直到n的无序数组,求排序算法,并且要求时间复杂度为0(n),空间复杂度0(1),使用交换,而且一次只能交换两个数.(华为)#i n cl u dein t m ain()(in t a=1 0,6,9,5,2,8,4,7,1,3 ;in t l en =s iz eo f(a)/s iz
22、 eo f(in t);in t t em p;fo r(in t i=0;i l en;)(t em p =aai-1;aai-1 =ai;ai=t em p;if(ai=i+1)i+;)fo r (in t j=0;j n ex t =NULL)无节点或只有一个节点并且无自环r et u r n (fal s e);if(p l l ead-n ex t =p H ead)自环r et u r n (t r u e);Lin k *p Tem p l =p H ead;/s t ep 1Lin k *p Tem p =p H ead-n ex t;/s t ep 2w hil e(p Te
23、m p !=p Tem p l&p Tem p !=NULL&p Tem p-n ex t !=NULL)(p Tem p l 二 p Tem p l-n ex t;p Tem p =p Tem p-n ex t-n ex t;)if(p Tem p =p Tem p l)r et u r n (t r u e);r et u r n (fal s e);)两个字符串,S,t;把 t 字符串插入到S 字符串中,S 字符串有足够的空间存放t 字符串v o id in s er t(char *s,char *t,in t i)(m em cp y(&s s t r l en(t)+i,&s i,
24、s t r l en(s)-i);me mc pyt,s t r l en(t);s s t r l en(s)+s t r l en(t)=,0);)l o 编写一个C函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。char *s ear ch(char *cp So u r ce,char ch)(char *cp Tem p=NULL,*cp D es t=NULL;in t iTem p,iC o u n t=0;w hil e(*cp So u r ce)(if(*cp So u r ce=ch)(iTem p =0;cp Tem p =cp So
25、u r ce;w hil e(*cp So u r ce=ch)+iTem p,+cp So u r ce;if(iTem p iC o u n t)iC o u n t =iTem p,cp D es t =cp Tem p;if(!*cp So u r ce)br eak;)+cp So u r ce;r et u r n cp D es t;)2。请编写一个C函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。in t s ear ch(char *cp So u r ce,in t n,char ch)(in t i;fo r(i=0;in ex t,并随后删除原n
26、 ex t指向的节点。#i n cl u de v o id fo o(in t m,in t n)(p r in t f(m=%d,n=%dn”,m,n);)in t m ain()(in t b=3;fo o(b+=3,+b):p r in t f(b=%dn”,b);r et u r n 0:)输出:m=7,n=4,b=7 (VC 6.0)这种方式和编译器中得函数调用关系相关即先后入栈顺序。不过不同编译器得处理不同。也是因为C标准中对这种方式说明为未定义,所以各个编译器厂商都有自己得理解,所以最后产生得结果完全不同。因为这样,所以遇见这种函数,我们首先要考虑我们得编译器会如何处理这样得函
27、数,其次看函数得调用方式,不同得调用方式,可能产生不同得结果。最后是看编译器优化。2.写一函数,实现删除字符串s t r l 中含有的字符串s t r 2.第二个就是利用一个KMP 匹配算法找到s t r 2 然后删除(用链表实现的话,便捷于数组)微软亚洲技术中心的面试题!1.进程和线程的差别。线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源
28、.(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。2 .测试方法人工测试:个人复查、抽查和会审机器测试:黑盒测试和白盒测试2 .H e a p 与 s t a c k 的差别。H e a p 是 堆,s t a c k 是栈。S t a c k 的空间由操作系统自动分配/释放,H e a p 上的空间手动分配/释放。S t a c k 空间有限,H e a p 是很大的自由存储区C中的m a l l o c 函数分配的内存空间即在堆上,C+中对应的是n e w 操作符。程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程
29、中函数调用时参数的传递也在栈上进行3.W in d o w s 下的内存是如何管理的?4.介绍.N e t 和.N e t 的安全性。5 .客户端如何访问.N e t 组件实现W e b S e r vic e?6 .C/C+编译器中虚表是如何完成的?7 .谈谈C O M的线程模型。然后讨论进程内/外组件的差别。8 .谈 谈 I A32 下的分页机制小页(4 K)两级分页模式,大页(4 M)一级9.给两个变量,如何找出一个带环单链表中是什么地方出现环的?一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方1 0 .在 I A 3 2 中一共有多少种办法从用户态跳到内核态?通过调用门,从
30、r i n g 3 到 r i n g。,中断从r i n g 3 到 r i n g。,进入v m8 6等等1 1 .如果只想让程序有一个实例运行,不能运行两个。像 w i n a mp 一样,只能开一个窗口,怎样实现?用内存映射或全局原子(互斥变量)、查找窗口句柄.F i n d W i n d o w,互斥,写标志到文件或注册表,共享内存。.1 2 .如何截取键盘的响应,让 所 有 的 a,变 成 b,?键盘钩子 Se t W i n d o w s H o o kE x1 3 .A p a r t me n t 在 C O M 中有什么用?为什么要引入?1 4 .存储过程是什么?有什么
31、用?有什么优点?我的理解就是一堆s q l的集合,可以建立非常复杂的查询,编译运行,所以运行一次后,以后再运行速度比单独执行SQL 快很多1 5 .Te mp la t e 有什么特点?什么时候用?1 6.谈谈W i n d o w s D N A 结构的特点和优点。网络编程中设计并发服务器,使 用 多 进 程 与 多 线 程,请问有什么区别?1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。两者都可以提高程序的并发度,提高程序运行效率
32、和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。思科1.用宏定义写出s w ap (x,y)#d e f i n e s w ap (x,y)x =x +y;y =x -y;x =x -y;2.数组aN,存放了 1至N T个数,其中某个数重复一次。写一个函数,找出被重复的数字,时间复杂度必须为。(N)函数原型:i n t d o _ d u p(i n t a,i n t N)3 一语句实现x是否为2的若干次幕的判断i n t i =51 2;co u t bo o l al p ha
33、(i&(i -1)?f al s e :t r u e)e n d l;4 .u n s i g n e d i n t i n t v e r t (u n s i g n e d i n t x,i n t p,i n t n)实现对 x 的进行转换,p 为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0 b0 0 0 1 0 0 0 1,p=4,n=3转换后x=ObOH O0 0 0 1u n s i g n e d i n t i n t v e r t(u n s i g n e d i n t x,i n t p,i n t n)u n s i g n e d i n t
34、 _ t =0;u n s i g n e d i n t _ a=1;f o r(i n t i =0;i n;+i)_ t|=_ a;a=a 1;)_ t =_ t p;X _ t;r e t u r n x;慧通:什么是预编译何时需要预编译:1、总是使用不经常改动的大型代码体。2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。char *co n s t p;char co n s t *pco n s t char *p上述三个有什么区别?char *co n s t p;常量指针,p的值不可以修改char
35、co n s t *p;指向常量的指针,指向的常量值不可以改co n s t char *p;和 char co n s t *pchar s t r l =abc;char s t r 2 =abc;co n s t char s t r 3 =abc;co n s t char s t r 4 =abc;co n s t char *s t r 5=abc;co n s t char *s t r 6=abc”;char *s t r 7=abc;char *s t r 8 =abc;co u t (s t r l =s t r 2 )e n d l;co u t (s t r 3 =s
36、t r 4 )e n d l;co u t (s t r 5=s t r 6)e n d l;co u t (s t r 7=s t r 8 )e n d l;结果是:0 0 1 1解答:s t r l,s t r 2,s t r 3,s t r 4是数组变量,它们有各自的内存空间;而s t r 5,s t r 6,s t r 7,s t r 8是指针,它们指向相同的常量区域。1 2.以下代码中的两个s i z e o f用法有问题吗?C易v o i d Up p e r cas e (char s t r )/将s t r中的小写字母转换成大写字母(f o r(s i z e t i=0;i
37、 s i z e o f(s t r)/s i z e o f(s t r 0);+i )i f (*a*=s t r i&s t r i =z )s t r i -=(a;c h a r s t r =a B c D e;c ou t s t r 字符长度为:s i z e of (s t r)/s i z e of (s t r 0 )e nd l;Up p e r c a s e(s t r );c ou t s t r (Y)?(Y):(X)结尾没有;2、嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。w hi le 0或者 for(;)3、关键字s t a t i c 的作用是
38、什么?定义静态变量4、关键字c ons t 有什么含意?表示常量不可以修改的变量。5、关键字v ola t i le有什么含意?并举出三个不同的例子?提示编译器对象的值可能在编译器未监测到的情况下改变。i nt (*s 1 0 )(i nt)表示的是什么啊i nt (*s 1 0 )(i nt)函数指针数组,每个指针指向一个i nt fu nc(i nt pa r a m)的函数。1 .有以下表达式:i nt a=24 8;b=4;i nt c ons t c=21;c ons t i nt *d=&a;i nt *c ons t e=&b;i nt c ons t *f c ons t =&
39、a;请问下列表达式哪些会被编译器禁止?为什么?*c=32;d=&b;*d=4 3;e=34;e=&a;f=0 x 32I f;*c这是个什么东东,禁止*d说了是c o n s t,禁止e=&a说了是c ons t 禁止c ons t *f c ons t =&a;禁止2.交换两个变量的值,不使用第三个变量。即 a=3,b=5,交换之后a=5,b=3;有两种解法,一种用算术算法,一种用X 异或)a =a +b;b =a -b;a =a -b;ora =a b;/只能对 i nt,c ha r.b =a b;a =a-b;ora J b J a;3.c和 c+中的s t r u c t 有什么不同
40、?c和 c+中 s t r u c t 的主要区别是c中的s t r u c t 不可以含有成员函数,而 C+中的s t r u c t 可以。C+中 s t r u c t 和 c la s s 的主要区别在于默认的存取权限不同,s t r u c t 默认为pu b li c,而 c la s s 默认为pr i v a t e4.#i nc lu d e#i nc lu d e v oi d get memor y(c ha r *p)(p=(c ha r *)ma lloc(1 0 0);s t r c py (p,z zhello w or ld );i nt ma i n()c h
41、a r *s t r=N U L L;get memor y(s t r);pr i nt f(z,%s/nz,,s t r);fr ee(s t r);r et u r n 0;程序崩溃,get memor y 中的ma lloc 不能返回动态内存,fr ee()对 s t r 操作很危险5.c ha r s z s t r 1 0 ;s t r c py (s z s t r,“0 1 234 5 6 7 8 9 );产生什么结果?为什么?长度不一样,会造成非法的os6,列举几种进程的同步机制,并比较其优缺点。原子操作信号量机制自旋锁管程,会合,分布式系统7.进程之间通信的途径共享存储系统
42、消息传递系统管道:以文件系统为基础1 1 .进程死锁的原因资源竞争及进程推进顺序非法1 2.死锁的4个必要条件互斥、请求保持、不可剥夺、环路13 .死锁的处理鸵鸟策略、预防策略、避免策略、检测与解除死锁15.操作系统中进程调度策略有哪几种?F C F S(先来先服务),优先级,时间片轮转,多级反馈8 .类的静态成员和非静态成员有何区别?类的静态成员每个类只有一个,非静态成员每个对象一个9 .纯虚函数如何定义?使用时应注意什么?v ir t u a l v o id f()=0;是接口,子类必须要实现10.数组和链表的区别数组:数据顺序存储,固定大小连表:数据可以随机存储,大小可动态改变12.I
43、 SO 的七层模型是什么?t cp/u dp 是属于哪一层?t cp/u dp 有何优缺点?应用层表示层会话层运输层网络层物理链路层物理层t cp /u dp 属于运输层T C P 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。与 T C P 不同,U D P 并不提供对I P 协议的可靠机制、流控制以及错误恢复功能等。由 于 U D P比较简单,U D P 头包含很少的字节,比 T C P 负载消耗少。t cp:提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好u dp:不提供稳定的服务,包头小,开销小1:(v o id*)p t r 和(*(v o id*)p
44、 t r 的结果是否相同?其中p t r 为同一个指针.(v o id*)p t r 和(*(v o id*)p t r 值是相同的2:int ma in 0(int x=3;pri n tf x);r et u r n 1;)问函数既然不会被其它函数调用,为什么要返回1?mia n中,c 标准认为0 表示成功,非。表示错误。具体的值是某中具体出错信息1,要对绝对地址0 x 100000赋值,我们可以用(u ns ign ed in t*)0 x 1 0 0 0 0 0 =1 2 3 4;那么要是想让程序跳转到绝对地址是0 x 1 0 0 0 0 0 去执行,应该怎么做?*(v o id(*)
45、()0 x 1 0 0 0 0 0 )();首先要将0 x 1 0 0 0 0 0 强制转换成函数指针,即:(v o id(*)()0 x 1 0 0 0 0 0然后再调用它:*(v o id(*)()0 x 1 0 0 0 0 0)();用 t y p edef可以看得更直观些:t y p edef v o id(*)()v o idF u n cPt r;*(v o idF u n cPt r)Ox 1 0 0 0 0 0)();2,已知一个数组t a bl e,用一个宏定义,求出数据的元素个数#defin e NT B Lt t defin e NT B L(s iz eo f(t a
46、bl e)/s iz eo f(t a bl e 0 )面试题:线程与进程的区别和联系?线程是否具有相同的堆栈?dl l 是否有独立的堆栈?进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。每个线程有自己的堆栈。D LL中有没有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题。因为D LL中的代码是被某些线程所执行,只有线程拥有堆栈,如果D LL中的代码是E XE 中的线程所调用,那么这个时候是不是说这个D LL没有自己独立的堆栈?如果D LL中的代码是由D LL自己创建的线程所执行,那么是不是说D LL有独立的堆栈?以上讲
47、的是堆栈,如果对于堆来说,每个D LL有自己的堆,所以如果是从D LL中动态分配的内存,最好是从D LL中删除,如果你从D LL中分配内存,然后在E XE 中,或者另外一个D LL中删除,很有可能导致程序崩溃u n s ign ed s ho r t A=1 0;p r in t f(A=%u n ,A);cha r c=1 2 8;p r in t f(c=%d n”,c);输出多少?并分析过程第一题,A=0 x fffffff5,in t 值 为-1 1,但输出的是u in t。所以输出4 2 9 4 9 6 7 2 8 5第二题,c=0 x l 0,输出的是in t,最高位为1,是负数,
48、所以它的值就是0 x 0 0 的补码就是1 2 8,所以输出一 1 2 8。这两道题都是在考察二进制向in t 或 u in t 转换时的最高位处理。分析下面的程序:v o id G et Mem o r y(cha r *p,in t n u m)(*p=(cha r *)m a l l o c(n u m);)in t m a in O(cha r *s t r=NU LL;G et Mem o r y(&s t r,1 0 0);s t r cp y(s t r,hel l o );fr ee(s t r);if(s t r!=NU LL)(s t r cp y(s t r,w o r
49、l d);)p r in t f(n s t r is%s”,s t r);get cha r();)问输出结果是什么?希望大家能说说原因,先谢谢了输出 s t r is w o r l dofr ee只是释放的s t r 指向的内存空间,它本身的值还是存在的.所以f r ee之后,有一个好的习惯就是将s t r=NU L L.此时s t r 指向空间的内存已被回收,如果输出语句之前还存在分配空间的操作的话,这段存储空间是可能被重新分配给其他变量的,尽管这段程序确实是存在大大的问题(上面各位已经说得很清楚了),但是通常会打印出w o r l d 来。这是因为,进程中的内存管理一般不是由操作系统
50、完成的,而是由库函数自己完成的。当你m al l o c 一块内存的时候,管理库向操作系统申请一块空间(可能会比你申请的大一些),然后在这块空间中记录一些管理信息(一般是在你申请的内存前面一点),并将可用内存的地址返回。但是释放内存的时候,管理库通常都不会将内存还给操作系统,因此你是可以继续访问这块地址的,只不过。楼上都说过了,最好别这么干。ch ar a 1 0 ,s t r l en(a)为什么等于1 5?运行的结果#i n cl u de s t di o.h#i n cl u de s t r i n g,h”v o i d m ai n()(ch ar aa 1 0 ;p r i n