c++工程师面试题目2023.docx

上传人:太** 文档编号:96805395 上传时间:2024-03-22 格式:DOCX 页数:20 大小:25.48KB
返回 下载 相关 举报
c++工程师面试题目2023.docx_第1页
第1页 / 共20页
c++工程师面试题目2023.docx_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《c++工程师面试题目2023.docx》由会员分享,可在线阅读,更多相关《c++工程师面试题目2023.docx(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、c+工程师面试题目2023c+工程师面试题目2023在面试时,会有一些面试官通常都会问到的问题。针对这些常见 面试问题,我们提前预备好自己的答案,是非常有必要的。下面我给 大家带来C+工程师面试题目2023,期望能帮忙到大家!C+工程师面试问题1、C+是面对对象的编程语言吗?C+中虚函数(virtual)是什 么?有什么好处?(DC+不是纯面对对象的语言,C+是面对对象和过程的,由于 C+支持类和过程。(2)虚函数(virtual)具有传递性,即子类中对父类的虚函数的重 写,也是一个虚函数,不过函数的参数表也要一样。(3)可以让成员函数操作一般化,用基类的指针指向不同的派生 类的对象时,基类指

2、针调用其虚成员函数,则会调用其真正指向对象 的成员函数,而不是基类中定义的成员函数(只要派生类改写了该成 员函数)。若不是虚函数,则不管基类指针指向的哪个派生类对象, 调用时都会调用基类中定义的那个函数。2、谈谈指针和引用的区分?指针用操作符和,引用使用操作符.相同点是:指针与引用都是让你间接引用其他对象。B.应用程序在消息循环中调用GetMessage函数从消息队列中 取出一条一条的消息,取出消息后,应用程序可以对消息进行一些预 处理。C.应用程序调用DispatchMessage,将消息回传给操作系统。D.系统利用WNDCLASS结构体的IpfnWndProc成员保存的窗口过 程函数的指针

3、调用窗口过程,对消息进行处理。8.如何定义和实现一个类的成员函数为回调函数A.什么是回调函数?简而言之,回调函数就是被调用者回头调用调用者的函数。使用回调函数实际上就是在调用某个函数(通常是API函数)时, 将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那 个被调用函数。而该被调用函数在需要的时候,利用传递的地址调用 回调函数。回调函数,就是由你自己写的,你需要调用另外一个函数,而这 个函数的其中一个参数,就是你的这个回调函数名。这样,系统在必 要的时候,就会调用你写的回调函数,这样你就可以在回调函数里完 成你要做的事。B.如何定义和实现一个类的成员函数为回调函数要定义和实现一个类

4、的成员函数为回调函数需要做三件事: a.声明;b.定义;c.设置触发条件,就是在你的函数中把你的回调函数名作为一个 参数,以便系统调用如:一、声明回调函数类型typedef void (FunPtr)(void);二、定义回调函数class A(public:AO;static void callBackFun(void) 回调函数,必需声明为 staticcoutcallBackFunvirtual A();三、设置触发条件void Funtype(FunPtr p) p(); void main(void)Funtype(A:calIBackFun);C.回调函数与API函数回调和API特

5、别接近,他们的共性都是跨层调用的函数。但区分 是API是低层供应给高层的调用,一般这个函数对高层都是已知的; 而回调正好相反,他是高层供应给底层的调用,对于低层他是未知 的,必需由高层进行安装,这个安装函数其实就是一个低层供应的 API,安装后低层不知道这个回调的名字,但它通过一个函数指针来 保存这个回调函数,在需要调用时,只需引用这个函数指针和相关的 参数指针。其实:回调就是该函数写在高层,低层通过一个函数指针保存这 个函数,在某个大事的触发下,低层通过该函数指针调用高层那个函 数。1、局部变量能否和全局变量重名?能,局部会屏蔽全局。要用全局变量,需要使用:局部变量可以与全局变量同名,在函数

6、内引用这个变量时,会用 到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在 同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都 定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体 内。2、如何引用一个已经定义过的全局变量?extern可以用引用头文件的方式,也可以用extern关键字,假如用引 用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个 变写错了,那么在编译期间会报错,假如你用extern方式引用时, 假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报 错。3、全局变量可不行以定义在可被多个.C文件包含的头文件中? 为什么?可以,在不同

7、的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。4、语句for( ;1 ;)有什么问题?它是什么意思?无限循环,和while(1)相同。5、dowhile 和 whiledo 有什么区分?前一个循环一遍再推断,后一个推断以后再循环。6、请写出下列代码的输出内容#includemain ()(int a, b, c, d;a=10;b=a+;c=+a;d=10_a+;printf( b, c, d: %d, %d,,b, c, d);return 0;答:10, 12, 1207、请找出下面代码

8、中的所以错误说明:以下代码是把一个字符串倒序,如“abed”倒序后变为 “deba”include “string, h”main ()(char src= hello, world”;char_ dest=NULL;int len=strlen(sre);dest= (char_)malloc(len);char_ d=dest;char_ s=srclen;while(len - !=0) d+=s -;printf( a%s,dest);return 0;)答:方法1:int main()char_ src = hello, world” ;int len = strlen(src);c

9、har_ dest = (char_)ma,Hoc (len+1);要为0 安排一个空间char_ d = dest;char_ s = srclenT;指向最终一个字符while( len - != 0 )_d+=_s -;d = 0;尾部要加要printf( a%snv , dest);free(dest);使用完,应当释放空间,以免造成内存汇泄露return 0;)方法2:include#includemain ()(char str 口二” hello, world”;int len=strlen(str);char t;for (int i=0; i t=str i: stri=st

10、rlen-i-1 ; strlen-i-l=t; printf (%s, str);return 0;)C+面试题目1 .介绍一下STL,具体说明STL如何实现vector。STL (标准模版库,Standard Template Library)它由容器算法 迭代器组成。STL有以下的一些优点:可以便利简单地实现搜寻数据或对数据排序等一系列的算法;调试程序时更加平安和便利;即使是人们用STL在UNIX平台下写的代码你也可以很简单地理 解(由于STL是跨平台的)。vector实质上就是一个动态数组,会依据数据的增加,动态的增 加数组空间。2 .假如用VC开发程序,常见这么几个错误,C2023,

11、 c2023, c2023, 这些错误的缘由是什么。在学习VC+的过程中,遇到的LNK2023错误的错误消息主要为:unresolved external symbol “symbol”(不确定的外部“符 号”)。假如连接程序不能在全部的库和目标文件内找到所引用的函数、 变量或标签,将产生此错误消息。一般来说,发生错误的缘由有两个:一是所引用的函数、变量不 存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。编程中常常能遇到LNK2023错误一一重复定义错误,其实 LNK2023错误并不是一个很难解决的错误.3 .继承和委派有什么分别,在打算使用继承或者委派的时候需要 考虑什么。在0

12、0D, OOP中,组合优于继承.当然多态的基础是继承,没有继承多态无从谈起。当对象的类型不影响类中函数的行为时,就要使用模板来生成这 样一组类。当对象的类型影响类中函数的行为时,就要使用继承来得到这样 一组类.4 .指针和引用有什么分别;假如传引用比传指针平安,为什么? 假如我使用常量指针莫非不行吗?(1)引用在创建的同时必需初始化,即引用到一个有效的对象; 而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋 值.区分:(1).指针是一个实体,指向一块内存,它的内容是所指 内存的地址;而引用仅是个别名,是某块内存的别名。(2) .引用使用时无需解引用(_),指针需要解引用;(3) .

13、引用只能在定义时被初始化一次,之后不行变,“从一而 终”;指针可变;(4) .引用没有const类型,指针有const类型,const的指针 不行变;(5) .引用不能为空,指针可以为空;(6) . “sizeof引用”得到的是所指向的变量(对象)的大小,而 sizeof指针”得到的是指针本身(所指向的变量或对象的地址)的 大小;typeid(T)二二 typeid(T)恒为真,sizeof (T)=二 sizeof (T)恒 为真,但是当引用作为成员时,其占用空间与指针相同(没找到标准 的规定)。(7) .指针和引用的自增(+)运算意义不一样;3. int m = 100, n = 101;

14、int k = m;k二n; 此时K, m值分别是多少?k和m的值都是101,由于k是对m的引用,k值发生变化,m值 也发生着变化。(2)不存在NULL引用,引用必需与合法的存储单元关联;而指针 则可以是NULL.(3)引用一旦被初始化为指向一个对象,它就不能被转变为另一 个对象的引用;而指针在任何时候都可以转变为指向另一个对象.给 引用赋值并不是转变它和原始对象的绑定关系.(4)引用的创建和销毁并不会调用类的拷贝构造函数(5)语言层面,引用的用法和对象一样;在二进制层面,引用一 般都是通过指针来实现的,只不过编译器帮我们完成了转换.不存在空引用,并且引用一旦被初始化为指向一个对象,它就不 能

15、被转变为另一个对象的引用,显得很平安。const指针仍旧存在空指针,并且有可能产生野指针.总的来说:引用既具有指针的效率,又具有变量使用的便利性和 直观性.5 .参数传递有几种方式;实现多态参数传递采纳什么方式,假如 没有使用某种方式缘由是什么;传值,传指针或者引用6 .结合一个项目说明你怎样应用设计模式的理念。设计模式更多考虑是扩展和重用,而这两方面许多状况下,往往会被忽视。不过,我不建议滥用设计模式,以为它有可能使得简洁问题简单化.7.介绍一下你对设计模式的理解。(这个过程中有许多很细节的 问题随机问的)设计模式概念是由建筑设计师Christopher Alexander提出:” 每一个模

16、式描述了一个在我们四周不断重复发生的问题,以及该问 题的解决方案的核心.这样,你就能一次又一次地使用该方案而不必 做重复劳动. 上述定义是对设计模式的广义定义.将其应用到面对 对象软件的领域内,就形成了对设计模式的狭义定义.可以简洁的认为:设计模式就是解决某个特定的面对对象软件问 题的特定方法,并且已经上升到理论程度。框架与设计模式的区分:1,设计模式和框架针对的问题域不同.设计模式针对面对对象的 问题域;框架针对特定业务的问题域2,设计模式比框架更为抽象.设计模式在遇到详细问题后,才能 产生代码;框架已经可以用代码表示3,设计模式是比框架更小的体系结构元素.框架中可以包括多个 设计模式设计模

17、式就像武术中基本的招式.将这些招式合理地纵组合起来, 就形成套路(框架),框架是一种半成品.8 . C+和C定义结构的分别是什么。C language的结构仅仅是数据的结合C plus plus的struct和class其实具备几乎一样的功能,只 是默认的访问属性不一样而已。9 .构造函数可否是虚汗数,为什么?析构函数呢,可否是纯虚的 呢?构造函数不能为虚函数,要构造一个对象,必需清晰地知道要构 造什么,否则无法构造一个对象。析构函数可以为纯虚函数。10 .拷贝构造函数相关问题,深拷贝,浅拷贝,临时对象等。深拷贝意味着拷贝了资源和指针,而浅拷贝只是拷贝了指针,没 有拷贝资源这样使得两个指针指向

18、同一份资源,造成对同一份析构两次,程 序崩溃。临时对象的开销比局部对象小些。C+工程师面试题目文档内容到此结束,欢迎大家下载、修改、丰富并分享给更多有 需要的人。4、C+中const修饰符一般用于那几种状况,详细作用是什么?(1) .用常量定义 const int n = 100;用于常量参数即fn(const int a)用于常量函数,即类的该函数不修改其状态。用于返回值(2) .可以定义const常量,具有不行变性;便于进行类型检查, 使编译器对处理内容有更多了解,消退了一些隐患;可以爱护被修饰 的东西,防止意外的修改,增加程序的健壮性;为函数重载供应了一 个参考;可以节约空间,避开不必要

19、的内存安排;提高了效率。编译 器通常不为一般const常量安排存储空间,而是将它们保存在符号表 中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作, 使得它的效率也很高。5、你在程序代码中用assert吗?assert 一般用于做什么?(1)是我常用。(2)主要用于DEBUG下断言,即假设肯定是这样的,否则就是错 误的。例如 asser ( a 100 );6、i+相比+i哪个更高效?为什么?答:+i比i+效率高。(2) i+要多调用一次类的构造和析够函数7、windows平台下网络编程有哪几种网络编程模型?你最熟识 的是哪种?并对他们作个比较?(1)有堵塞,基于窗体的大事模型,大事

20、模型,重叠模型,完成 端口模型。(2)我最熟识的是大事模型。(3)除了堵塞模型外,其他都是非堵塞模型,其中效率最高的是 完成端口模型,尤其在windows下服务器最合适了。做客户端一般用大事模型了,在window和like unix都可以使 用。8、tcp进行传输时,接收方怎么告知发送方“我已经处理不过 来了,先不要再发数据给我。”答:接受方给发送方发一个通知数据包,该通知包让发送方暂停 数据的发送,或方慢发送。等接受方处理完毕后,再发一个恢复的通 知数据包。9、设计udp网络协议包设计包多大合适,为什么?答:最好设计成 MTU 的大小,MTU 是 Maximum Transmission U

21、nit 的缩写。意思是网络上传送的最大数据包。这样的话传输速度会快。10、win2000/win2023个有几个版本,每个版本最新系统补丁包 是什么?11、DNS的实现方法?12、WEB服务器的负载均衡?13、请问目前市面上常用几种网络操作系统的优缺点?14、请问你用过那些服务器?请叙述raid。、1、5的特点和优点?15、请列出下列协议的段口号:HTTP、HTTPS、DNS、FTP、TELNET、 PPTP、 SMTP、 POP3?16、请问局域网内想要通过UNC路径或者NETBIOS名称访问对方 计算机,需要在对方计算机上开放什么协议或者端口?17、0SI七层模型?TCP/IP模型?18、

22、能否将 WIN2000P 升级成 WIN2000S?经典C+面试题1. C+的类和C里面的struct有什么区分?struct成员默认访问权限为public,而class成员默认访问权 限为 private2 .析构函数和虚函数的用法和作用析构函数是在对象生存期结束时自动调用的函数,用来释放在构 造函数安排的内存。虚函数是指被关键字virtual说明的函数,作用是使用C+语言 的多态特性3 .全局变量和局部变量有什么区分?是怎么实现的?操作系统和 编译器是怎么知道的?1)全局变量的作用用这个程序块,而局部变量作用于当前函数2)前者在内存中安排在全局数据区,后者安排在栈区3)生命周期不同:全局变

