1.关键字static
静态变量,改变作用域为整个程序。
2.STL vector与map有啥区别,分别应用于什么场景
vector是动态树组,map是类似字典结构,key,value结构
map底层实现
map底层是红黑树
3.STL sort()底层实现
对于STL中的sort()算法:
当数据量大时,将会采用Quick Sort(快排),分段递归进行排序。
一旦分段后的数据量小于某个阈值,为了避免快排的递归带来过大的额外的开销,sort()算法就自动改为Insertion Sort(插入排序)。
如果递归的层次过深,还会改用Heap Sort(堆排序)。
简单来说,sort并非只是普通的快速排序,除了对普通的快排进行优化,它还结合了插入排序和堆排序。
根据不同的数量级以及不同的情况,能够自动选择合适的排序算法。
4.快排有啥问题
可能会退化成O(N^2)
5.new 和 malloc有啥区别
new是运算符,可以重载,malloc是函数
库函数与系统调用区别
库函数是语言标准提供的API函数,系统调用是操作系统提供的API函数
库函数主要运行在用户态,系统调用运行在内核态,库函数也可能调用系统调用。
read() 和 fread()区别(没答上来,回来看其实就是上面那个问题…fread()是C的,忘了)
read 是Linux C系统调用,fread是标准库的库函数,后者带缓冲区。
map中所有操作的复杂度
log(N)
如何解决Hash表碰撞问题
开链法或线性探查,平方探查,在Hash等
TCP释放过程
四次挥手
TCP拥塞控制
总共四种:慢开始,拥塞避免,快重传,快恢复
是否用过多进程,多线程,讲讲区别
进程是系统资源分配的基本单位,线程是系统调度的基本单位。
讲到IPC中问我经常用什么方式
进程间通信的方式
讲讲PIPE与共享内存的优缺点
匿名管道:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。
特点:
1、共享内存没有提供任何的保护机制
2、是临界资源
3、没有同步互斥机制
4、生命周期随内核(同消息队列)
项目中的难点
看过什么开源代码
多线程和多进程网络编程优缺点
多线程轻量,并发数量较多,但一个线程出问题会影响其他线程。
多进程开销大,并发数量较少,一个进程出问题不会影响另一个进程。