【C++面试】知识集
·
1、设计模式
1.1、生产者消费者模式(目的解耦)
2、性能优化
2.1、运算优化
- ++i > i++
- 乘法优于乘方:a * a > pow(a,2)
- 位移优于乘除:a = a << 4 > a *= 4、a = a >> 4 > a /= 4
- 乘法优于触法: a = i / (j * k) > a = i / j / k
gcc 加参数能自动完成这个事
2.2、代码逻辑优化
3、STL数据结构的应用场景
按一队数据变动结果的可预测性从高到低(从计算机内部到现实世界):
- queue
特点是先进先出——队尾进队首出(FIFO)。适合严格FIFO场景,比如任务调度,消息传递 - vector
特点是连续内存空间。适合只有首尾插入删除,支持频繁随机的场景,比如日志 - set
特点是基于红黑树。适用场景是需要维护一组唯一且有序的数据,比如排名数据 - map
特点是基于红黑树。适用于需要键值对唯一且有序存储场景,适合频繁查找插入删除,比如身份信息 - deque
特点是双向链式数组,结合了链表和数组的特点,既能在首尾较快的插入删除又能较快的随机访问,比如排队购票 - list
特点是双向链表。适合频繁任意位置插入删除场景,但不会去随机访问的场景,比如公交车乘客
4、四种类型转换
- static_cast,相近数据类型之间的转换,编译时进行类型检查转换
- dynamic_cast,子父类类型之间的类型转换,父类转换到子类时,父类指针实际指向的对象类型必须是子类类型且父类必须存在虚函数且,便于进行运行时类型识别。如果转换无效,dynamic_cast 会返回 nullptr(对于指针)或抛出 std::bad_cast 异常(对于引用)
- reinterpret_cast,不相同的类型之前的强制转换,重新解释数据
- const_cast,删除变量的const属性
5、多态
多态是指运行时多态,运行时可以动态绑定调用函数,父类指针可以指向子类对象,方法是通过虚函数。
有纯虚函数的类所抽象类,无法实例化,且派生类必须定义自己的实现方法
6、C++11新特性
- auto自动类型推导,auto 只能用于类的静态成员
- decltype自动类型推导,可用于动态成员,如函数
linux
-
进程和线程的区别
-
自旋锁
在申请不到锁时不会阻塞,而是会持续循环检查直到可用
更多推荐


所有评论(0)