面试经验总结记录
操作系统
1、高并发的本质是什么
充分利用多核CPU,解决IO速度和CPU速度的冲突 ,当碰到IO或者其他情况的阻塞的时候,如果是单线程会导致整个程序阻塞,但多线程可以有其他线程继续利用CPU资源继续工作
2、进程池,线程池,连接池(更偏向于JAVA的问题)
线程池创建的时候需要定义
- 核心线程数大小(正常工作使用的线程数)
- 最大线程数(当核心不能满足需求时,扩容能够扩展的最大线程)
- 线程存活时间(超出核心线程数的线程维持时间)
- 任务队列(用于存放等待的任务)
- 拒绝策略(当队列已满,线程数达到最大还有新的任务进来)
3、线程池的扩充和删除
当任务队列已满,线程达到最大时,可以采用扩容策略进行扩容,动态增加核心线程数和最大线程数以满足任务数量的需求
线程池预热,线程池创建完成后,池里是没有线程的,所以需要预热
怎么让线程池的线程阻塞(suspend阻塞,resume唤醒)
4、线程同步的方式
- 互斥量(只有一个线程能够访问)
- 信号量(n个线程能够访问)
- 条件变量
- 锁
5、进程通信方式
- 管道(匿名管道,父子进程单向流通,命名管道利用文件系统)
- 系统IPC(消息队列,信号量,共享内存)
- socket
- 信号
6、进程的同步互斥方式
信号量,消息队列,管程(通过只能在管程内部使用的条件变量来提供同步)
7、线程安全
通过加锁对临界区进行保护
8、锁的类型
互斥锁(只允许一个线程访问)
条件锁(条件变量,满足条件则唤醒)
自旋锁(忙等,不释放资源直到条件满足)
原子锁(原子操作,锁内不会被中断)
读写锁(读可重入,写会阻塞)
悲观锁(每次写入数据都假设其他线程会更改数据,因此需要加锁)
悲观锁又包括共享锁(也叫读锁,可以读,不能写)
也包括排它锁(也叫写锁,其他事务无法进入)
乐观锁(直到数据提交才加锁)
公平锁(多个线程通过申请的顺序进入队列排队,排第一位的能够获得锁)缺点:吞吐量低,其余线程都阻塞。
非公平锁(直接获取锁,获取不到才进行排队&#