2.C++面试问题汇总

2020-08-06  本文已影响0人  guanghaolv

最近准备秋招,需要好好复习C++语言了,准备看着别人面经里的问题复习,索性就记录下来,一是加深印象,另一个也可以供所有人参考。

1.指针和引用的区别

1.内存
2.初始化
3.指向
4.++操作
5.sizeof()
6.层级

2.堆和栈的区别

1.管理方式
2.空间大小
3.分配方式
4.分配效率
5.生长方向
6.内存碎片

3.new和delete是如何实现的,new 与 malloc的异同处

1.new的实现

string* p=new string("hello");

new的实现

//1.分配内存
void* mem=operate new( sizeof(string) );
//2.转型
p=static_cast<string*>(mem);
//3.构造函数
p->string::string("hello");

2.delete的实现

delete p;

delete的实现

//1.析构函数
p->string::~string();
//2.释放内存
operate delete(p);

3.new 与 malloc的异同处

1.属性
2.参数
3.返回类型
4.分配失败
5.自定义类型
6.重载
7.内存区域

4.C和C++的区别

感觉这个没有一个标准的答案,感觉区别很大很多,又很细,所以此除只罗列几个吧

1.面向过程OR面向对象
2.关键字不同
3.函数重载

5.C++、Java的联系与区别,包括语言特性、垃圾回收、应用场景等(java的垃圾回收机制)

联系:两者均为面向对象编程语言,都具有面向对象的特性,但是C++是对C的扩充,多少影响了面向对象,而Java比较彻底。
区别:

1.指针
2.多重继承
3.数据类型及类
4.自动内存管理
5.操作符重载
6.预处理功能
7.字符串
8.goto语句
9.类型转换

6.struct和class的区别

1.默认继承和默认访问权限
2.模板

7.define 和const的区别(编译阶段、安全性、内存占用等)

1.编译器处理方式
2.类型检查
3.内存空间
4.其他

8.在C++中const和static的用法(定义,用途)

9.const和static在类中使用的注意事项(定义、初始化和使用)

10.C++中的const类成员函数(用法和意义)

11.计算下面几个类的大小:

class A {}; //sizeof(A) = 1;
class A { virtual Fun(){} }; //sizeof(A) = 4(32位机器)/8(64位机器);
class A { static int a; }; //sizeof(A) = 1;
class A { int a; }; //sizeof(A) = 4;
class A { static int a; int b; }; //sizeof(A) = 4;

12.给一个代码,求输出结果

class A
{
public:
A(int x){}
}

问:A a = 1;是否正确, 如果正确, 那么它调用了哪些函数?
这类题目更常见的是在基类和子类有不同实现方法。(虚函数相关,栗子很多,不多说了)

13.C++的STL介绍(这个系列也很重要,建议侯捷老师的这方面的书籍与视频),其中包括内存管理allocator,函数,实现机理,多线程实现等

14.STL源码中的hash表的实现

15.STL中unordered_map和map的区别

16.STL中vector的实现

17.vector使用的注意点及其原因,频繁对vector调用push_back()对性能的影响和原因。

18.C++中的重载和重写的区别:

19.C ++内存管理(热门问题)

20.介绍面向对象的三大特性,并且举例说明每一个。

21.多态的实现(和下个问题一起回答)

22.C++虚函数相关(虚函数表,虚函数指针),虚函数的实现原理(热门,重要)

23.实现编译器处理虚函数表应该如何处理

24.析构函数一般写成虚函数的原因

25.构造函数为什么一般不定义为虚函数

26.构造函数或者析构函数中调用虚函数会怎样

27.纯虚函数

28.静态绑定和动态绑定的介绍

29.引用是否能实现动态绑定,为什么引用可以实现

30. 深拷贝和浅拷贝的区别(举例说明深拷贝的安全性)

31.对象复用的了解,零拷贝的了解

32.介绍C++所有的构造函数

33.什么情况下会调用拷贝构造函数(三种情况)

34.结构体内存对齐方式和为什么要进行内存对齐?

35.内存泄露的定义,如何检测与避免?

36.手写实现智能指针类(34-37我没遇见过)

37.调试程序的方法

38.遇到coredump要怎么调试

39.内存检查工具的了解

40.模板的用法与适用场景

41.成员初始化列表的概念,为什么用成员初始化列表会快一些(性能优势)?

42.用过C11吗,知道C11新特性吗?(有面试官建议熟悉C11)

43.C++的调用惯例(简单一点C++函数调用的压栈过程)

44.C++的四种强制转换

参考资料

1.守望者1208
2.浅谈new/delete和malloc/free的用法和区别

上一篇 下一篇

猜你喜欢

热点阅读