c++工程师面试题目

上传人:m**** 文档编号:469199018 上传时间:2023-02-08 格式:DOC 页数:25 大小:25.40KB
返回 下载 相关 举报
c++工程师面试题目_第1页
第1页 / 共25页
c++工程师面试题目_第2页
第2页 / 共25页
c++工程师面试题目_第3页
第3页 / 共25页
c++工程师面试题目_第4页
第4页 / 共25页
c++工程师面试题目_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《c++工程师面试题目》由会员分享,可在线阅读,更多相关《c++工程师面试题目(25页珍藏版)》请在金锄头文库上搜索。

1、c+工程师面试题目 c+工程师面试问题1、 c+是面向对象的编程语言吗?C+中虚函数(virtual) 是什么?有什么好处?(1)C+不是纯面向对象的语言,C+是面向对象和过程的,因为C+支持类和过程。(2)虚函数(virtual)具有传递性,即子类中对父类的虚函数的重写,也是一个虚函数 ,不过函数的参数表也要一样。(3)可以让成员函数操作一般化,用基类的指针指向不同的派生类的对象时,基类指针调用其虚成员函数,则会调用其真正指向对象的成员函数,而不是基类中定义的成员函数(只要派生类改写了该成员函数)。若不是虚函数,则不管基类指针指向的哪个派生类对象,调用时都会调用基类中定义的那个函数。2、 谈

2、谈指针和引用的区别?指针用操作符“_”和“-”,引用使用操作符“”.相同点是:指针与引用都是让你间接引用其他对象。区别:(1). 指针是一个实体,指向一块内存,它的内容是所指内存的地址;而引用仅是个别名,是某块内存的别名。(2). 引用使用时无需解引用(_),指针需要解引用;(3). 引用只能在定义时被初始化一次,之后不可变,“从一而终”;指针可变;(4). 引用没有 const类型,指针有 const类型,const 的指针不可变;(5). 引用不能为空,指针可以为空;(6). “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或

3、对象的地址)的大小;typeid(T) = typeid(T) 恒为真,sizeof(T) = sizeof(T) 恒为真,但是当引用作为成员时,其占用空间与指针相同(没找到标准的规定)。(7). 指针和引用的自增(+)运算意义不一样;3. int m = 100,n = 101;int k = m;k = n; /此时K,m值分别是多少 ?k和m的值都是101,因为k是对m的引用,k值发生变化,m值也发生着变化。4、 c+中 const修饰符一般用于那几种情况,具体作用是什么?(1).用常量定义 const int n = 100;用于常量参数 即 fn(const int a)用于常量函数

4、,即类的该函数不修改其状态。用于返回值(2).可以定义const常量,具有不可变性; 便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患; 可以保护被修饰的东西,防止意外的修改,增强程序的健壮性;为函数重载提供了一个参考; 可以节省空间,避免不必要的内存分配;提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。5、 你在程序代码中用assert吗?assert一般用于做什么?(1) 是我常用。(2)主要用于DEBUG下断言,即假设一定是这样的,否则就是错误的。例如 ass

5、er ( a 100 );6、 i+ 相比 +i 哪个更高效?为什么?答:(1)+i 比 i+效率高。(2)i+要多调用一次类的构造和析够函数7、 windows平台下网络编程有哪几种网络编程模型?你最熟悉的是哪种?并对他们作个比较?(1)有阻塞,基于窗体的事件模型,事件模型,重叠模型,完成端口模型。(2)我最熟悉的是事件模型。(3)除了阻塞模型外,其他都是非阻塞模型,其中效率最高的是完成端口模型,尤其在windows下服务器最合适了。做客户端一般用事件模型了,在window和like unix都可以使用。8、 tcp进行传输时,接收方怎么告诉发送方“我已经处理不过来了,先不要再发数据给我。”

6、答:接受方给发送方发一个通知数据包,该通知包让发送方暂停数据的发送,或方慢发送。等接受方处理完毕后,再发一个恢复的通知数据包。9、 设计udp网络协议包设计 包多大合适,为什么?答:最好设计成MTU的大小,MTU是Maximum Transmission Unit的缩写。意思是网络上传送的最大数据包。这样的话传输速度会快。10、win2000/win2003个有几个版本,每个版本最新系统补丁包是什么?11、DNS的实现方法?12、WEB服务器的负载均衡?13、请问目前市面上常用几种网络操作系统的优缺点?14、请问你用过那些服务器?请讲述raid0、1、5的特点和优点?15、请列出下列协议的段口

