1.什么是死锁,如何避免死锁?
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象。
产生死锁的原因:(1)系统资源不足(2)进程运行推进的顺序不合适(3)资源分配不当
避免方法:对资源分配要给予合理规划
2.进程和线程的概念
进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单元
线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
一个程序至少有一个进程,一个进程至少一个线程
补充:
进程实际上表示的就是计算机正在进行的一个任务,比如,打开一个浏览器便是启动一个浏览器进程,打开一个记事本便是启动一个记事本进程。但是,一个进程未必只能进行一件事情,比如一个Word进程,在打字的同时还会有拼写检查,这些在进程内部同时进行多个”子任务“,就称为线程。
进程和线程的主要差别在于他们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
3.TCP,UDP的区别
(1)TCP是面向连接的(如打电话先拨号建立连接),应用代表如邮件传输;UDP是无连接的,即发送数据之前不需要建立连接(如实时通信)
(2)TCP提供可靠的服务,也就是说,通过TCP连接传送的数据无差错,不丢失,不重复;UDP尽最大努力交付,即不保证可靠支付
(3)TCP面向字节流;UDP是面向报文的
(4)TCP首部开销大,UDP首部开销小
(5)UDP传输数据更快
(6)TCP保证数据正确性及顺序;UDP可能会丢包,不保证顺序
4.Get和Post方法区别
(1)Get方法是从指定资源请求数据,请求参数在URL中;Post方法是向指定资源提交要被处理的数据,请求参数封装在HTTP请求数据中
(2)Get方法保留在浏览器历史记录中,Post不会保留在浏览器历史记录中
(3)Get请求有长度限制,Post请求对数据长度没有要求
(4)Post请求不能被收藏为书签,Get可以被收藏为书签
5.Cookie和session的区别
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全
(3)session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器的性能,考虑减轻服务器性能方法,应当使用cookie
(4)单个cookie保存的数据不能超过4K,浏览器对Cookie存放大小有限制
6.TCP三次握手,四次挥手原理
TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接
(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认
(2)第二次握手:服务器B收到SYN包,必须确认客户端A的SYN包(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。
三次握手完成后,客户端与服务器开始传送数据。
由于TCP连接是全双工的,因此每一个方向都必须单独进行关闭,TCP协议采用四次挥手关闭连接:
(1)客服端A发送一个FIN,用来关闭客户端A到服务器B的数据传送。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。