设为首页 加入收藏

TOP

Linux C/C++面试问题总结整理(一)
2018-06-09 10:07:54 】 浏览:916
Tags: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)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量、未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
文字常量区—常量字符串就是放在这里的。程序结束后由系统释放
程序代码区—存放函数体的二进制代码。


一个正常的程序在内存中通常分为程序段、数据端、堆栈三部分。程序段里放着程序的机器码、只读数据,这个段通常是只读,对它的写操作是非法的。数据段放的是程序中的静态数据。动态数据则通过堆栈来存放。


在内存中,它们的位置如下:
+——————+ 内存低端
| 程序段 |
|——————|
| 数据段 |
|——————|
| 堆栈 |
+——————+ 内存高端


修饰全局变

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java保留两位小数和js保留两位小.. 下一篇层级目录结构的Makefile递归编译..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目