C++ 面试题.docx
《C++ 面试题.docx》由会员分享,可在线阅读,更多相关《C++ 面试题.docx(36页珍藏版)》请在冰点文库上搜索。
![C++ 面试题.docx](https://file1.bingdoc.com/fileroot1/2023-5/16/443e3faa-52cb-4a99-aa39-8a668c8fb977/443e3faa-52cb-4a99-aa39-8a668c8fb9771.gif)
C++面试题
C++面试试题汇总
――柯贤富
管理软件需求分析篇
1.STL类模板
标准库中容器和算法这部分一般称为标准模板库
2.为什么定义虚的析构函数?
避免内存问题,当你可能通过基类指针删除派生类对象时。
必须保证基类析构函数为虚函数。
3.项目管理怎么进行?
制定软件项目计划;
软件项目跟踪及监控。
软件项目计划(SoftwareProjectPlanning)的目的是为了完成软件工程和管理软件项目所制定的计划,其内容包括估计待完成的工作,建立必要的约定和完成工作的计划。
软件项目跟踪和控制(SoftwareProjectTrackingandOversighting)的目的是对实际进展建立足够的可视性,使管理着能够在软件项目的执行明显偏离软件计划时采取有效措施。
其内容包括将实际的完成情况及结果和已文档化的估计、约定和计划进行对照,并且基于实际的完成情况和结果调整这些计划
4.单元测试如何进行?
单元测试主要编写驱动函数和桩函数,测试的目标是完成语句覆盖和路径覆盖。
驱动函数用于调用被测函数,传递测试参数给被测函数。
桩函数用于模拟被测函数调用的底层函数,需要对被测函数传来的各种可能参数进行正确的响应。
5.VSS的三个核心操作是什么?
Checkin、checkout、getlatestversion。
6.USECASE图画到哪一级?
一般要提供用例图、行为图和交互图及各角色定义。
7.在评审过程中应该做哪些工作?
以文档评审为例
文档评审电子流基本流程:
文档负责人创建文档评审电子流,指定评审专家和评审负责人->QA经理确认通过,通知文档作者->文档作者提交文档->评审专家提出评审意见->文档作者修改文档再次提交评审->评审专家会签通过(可能需要召开评审会议)->秘书进行文档归档
8.提交配置管理前做哪些工作?
已经得到QA及配置管理委员会的确认。
如果提交的是源代码,确认包括需求、详细设计等一系列文档都已做了相应的修改以及确认。
9.概要设计文档如果到编码时发现问题怎么处理?
先提交问题报告单,经过软件经理审核,然后确认修改设计方案,修改代码,测试通过后,提交到配置库,同时更新相关的概要设计文档和详细设计文档。
10.工作计划怎么制定?
根据项目总体计划落实到每个具体人员身上,按照月度和周来制度工作计划。
11.Rose的应用情况
Rose作为一种建模语言工具可以应用于软件的需求分析、概要设计、详细设计和测试阶段。
12.软件开发模式包括哪些?
公司的主要开发模式包括面向对象、面向过程的开发模式,无论哪种方式都体现模块组装的思想。
13.设计的主要目标是什么?
逐步消化、细化需求,用程序的逻辑来表达文字性的描述。
14.设计包含哪些方面?
概要设计、详细设计、接口设计。
15.测试在设计阶段有没有活动要做?
在设计阶段要确定集成测试计划和单元测试计划。
16.合作性质项目和传统项目方式有什么区别?
传统项目主要根据公司自己的开发流程进行项目管理,合作性项目则需要接纳,有时甚至是按照合作方的开发模式进行项目管理,这主要由项目性质和项目需求决定的。
17.在项目启动时,如何制定项目计划?
如果是有规定交付日期的项目,就必须根据交付日期限定、项目需求、项目组成员的素质(体现在代码生产率)来确定项目计划。
在项目计划的基础上可以作出月、周计划,计划执行时根据实际情况在不影响开发进度的前提下调整计划。
18.项目管理计划分为哪些类别?
粗的方面包括项目开发计划、质量计划、配置计划、测试计划。
19.计划的制定过程中,需要由哪些人参与?
项目经理、开发经理、质量经理和配置经理均要参与项目计划的制定。
20.月度计划由哪些人参与?
主要过程是什么?
什么时候启动月度计划,如何确定?
月度计划由项目经理、各小组负责人、质量经理、配置经理参与,主要是根据上月工作完成情况和项目总体计划来确定本月度计划。
一般是在工作月的最后3天启动,目的是给大家一个熟悉和工作安排的考虑。
21.怎样对计划进行跟踪?
每周对计划完成情况进行审核和评估,及时进行反馈和调整。
22.CASE管理在开发过程中的应用情况
23.JAVA的缺陷有哪些?
代码运行效率低。
24.CMMⅡ的主要KPA包括哪些?
包括6个关键过程域:
软件配置管理、软件质量保证、软件子合同管理、软件项目跟踪和监督、软件项目策划、需求管理。
25.需求管理方面需要QA做哪些工作?
需求管理(RequirementManagement)的目的是在客户和将处理客户需求的软件项目之间建立对客户需求的共同理解。
需求管理包括和客户一起建立和维护有关软件项目需求的协议,该协议称作“分配给软件的系统需求”,“客户”可解释为系统工程组、销售组、另一个内部组织,或者一个外部客户,“协议”既包括技术需求,又包括非技术需求(如交付日期),该协议形成估计,策划和跟踪整个软件生命周期内项目活动的基础。
将系统需求分配给软件、硬件和其它系统组成部分(如人力等)的工作可能由软件工程组以外的组(如系统工程组)完成,软件工程组可能对此分配无法直接控制,在项目约束范围内,软件工程可采取适当的步骤以确保软件的需求已有相对应的定位,并且实现文档化并处于受控状态
26.需求跟踪方面做哪些工作?
可以跟踪到哪一步?
谁来负责?
27.在需求跟踪中做了哪些工作?
(1)定义对其他需求的连接链
(2)定义对其他系统元素的连接链,这些元素可能包括软件计划、产品和活动、需求和设计文档、代码。
目的是它们与软件需求保持一致。
28.为需求制定CheckList的目的,如何制定?
如何使用CheckList?
根据需求分析的功能模块确定里程碑,在每个里程碑要设定检查点和检查方法,目的是在开发过程中及时发现和解决问题,而不是将问题遗留到后期的测试阶段。
可由QA执行。
29.SEPG有多少人员?
主要负责哪些方面的工作?
软件工程过程小组包括项目经理和技术人员,主要负责推进组织所采用的软件过程的定义、组织和改进工作。
30.在实施QA方面遇到过哪些问题?
31.如何理解度量机制?
软件度量(SoftwareMeasurement)通过各种不同的量度(metric)对软件生命周期中的各个元素进行度量(Measure),它能够为项目管理者提供有关项目的各种重要信息,同时也是进行大多评估活动的基础
32.需求度量包括哪些?
度量优秀的需求的标准为:
(1)完整性
(2)正确性(3)可行性(4)必要性(5)划分优先级(6)无二义性(7)可验证性
33.实施QA工作,核心工作还应该包括哪些?
34.质量特性有哪些?
用户关注的:
有效性、高效性、灵活性、完整性、互操作性、可靠性、健壮性、可用性。
开发者关注的:
可维护性、可移植性、可重用性、可测试性。
35.评审过程中,QA做哪些工作?
审核包括哪些内容?
QA确保软件过程的步骤和标准得到遵守。
审核的对象包括文档、代码等。
36.其他角色在评审审核中的作用?
其他角色包括评审负责人,一般是项目经理,负责使评审活动正常有序的进行,确保评审中发现的问题得到解决或者指定解决人。
包括评审专家,负责对评审对象提出问题,寻求解决的方法。
还包括讲解人和作者,他们要确保评审专家对评审材料的理解,并对评审专家提出的问题进行解答。
最后还应该由会议记录员,负责对会议的议题和提出的问题及解决方法进行记录。
37.评审作者是否需要参加评审?
评审作者应该参加评审,它有回答评审专家提出的问题的责任,并且负责解决这些问题。
38.评审过程如何进行?
参见前面的文档评审流程。
39.评审前后的工作包括哪些?
评审准备工作包括评审作者准备充分评审材料,确保评审专家理解评审材料,此外还包括确定讲解人、评审专家、填写电子流程申请召开评审会议等。
评审完后,评审作者还要对评审专家提出的问题进行解决,如果所有问题都得到解决,评审专家和评审负责人会签通过,则评审过程结束。
40.如何保证专家已经很好地阅读了文档?
评审作者要负责准备充分的评审材料,对文档进行详细的说明,确保专家能够理解文档;同时专家要拿出专门的时间来阅读文档。
41.开发工具用过哪些?
VC:
MSDevCase:
RationalRose
Java:
JbuilderDatabase:
PowerDesigner
42.描述一下Windows的线程同步对象。
临界区、互斥、信号、事件
43.类静态成员变量在什么范围内有效?
等同于全局变量
44.面向对象的好处
继承性、多态性、封装性。
45.在C++中声明类,如何做到多个实例共享一个全局变量?
声明一个类静态成员变量。
46.在编码过程中文档的书写情况
简单的是对函数的返回值、参数、用途以及关键技术做文档说明。
基本上向MSDN靠拢。
47.规范在自己日常工作中如何体现?
规范体现在:
编程规范、文档模板、电子流程。
每天填写日志、每周作计划和总结,使用PSP工具
48.控件编写过没有
主要编写访问数据库的COM组件给前台程序调用。
一般的UI控件是在CWnd的基础上编写的。
49.调试代码过程中遇到困难如何解决?
多使用Watch,Variable,Breakpoint,Stack等观察窗口发现问题;
使用联机帮助系统;想其它开发小组成员请教。
50.C++构造函数,抽象类
构造函数是类初始化第一个调用的函数,如果一个类中包括抽象函数,则该类为抽象类,抽象类不能实例化,主要是作为接口定义。
51.介绍在项目开发中的角色
开发人员角色,负责详细设计、接口设计、单元测试计划和代码编写,一般要负责自己开发模块的单元测试。
52.接受过CMM哪些方面的培训?
公司内部CMM培训,包括KPA及开发流程。
53.评审如何进行?
作为作者如何参与其中?
见前面36。
54.文档和代码不一致应如何处理?
确认文档是否存在错误和滞后,如果是则应该及时的更新文档,使之与代码保存一致;反之如果代码没有按照正确的文档所描述的进行设计,则应该更正代码,使之符合设计的要求。
55.修改代码或文档后,应提交哪些信息?
配置管理人员做哪些工作?
应该提交配置标识项和相关的代码和文档。
56.使用过哪些配置管理工具?
MicrosoftVisualSourceSafe和RationalClearCase
57.配置管理人员的职责和主要工作内容
软件配置管理(SoftwareConfigurationManagement)的目的是在整个项目的生命周期建立和维护软件项目产品的完整性。
软件配置管理包括在给定的时间点上标示软件的配置(即选定的软件工作产品及其描述),系统的控制对配置的更改,并在整个软件生命周期中维护配置的完整性和可跟踪性。
置于软件配置管理之下的工作产品包括需向客户交付的软件产品(如软件需求文档和代码),以及与建立这些产品相关的项目(如编译程序)。
58.需求跟踪方面所做工作的描述
59.C++中常用到的this的含义
类中隐含的指向对象自身的指针,不用声明。
60.用过stl模板吗?
标准模板库包括容器、算法和迭代子,包括向量类、链表类。
MFC中常用的为Clist,Carray。
61.构造函数与析构函数的功能?
构造函数用来初始化。
析构函数用来做清除工作,一般包括内存释放。
62.缺陷跟踪流程
问题提交人提交问题报告单->软件经理或组长审核问题通过->开发人员定位问题原因->软件经理或组长审核通过->配置库管理员修改配置库权限->开发人员实施修改->开发人员实施测试通过->配置库管理员对修改代码实施归档->测试人员实施回归测试通过->问题提交人关闭问题报告单
63.QA的了解
确保软件过程的步骤和标准得到实施。
64.MFC的熟悉程度,说明CListView和CListCtrl有什么不同。
ClistView是从视图派生,ClistCtrl是从控件类派生,在ClistView中通过使用GetListCtrl可以获得ClistCtrl指针,将其作为一个ClistCtrl控件来使用。
65.Socket通讯过程中如何保证连接正常。
一般通过握手机制来确定链接正常,即定时在客户和服务器之间发送连接帧和确认帧来确定。
如果是使用MFC的Csocket,通过检测OnClose事件和错误处理可以确定连接是否正常。
66.在华为工作期间有没有编写文档的经验。
67.在开发过程中如何使用SourceSafe。
主要在版本控制和配置管理过程中使用SourceSafe。
68.开发过程中的问题处理流程是怎样的。
参见63。
C++面试试题
(一)
1、下面的程序是否有错误,如果有错,请说明原因。
char*constpszHelp=“hello”;
pszHelp[0]=‘a’;
因为pszHelp指向一个常量字符串,所以根本不允许修改字符串内容。
除非使用一个字符数组。
2、const用法:
constchar*p
p是一字符串指针,该指针指向的内容是常量,指针指向的内容不能被修改
charconst*p
同上
char*constp
p是一字符串指针,该指针是常量指针,指针不能被修改
3、什么是抽象类
包含抽象函数的类是抽象类,满足virtualfun()=0;的语法的函数是抽象函数。
主要用于提供接口,如同Java中的Interface。
4、什么时候需要使用虚拟析构函数
一般情况下类的析构函数都定义成虚函数,主要是考虑在使用基类指针操作派生类对象时保证类的析构顺序。
5、请指出下面代码存在的潜在问题
classCC{
int*m_pCount;
public:
voidclear(){if(m_pCount)deletem_pCount;}
CC(){m_pCount=newint;}
~CC(){clear();}
}
主要存在的问题是clear函数在deletem_pCount;后并没有置指针为空(m_pCount=NULL),这样当第二次调用clear时,会出现问题。
6、如何定义禁止实例化的纯抽象基类
这个问题很奇怪,抽象类本身就不能被实例化,在程序编译时就会提示出错。
7、在进行私有继承时,如何修改基类成员的存取权限
定义一个指向该基类的友元函数,就可以绕过私有继承操作基类成员。
8、如何定义一个指向类的成员函数的指针
void(CC:
:
*bfpClear)()=&CC:
:
clear;
9、类A派生类B和C,类D从类B、C派生,如何将一个类A的指针指向一个类D的指针
直接使用即可,主要是考察运行时多态的概念。
本题和题4要一起考虑。
10、请说出程序运行的结果
classA{
public:
virtualvoidfunc(){cout<<“Iaminbase”<}
classB:
publicA{
public:
virtualvoidfunc(){cout<<“Iaminderived”<}
voidmain()
{
B*bb=newB;
bb->func();
A*aa=(A*)bb;
aa->func();
….
}
Iaminderived
Iaminderived
主要考察虚函数的使用
11、分析下面代码,指出问题
int*func(){inti=0;return&i;}
返回的是一个局部简单类型变量地址,程序可能会出错,而且返回的指针不能采用delete进行删除。
classCObject;
CObject*funobj(){CObjectobj;….return&obj;}
返回的是一个局部CObject类型变量地址,程序会出错,而且返回的指针不能采用delete进行删除。
CStringfunobj(){CStringstrTemp=_T(“temp”);returnstrTemp;}
不会出错,返回的CString会调用CString的拷贝构造函数返回。
12、Debug版本中经常使用ASSERT进行断言,在Release版本中有一个起同样作用的函数,请说明。
VERIFY,而且要注意ASSERT中的语句在Release版本中会忽略。
13、下面的程序是否有错误,如果有错,请说明原因。
structA1{inti;};
A1a1;
a1.i=0;
没有错误
classA1{inti;};
A1a1;
a1.i=0;
有错误,未显示权限定义符缺省为private。
14、下面程序是否有错,有错,请说明原因。
:
charszTest[]=“hello”;
char*constpsz=szTest;
psz[0]=‘b’;
没有错误,psz指向的字符串指针是常量,指针不能被修改,但指针指向的内容可以修改
15、在继承层次上,构造函数和析构函数的调用顺序如何?
构造函数:
先基类,后派生类
析构函数:
先派生类,后基类
16、如果一个包容器中包含指向对象的指针,当从包容器中删除某个指针时,会析构该指针指向的对象吗?
包容器并不关心存放对象的类型,所以从包容器中删除成员时,仅仅只是从容器中释放该成员占有的空间。
如果该成员是一个指向某个对象的指针,由用户保证指针指向对象的内存释放。
17、如何阻止构造函数的自动转换
首先要理解什么是构造函数的自动转换。
比如有
classA{….};
classB{B(A&){…};};
func(B){};
main()
{
Aa;
Func(a);
}
在调用Func(a)时,会自动调用B(A&)构造函数,保证传给Func的参数是B类型。
应该采用explicit关键字来防止构造函数的自动转换。
18、类的成员函数作为回调函数有什么要求?
必须是静态成员函数。
19、分析代码,给出i,j,k的结果。
inti=0,j=0;k=0;
if(++i||j++||++k){}
主要是注意前置操作符和后置操作符的区别,还要考虑或操作在条件判断中的实现(如果一个为真,则不进行后续判断)。
i=1,j=0,k=0
C++面试试题
(二)
1、标准建模语言UML的重要内容可以由哪五类图(共9种图形)来定义,并简要说明这些图所描述的对象。
标准建模语言UML的重要内容可以由下列五类图(共9种图形)来定义:
·第一类是用例图,从用户角度描述系统功能,并指出各功能的操作者。
·第二类是静态图(Staticdiagram),包括类图、对象图和包图。
其中类图描述系统中类的静态结构。
不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(类的属性和操作)。
类图描述的是一种静态关系,在系统的整个生命周期都是有效的。
对象图是类图的实例,几乎使用与类图完全相同的标识。
他们的不同点在于对象图显示类的多个对象实例,而不是实际的类。
一个对象图是类图的一个实例。
由于对象存在生命周期,因此对象图只能在系统某一时间段存在。
包由包或类组成,表示包与包之间的关系。
包图用于描述系统的分层结构。
·第三类是行为图(Behaviordiagram),描述系统的动态模型和组成对象间的交互关系。
其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件。
通常,状态图是对类图的补充。
在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图。
而活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。
·第四类是交互图(Interactivediagram),描述对象间的交互关系。
其中顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;合作图描述对象间的协作关系,合作图跟顺序图相似,显示对象间的动态合作关系。
除显示信息交换外,合作图还显示对象以及它们之间的关系。
如果强调时间和顺序,则使用顺序图;如果强调上下级关系,则选择合作图。
这两种图合称为交互图。
·第五类是实现图(Implementationdiagram)。
其中构件图描述代码部件的物理结构及各部件之间的依赖关系。
一个部件可能是一个资源代码部件、一个二进制部件或一个可执行部件。
它包含逻辑类或实现类的有关信息。
部件图有助于分析和理解部件之间的相互影响程度。
2、什么是虚拟函式、虚拟继承?
3、你在使用面向对象程序设计语言(例如C++,Smalltalk等)和可重用的对象类库上有何经验?
实际效果如何?
有什么优缺点?
4、引用和指针之间有什么区别?
引用是一个别名,而指针是一个保存地址的变量。
引用不能为空也不能赋值。
5、什么是函数重载?
函数重载是指用同一个函数名写多个函数的能力,这些函数根据参数的数目、类型加以区别。
6、C++与其它传统编程语言相比有何特点?
7、简要说明如何绘制UML活动图。
UML活动图记录了单个操作或方法的逻辑,单个用户案例,或者单个业务流程的逻辑。
要创建一个UML活动图,您需要反复执行下列步骤。
第一步,定义活动图的范围首先应该定义您要对什么建模。
单个用户案例力?
一个用户案例的一部分?
一个包含多个用户案例的商务流程?
一个类的单个方法?
一旦您定义了您所作图的范围,您应该在其顶部,用一个标注添加标签,指明该图的标题和唯一的标示符。
您有可能也想要包括该图的时间甚至作者名。
第二步,添加起始和结束点每个活动图有一个起始点和结束点,因此您也要马上添加它们。
在《UML精粹》(UMLDistilled)(参见参考资料),Fowler和Scott认为结束点是可选的。
有时候一个活动只是一个简单的结束,如果是这种情况,指明其唯一的转变是到一个结束点也是无害的。
这样,当其他人阅读您的图时,他或她知道您已经考虑了如何退出这些活动。
第三步,添加活动如果您正对一个用户案例建模,对每个角色(actor)所发出的主要步骤引入一个活动(该活动可能包括起始步骤,加上对起始步骤系统响应的任何步骤)。
如果您正对一个高层的商务流程建模,对每个主要流程引入一个活动,通常为一个用户案例或用户案例包。
最后,如果您正对一个方法建模,那么对此引入一个活动是很常见的。
第四步,添加活动间的转变我的风格总是应该退出一个活动,即使它是转变到一个结束点。
一旦一个活动有多个转变时,您必需对每个转变加以相应标示。
第五步,添加决策点有时候,您所建模的逻辑需要做出一个决策。
有可能是需要检查某些事务或比较某些事务。
要注意的是,使用决策点是可选的。
例如,在图1中,我可以只是简单地将“接受”和“拒绝”两个转变直接接到“在大学报名(EnrollinUniversity)”活动。
第六步,找出可并行活动之处当两个活动间没有直接的联系,而且它们都必需在第三个活动开始前结束,那它