面试应该把每次面试失败的原因总结一下,找到自己的不足之处。
1)初级C++工程师:
面向对象的开发语言+C++编程规范+数据库知识,开发工具“turbo c,Visual C++6.0”
2)中高级工程师:
1、了解主流数据库“SQL Server ,Oracle”,多练习SQl有关的数据存储过程。了解数据库的原理。
2、UML:讨论交流项目的工具,
3、设计模式:设计的代码重用性好,可维护性、可扩展性。
写的一手好的代码:代码的可重用性、可维护性、可扩展性。
3)自我评价:要有优点和缺点
4)基本数据类型:简单数据类型(整数型、字符类型、浮点类型、指针类型、枚举类型、void类型)结构类型(数组、字符串、记录、文件等)总体分三类:整数型、浮点型、void型。C++所有的表达式是可以转换或映射为void类型的。
5)整形分哪几类?各有那些形式?区别?
整数、字符和布尔值的算术类型合称整数型,根据修饰符细分为13种形式,他们的区分主要体现在类型名、长度和表示范围,几个方面。
6)C++中有哪些常量?
整数型常量、浮点型常量、字符型常量、转义符常量、地址常量等6种。
0x表示十六进制,只有一个0表示八进制。有时候编程者在常量的后面加上L或者U表示长整形或无符号型。绝对值小于1的浮点数,其小数点前面的0可以省略。例如0.22写为.22,。
字符常量表示的值是字符变量所包含的值。用单引号内加反斜杠表示转义字符。’\x2f’,’\013’,其中\x表示十六进制数,\0表示八进制数。
&表示取地址符,作用是提取变量的地址。
7)常量和变量的区别
常量是不可以改变值得量,变量是可以改变值得量,常量在定义是必须初始化,变量可以在定义的时候不初始化。常量不可以寻址,它的地址不可以赋给非常量指针,变量可以寻址。常量有相对较高的编译执行效率。常量本身没有地址属性,变量有地址属性。所以常量只能用做右值,而变量左值、右值都可以。
8)操作符有哪些分类
表达式是由操作符、操作数字和标点符号组成的序列,目的是为了说明一个运算过程,操作符说明了表达式的主要目的,并且计算返回结果。
按照功能的不同区分算术操作符、关系操作符、逻辑操作符、位操作符、赋值操作符、自增自减操作符、箭头操作符、条件操作符、sizeof、操作符等10类。
按照操作数区分操作符分为一元操作符、二元操作符和三元操作符。
9)操作符的优先级对运算结果有什么影响?
所有优先级中,有3个从右至左结合,分别是单目运算符、条件运算符、赋值运算符。其他都是从左至右结合。
优先级决定了表达式的运算顺序,不同的优先级别的运算符的不同使用会影响表达式的运算结果。
10)逻辑操作和其他操作的关系
逻辑操作只返回true或false这两种值,他们可以用来做判断条件,逻辑操作符不会改变被操作数的值。
11)自增自减前操作和后操作的区别
前自增自减操作的优先级别大于赋值运算符(=),执行的结果为赋值后的值;后自增自减的操作的优先级别小于赋值运算符,执行结果仍然是原来的值(前变后不变)。
12)变量:变量代表分配了一块存储区;变量代表这个存储区的名字;
变量的初始化方式:变量初始化指创建变量并同时给它赋初始值,而赋值则是擦除对象的当前值并用新的值代替。其中直接初始化的语法更加灵活而且执行效率更加高。
13)什么是左值和右值?
变量是左值可以在赋值语句的左边,可以被改变(内存存储数据的地址);数字是右值,不可以被改变。
13.1)变量初始化指创建变量并同时赋给它初始值,而赋值则是擦除对象的当前值并用新值代替。其中直接初始化的语法更加灵活并且更加灵活执行效率较高。
13.2)声明
extern int a;//声明但是未定义a,也不会分配内存空间。
int b; //定义b
14)C++有哪几种作用域?
作用域是程序的一段区域,作用域用于区别变量名的不同的有效范围,分为全局作用域和局部作用域和语句作用域。一个变量名可以和不同的实体相关联。
15)变量有哪些存储类型?
(1)自动类型变量(auto):只能是局部类型的变量,属于动态存储类型。
(2)静态类型的变量(static):程序运行的过程中静态变量始终是占有一个存储空间。
(3)寄存器类型变量(register):属于动态存储类型,编译器不为寄存器类型的变量分配存储空间,而是直接使用CPU的寄存器。以便提高这类变量的提取速度。只要勇于控制循环次数不需要长期保存值得变量。
(4)外部类型的变量(extern):外部类型的变量必须是全局变量,在C++中,有两种情况需要使用外部类型变量。一种是在同一源程序文件中,当全局的定义之前使用变量时,在使用前要对该变量进行外部类型变量声明。另一种是当程序有多个文件组成时,若在一个源文件中要引用在另一个源文件中定义的全局变量,则在引用之前必须对所引用的变量进行外部声明。
16)什么是引用?
引用是对象的另一个名字,在实际程序中,引用主要作用函数的形式参数来使用。
17)const引用可以读但是不可以修改引用对象,任何对const引用进行赋值都是不合法的。
非const引用不适合指向const对象的引用,可以修改引用和被引用对象的值。
17)c与c++的区别
(1)c是一种过程语言,结构化模块化;c++是面向对象的语言,c++是c的超集。
18)匈牙利命名法
以一个或者多个小写字母开始,这些字母帮助记忆变量类型和作用,后面根着程序猿自己选择的名字。变量名=属性+类型+对象描述,其中每一个对象的名字都是要求有明确含义,可以是名字的全部或者名字的一部分。主要思想是在变量和函数前加前缀以增加人们对程序的理解。
19)条件语句类型?if 和 if…else…和if…else…
20)for计算顺序是什么:先从左到右的执行顺序,如果判断语句的执行结果为true,则循环语句继续执行一次循环执行语句,然后再回到循环语句的条件语句上。直到判断语句为false的时候。
21)while语句和do while语句的区别:如果循环语句为false,while语句不会执行循环,而do、、while保证循环执行一次。
22)break与continue的区别:continue只能出现在循环语句中,break语句可以出现在switch语句中;continue语句不会跳出循环,只会进入下一个循环。break语句会退出循环语句。
23)switch语句的执行顺序:如果表达式的与其中一个case的值相匹配,则程序将从该标号后面的第一个语句开始依次执行各个语句,直到switch结束或者遇到break语句为止,否则switch语句从第一个语句开始执行。
24)如何在switch语句中定义变量:可以在最后一个case标号或者default标号后面定义变量,或者引入块语句来定义变量。
24.1)递归:一个过程或函数直接或间接调用自己本身,这种过程或函数叫递归过程。
25)标准输入输出流:ios是根基类,其他输入流istream、ostream、fstreambase和字符串流基本类strstreambase,标准输入流是从标准输入设备流向程序的数据,标准输出流是流向标准输出设备的数据。
头文件是程序和类库的接口,iostream类库的接口分别由不同的头文件来实现。
25.1)如何重载输入和输出:重载时面向对象的中概念,重载可以减少代码的量,使代码简洁。重载就是基于不同的参数表让同一个名称的函数定义不同的函数。
26)文件输入输出:ifstream、ofstream。和fstream3种类型以用于文件的输入和输出。
27)异类:程序运行时出现的不正常,它可能导致系统无法正常运行甚至停止运行等严重错误,编程者需要实现好异类处理来保证程序的稳定性。
27.1)C++中,系统通过try块和异常处理构成了异常机制;其中catch语句来捕捉运行的异常,并且执行异常处理,通过throw语句可以抛出异常。
预处理:是指在进行编译的第一遍扫描之前所做的工作,预处理由预处理程序负责完成的
28)宏定义和操作符的区别:
c提供的三种预处理:宏定义、文件包含、条件编译。
宏定义的语法格式:#define<标识符><字符串>,标识符就是所谓的符号常量,宏定义通常不加分号。
宏定义和操作符的区别:宏定义是替换,不做计算,也不做表达式求解。宏定义的替换在编译前进行,所以不占内存。宏展开不占运行时间,只占编译时间,而操作符占运行时间。
29)宏定义如何展开:宏展开是用宏定义时设计的宏体去代替宏指令名,并且用实际参数一一取代形式参数。
30)include有哪几种使用方式?有什么区别?
#include有两种使用方式:include<>使用标准头文件(在预定义的位置集查找) 和#include“”使用自定义头文件(查找通常开始于源文件所在的路径)
31)标准头文件在系统文件目录下查找。用户自定义文件:首先在用户目录下查找,然后在C++安装目录下查找,最后在系统文件中查找。
32)bool 布尔值 最小存储空间 4bits
char 字符 8bits
wchar widecharacter 16bits
short 短整形 16bits
int 整型 16bits
long 长整形 32bits
float 单精度浮点 6significant digits
double 双精度浮点 10significant digits
longdouble 长双精度浮点 10significant digits
位(bit比特)是计算机内部最小的存储单位;字节(byte)是计算机内部数据处理的基本单位。(一个字节等于8bit);计算机进行数据处理时,一次存取、加工和传送的数据长度称为字(word)。
33)如何分配和释放存储空间:new和delete是用来分配和释放存储空间。
new是C++的一个关键字。它的使用操作结果是在申请到一个段指定数据类型大小的内存。使用方式为指针变量=new 数据类型。new使用后处理三件事情,A.计算指定数据类型需要的内存空间大小。B正确的指针类型。C分配内存,将按照语法规则,初始化所分配的内存。
释放内存:delete 指针变量;无*符号。
system (“PAUSE”); //系统暂停命令。
34)虚函数和纯虚函数的区别:纯虚函数是虚函数的子集。 虚函数的作用主要是建立抽象的模型,从而达到方便扩展系统的目的。纯虚函数是被指明为不具体实现的虚函数,是一种特殊的虚函数。
虚函数定义:virtual 函数返回值类型 虚函数名(参数列表)
{
函数体
}
35)纯虚函数用来定义没有意义的实现,用于抽象类中需要交给派生类具体实现的方法。
36)指针可以用于数组,或者作为函数的参数,用来访问内存和内存的操作。
每一种数据类型都有其自己的对应的指针类型,编程者可以建立对应类型的指针来处理基本数据类型。
其中指针可以保存任何类型对象的地址。
指针:指针是用来存储地址的变量,它指向单个对象的地址,除了viod指针类型以外,指针的数据类型与所指向地址的变量数据类型需保持一致。
37)指针的初始化就是给指针赋初始值,&符号可以用来获取对象的内存地址,并且赋值给指针变量。指针变量的初始化与赋值都可以通过符号运算“=”来实现。
38)指针也可以指向对象,但是一个指针只能指向一个对象的地址。
指针用于指向对象,与迭代器一样,指针提供对其所指对象的简介访问,只是指针结构更加通用一些。与迭代器不同的是,指针用于指向单个对象,而迭代器只能访问容器内的元素。
string s(“hello world”);
string *sp=&s;//Sp保存s的地址
39)在C/C++中,指针对于数组的操作是通过将数组的地址,通