C++面试宝典2011版

合集下载

精华C面试题和答案(可编辑修改word版)

精华C面试题和答案(可编辑修改word版)

C#面试题1、C#中property 与attribute 的区别,他们各有什么用处,这种机制的好处在哪里?property 和attribute 汉语都称之为属性。

不过property 是指类向外提供的数据区域。

而attribute 则是描述对象在编译时或运行时属性的。

这两者是有本质区别的。

2 .列举 页面之间传递值的几种方式。

答. 1).使用QueryString, 如....?id=1; response. Redirect()....2). 使用Session 变量3). 使用Server.Transfer4. C#中的委托是什么?事件是不是一种委托?答:委托可以把一个方法作为参数代入另一个方法。

委托可以理解为指向一个函数的引用。

是,是一种特殊的委托5. o verride 与重载的区别答:override 与重载的区别。

重载是方法的名称相同。

参数或参数类型不同,进行多次重载以适应不同的需要Override 是进行基类中函数的重写。

为了适应需要。

9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?答:不是。

可以用任意类型。

13. 什么叫应用程序域?答:应用程序域可以理解为一种轻量级进程。

起到安全的作用。

占用资源小。

14. CTS、CLS、CLR 分别作何解释?答:CTS:通用语言系统。

CLS:通用语言规范。

CLR:公共语言运行库。

15. 什么是装箱和拆箱?答:从值类型接口转换到引用类型装箱。

从引用类型转换到值类型拆箱。

16. 什么是受管制的代码?答:unsafe:非托管代码。

不经过CLR 运行。

17. 什么是强类型系统?答:RTTI:类型识别系统。

21. 在.net 中,配件的意思是?答:程序集。

(中间语言,源数据,资源,装配清单)22. 常用的调用WebService 的方法有哪些?答:1.使用WSDL.exe 命令行工具。

2.使用 中的Add Web Reference 菜单选项 Remoting 的工作原理是什么?答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

第3章C与C++程序员面试宝典电子书

第3章C与C++程序员面试宝典电子书

第3章电话面试很多大企业在收到简历之后,由于简历数量众多,为了能在面试前做进一步的筛选,缩小面试范围,节约企业面试成本,用人单位往往用打电话的形式进行首轮面试。

有的企业,甚至经常是大型企业,在人才需求较大的时候,电话面试会作为技术面试或者所有面试流程的唯一关卡,通过电话面试就意味着跨过面试门槛。

所以,掌握好的电话面试技巧是非常重要的。

3.1 电话面试简介一方面,IT行业求职者越来越多,用人单位的选择也越来越多,有时是上百个人甚至更多人在争取一个职位。

这就有必要在面试前先对求职者做一轮筛选,所以用人单位往往选择先在电话里和求职者做一次面试,对求职者各方面的情况有一个初步的掌握,再决定是否给他(她)面试的机会。

现在电话面试成为了求职越来越重要的一个门槛。

另一方面,随着求职大军竞争激烈,很多人在制作简历等方面的“求职技巧”越来越丰富,他们简历里的“水分”也开始增大,这使得用人单位很难仅仅从简历和求职信上去了解一个人。

为了“挤”去水分,找到合适的人参加面试,用人单位也乐于先采用电话面试等手段相对较低成本的手段。

如果你曾经花时间去寻找一份工作,你可能有过一到两次的电话面试的经历。

如果你没有,那么你很有可能会尝试到这种更加有效率的方式。

(1)为了确认求职简历的真实性,电话面试的时候,企业人事部门首先会对简历内容进行确认,看看是否有漏洞,是否有不符合事实的地方。

这时,应聘者必须冷静快速地回答问题,回答过程中的任何犹豫都有可能给对方造成说谎的印象。

因此,最好将简历放在手边,可以看着内容回答提问。

(2)对简历内容确认之后,面试官会针对应聘岗位问些专业技术方面的问题。