7、号:HTTP、HTTPS、DNS、FTP、TELNET、PPTP、SMTP、POP3?16、请问局域网内想要通过UNC路径或者NETBIOS名称访问对方计算机,需要在对方计算机上开放什么协议或者端口?17、OSI七层模型?TCP/IP模型?18、能否将WIN2000P升级成WIN2000S?经典c+面试题1. C+的类和C里面的struct有什么区别?struct成员默认访问权限为public,而class成员默认访问权限为private2. 析构函数和虚函数的用法和作用析构函数是在对象生存期结束时自动调用的函数,用来释放在构造函数分配的内存。虚函数是指被关键字virtual说明的函数,作用是

8、使用C+语言的多态特性3. 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?1) 全局变量的作用用这个程序块,而局部变量作用于当前函数2) 前者在内存中分配在全局数据区,后者分配在栈区3) 生命周期不同:全局变量随主程序创建和创建,随主程序销毁而销毁,局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在4) 使用方式不同:通过声明后全局变量程序的各个部分都可以用到,局部变量只能在局部使用4. 有N个大小不等的自然数(1N),请将它们由小到大排序.要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。void sort(int e, int n)int i

9、;int t;for (i=1; i t = eei;eei = ei;ei = t;5. 堆与栈的去区别A. 申请方式不同Stack由系统自动分配,而heap需要程序员自己申请,并指明大小。B. 申请后系统的响应不同Stack:只要栈的剩余空间大于申请空间,系统就为程序提供内存,否则将抛出栈溢出异常Heap:当系统收到程序申请时,先遍历操作系统中记录空闲内存地址的链表,寻找第一个大于所申请空间的堆结点,然后将该结点从空间结点链表中删 除,并将该结点的空间分配给程序。另外,大多数系统还会在这块内存空间中的首地址处记录本次分配的大小,以便于delete语句正确释放空间。而且,由于 找到的堆结点的

10、大小不一定正好等于申请的大小,系统会自动将多余的那部分重新放入空闲链表。C. 申请大小限制的不同Stack:在windows下,栈的大小是2M(也可能是1M它是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。Heap:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。D. 申请效率的比较:栈由系统自动分配,速度较快。但程序员是无法控制的。堆是由new分配的

11、内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。另外,在WINDOWS下,最好的方式是用VirtualAlloc分配内存,他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存,虽然用起来最不方便。但是速度快,也最灵活。E. 堆和栈中的存储内容栈:在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器 中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开 始存的地址,也就是主函数中的下一条指令,程序由该点继续

12、运行。堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。6. 含参数的宏与函数的优缺点宏: 优点:在预处理阶段完成,不占用编译时间,同时,省去了函数调用的开销,运行效率高缺点:不进行类型检查,多次宏替换会导致代码体积变大,而且由于宏本质上是字符串替换,故可能会由于一些参数的副作用导致得出错误的结果。函数: 优点:没有带参数宏可能导致的副作用,进行类型检查,计算的正确性更有保证。缺点:函数调用需要参数、返回地址等的入栈、出栈开销,效率没有带参数宏高PS:宏与内联函数的区别内联函数和宏都是在程序出现的地方展开,内联函数不是通过函数调用实现的,是在调用该函数的程序处将它展开(在

13、编译期间完成的);宏同样是;不同的是:内联函数可以在编译期间完成诸如类型检测,语句是否正确等编译功能;宏就不具有这样的功能,而且宏展开的时间和内联函数也是不同的(在运行期间展开)7. Windows程序的入口是哪里?写出Windows消息机制的流程Windows程序的入口是WinMain()函数。Windows应用程序消息处理机制:A. 操作系统接收应用程序的窗口消息,将消息投递到该应用程序的消息队列中B. 应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息,取出消息后,应用程序可以对消息进行一些预处理。C. 应用程序调用DispatchMessage,将消息回传给

14、操作系统。D. 系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理。8. 如何定义和实现一个类的成员函数为回调函数A.什么是回调函数?简而言之,回调函数就是被调用者回头调用调用者的函数。使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个被调用函数。而该被调用函数在需要的时候,利用传递的地址调用回调函数。回调函数,就是由你自己写的,你需要调用另外一个函数,而这个函数的其中一个参数,就是你的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可以在回调函数里完成你要做的事。B.如何定义和实现一个类的成员函数为回调函数要定义和实现一个类的成员函数为回调函数需要做三件事:a.声明;b.定义;c.设置触发条件,就是在你的函数中把你的回调函数名作为一个参数,以便系统调用如:一、声明回调函数类型typedef void (_FunPtr)(void);二、定义回调函数class Apublic:A();static void callBackFun(void) /回调函数,必须声明为staticcoutcallBackFunvirtual A(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号