23、量随主程序创建和创建,随主程序销 毁而销毁,局部变量在局部函数内部,甚至局部循环体等内部存在, 退出就不存在4)使用方式不同:通过声明后全局变量程序的各个部分都可以 用到,局部变量只能在局部使用4 .有N个大小不等的自然数(1-N),请将它们由小到大排序. 要求程序算法:时间简单度为0(n),空间简单度为0(1)。void sort (int e, int n) int i;int t;for (i=l; i t = eei;eei = ei;ei5 .堆与栈的去区分A.申请方式不同Stack由系统自动安排,而heap需要程序员自己申请,并指明 大小。B.申请后系统的响应不同Stack:只要栈

24、的剩余空间大于申请空间,系统就为程序供应内 存,否则将抛出栈溢出特别Heap:当系统收到程序申请时,先遍历操作系统中记录空闲内存 地址的链表,查找第一个大于所申请空间的堆结点,然后将该结点从 空间结点链表中删除,并将该结点的空间安排给程序。另外,大多 数系统还会在这块内存空间中的首地址处记录本次安排的大小,以便 于delete语句正确释放空间。而且,由于 找到的堆结点的大小不肯 定正好等于申请的大小,系统会自动将多余的那部分重新放入空闲链 表。C.申请大小限制的不同Stack:在windows下,栈的大小是2M(也可能是1M它是一个编 译时就确定的常数),假如申请的空间超过栈的剩余空间时,将提

25、示 overflowo因此,能从栈获得的空间较小。Heap:堆是向高地址扩展的数据结构,是不连续的内存区域。这 是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而 链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中 有效的虚拟内存。由此可见,堆获得的空间比较敏捷,也比较大。D.申请效率的比较:栈由系统自动安排,速度较快。但程序员是无法掌握的。堆是由new安排的内存,一般速度比较慢,而且简单产生内存碎 片,不过用起来最便利。另外,在WINDOWS下,最好的方式是用VirtualAlloc安排内存, 他不是在堆,也不是在栈是直接在进程的地址空间中保留一快内存, 虽然用起来最不便

26、利。但是速度快,也最敏捷。E.堆和栈中的存储内容栈:在函数调用时,第一个进栈的是主函数中后的下一条指令(函 数调用语句的下一条可执行语句)的地址,然后是函数的各个参数, 在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的 局部变量。留意静态变量是不入栈的。当本次函数调用结束后,局部 变量先出栈,然后是参数,最终栈顶指针指向最开 始存的地址,也 就是主函数中的下一条指令,程序由该点连续运行。堆:一般是在堆的头部用一个字节存放堆的大小。堆中的详细内 容有程序员支配。6 .含参数的宏与函数的优缺点宏:优点:在预处理阶段完成,不占用编译时间,同时,省去 了函数调用的开销,运行效率高缺点:不进行

27、类型检查,多次宏替换会导致代码体积变大,而且 由于宏本质上是字符串替换,故可能会由于一些参数的副作用导致得 出错误的结果。函数:优点:没有带参数宏可能导致的副作用,进行类型检查, 计算的正确性更有保证。缺点:函数调用需要参数、返回地址等的入栈、出栈开销,效率 没有带参数宏高PS:宏与内联函数的区分内联函数和宏都是在程序消失的地方绽开,内联函数不是通过函 数调用实现的,是在调用该函数的程序处将它绽开(在编译期间完成 的);宏同样是;不同的是:内联函数可以在编译期间完成诸如类型检测,语句是 否正确等编译功能;宏就不具有这样的功能,而且宏绽开的时间和内 联函数也是不同的(在运行期间绽开)7. Windows程序的入口是哪里?写出Windows消息机制的流程Windows程序的入口是WinMain ()函数。Windows应用程序消息处理机制:A.操作系统接收应用程序的窗口消息,将消息投递到该应用程 序的消息队列中

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

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