例如,你的专业技能及对应聘职位的看法,有时会问得更细一些。

对于这些问题,千万不要慌张,保持镇静,抓住问题要点,尽你所能,如实回答。

在回答一些专业问题时,你的答案要尽量显示你对那些专业术语非常熟悉,并能用简短的语言表达清楚,重点突出,不要回答得含糊不清。

程序员面试笔试宝典.doc

程序员面试笔试宝典.doc

程序员面试笔试宝典程序员面试笔试宝典篇11.extern的作用自己理解:应该需要区分extern在C语言中和C++语言中的作用,C语言中extern声明的函数和变量可以被该文件外部模块引用,C++语言中除了该作用还可以声明extern C 声明一段代码编译连接的方法为C语言的方法。

参考:其实extern的百度词条解释的很清楚,具体的也是跟我上面自己理解差别不是很大。

(a) extern是C/C++语言中声明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量在本模块或其他模块中使用(通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。

)(b) 被extern C 修饰的变量和函数是按照C语言的方式编译和链接的。

(C语言不支持函数重载,所以函数的C++和C的编译方式不同,这一句的作用就是实现C++和C及其他语言混合编程)2.strstr()函数的作用strstr()函数的原型一般为extern char * strstr(const char *src , const char *dest) ,其作用就是寻找目标字符串在源字符串中第一次出现的位置。

3.windows线程优先级问题( 进程和线程的区别和联系)我觉得这个概念可能面试、笔试的时候不是很适合,毕竟平台相关,大多数公司可能更多的倾向于linux开发,这个问题更换为进程和线程的区别更好,这个是笔试,面试常见的知识考查。

(a) 通常一个进程可以包含若干个线程,它们可以利用进程所拥有的资源。

进程是系统进行资源分配和调度的一个独立单位,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。

线程自己基本不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器,一组寄存器和栈),线程可与同属于一个进程的其他线程共享进程所拥有的全部资源。

线程和进程区别归纳:地址空间和其他资源:进程间互相独立,同一个进程的各线程共享。

C软开面试题目(3篇)

C软开面试题目(3篇)

第1篇第一部分:基础知识1. C语言基础- 请简述C语言的特点和优势。

- 解释变量声明和初始化的区别。

- 描述C语言中的数据类型,包括基本类型和构造类型。

- 解释C语言中的运算符及其优先级。

- 描述C语言中的控制结构,包括if语句、循环语句(for、while、do-while)等。

2. 指针与数组- 解释指针的概念及其在C语言中的作用。

- 比较指针和数组的区别。

- 编写一个函数,使用指针交换两个整数的值。

- 描述如何使用指针遍历二维数组。

3. 函数与递归- 解释函数的定义和调用。

- 描述函数参数的传递方式,包括值传递和引用传递。

- 编写一个递归函数,计算斐波那契数列的第n项。

- 解释递归函数的优缺点。

4. 结构体与联合体- 解释结构体和联合体的概念。

- 描述结构体和联合体的区别。

- 编写一个结构体,包含姓名、年龄和性别等信息,并创建一个结构体数组。

5. 文件操作- 描述C语言中文件操作的基本概念。

- 编写代码,使用fopen、fprintf、fclose等函数实现文件的读取和写入。

第二部分:高级特性1. 动态内存分配- 解释动态内存分配的概念。

- 描述malloc、calloc、realloc和free函数的使用。

- 编写代码,动态分配内存,创建一个链表并插入元素。

2. 指针与函数- 解释函数指针的概念。

- 编写一个函数指针作为参数的函数。

- 描述如何使用函数指针来调用函数。

3. 宏定义与内联函数- 解释宏定义的概念及其优缺点。

- 编写宏定义,实现简单的数学运算。

- 描述内联函数的概念及其应用场景。

4. 编译预处理- 解释编译预处理的概念。

- 描述宏、条件编译、文件包含等预处理指令的使用。

