华为软开实习 他人面经总结

1.指针引用区别?

1、指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。

2、引用在定义的时候必须进行初始化,并且不能够改变。指针在定义的时候不一定要初始化,并且指向的空间可变。(注:不能有引用的值不能为NULL

3、有多级指针,但是没有多级引用,只能有一级引用。

4、指针和引用的自增运算结果不一样。(指针是指向下一个空间,引用时引用的变量值加1

5sizeof 引用得到的是所指向的变量(对象)的大小,而sizeof 指针得到的是指针本身的大小。

6、引用访问一个变量是直接访问,而指针访问一个变量是间接访问。

 

2.程序异常如何处理?

       Try throw catch

 

3.set map怎么用?

map mapStudent;

mapStudent.erase(4);//通过key删除

string s = mapStudent[1];//通过下标取值

map::iterator key = mapStudent.find(3);//查找是否有key

if(key!=mapStudent.end())//表示找到这个值

    cout<second<

4.sizeof 与 strlen?

1. strlen()的一种实现就是遍历字符串,遇到'\0'就终止,因而返回的结果是第一个'\0'前字符元素的个数

 

2. sizeof 常用来求变量占用内存空间的大小,因而它返回的是存储字符串的变量所占用的内存空间大小,用来求字符串的长度,只在特定情况下可行,即字符数组刚好被一个字符串占满
 

5.TCP 与 UDP区别?

 

6. 进程与线程的区别?

进程是资源分配的最小单位,线程是程序执行的最小单位。

一个程序至少一个进程,一个进程至少一个线程。

7. C++中全局变量和局部变量在内存分配上有何不同?

1、栈区(stack— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、全局区(静态区)(static—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域(.data),未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(.bss)。 - 程序结束后由系统释放。

4、文字常量区 —常量字符串就是放在这里的(.rodata)。 程序结束后由系统释放。

5、程序代码区—存放函数体的二进制代码(.text)。

8. 为什么一般不在函数中开比较大的数组?

在函数里面不适合定义很大的临时数组变量。应该使用堆动态分配。栈大小有限,太大就报错了,所以要放到堆里,可以定义全局变量或动态分配。

9. 单例模式

class CSingleton

{

private:

    CSingleton()

    {

    }

    static CSingleton *p;

public:

    static CSingleton* getInstance()

    {

        if(p == NULL)

            p = new CSingleton();

        return p;

    }

};

CSingleton* CSingleton::p = NULL;

 

你可能感兴趣的:(面经)