面试笔记

一、谈谈进程和线程的区别?
1. 进程:是表示资源分配的基本单位,是程序执行的一个实例。
2. 线程:是进程中执行运算的最小单位,是进程的组成部分,单个进程中执行中每个任务就是一个线程。
3. 多线程:一个进程中在同一 时刻执行多个任务。
不同点:
1. 一个线程只能属于一个进程,但是一个进程可以拥有多个线程。
2. 线程是一个轻量级的进程,与进程相比,线程的代价或开销较小。
3. 进程拥有的所有资源都属于线程,所有的线程都共享进程的内存和资源。
二、进程间的几种通信方式和线程间的几种通信方式?
1.几种进程间的通信方式:
(1)管道
(2)命名管道(FIFO)
(3)信号量
(4)消息队列
(5)信号
(6)共享内存
(7)套接字
2.几种线程间的通信方式:
(1)锁机制:互斥锁、读写锁和条件变量。
(2)信号量机制
(3)信号机制
线程间通信的主要目的是用于线程同步!
三、进程三(五)态转换图?
进程的状态:运行态、就绪态和阻塞态。新加两个新建态和终止态。

面试笔记
面试笔记

四、死锁的概念?原因?以及处理方法?
1.死锁是指多个进程在运行过程中,因为争夺资源而造成的一种僵局,如果没有外力推进,处于僵局中的进程就无法继续执行。
2.原因:(1)进程推进顺序不当(2)P或V操作使用不妥(3)同类资源分配不均或对某些资源的使用未加限制。
3.导致死锁的四个必要条件:
(1)互斥条件:一个资源只能被一个进程/线程使用
(2)占有和等待条件:一个进程/线程因请求资源而阻塞时,对获得的资源不释放
(3)不剥夺条件:此进程/线程获得的资源,在未使用完之前,不可强行剥夺
(4)循环等待条件:多个进程/线程之间形成一种头尾相连的循环等待资源关系
只要系统发生死锁,则以上四个条件至少有一个成立。
4.处理死锁的几个方式:
(1)预防死锁:可以通过破坏死锁产生的4个必要条件来预防死锁,由于资源互斥是资源使用烦人固有特性,是无法改变的。
(2)避免死锁:是在系统运行过程中注意避免死锁的最终发生。(银行家算法)
(3)检测死锁:
(4)解除死锁:
五、TCP\UDP的区别?
1.是否连接:
TCP面向连接(如打电话要先拨号建立连接),连接需要三次握手,断开连接需要四次挥手;UDP面向无连接,发送数据之前不需要建立连接。
2. 可靠性:
TCP提供可靠性;UDP不提供可靠性。
3.TCP提供字节流服务,没有任何记录边界;UDP是面向报文的,提供报文边界。
4.流量控制:
TCP有流量控制,接收方可以通过窗口大小来进行流量控制;UDP没有流量控制,发送方可以轻易淹没接收端。
5.TCP只能一对一,UDP支持一对一、一对多、多对一、多对多
6.TCP传输效率低、UDP传输效率高。
六、TCP的三次握手和四次挥手?
1.三次握手的目的就是建立可靠的通信信道:
第一次握手:建立连接时,客户端发送SYN包(SYN =x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到SYN包,必须确认客户端的SYN(ACK=x+1),同时自己也发送一个SYN包(SYN=y),即SYN+ACK包,此时服务器进入SYN_RCVD状态;
第三次握手:客户端收到服务端的SYN+ACK包,向服务器发送确认包ACK(ACK=y+1),此包发送完毕,客户端和服务端进入ESTABLISHED状态,完成三次握手。
面试笔记
其中,SYN_SENT状态表示客户端已经发送了SYN报文,SYN_RCVD状态表示服务端已经接收到了SYN报文。
为什么要三次握手?
为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手
三次握手过程的状态变迁:
CLOSED——LISTEN——SYN_SENT——SYN_RCVD——ESTABLISHED
2.四次挥手:

第一次挥手:客户端发送FIN(seq+2)包到服务端,并进入FIN_WAIT_1状态,请求关闭连接。
第二次挥手:服务器收到这个FIN,发回一个ACK,同时关闭Receive通道,客户端收到对自己的FIN确认后,关闭Send通道。
第三次挥手:服务端关闭连接,给客户端发送FIN、
面试笔记
为什么要四次挥手?
前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。
四次挥手过程的状态变迁:
FIN_WAIT_1——CLOSE_WAIT——FIN_WAIT_2——LAST_ACK——CLOSING——TIME_WAIT
七、事务的特性及4种隔离级别?
1.特性:ACID
(1)原子性:事务包含的所有操作要么全成功执行,要么全失败回滚。
(2)一致性:一个事务执行前和执行后都必须处于一致性状态。
(3)隔离性:多个并发事务相互隔离。
(4)持久性:一个事务一旦提交,那么数据库中的数据的改变就是永久性的。
2.隔离级别
(1)Read uncommitted(未提交读): 一个事务可以读取另一个未提交事务的数据。——脏读
(2)Read committed(已提交读):一个事务要等到另一个事务提交后才能读取数据。——不可重复读
(3)Repeatable read(可重复读):开始读数据时,数据不再允许修改。——幻读
(4)Serializable(序列化):最高事务隔离级别,在该级别下,事务可串行化顺序执行、可避免脏读、不可重复读与幻读。
大多数数据库默认的事务隔离级别是Read committed,比如Sql Server , Oracle。Mysql的默认隔离级别是Repeatable read。
八、你知道的存储引擎有哪些?区别是什么?
1.MyISAM和InnoDB
2.区别?
(1)MyISAM不支持事务处理、不具有原子性;
不支持外键;
支持全文搜索;
DELETE 表时,先drop表,然后重建表
不保存表的具体行数,扫描表来计算有多少行;
对表进行加锁;
表格可以被压缩;
MyISAM 表被存放在三个文件;
InnoDB中必须包含AUTO_INCREMENT类型字段的索引;
MyISAM锁的粒度是表级;
(2)InnoDB支持事务处理;
支持外键;
不支持全文类型的索引;
Delete表时,是一行一行的删除;
保存表的具体行数,不带where时,直接返回保存的行数;
表格很难被压缩;
InnoDB 把数据和索引存放在表空间里面;
InnoDB中必须包含AUTO_INCREMENT类型字段的索引;
InnoDB支持行级锁定;
九、get和post的区别?
1.get用于获取数据;post用于将数据发给服务器;
2.post的安全性比get的高;