Linux C/C++面试问题总结整理

因为一些原因重新找工作了,面的Linux C/C++,这里把面试中经常碰到的问题总结一下。

单元测试

在深信服被问了单元测试,集成测试是什么的问题,一时没想出明确的答案,只给了大概意思 汗-_-||。

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]);


运行结果:

Linux C/C++面试问题总结整理

关键字static

预备知识—程序的内存分配
一个由C/C++编译的程序占用的内存分为以下几个部分

栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量、未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
文字常量区—常量字符串就是放在这里的。程序结束后由系统释放
程序代码区—存放函数体的二进制代码。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ac36cdc857c73d3ee846b15327a57767.html