因为一些原因重新找工作了,面的Linux C/C++,这里把面试中经常碰到的问题总结一下。
单元测试
在深信服被问了单元测试,集成测试是什么的问题,一时没想出明确的答案,只给了大概意思 汗-_-||。
单元测试: 单元测试是对软件基本组成单元(软件设计的最小单位)进行正确性检验的测试工作,如函数、过程(function,procedure)或一个类的方法(method)。
集成测试: 集成测试是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统,验证组装后功能以及模块间接口是否正确的测试工作。集成测试也叫组装测试、联合测试、子系统测试或部件测试。
系统测试: 系统测试是将经过集成测试的软件,作为计算机系统的一个部分,与系统中其他部分结合起来,在实际运行环境下对计算机系统进行的一系列严格有效地测试,以发现软件潜在的问题,保证系统的正常运行。
关键字const
几乎面C++都会问的问题。
1.const声明的变量只能被读
2.必须初始化
3.常量和指针:
常量和指针常量:
/**
*int* p = 4; //non-const pointer,non-constdata
*const char* p = &p; //non-constpointer,const data;
*char* const p = &p;//constpointer,non-const data;
*const char* const p = &p; //constpointer,const data;
**/
int j=0;
const int i=0; //i是常量,i的值不会被修改
const int *p1=&i; //指针p1所指内容是常量,可以不初始化
int * const p2=&j //指针p2是常量,所指内容可修改
const int * const p3=&i; //指针p3是常量,所指内容也是常量
p1=j //合法
*p2=100; //合法
4.const与define
const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。
5.在C++中,还可以修饰函数的定义体,定义类的const成员函数。被const修饰的东西受到强制保护,可以预防意外的变动,提高了程序的健壮性。
一道题 下面的输出是什么:
char str1[]="abc";
char str2[]="abc";
const char str3[] = "abc";
const char str4[] = "abc";
char *p1 = "abc";
char *p2 = "abc";
const char *p3 = "abc";
const char *p4 = "abc";
cout << (str1==str2) << endl;
cout << (str3==str4) << endl;
cout << (p1==p2) << endl;
cout << (p3==p4) << endl;
str1 str2 str3 str4都是字符数组, 只是恰巧存放的内容相同 “abc“ 他们的值 就是第一个元素 str[0] 的地址.
p1 p2 p3 p4都是指针,指向相同的常量字符串”abc”的地址。
关于其中const的作用, 是修饰的字符串内容”abc”,是只读的,而不是修饰的变量str,str存放在栈空间。
cout << (str1==str2) << endl;
cout << (str3==str4) << endl;
cout << (p1==p2) << endl;
cout << (p3==p4) << endl;
cout << &str1 << " " << &str2 <<endl;
cout << &str3 << " " << &str4 <<endl;
printf("%d\n","abc");
printf("%d %d\n",&p1[0], &p1[0]);
printf("%d %d\n",&p3[0], &p4[0]);
运行结果:
关键字static
预备知识—程序的内存分配
一个由C/C++编译的程序占用的内存分为以下几个部分
栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量、未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
文字常量区—常量字符串就是放在这里的。程序结束后由系统释放
程序代码区—存放函数体的二进制代码。