C++面试问题2

gdb

1.启动
(编译)gcc -g test.c -o test
(启动)gdb test 或 gdb -q test
2.查看源码
(gdb)list
3.运行
(gdb)r
4.设置断点
(gdb)b +行号
5.单步执行
r n s c
run next step continue
6.查看变量
print
whatis
7.退出
q

多线程

1.临界区
串行化访问公共资源或一串代码,速度快
2.互斥对象机制
采用后,确保公共资源不会被多个线程同时进行访问
3.信号量
为控制有限数量的用户资源而设计,一般要限制某一时刻访问此资源的最大线程数目。
列表和数组,查找命令,gcc编译,函数带星号和不带的区别
4.事件(信号)
通过通知操作保持多线程同步,实现多线程优先级的比较

互斥锁和读写锁

互斥锁:在任何时刻都只能有一个线程访问该对象。获取锁失败————》睡眠————》等待唤醒。
读写锁:读操作,可多个线程同时进行读操作(同一时刻只有一个线程),此时获取写锁失败的进程会进入睡眠状态;
写操作优于读操作,写锁会阻塞其他读锁

Linux的四种锁机制:

互斥、读写、自旋(获取锁失败,自旋、不睡眠、直到被释放)、RCU(read-copy-updata,对副本操作,再更新)

STL(模板库)

_分配器_给_容器_分配存储空间,_算法_通过_迭代器_获取容器中的内容,_仿函数_协助算法完成各种操作,_配接器_用来套接适配仿函数。

vector和list的区别

vector:
1.连续存储、动态数组、堆上分配空间
2.未超过容量,直接添加
超过容量,重新配置原来两倍的空间,原空间元素通过复制初始化新空间,再增加元素(新空间中),析构并释放原空间。之前的迭代器失效。
3.使用随机访问,不经常对非尾结点进行插入删除
4.底层:数组
list:
1.动态链表,堆上分配空间,没插入或释放都重新分配空间
2.底层:双向链表
3.不适用随机访问,只能快速访问头尾结点,适用于经常插入删除大量数据。

posted @ 2021-06-02 20:19  蛙星人在地球  阅读(28)  评论(0)    收藏  举报