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,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种就得连接请求报文段。


 

 

posted @ 2017-08-24 14:38  面带微笑  阅读(151)  评论(0)    收藏  举报