5. C语言标准库- 描述C语言标准库中的常用函数,如printf、scanf、strlen等。

- 编写代码,使用标准库函数实现字符串复制、字符串连接等操作。

第三部分:编程实践1. 编写一个函数,计算一个整数数组中所有元素的和。

C面试大全

C面试大全

一、选择题下列各题ABCD四个选项中,只有一个选项是正确的,请将正确选项涂在答题卡的相应位置上,答在试卷上不得分。

1、不合法的整数是()。

A)0x35 B)43.6 C)0532 D)-3462、下列合法的字符常量是()。

A)“f”B)x C)65 D)‘\Xab’3、设有整型变量x,单精度变量y=5.5,表达式x=float(y*3+((int)y%4))执行后,x的值为()。

A)17B)17.500000 C)17.5 D)1.54、在C语言中,负整数在内存中以()形式释放。

A)补码B)BCD码C)反码D)十进制数5、在C语言中,要求参加运算的数必须是整数的运算符是()。

A)/ B)!C)%D)= =6、()是C语言中非法的数据类型关键字。

A)float B)singed C)integer D)Char7、现已定义整形变量int i=1;执行循环语句while(i++<5);后i的值为()。

A)1 B)5 C)6 D)以上三个答案都不正确8、下列语句的输出结果是()。

printf(―%f\n‖,(float)(2+4)/2);A)有语法错误不能通过编译B)3 C)3.0 D)3.0000009、C语言中,整数-8在内存中的存储形式是()。

A)1111,1111,1111,1000B)1000,0000,0000,1000C)0000,0000,0000,1000 D)1111,1111,1111,011110、设C语言中,int类型数据占2个字节,则long类型数据占()个字节。

A)1 B)2 C)8 D)411、若变量a已说明为float类型,则能实现将a中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是()。

A)a=(a*100+0.5)/100.0 B)a=(a*100+0.5)/100C)a=(int)(a*100+0.5)/100.0D)a=(a/100+0.5)*100.012、定义a为整型,下列表达式a=3>6的运行后,a的值为()。

程序员面试宝典

程序员面试宝典

程序员面试宝典指针基本问题:面试例题1:指针和引用的区别?答案:(1)非空区别。

在任何情况下都不能使用指向空值的引用。

一个应用必须总是指向某些对象。

因此如果你使用一个变量并让他指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你库赋空值给该变量。

相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。

不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针要高。

(2)合法性区别。

在使用引用之前不需要测试它的合法性。

相反,指针则应该总是呗测试,防止共为空。

(3)可修改区别。

指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。

但是引用则总是指向在初始化时被指定的对象。

以后不能改变。

但是指定的对象其内容可以改变。

(4)应用区别。

总的来说,在以下情况下你应该使用指针:一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。

如果总是指向一个对象并且一旦指向一个对象后就不会改变指针,那么你应该使用引用。

面试例题2:Please check out which of the following statements are wrong?(看下面的程序哪里有错?)#includeusing namespace std;int main(){int iv; //1int iv2=1024; //2int iv3=999; //3int &reiv; //4int &reiv2=iv; //5int &reiv3=iv; //6int *pi; //7*pi=5 //8pi=&iv3; //9const double di; //10const double maxWage=10.0;//11const double minWage=0.5;const double *pc=&maxWage;//12cout<<pi;return 0;}答案:1正确,很正常的声明了一个变量。

《程序员面教材试宝典》集锦

《程序员面教材试宝典》集锦

