PART1
1.乐观锁和悲观锁的区别是什么?
2.乐观锁和悲观锁的实现方式分别有哪些?
3.平均周转时间如何计算?
4.银行家算法是什么?
5.IO多路复用是什么?
6.HTTP的头部包含哪些内容?
7.TCP如何保持连接?
8.如何让UDP协议变得可靠?
9.多进程和多线程之间的区别?
10. HTTP中get和post的区别
PART2
1.乐观锁和悲观锁的区别是什么?
乐观锁认为每次访问共享数据时,其他线程不会修改该共享数据,所以不加锁,只在更新该共享数据时,检查该共享数据在此期间是否被修改。适用于写较少的情况。
悲观锁认为每次访问共享数据时,其他线程会修改共享数据,所以加锁 ,独占共享数据,直到使用完毕才释放锁。适用于写较多的情况。
2.乐观锁和悲观锁的实现方式分别有哪些?
乐观锁:
CAS算法:保留最初访问时共享数据的值,更新前,核对该数据是否与内存中数据相等,若相等,则修改。若不相等,则不修改。比较和替换是一个原子操作。这是一个自旋操作,即不停地重试。
版本号机制:更新数据前,核对版本号,版本号代表数据更新次数,若最初读取数据时的版本号和提交更新时的版本号一致,则修改数据,且版本号加一。否则,不修改。
悲观锁:
java中synchronized关键字,每次只允许一个线程访问synchronized修饰的函数或代码块,其他线程被阻塞。
数据库SQL语句后加for update,锁定该条数据,使得其他用户无法进行增删查改。
3.平均周转时间如何计算?
周转时间 = 作业完成时间 - 作业到达时间
平均周转时间 = 所有作业周转时间/作业数量
4.银行家算法是什么?
当一个进程申请资源时,先试探性地分配给它,然后通过安全性算法判断分配后的系统是否处于安全状态。若不处于,则不分配给该进程,该进程继续等待。
安全性算法:给申请资源的进程分配资源后,查看剩余可用的资源能否使某个进程执行完毕。若没有进程可以执行完毕,那么系统处于不安全状态。若有进程可以执行完毕,则收回该进程的资源,继续判断是否有进程可以执行完毕,直到所有进程都执行完毕,按照进程执行完毕的顺序,可以得到一个安全序列,使得系统处于安全状态,避免死锁。
5.IO多路复用是什么?
IO多路复用是一种同步的I/O模型,允许单个线程处理多个IO请求。通过一次系统调用,检查多个文件描述符。若有文件描述符就绪,就返回该文件描述符,否则阻塞调用进程,直到某个文件描述符就绪或者阻塞时长超出阈值。
6.HTTP的首部包含哪些内容?
HTTP的首部包含了请求行和报文头。
请求行中包括请求方法、URL和HTTP协议和版本。
报文头中包含多个字段(字段名:字段值)
例如Accept指定了可以接收的数据类型
Referer表明了该请求的来源是哪个网页(点击了Referer指明的这个网址来发起的请求)
详细见图:
7.TCP如何保持连接?
有两种方法:
1)在客户端和服务器端设置一个超时时间,在超时时间内如果没有发送数据,就发送一个心跳包来保持连接,同时也可也侦测连接是否异常断开。
2)设置TCP的 keep alive属性,设置方法心跳包的事件间隔。这样TCP会在底层定时发送心跳包,服务器端收到心跳包直接丢弃,这样就保持了长连接。
8.如何让UDP协议变得可靠?
UDP协议没有流控制,没有应答确认机制,不能解决丢包,重发,乱序等问题。
为了实现UDP协议的可靠性,我们可以从以下几点考虑:
1)重传机制:丢包需要进行重传,使用ACK或者NACK来进行应答确认。
2)重排机制:收到乱序数据,使用一个缓冲区来进行数据重拍
3)超时机制:长时间未收到对方回复,需要进行重试。
9.多进程和多线程之间的区别?
多进程 | 多线程 | |
数据共享、同步 | 数据共享复制,需要进行进程间通信。数据分开存储,每个进程有自己独立的地址空间,同步简单。 | 多个线程共享了进程的数据,共享简单,同步复杂。 |
内存、CPU | 占用内存多,进程间切换开销大,CPU利用率低 | 占用内存少,切换简单,CPU利用率高 |
创建销毁 | 创建销毁的开销大,速度慢 | 创建销毁的开销小,速度块 |
可靠性 | 进程间不会互相影响 | 一个线程奔溃,会影响其他线程 |
编程调试 | 编程调试简单 | 编程调试复杂 |
分布式 | 适合多核、多机分布式 | 适合多核分布式 |
优先使用线程:
- 频繁创建销毁
- 大量计算
- 强相关的任务
10. HTTP中get和post的区别
get | post |
请求参数直接附在URL的后面,用户可以在浏览器地址栏看见 | 请求参数放在请求体中 |
数据容量有限,因为请求参数是附在URL之后的 | 请求体中的数据容量没有限制 |
浏览器会主动缓存get请求 | 浏览器不会主动缓存post请求 |
只会发送一个TCP包 | 会发送两个TCP包,先发送报文头,收到服务器的响应后,再发送报文体 |
进行回退和刷新不会产生任何影响 | 进行回退和刷新会重新提交请求 |
可以收藏书签 | 不可以收藏书签 |