1、【面试】阿甘百度运维面试;
一面:
1、问项目,选一个深刻的项目讲,中途提问题:算法细节,为什么这么处理,确定是否是自己做的项目;
2、操作系统部分:
线程与进程的联系和区别?
答:定义:进程就是一个独立运行的程序,是系统进行资源调度和分配的独立单位; 线程是进程的一个实体,是CPU调度和分配的基本单位;
联系:
1、一个程序至少有一个进程,一个进程至少有一个线程;
2、线程的尺度小于进程,使得多线程程序并发性高;(多线程并发执行);
3、进程执行过程中拥有独立的内存单元,而且多个线程共享内存,极大提高了程序运行效率;(多进程并发执行);
区别:(主要在于不同的资源管理方式)
1、进程有独立的地址空间,而线程没有。因此一个进程的崩溃对其他进程没有影响,而一个线程崩溃会导致整个进程死掉;
2、因此,多进程的程序比多线程程序更健壮;
3、多进程间切换资源消耗大,线程间切换消耗小;因此一些要求“同时进行并共享某些变量”的操作,只能用线程;
OSI(开放系统互联模型):
OSI: 物理层,数据链链路层,网络层,传输层,会话层,表示层,应用层;
TCP协议处于传输层;
TCP协议与UDP协议的区别:
1、 TCP提供面向连接的、可靠的传输,而UDP提供的是非面向连接的、不可靠的传输;因此TCP注重数据安全性,而UDP数据传输快,因为不需要连接等待;
2、TCP面向字节流,UDP面向报文;
3、TCP是点对点连接的,UDP一对一,一对多,多对多都可以;
4、UDP也应用于分组数据少、广播、实时性要求较高的视频等多媒体领域,TCP不行;
网页、邮件等使用的是TCP协议; QQ视频使用的是UDP协议;
TCP三次握手:
--指建立一个TCP连接时,客户端和服务器总共需要发送3个包。目的是连接服务器指定端口;
1、首先Client端发送连接请求报文;
2、Server段接受连接后回复ACK报文,并为这次连接分配资源;
3、Client端接收到ACK报文后也向Server段发送报文,并分配资源,这样TCP连接就建立了。

TCP四次挥手:
1、假设Client端发起中断请求,也就是发送FIN=1报文,表示自己已经没有数据可以发送了,但是仍然可以接受数据。
客户端进入FIN_WAIT_1状态。
2、服务器端确认客户端的 FIN 包,发送一个确认包,表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。
发送完毕后,服务器端进入CLOSE_WAIT状态,客户端接收到这个确认包之后,进入FIN_WAIT_2状态,等待服务器端关闭连接。
3、服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN 置为1。
发送完毕后,服务器端进入LAST_ACK状态,等待来自客户端的最后一个ACK。
4、客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入TIME_WAIT状态,等待可能出现的要求重传的 ACK 包。
服务器端接收到这个确认包之后,关闭连接,进入CLOSED状态;
客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入CLOSED状态。

为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
为了保证发送的最后一个ACK报文段能够到达B
防止“已失效的连接请求报文段”出现在本连接中。在发送完最后一个ACK报文段后,再经过实践2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种就得连接请求报文段。
浙公网安备 33010602011771号