双目运算符
8
&
按位与
整型表达式&整型表 左到右 达式
双目运算符
9
^
按位异或
整型表达式^整型表 达式
左到右
双目运算符
10
|
按位或
整型表达式|整型表达 左到右 式
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右 双目运算符
12
||
逻辑或
表达式||表达式
左到右 双目运算符
13
?:
条件运算符
表达式 1? 表达式 2: 右到左 表达式 3
|=
按位或后赋值
变量|=表达式
15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺 序运算
基本的优先级需要记住: 指针最优,单目运算优于双目运算。如正负号。 先乘除(模),后加减。 先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7 等价于 (1 << (3 + 2))&7. 逻辑运算最后计算。
三目运算符
=
赋值运算符
变量=表达式
/=
除后赋值
变量/=表达式
*=
乘后赋值
变量*=表达式
%=
取模后赋值
变量%=表达式
+=
加后赋值
变量+=表达式
14
-=
减后赋值
变量-=表达式
右到左
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值

c_公司面试题目(3篇)

c_公司面试题目(3篇)

第1篇一、面试背景C公司是一家专注于软件开发、互联网技术和人工智能领域的高科技企业。

公司以技术创新为核心,致力于为客户提供优质的产品和服务。

为了选拔优秀的人才加入公司,C公司特制定了以下面试题目,旨在全面考察应聘者的综合素质和专业技能。

二、面试题目一、基础知识题1. 请简述面向对象编程的基本概念和特点。

2. 解释Java中的继承、多态和封装的概念,并举例说明。

3. 请列举JavaScript中的几种数据类型,并说明它们的特点。

4. 解释HTTP协议中的GET和POST请求的区别。

5. 简述TCP/IP协议栈中的四层结构,并说明每层的作用。

二、编程题1. 编写一个Java程序,实现一个简单的单链表,包括插入、删除和查找元素的功能。

2. 编写一个JavaScript函数,实现一个数组去重功能。

3. 编写一个Python程序,实现一个简单的命令行工具,用于计算两个数的和、差、积和商。

4. 编写一个C++程序,实现一个简单的排序算法(如冒泡排序或选择排序),并测试其性能。

5. 编写一个HTML和CSS代码,实现一个简单的网页布局,包括头部、导航栏、主体内容和尾部。

三、算法题1. 编写一个函数,实现整数数组中找出所有重复元素的查找功能。

2. 编写一个递归函数,实现计算斐波那契数列的第n项。

3. 编写一个函数,实现判断一个整数是否为素数的功能。

4. 编写一个函数,实现合并两个有序数组的功能。

5. 编写一个函数,实现二分查找算法。

四、数据库题1. 请简述关系型数据库的基本概念,如表、字段、索引等。

2. 解释SQL语言中的SELECT、INSERT、UPDATE和DELETE语句。

3. 请列举几种常见的数据库设计范式,并解释其作用。

4. 编写一个SQL语句,实现查询一个学生及其所在班级的信息。

5. 编写一个SQL语句,实现删除一个班级中所有学生的记录。

五、操作系统题1. 请简述操作系统的基本功能,如进程管理、内存管理、文件管理等。

c面试必须知道的问题

c面试必须知道的问题

1. 面向对象的程序设计思想是什么?答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。

2. 什么是类?答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。

3. 对象都具有的二方面特征是什么?分别是什么含义?答:对象都具有的特征是:静态特征和动态特征。

静态特征是指能描述对象的一些属性;动态特征是指对象表现出来的行为;4. 在头文件中进行类的声明,在对应的实现文件中进行类的定义有什么意义?答:1这样可以提高编译效率,因为分开的话只需要编译一次生成对应的.obj文件后,再次应用该类的地方,这个类就不会被再次编译,从而大大提高了效率。

2隐藏了代码;5. 在类的内部定义成员函数的函数体,这种函数会具备那种属性?答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。

6. 成员函数通过什么来区分不同对象的成员数据?为什么它能够区分?答:通过this指针来区分的,因为它指向的是对象的首地址。

7. C++编译器自动为类产生的四个缺省函数是什么?答:默认构造函数(不带参数的构造函数),拷贝构造函数(用于对象间的赋值),析构函数,赋值函数(等号的赋值)。

