46家著名公司C C++笔试题目.doc_第1页
46家著名公司C C++笔试题目.doc_第2页
46家著名公司C C++笔试题目.doc_第3页
46家著名公司C C++笔试题目.doc_第4页
46家著名公司C C++笔试题目.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

46家著名公司C C+笔试题目之华为 (附答案)2010-06-04 21:341请你分别画出 OSI 的七层网络结构图和 TCP/IP 的五层结构图。*答案*OSITCP/IP应用层(Application Layer)表示层(Presentation Layer)应用层(Application Layer)会话层(Session Layer)传输层(Transport Layer)传输层(Transport Layer)网络层(Network Layer)网络层(Network Layer)数据链路层(DataLink Layer)数据链路层(DataLink Layer)物理层(Physical Layer)物理层(Physical Layer)2请你详细地解释一下 IP 协议的定义,在哪个层上面?主要有什么作用?TCP 与 UDP呢?*答案*IP协议即网络之间互连的协议或因特网协议(Internet Protocol),它是为计算机网络相互连接进行通信而设计的协议,位于网络层,其作用在于充分的开放透明性与灵活有效的多业务增值能力,用于将低层传输给TCP和UDP,或将TCP和UDP发来的数据传输给低层设备。TCP是指传输控制协议(Transmission Control Protocol),是一种面向连接的,可靠的,基于字节流的传输协议,通常TCP用于传输较大并要求准确的数据包,但是较慢。UDP是指用户数据报协议(User Datagram Protocol),是一种非连接的,面向事务的简单不可靠的的信息传送服务协议,通常用于传输较小且对数据准确性要求不高的场合,但较快。3请问交换机和路由器各自的实现原理是什么?分别在哪个层次上面实现的?*答案*交换机:数据链路层,交换机=多口网桥(Multi-port Bridge),每个端口对应一个节点或LAN段。连接局域网的不同网段(广播域),不是传统以太网广播式(Broadcast)包传输技术,自学习(Auto Self-learning)网卡地址(MAC Address)及包检查过滤,切割大型网络、各网段频带独立,有效地提高网络整体性能。路由器:工作于网络层的设备,能连接相同或不同类型的局域网。具有网上传递数据时选择最佳路径的能力;基于协议或IP地址转发数据包;可过滤广播数据包的问题。4请问 C+的类和 C 里面的 struct 有什么区别?*答案*C+的class和C+的struct之间区别很小,只有两点:(1)默认的成员访问权限,前者是private,后者是public;(2)默认的继承权限,来自class的继承默认为private继承,来自struct的继承默认是public继承。C+的类和 C 里面的 struct区别:(1)CALSS类中对数据进行了封装,其他对象要直接访问其私有数据是不行的,而STRUCT中的数据就可以直接访问。(2)CLASS有继承的概念,而STRUCT没有 (3)CLASS中的成员函数有虚拟、重载、动态束定等概念,而STRUCT中没有。5请讲一讲析构函数和虚函数的用法和作用。*答案*析构函数:置于“”是析构函数;析构函数因使用“”符号(逻辑非运算符),表示它为逆构造函数,加上类名称来定义。 析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命期结束的时候,由系统自动调用。有适放内存空间的作用。虚函数:虚函数是C+多态的一种表现,例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virturl(虚函数)。 使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。如果父类的函数(方法)根本没有必要或者无法实现,完全要依赖子类去实现的话,可以把此函数(方法)设为virturl 函数名=0我们把这样的函数(方法)称为纯虚函数。 如果一个类包含了纯虚函数,称此类为抽象类。虚函数是用于类当被继承时,子类在使用同基类名字相同的函数名时,对象能直接调用相应的函数,而不是永远指向基类中的相同函数名的函数。一般来说,如果一个类可能做为基类使用的话,我们最好将其析构函数虚拟化,因为这样当其子类的对象退出时,也会一并调用子类的析构函数释放内存,如果不虚拟化,则只会调用基类的析构函数,从而导致内存未完全释放。6全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?*答案*我们可以从几个方面来考虑:(1) 生存周期不同:全局变量为整个程序从运行到结束(结束时所占内存释放),局部变量从调用模块到模块结束(结束时所占内存释放);(2) 作用范围不同:全局变量可被整个程序中的任意函数或变量访问,局部变量只可被本模块内的函数或变量访问;(3) 分配方式不同:全局变量存储在全局数据区并且在程序开始运行的时候被加载,局部变量存储在线程的栈中;(4) 安全感不同: 全局变量可在整个程序的任何地方被修改,而局部变量在其模块之外是不可见的;(5) 用途不同: 使用全局变量时,函数间要访问该变量可直接访问,而局部变量在不同模块间访问只能通过参数传递来共享数据。另:全局数据区分为两部分全局数据区和静态数据区,静态数据区专门存放static变量。static的全局变量只在该文件范围内可见,不能用extern声明为外部变量。操作系统和编译器,是通过内存分配的位置来知道的,编译器会自动初始化全局变量(如果未初始化)为0,而局部变量的初始值则视当前内存内的值而定。78086 是多少位的系统?在数据总线上是怎么实现的?*答案*8086是16位的系统,数据总线为16位,地址总线为20位。它既能处理16位数据,也能处理8位数据。通过地址总线复用可寻址的内存空间为1MB。46家著名公司C C+笔试题目之普天 (一) (附答案)2010-06-08 0:251实现双向链表删除一个节点 P,在节点 P 后插入一个节点,写出这两个函数。*答案*/此双向链表以含附加头结点为例/删除结点int DelNode( Link * pLink, Link * pNode )Link * pLinkTemp;pLinkTemp= pLink-pNext;while ( pLinkTemp & pLinkTemp-iData != pNode-iData ) /查找要删除的结点pLinkTemp= pLinkTemp-pNext;if ( pLinkTemp != 0 )pLinkTemp-pPre-pNext= pLinkTemp-pNext;pLinkTemp-pNext-pPre= pLinkTemp-pPre;pLinkTemp-pPre= 0;pLinkTemp-pNext= 0;free( pLinkTemp );return 1;elsereturn 0;/插入结点int AddNode( Link * pLink, Link * pNode )Link *pLinkTemp;pLinkTemp= pLink-pNext;while ( pLinkTemp & pLinkTemp-iData != pNode-iData ) /查找插入位置pLinkTemp= pLinkTemp-pNext;if ( pLinkTemp != 0 )pNode-pPre= pLinkTemp;pNode-pNext= pLinkTemp-pNext;pLinkTemp-pNext-pPre= pNode;pLinkTemp-pNext= pNode;return 1;elsereturn 0;46家著名公司C C+笔试题目之普天 (二) (附答案)2010-06-08 0:252写一个函数,将其中的t 都转换成 4 个空格。*答案*char * ConvertTabletoBlack( char * str )char * strTemp= str;int iLength= 0;while ( *strTemp )if ( *strTemp = t )iLength +;strTemp +;iLength= iLength * 3 + strTemp - str;strTemp= ( char * ) malloc( iLength + 1 );memset( strTemp, 0, iLength + 1 );strTempiLength= 0;while ( *str )if ( *str = t )*strTemp + = ;*strTemp + = ;*strTemp + = ;*strTemp + = ;str +;else*strTemp + = *str +;strTemp-= iLength;return strTemp;46家著名公司C C+笔试题目之普天 (三) (附答案)2010-06-08 0:263Windows 程序的入口是哪里?写出 Windows 消息机制的流程。*答案*Windows程序的入口是WinMain()函数。Windows应用程序消息处理机制:A. 系统将会维护一个或多个消息队列,所有产生的消息都会被放入或是插入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环队列中。B. 每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息,取出消息后,应用程序可以对消息进行一些预处理。C. 而在没有消息时消息循环就将控制权交给系统。应用程序调用DispatchMessage,将消息回传给操作系统。D. 系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理。4如何定义和实现一个类的成员函数为回调函数?*答案*如果试图直接使用C+的成员函数作为回调函数将发生错误,甚至编译就不能通过。通过查询资料发现,其错误是普通的C+成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C+通过传递一个指向自身的指针给其成员函数从而实现程序函数可以访问C+的数据成员。这也可以理解为什么C+类的多个实例可以共享成员函数但是确有不同的数据成员。由于this指针的作用,使得将一个CALLBACK型的成员函数作为回调函数安装时就会因为隐含的this指针使得函数参数个数不匹配,从而导致回调函数安装失败。要解决这一问题的关键就是不让this指针起作用,通过采用以下两种典型技术可以解决在C+中使用回调函数所遇到的问题。这种方法具有通用性,适合于任何C+。 1). 不使用成员函数,直接使用普通C函数,为了实现在C函数中可以访问类的成员变量,可以使用友元操作符(friend),在C+中将该C函数说明为类的友元即可。这种处理机制与普通的C编程中使用回调函数一样。 2). 使用静态成员函数,静态成员函数不使用this指针作为隐含参数,这样就可以作为回调函数了。静态成员函数具有两大特点:其一,可以在没有类实例的情况下使用;其二,只能访问静态成员变量和静态成员函数,不能访问非静态成员变量和非静态成员函数。由于在C+中使用类成员函数作为回调函数的目的就是为了访问所有的成员变量和成员函数,如果作不到这一点将不具有实际意义。解决的办法也很简单,就是使用一个静态类指针作为类成员,通过在类创建时初始化该静态指针,如pThis=this,然后在回调函数中通过该静态指针就可以访问所有成员变量和成员函数了。这种处理办法适用于只有一个类实例的情况,因为多个类实例将共享静态类成员和静态成员函数,这就导致静态指针指向最后创建的类实例。为了避免这种情况,可以使用回调函数的一个参数来传递this指针,从而实现数据成员共享。这种方法稍稍麻烦,这里就不再赘述。A. 什么是回调函数?简而言之,回调函数就是被调用者回头调用调用者的函数。 使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个被调用函数。而该被调用函数在需要的时候,利用传递的地址调用回调函数。回调函数,就是由你自己写的,你需要调用另外一个函数,而这个函数的其中一个参数,就是你的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可以在回调函数里完成你要做的事。B. 如何定义和实现一个类的成员函数为回调函数要定义和实现一个类的成员函数为回调函数需要做三件事:a 声明;b 定义;c 设置触发条件,就是在你的函数中把你的回调函数名作为一个参数,以便系统调用,如:(1) 声明回调函数类型typedef void (*FunPtr)(void);(2)定义回调函数class Testpublic:static void callBackFun(void); /回调函数,必须声明为static, 因为callBackFun默认有一个const Test* 的指针;(3)设置触发条件void Funtype( FunPtr ptr )ptr();void main(void)Funtype(Test:callBackFun);C. 回调函数与API函数回调和API非常接近,他们的共性都是跨层调用的函数。但区别是API是低层提供给高层的调用,一般这个函数对高层都是已知的;而回调正好相反,他是高层提供给底层的调用,对于低层他是未知的,必须由高层进行安装,这个安装函数其实就是一个低层提供的API,安装后低层不知道这个回调的名字,但它通过一个函数指针来保存这个回调函数,在需要调用时,只需引用这个函数指针和相关的参数指针。其实:回调就是该函数写在高层,低层通过一个函数指针保存这个函数,在某个事件的触发下,低层通过该函数指针调用高层那个函数。46家著名公司C C+笔试题目之普天 (四) (附答案)2010-06-08 0:275C+里面是不是所有的动作都是 main()引起的?如果不是,请举例。*答案*不是,比如中断引起的中断处理不是直接由main()引起的,而是由外部事件引起的。在运行c+程序时,通常从main()函数开始执行。因此如果没有main(),程序将不完整,编译器将指出未定义main()函数。例外情况:如,在windows编程中,可以编写一个动态连接库(dll)模块,这是其他windows程序可以使用的代码。由于DLL模块不是独立的程序,因此不需要main().用于专用环境的程序-如机器人中的控制器芯片-可能不需要main().但常规的独立程序都需要main().比如全局变量的初始化,就不是由main函数引起的.但是这个初始化动作并不能为编译器的断点所截断。6C+里面如何声明 const void f(void)函数为 C 程序中的库函数?*答案*在该函数前添加extern “C”声明。void f(void)用c+ compiler来编译,在产生的obj文件中的名字变成了$f_0 void f(voi)用c compiler编译,obj中变成了 _f 如果是extern C void f(void),仍然用c+编译器编译,变成 _f 所以extern C 是强迫c+编译器对函数名进行修饰的时候采用c命名约定。 这样,在c+写的程序中就可以使用已经用c编译器编译好的obj或者lib了。7下列哪两个是等同的int b; A const int* a = &b; B const* int a = &b; C const int* const a = &b; D int const* const a = &b; *答案*各式表示的意思分别为:A const int* a = &b; /*a是const,但指针a可变B const* int a = &b; /语法错误,应该写成int const * a = &b;这里,就和A相同,如写成int * const a = &b;则与A不同。C const int* const a = &b; /a和*a都是const,常量和指针的值都不能改变D int const* const a = &b; /a和*a都是const,常量和指针的值都不能改变因此C,D两者是相同的。总结个技巧:如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。A与B同,C与D同8内联函数在编译时是否做参数类型检查?void g(base & b) b.play; void main() son s; g(s); return; *答案*做类型检查,因为内联函数就是在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来代替。9.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值int a = 4;(A)a += (a+); (B) a += (+a) ;(C) (a+) += a;(D) (+a) += (a+);a = ?*答案*答:C错误,左侧不是一个有效变量,不能赋值,可改为(+a) += a;改后答案依次为9,10,10,1146家著名公司C C+笔试题目之普天 (五) (附答案)2010-06-08 0:2910.某32位系统下, C+程序,请计算sizeof 的值char str = “”/ 16char *p = str ;int n = 10;请计算sizeof (str ) = ?(1)/ 字符串长度加1(结束符,sizeof需要加上结束符,而strlen不需要,为字符串可见长度)sizeof ( p ) = ?(2)/ 实际是计算指针长度sizeof ( n ) = ?(3)/ 实际是逆运算int型的长度void Foo ( char str100)请计算sizeof( str ) = ?(4)/ 函数的形参实际也是指针的形式void *p = malloc( 100 );请计算sizeof ( p ) = ?(5)/ 同2,仍然是指针*答案*答:(1)17 (2)4 (3) 4 (4)4 (5)411. 回答下面的问题(1).头文件中的 ifndef/define/endif 干什么用?预处理*答案*答:防止头文件被重复引用(2). #include 和 #include “filename.h” 有什么区别?*答案*答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。(3).在C+ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?*答案*答:函数和变量被C+编译后在符号库中的名字与C语言的不同,被extern C修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C+程序不能直接调用C 函数。C+提供了一个C 连接交换指定符号extern“C”来解决这个问题。(4). switch()中不允许的数据类型是?*答案*答:实型12. 回答下面的问题(1).Void GetMemory(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = NULL;GetMemory(&str, 100);strcpy(str, hello);printf(str);请问运行Test 函数会有什么样的结果?*答案*答:输出“hello”(2). void Test(void)char *str = (char *) malloc(100);strcpy(str, “hello”);free(str);if(str != NULL)strcpy(str, “world”);printf(str);请问运行Test 函数会有什么样的结果?*答案*答:输出“world”(3). char *GetMemory(void)char p = hello world;return p;void Test(void)char *str = NULL;str = GetMemory();printf(str);请问运行Test 函数会有什么样的结果?*答案*答:无效的指针,输出不确定。46家著名公司C C+笔试题目之大唐 (一) (附答案)2010-06-08 0:321数列 6,10,18,32,“?”,问“?”是几?*答案*答案很多,关键是能讲出正确的理由:(1) 54。赞成这个结果的人居多:大家都说了两次逐差的54的例子,我就不重复了,换个方法:6 = 2 * 310= 2 * 518= 2 * 932= 2 * 16观察数列 3 , 5 , 9, 16 5 - 3 = 29 - 5 = 416- 9 = 7再观察数列 2, 4, 74 - 2 = 27 - 4 = 3由此我可以说2, 4, 7是差加1的数列,该数列的下一项是11那么数列3 , 5 , 9, 16 的下一项就是27所以原数列6,10,18,32,的下一项就是27*2=54(2) 6410 6 = 4 x 2(0)/ (0)2的零次方,下同18 10 = 4 x 2 (1)32 18 = 4 x 2(2)X 32 = 4 x2(3)/ 得出X=64(3) 606与10的关系为6*2-2,10与8的关系为10*2-2,18与32的关系为18*2-4,则?为32*2-4等于60.(4) 5510=6*1.5+118=10*1.5+332=18*1.5+555=32*1.5+72某人出 70 买进一个 x,80 卖出,90 买回,100 卖出,这桩买卖怎么样?*答案*赚20块,80卖出,90追回往往能体现出专业型,因为没沉溺在过早卖出的懊悔之中。3月球绕地球一圈,至少要多少时间?*答案*应该是一恒星月,约27.32166日,而不是一回归月(约27.32158日)。竟然还有两个人说是回归月,看来不得不给这两位说一下回归月和恒星月的区别了。回归月是月球连续两次经过零度黄经线的时间间隔,而零度黄经线是在缓慢地向西移动的(这种现象叫岁差),所以这个周期其实把地轴的进动也算在内了;恒星月是月球相对于恒星背景运动的周期,排除了地球的公转和岁差,这才是真正的月球的公转周期。正如恒星年才是地球的公转周期,而回归年不是一样。47 个人用 7 小时挖了 7 米的沟,以同样的速度在 50 小时挖 50 米的沟要多少人?*答案*71人1小时能挖1/7米,那么1/7 * 50 * X = 50;得X = 75鱼头长 9,鱼尾等于鱼头加半个鱼身,鱼身等于鱼头加鱼尾,问鱼全长多少?*答案*72,设鱼尾为X,鱼身为Y,则:X = 9 + Y / 2;Y = 9 + X;得出X=27, Y = 36。6一个小姐买了一块手表,回家发现手表比她家的表慢了两分钟,晚上看新闻的时候又发现她家的表比新闻里的时间慢了两分钟,则。A手表和新闻里的时间一样B手表比新闻里的时间慢C手表比新闻里的时间快*答案*B设手表为watch = 8,则表为clock = 10,TV = 12。46家著名公司C C+笔试题目之大唐 (二) (附答案)2010-06-08 0:327王先生看到一则招聘启事,发现两个公司除了以下条件不同外,其他条件都相同A半年年薪 50 万,每半年涨 5 万B一年年薪 100 万,每一年涨 20 万王先生想去一家待遇比较优厚的公司,他会去哪家?*答案*第一年 a:50+55105 b: 100=100第二年a:105+60+65=230 b:100+120=220第三年a:230+70+75=375 b:220+140=360;第四年a:375+80+85=540 b:360+160=520.实际每年的工资a:(上半年的工资+10)*2+5b:上年度工资20所以。10问哪个袋子里有金子?A 袋子上的标签是这样写的:B 袋子上的话是对的,金子在 A 袋子。B 袋子上的标签是这样写的:A 袋子上的话是错的,金子在 A 袋子里。*答案*(1) 在B袋。两个代子上的话都不对。假设A上的话是对的,那么金子就在A,且B上的话是错的,与题不符。假设B上的话是对的,则金子在A,且A上的话是错的,与题也不符。所以两代上的话都错了,则金子必不在A,所以在B(2) a袋,因为b袋的话正确。 既然a袋的话错误,就无需管a袋的意思,不做参考113 个人住酒店 30 块钱,经理找回 5 块钱,服务生从中藏了 2 块钱,找给每人 1 块钱, 3( 30 3) / 3)+2=29,问这是怎么回事?*答案*三个人实际每人出了9元,一共27元,其中25元给了店老板,伙计收了2元。46家著名公司C C+笔试题目之大唐 (三) (附答案)2010-06-08 23:201什么是中断?中断发生时 CPU 做什么工作?*答案*CPU工作方法分为中断模式和查询模式.查询模式就是说CPU轮翻的对外设顺序访问,比方说它先看看键盘有没被按下有的话处理,没的话继续往下看鼠标有没有移动再看看打印机印的怎么样了,再看.等等.显然查询方式的效率低.但稳定可靠.中断模式时就是说CPU不主动访问这些设备,只管处理自己的任务,没任务就闲着.也就是说在那等着.如果有设备要与CPU联系,或要CPU处理一些事情,他会给CPU发一个中断请求信号.一种情况是这时CPU就会放下正在进行的工作而去处理这个外设的要求.这叫做响应中断.处理完中断后,CPU返回去继续执行中断以前的工作.还有一种情况如果CPU这时正在做更重要的事情他就会让这个设备先在那等着.有空时响应他.如果同时有好几个设备都要CPU来处理,CPU就会从按重要程度来逐个处理.这就是中断和中断的优先级.2CPU 在上电后,进入操作系统的 main()之前必须做什么工作?*答案*过程如下:BIOS自检:检查硬件等读取MBR转到MBR执行它的代码,它会检测活动分区把活动分区的引导扇区的引导代码装入内存运行引导代码引导代码装入该分区的操作系统也就是进入main()(当然不一定叫main,如linux下叫start_kernel)执行一系列的初始化,然后最终启动登录界面实现启动过程3简述 ISO OSI 的物理层 Layer1,链路层 Layer2,网络层 Layer3 的任务。*答案*物理层的主要功能: 原始比特流的传输,电子信号传输和硬件接口;链路层的主要功能: 在此层将数据分帧,并处理流控制。本层指定拓扑结构并提供硬件寻址;网络层主要功能: 本层通过寻址来建立两个节点之间的连接, 它包括通过互连网络来路由和中继数据。4有线电话和无线电话有何区别?无线电话特别需要注意的是什么?*答案*有线电话是通话架设的有线电话线输送信号的,只能在线的范围内移动,信号很稳定;无线电话是靠无线波传送信号的,容易受天气、地理位置等的影响!特别要注意不要和一些强磁物品放在一堆,如磁铁,手机等,会减少使用寿命的。5软件开发五个主要 step 是什么?*答案*(1) 需求分析:分析并确定用户需求,用采用适当的模型规范地表述这一需求,形成分析模型,为要处理的现实世界中的事物建立抽象建模。 (2) 系统设计: 设计阶段:确定系统如何实现所需的功能-采用适当的数据结构+控制逻辑,将分析模型细化。(3) 编码实现: 选定一种适当的编程语言,编码实现上述的设计,并在开发过程中引入测试,完善整个解决方案。(4) 测试阶段: (5) 系统维护: 6你在开发软件的时候,这 5 个 step 分别占用的时间百分比是多少?*答案*需求分析-30%,系统设计-10%,编码实现-30%,测试阶段-20%,系统维护-10%7makefile 文件的作用是什么?*答案*makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模块及库等).创建程序(make程序)首先读取makefile文件,然后再激活编译器,汇编器,资源编译器和连接器以便产生最后的输出,最后输出并生成的通常是可执行文件.创建程序利用内置的推理规则来激活编译器,以便通过对特定CPP文件的编译来产生特定的OBJ文件.8UNIX显示文件夹中,文件名的命令是什么?能使文件内容显示在屏幕的命令是什么?*答案*ls -la 显示所有文件和文件夹包括隐藏的cat 文件名 不用加号 显示文件内容vi 文件名 用vi编辑器编辑文件9(选做)手机用户在从一个基站漫游到另一个基站的过程中,都会发生什么? *答案*在退出当前基站前,在下一个基站注册,当注册完毕开启新的信道后,从上一个基站退出!46家著名公司C C+笔试题目之扬智 (一) (附答案)2010-06-09 22:4711什么是进程(Process)和线程(Thread)?有何区别?*答案*(1)进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行(2) 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。12MFC 和 SDK 有何区别?*答案*SDK是软件开发包, 往往是一系列的API函数;而MFC是微软的类库,封装了一套消息处理流程,是对API封装后的类库,使得开发起来速度加快。而SDK是最底层的函数库,MFC对他进行了封装。他是微软公司提供的13IRP 是什么?有何作用?*答案*IRP即I/O Request Packt(I/O请求包),一个客户软件一般都通过I/O请求包(IRP)来要求数据传送。然后,或者等待,或者当传送完成后被通知。IRP的细节是由操作系统来指定的。客户软件提出与设备上的端点建立某个方向的数据传送的请求,IRP就可简单地理解为这个请求。一个客户软件可以要求一个通道回送所有的IRP。当关于IRP的总线传送结束时,无论它是成功地完成,还是出现错误,客户软件都将获得通知说IRP完成了。14Windows 2000 操作系统下用户模式和内核模式下编程有何区别?*答案*当CPU运行于内核模式时,一切都可运行。任务可以执行特权级指令,对任何I/O设备有全部的访问权, 还能够访问任何虚地址和控制虚拟内存硬件。这种模式对应于INTEL 80X86上0级环(RING0) 在用户模式中,硬件防止特权指令的执行,并进行内存和I/O空间的引用的检查。这就允许操作 系统限制任务对各种I/O操作的访问,并捕捉违反系统完整性的任何行为。在用户模式中,运行的代码 如果不通过操作系统的某种门机制,就不能进入内核模式。这种模式对应于INTEL 80X86上3级环(RING3) 能不能直接访问,要看系统是否限制。15驱动程序的 BUFFER 能 swap 到磁盘上去吗?为什么?*答案*能,因为驱动程序的buffer也是占用内

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论