C/C++八股

1.关键字

static

const

#define

union

typedef

volatile


面试问题

1.static关键字是什么意思

2.static变量的作用域

2.内存管理

类的内存对齐

如何计算C++的类或者结构体的所占的内存大小到底是多少?

除了要考虑成员变量、虚函数指针以外,还要考虑内存对齐:为了保证成员变量对齐、提高访问速度,C++在为类分配内存时,编译器可能会在成员之间插入填充字节

1
2
3
4
5
class MyClass {
public:
int age; // 4
bool number; // 1
};
  • 虽然这个类的成员变量单独来看一共只有5字节,但由于内存对其,该类占8个字节

类的内存分布

一个类的内存包含2部分:

  • 成员变量
  • 虚函数指针(如果有虚函数的话),占4字节(32位)或8字节(64位)

当有虚函数的时候,类的内存对齐会将每个成员变量填充至8字节

位图


面试问题

1.类实例的内存大小有哪些影响原因

2.成员对象的顺序会对实例的内存有影响吗

3.成员函数的大小会对实例的内存有影响吗

4.虚函数和static函数对实例的内存有影响吗

5.栈内是保存什么的?malloc出来的地址在栈还是堆?

6.全局变量和静态变量保存在哪里

3.智能指针


面试问题

1.用过智能指针吗?一般用在什么地方?

2.用智能指针时需要注意什么?

4.STL


面试问题

1.对STL有了解吗?用过哪些

2.vector和list有哪些区别

3.list是单链表还是双链表

4.用过STL的函数吗?std::sort是哪个排序

5.vector和list的sort是一样的吗

6.map和set都是有序的吗

7.unordered-map和map的底层实现是什么

8.STL是不是线程安全的?

5.面向对象

面试问题

1.C++的多态是怎么实现的

2.如果用C语言实现C++多态要怎么实现

3.如果用C语言实现C++的权限要怎么实现

6.指针

面试问题

1.指针函数和函数指针有什么区别

2.什么情况下会用到函数指针

3.当struct数组的指针+1时,实际增加了多少字节

4.如何使用指针去操作内存?

5.使用指针如何避免越界访问?

7.C++11杂项

面试问题

1.右值引用是什么

2.std::async()的原理知道吗?是用什么实现的?(协程)知道异步执行的原理吗

8.数据结构

面试问题

1.哈希表的实现原理?

2.平衡二叉树的实现原理?