8. 拷贝构造函数在哪几种情况下会被调用?答:1.当类的一个对象去初始化该类的另一个对象时;2.如果函数的形参是类的对象,调用函数进行形参和实参结合时;3.如果函数的返回值是类对象,函数调用完成返回时。

9. 构造函数与普通函数相比在形式上有什么不同?(构造函数的作用,它的声明形式来分析)答:构造函数是类的一种特殊成员函数,一般情况下,它是专门用来初始化对象成员变量的。

构造函数的名字必须与类名相同,它不具有任何类型,不返回任何值。

10. 什么时候必须重写拷贝构造函数?答:当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深拷贝。

11. 构造函数的调用顺序是什么?答:1.先调用基类构造函数2.按声明顺序初始化数据成员3.最后调用自己的构造函数。

c面试题目及答案

c面试题目及答案

c面试题目及答案一、自我介绍大家好,我是XXX。

很高兴有机会参加C公司的面试。

我毕业于XXXX大学,专业是XXXX。

在过去的几年里,我一直从事C编程相关的工作,积累了丰富的经验和技能。

我熟悉C语言的语法和特性,能够独立完成C语言开发项目,并具备良好的沟通和团队合作能力。

我对C语言的深入理解和不断学习的态度,使我对C编程有着浓厚的兴趣和极高的热情。

希望我能通过面试,成为贵公司的一员。

二、面试题目及答案1. 什么是C语言?请简要介绍一下C语言的特点。

C语言是一种通用的高级编程语言,由贝尔实验室的丹尼斯·里奇在20世纪70年代初开发而成。

C语言具有以下特点:(1) 结构简洁清晰,具有较高的可读性;(2) 强调了程序员对细节的控制,可以直接操作内存;(3) 具有丰富的运算符和流程控制语句,方便编写复杂的逻辑;(4) 具有模块化的特性,可以通过函数进行模块划分和代码复用;(5) 支持指针操作,有利于对内存资源进行灵活管理。

2. 什么是指针?请简要描述指针在C语言中的作用。

指针是C语言的一个重要概念,它表示内存地址的值。

通过指针,我们可以直接访问和修改内存中的数据,灵活地操作内存资源。

指针在C语言中的作用主要有三个方面:(1) 通过指针,可以在函数之间传递和修改数据,使得函数之间能够更好地协作;(2) 可以通过指针进行动态内存分配和释放,使得程序能够更高效地利用内存;(3) 指针还可以用于数组和字符串的访问,提高对数据的操作效率。

3. 请解释一下C语言中的函数指针及其用途。

函数指针是指向函数的指针变量。

在C语言中,函数指针可以用来存储函数的地址,并且可以通过函数指针调用相应的函数。

函数指针的用途非常广泛,主要包括以下几个方面:(1) 可以将函数指针作为参数传递给其他函数,实现回调函数的功能;(2) 可以将函数指针作为返回值,实现函数的动态调用;(3) 可以使用函数指针数组实现函数的分发和选择;(4) 可以使用函数指针实现函数的动态绑定,提高程序的灵活性和可扩展性。

C语言面试宝典-全面

C语言面试宝典-全面
这是一个前辈写的,非常详细
//main.cpp
int a=0; //全局初始化区
char *p1; //全局未初始化区
main()
{
intb;栈
char s[]="abc"; //栈
char *p2; //栈
char *p3="123456"; //123456\0在常量区,p3在栈上。
static int c=0;//全局(静态)初始化区
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:staticபைடு நூலகம்数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
004010708A4201moval,byteptr[edx+1]
004010738845FCmovbyteptr[ebp-4],al
第一种在读取时直接就把字符串中的元素读到寄存器cl中,而第二种则要先把指针值读到edx中,在根据edx读取字符,显然慢了。
21、什么是预编译,何时需要预编译?
答:预编译又称为预处理,是做些代码文本的替换工作。处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。
(1)申请方式
stack:由系统自动分配。例如,声明在函数中一个局部变量int b;系统自动在栈中为b开辟空间

常见C(C++)语言面试题及答案

常见C(C++)语言面试题及答案

1、“引用”与指针的区别是什么?答、1) 引用必须被初始化,指针不必。

