【前端面试】前端基础面1
计算机基础部分
1. 网络七层模型
2. tcp、udp 区别,tcp怎么实现可靠传输
4. 死锁
5. http、https
css基础
1. span的padding margin
2. 垂直居中方法(不仅限于flex)
手撕代码
1. 数组reduce和map
2. 解决0.1+0.2不准确的问题
3. 判断单项链表是否有环
参考自《现代操作系统》
死锁
1. 什么是死锁?
有两个进程A、B准备分别将扫描的文档记录到蓝光光盘上。整个操作分别包含两个步骤:①扫描;②刻录。进程A请求使用扫描仪,并被授权使用。而同时进程B请求使用光盘刻录机也被授权使用。然后,进程A会去请求使用光盘刻录机,但在进程B释放光盘刻录机前该请求会被拒绝。于此同时,进程B非但不放弃光盘刻录机还要去请求使用扫描仪。由此,两个进程会被阻塞,并一直处于这样的状态。这种情况就被称为死锁。
死锁不仅可以出现在硬件资源的争夺上,对于数据库系统,计算机应用同样适用。
阻塞的状态之一:使用一个资源所需要的事件顺序有:1)请求资源;2)使用资源;3)释放资源。当一个进程请求资源失败时,会一直处于:请求资源、休
眠、再请求的循环中。
死锁的规范定义:如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁的。
2.资源
这里的资源指进程对设备、文件等进行排他性访问中的这一类排他性使用的对象。
① 可抢占资源和不可抢占资源
-
可抢占资源
- 可以从拥有它的进程中抢占而不会产生任何副作用,如存储器。
- 死锁:对可抢占资源来说,造成的死锁是可以轻易“化解”的。例如,一台计算机有256M内存,两个需要使用256M的进程都想进行打印操作。如果进程A请求打印机并被授权,而进程B却占有了256M内存,此时会发生潜在的死锁危险。但是,由于内存是可抢占资源,故可以把进程B换出内存给进程A,由此将不会产生死锁。
-
不可抢占资源
- 在不引起相关的计算失败的情况下,无法把它从占有它的进程处抢占过来,如光盘刻录机。
- 死锁:死锁往往发生在不可抢占资源中。
②资源获取时发生的死锁
如下图:
- 代码1
- process_A 和 process_B 获取资源1和2的顺序是一样的,当 process_A 使用资源1而未被释放时,process_B 会由于资源被加锁而阻塞直至 process_A 释放资源1(注意:在上述代码中,可以这样理解:process_A 和 process_B 是并行执行的,而两进程内部是顺序执行的)。
- 代码2
- process_A 和 process_B 获取资源1和2的顺序是不同的,有可能出现当 process_A 获取资源1时,process_B 获取了资源2,两个进程都想请求另一个资源而被阻塞,造成死锁。当然也可能 process_A 获取资源1并快速地获取资源2,此时 process_B 只能等待 process_A 释放资源。
3. 资源死锁
大多数情况下,每个进程所等待的事件是释放进程集合中其他进程所占有的资源。这种情况下发生的死锁称为资源死锁。
①资源死锁的条件
发生资源死锁的四个必要条件:
- 互斥条件。每个资源要么已经分配给了一个进程,要么就是可用的。
- 占有和等待条件。已经得到了某个资源的进程可以再请求新的资源。
- 不可抢占条件。已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。
- 环路等待条件。死锁发生时,系统中一定有两个或两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。
由此可知,如果破坏了上述四个条件之一,就可以“解锁”。