C++面试知识点汇总
- C++面试知识点汇总
-
- 1.C/C++内存有哪几种类型
- 2.堆内存、栈内存的对比:
- 3.堆和自由存储区的区别
- 4.程序编译的过程
- 5.什么是内存泄漏?面对内存泄漏和指针越界,你有哪些方法?你通常采用哪些方法来避免和减少这类错误?
- 6.哈希表的构造方法及解决冲突的方法
- 7.const 有什么用途?
- 8.在C中用const能定义真正意义上的常量吗?C++中的const呢?
- 9.什么时候生成默认构造函数(无参构造函数)?什么时候生成默认拷贝构造函数?什么是深拷贝?什么是浅拷贝?默认拷贝构造函数是哪些拷贝?什么时候用深拷贝?
- 10.C++中的类与C语言中struct的区别?
- 11.程序什么时候使用线程?什么时候单线程效率高?
- 12.const 与define的区别:
- 13.指针和引用的区别
- 14.指针与数组的区别
- 15.函数指针与指针函数
- 16.请你谈谈map和set的区别,以及他们是怎么实现的?
- 17.理解list和vector的区别?
- 18.static 关键字的作用?
- 19.请你简要说明C++和C的区别?
- 20.派生类和基类中有同名的函数,基类指针指向子类对象时,调用的函数是谁的?
- 21.STL是什么?STL容器有几种?
- 22.malloc的原理?
- 23.new 和 malloc的区别?
C++面试知识点汇总
本博文是本文历时3个月,收集各种资料,汇总的C++面试题,欢迎各位博友评价。
1.C/C++内存有哪几种类型
C中内存分为5个区:堆(malloc),栈(如:局部变量,函数参数),程序代码区(存放二进制代码),全局/静态存储区(全局变量,static变量)和常量存储区(常量)。
全局变量/static变量会初始化为零,而堆和栈上的变量是随机的,不确定的。
- 堆:用于程序内存动态分配,用C/C++中的new/malloc分配,delete/free释放,堆是C/C++函数库提供的;
- 栈:在程序运行中,局部作用域出现的一些局部变量可以在栈上创建,等脱离该作用域创建的内存被释放;
- 全局/静态存储区:这块内存在程序编译期间已经分配好,在程序整个运行阶段一直存在;
- 常量存储区:特殊的一块内存,里面存放的常量,不允许修改。
2.堆内存、栈内存的对比:
- 栈内存 存储的是局部变量,而堆内存存储的是实体;
- 栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;
- 栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。
3.堆和自由存储区的区别
总得来说,堆是C语言和操作系统的术语,是操作系统维护的一块动态分配的内存;自由存储是C++中通过new与delete动态分配和释放的抽象概念,他们并不完全一样。
直接的说:堆用来存放动态分配的对象,通过malloc创建,free释放;而自由存储区是C++中通过new和delete动态分配和释放对象的抽象概念。
通过new来申请的内存区域可称为自由存储区。
4.程序编译的过程
1)预处理:对所有的define进行宏替换,处理所有的条件编译#idef等; 处理#include指令;删除注释等。
2)编译:将预处理后的文件进行词法分析,语法分析,语义分析以及优化相应的汇编文件。
3)优化
4)汇编:将汇编文件转化与机器能执行的文件
5)链接:包括地址和空间分配,符号决议和重定位。
5.什么是内存泄漏?面对内存泄漏和指针越界,你有哪些方法?你通常采用哪些方法来避免和减少这类错误?
用动态存储分配函数动态开辟的空间,使用完毕后未释放,结果导致一直占据该内存单元,即为内存泄露。
采用以下方法:
1)使用的时候要记得指针的长度;
2)malloc的时候得确定在哪里free;
3)对指针赋值的时候应该注意被赋值指针需要不需要释放;
4)动态分配内存的指针最好不要再次赋值;
5)在C++中应该优先考虑使用智能指针。
6.哈希表的构造方法及解决冲突的方法
构造方法:
1)数字分析法;
2)平方取中法;
3)分段叠加法;
4)除留余数法 ;
5)随机数法;
处理冲突的方法:
1)开放地址法;
2)再哈希法;
3)拉链法;
4)建立公共溢出区;
7.const 有什么用途?
1)定义只读变量,或者常量;
2)修饰函数的参数和函数的返回

最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