2) 引用初始化以后不能被改变,指针可以改变所指的对象。

3) 不存在指向空值的引用,但是存在指向空值的指针。

指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。

程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。

流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用2、#include<file.h> 与#include "file.h"的区别?答:前者是从Standard Library 的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。

3、全局变量和局部变量在内存中是否有区别?如果有,是什么区别?答:全局变量储存在静态数据区,局部变量在堆栈中。

4、堆栈溢出一般是由什么原因导致的?答:1.没有回收垃圾资源2.层次太深的递归调用5、不能做switch()的参数类型答:switch 的参数不能为实型。

6、如何引用一个已经定义过的全局变量?答、可以用引用头文件的方式,也可以用extern 关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你用extern 方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

7、语句for( ;1 ;)有什么问题?它是什么意思?答、和while(1)相同,无限循环。

8、statac 全局变量、局部变量、函数与普通全局变量、局部变量、函数static 全局变量与普通的全局变量有什么区别?static 局部变量和普通局部变量有什么区别?static 函数与普通函数有什么区别?答、全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。

《C与C++程序员面试宝典》电子书第2章

《C与C++程序员面试宝典》电子书第2章

第2章英文面试当面试进入到了一定的阶段,很多企业,特别是外企,根据自身的需要会加上英文面试。

而往往到了这个阶段,说明你已经通过了技术面试等难关,朝着梦想进入了最后的冲刺阶段。

所以英文面试的重要性可想而知。

本章讲解英文面试中常见的经典问题和相关技巧,以便你在英文面试时准备充分,保持良好的状态。

2.1 英文面试过程和技巧英文面试的作用主要是考察应聘者的语言沟通能力,以及为人的特质。

英文面试不是技术面试,几乎不会涉及技术专业的相关方面。

但是可能会问到关于人生、规划、经历、团队合作、成功收获、失败教训等一系列问题。

一些主要的英文面试技巧总结如下。

1.控制回答语速,不要过快如果你是在外企面对国外主管的英文面试,那么英文面试的第一目的是让国外主管了解你,甚至对你感兴趣。

这时候最重要的是展示你的综合素质,绝非简单的语言能力,所以应该首先力求有条不紊、表达清晰。

在剑桥大学的一项调查显示,语速快一般体现具备两种不同特质的人:一种是思维和语言反应能力强且协调的人,一种是处事急躁的人。

语速过快容易给人不自信、不稳重的错觉。

所以最好的语速是中速平和,既让人能够听懂,又给自己以思考的时间。

2.自由讨论应当直白在英语的口语交谈中,不必太拘泥于语法,大胆表达清楚自己的意思即可。

语言最终的作用就是用以交流,用简单直白的语言表现最具魅力的自我,才是英文面试的至高境界。

很多人恨不得在面试中用大气磅礴的英文演讲征服面试官,习惯于堆砌华丽的词藻,连主考官都觉得冗长累赘,犯了舍本求末的错误。

应聘者在与考官沟通的时候,最重要的是自信,简洁明了,有条理,避免重复。

这样可以给主考官留下思路清晰,反应快捷的印象,而不会导致言多必失。

3.电话面试充分准备如果采用电话面试,而且应聘者提前知道了电话面试的时间,则可以在面试时把简历、cover letter放在旁边的桌子上,直接运用里面的句子回答问题。

一些基本的问题,可以考虑事先准备好答案。

第2章英文面试几个经典的英语面试题如下。

C与C++程序员面试宝典电子书(下)

C与C++程序员面试宝典电子书(下)

第14章软件工程随着计算机技术的普及及其在众多领域中的广泛应用,人们对软件的品种、数量、质量、功能、成本和开发时间等提出了越来越高的要求。

