金山云笔试:
1.两个进程争夺同一个资源会发生死锁吗?(死锁发生的四个必要条件)
(1)互斥条件:一个资源每次只能别一个进程使用。
(2)请求和保持条件:一个进程因为请求资源而阻塞时,对持有资源保持不放。
(3)不剥夺条件:在进程没有执行完成的情况下,持有资源不会被剥夺。
(4)循环等待条件:若个进程之间因为等待资源而形成一种循环关系。
在其他情况不明确的情况下,无法判断两个进程是否仅需要这一个资源就能完成,如果需要其他的资源,而资源被另外一个进程所持有,就有可能发生死锁。
2.关于寄存器和高速缓存?
寄存器是中央处理器(cpu)的的组成部分,是有限存储容量的高速存储部件,可以暂存指令,数据和地址(指令寄存器(IR),程序计数器(pc),累加器(ACC))。
Cache,位于CPU和主内存之间容量小但速度很快的存储器,是为了弥补CPU与内存之间的运算差距而设置的部件。
3.实现原子加操作
锁总线,
恩~~,果然不是很明白,难受。。。
4.信号量,互斥体,自旋锁。
信号量,相当于一个计数器,每当一个进程使用一个资源,信号量-1;进程释放一个资源,信号量+1;当信号量为0时,进程无法使用该资源。
互斥体,在任何线程进入临界区之前都先获得临界区的互斥体,其他进程没有获得互斥体便不能执行。
自旋锁,跟互斥锁挺像,但是未获得执行权的进行不阻塞,而是循环请求,适应于持有锁时间短的进程。
5.TCP中服务端和客户端的执行完操作后的各种状态。
(1)三次握手时:
客户端:closed->syn-send->establised
服务端:listened->syn-rcvd->establised
(2)四次挥手时:
客户端:fin-wait-1->fin-wait-2->time-wait->close
服务端:close-wait->last-ack->close
6.事务的隔离机制。
(1)readunCommited 事务修改数据加了X锁,结束后释放。解决了更新丢失。
(2)readCommited 在(1)的基础上,每次事务读数据时+S锁,读完(不是事务结束)释放。解决了脏读。
(3)repeatableRead 在(1)的基础上,每次事务读数据时+S锁,事务结束后释放。解决了不可重复度。
(4)serializable 事务串行执行。。。。
7.会引起全表查询的情况。
(1)模糊查询:右模糊查询,全模糊查询一定会产生全表扫描。
(2)查询条件中含有 is null的select语句
(3)其余我真的不知道去哪查了。。。知道的可以回复我啊。