然而软件功能越强越多,开发出来的软件就越复杂庞大。

开发项目组对软件开发的控制越显不足,以致开发计划拖延,成本超支,软件质量得不到保证等。

软件工程就是软件界利用工业界的现有经验,力图使软件开发过程能够得到有效的控制,并达到预期的目的。

14.1 软件工程基础要知道软件工程,首先要知道什么是软件工程,以及其要解决的目标。

通过软件工程的基础,可以知道软件工程的相关定义及其背景。

面试题158 什么是软件工程【出现频率】★★★【关键考点】❑软件的特点;❑软件工程的概念。

【考题分析】软件是一种逻辑的产品,是逻辑的程序实现,例如,商业逻辑等。

因此软件的开发、维护和使用方面与工厂生产的可见的硬件产品不一样。

软件的特点如下。

❑软件是一种逻辑实体,而不是具体的物理实体。

❑软件的生产与硬件不同,它没有明显的制造过程。

对软件的质量控制,需要在软件开发方面下功夫。

❑在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。

但是随着时间的推移,需要对软件进行维护以适应运行和业务要求。

❑软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。

❑软件的开发至今尚未完全摆脱手工艺的开发方式,未能像工厂生产那样可以进行大规模的生产。

❑软件本身是复杂的。

软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。

第14章软件工程❑软件成本相当昂贵。

软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它的成本是比较高的。

❑相当多的软件工作涉及到社会因素。

许多软件的开发和运行涉及机构、体制及管理方式等问题,甚至涉及到使用者的观念和心理。

这些因素直接影响到项目的成败。

软件工程就是采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。

malloc 与free是C++/C语言的标准库函数,new/delete是C++的运算符。

它们都可用于申请动态内存和释放内存。

对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。

对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。

由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。

因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。

注意new/delete 不是库函数。

2.delete与delete []区别delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。

在More Effective C++中有更为详细的解释:―当delete操作符用于数组时,它为每个数组元素调用析构函数,然后调用operatordelete来释放内存。

‖delete与New配套,delete []与new []配套MemTest*mTest1=newMemTest[10];MemTest*mTest2=newMemTest;int*pInt1=newint[10];int*pInt2=newint;delete[]pInt1; //-1-delete[]pInt2; //-2-delete[]mTest1;//-3-delete[]mTest2;//-4-在-4-处报错。

这就说明:对于内建简单数据类型,delete和delete[]功能是相同的。

对于自定义的复杂数据类型,delete和delete[]不能互用。

delete[]删除一个数组,delete删除一个指针简单来说,用new分配的内存用delete删除用new[]分配的内存用delete[]删除delete[]会调用数组元素的析构函数。

内部数据类型没有析构函数,所以问题不大。

如果你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。

3.C和C++ 的共同点?不同之处?4.继承的优缺点。

类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便地改变父类的实现。

但是类继承也有一些不足之处。

首先,因为继承在编译时刻就定义了,所以无法在运行时刻改变从父类继承的实现。

更糟的是,父类通常至少定义了子类的部分行为,父类的任何改变都可能影响子类的行为。

如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。

这种依赖关系限制了灵活性并最终限制了复用性。

(待补充)5.C++有哪些性质(面向对象特点)封装,继承和多态。

在面向对象程序设计语言中,封装是利用可重用成分构造软件系统的特性,它不仅支持系统的可重用性,而且还有利于提高系统的可扩充性;消息传递可以实现发送一个通用的消息而调用不同的方法;封装是实现信息隐蔽的一种技术,其目的是使类的定义和实现分离。

6.子类析构时要调用父类的析构函数吗?析构函数调用的次序是先派生类的析构后基类的析构,也就是说在基类的的析构调用的时候,派生类的信息已经全部销毁了定义一个对象时先调用基类的构造函数、然后调用派生类的构造函数;析构的时候恰好相反:先调用派生类的析构函数、然后调用基类的析构函数JAVA 无析构函数深拷贝和浅拷贝7.多态,虚函数,纯虚函数多态:是对于不同对象接收相同消息时产生不同的动作。

C++的多态性具体体现在运行和编译两个方面:在程序运行时的多态性通过继承和虚函数来体现;在程序编译时多态性体现在函数和运算符的重载上虚函数:在基类中冠以关键字virtual 的成员函数。

它提供了一种接口界面。

允许在派生类中对基类的虚函数重新定义。

纯虚函数的作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。

作为接口而存在纯虚函数不具备函数的功能,一般不能直接被调用。

从基类继承来的纯虚函数,在派生类中仍是虚函数。

如果一个类中至少有一个纯虚函数,那么这个类被称为抽象类(abstract class)。

抽象类中不仅包括纯虚函数,也可包括虚函数。

l抽象类必须用作派生其他类的基类,而不能用于直接创建对象实例。

但仍可使用指向抽象类的指针支持运行时多态性。

8.求下面函数的返回值(微软)int func(x){int countx = 0;while(x){countx ++;x = x&(x-1);}return countx;}假定x = 9999。

答案:8思路:将x转化为2进制,看含有的1的个数。

9.什么是“引用”?申明和使用“引用”要注意哪些问题?答:引用就是某个目标变量的―别名‖(alias),对应用的操作与对变量直接操作效果完全相同。

申明一个引用的时候,切记要对其进行初始化。

引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。

声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。

不能建立数组的引用。

10.将“引用”作为函数参数有哪些特点?(1)传递引用给函数与传递指针的效果是一样的。

这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。

(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。

因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。

(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。

而引用更容易使用,更清晰。

11.在什么时候需要使用“常引用”?如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。

常引用声明方式:const 类型标识符&引用名=目标变量名;例1int a ;const int &ra=a;ra=1; //错误a=1; //正确例2string foo( );void bar(string & s);那么下面的表达式将是非法的:bar(foo( ));bar("hello world");原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。

因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。

引用型参数应该在能被定义为const的情况下,尽量定义为const 。

12.将“引用”作为函数返回值类型的格式、好处和需要遵守的规则?格式:类型标识符&函数名(形参列表及类型说明){ //函数体}好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。

因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error! 注意事项:(1)不能返回局部变量的引用。

这条可以参照Effective C++[1]的Item 31。

主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。

(2)不能返回函数内部new分配的内存的引用。

这条可以参照Effective C++[1]的Item 31。

虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。

例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。

(3)可以返回类成员的引用,但最好是const。

这条原则可以参照Effective C++[1]的Item 30。

主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。

如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。

(4)流操作符重载返回值申明为―引用‖的作用:流操作符<<和>>,这两个操作符常常希望被连续使用,例如:cout << "hello" << endl;因此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引用。

可选的其它方案包括:返回一个流对象和返回一个流对象指针。

但是对于返回一个流对象,程序必须重新(拷贝)构造一个新的流对象,也就是说,连续的两个<<操作符实际上是针对不同对象的!这无法让人接受。

对于返回一个流指针则不能连续使用<<操作符。

因此,返回一个流对象引用是惟一选择。

这个唯一选择很关键,它说明了引用的重要性以及无可替代性,也许这就是C++语言中引入引用这个概念的原因吧。

赋值操作符=。

这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。

因此引用成了这个操作符的惟一返回值选择。

例3#i nclude <iostream.h>int &put(int n);int vals[10];int error=-1;void main(){put(0)=10; //以put(0)函数值作为左值,等价于vals[0]=10;put(9)=20; //以put(9)函数值作为左值,等价于vals[9]=20;cout<<vals[0];cout<<vals[9];}int &put(int n){if (n>=0 && n<=9 ) return vals[n];else { cout<<"subscript error"; return error; }}(5)在另外的一些操作符中,却千万不能返回引用:+-*/ 四则运算符。

相关文档
最新文档