2012腾讯面经

每年都是这些问题,关键是自己能否讲清楚 一、TCP/IP      1、三次握手      客户端与服务器要建立连接需要三次握手的过程,保证连接的可靠性     (有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急))     1)第一次握手:客户端向服务端发送SYN标志的数据包,表示需要连接,并进入SYN_SEND状态,等待服务器的回复     2)第二次握手:服务器接收到客户端发送的SYN数据包后,回复可以连接的数据包,带有ACK+SYN标志的数据包(ACK确认准备好了连接,SYN询问客户端是否     可以连接),进入SYN_RECV状态     3)第三次握手:客户端收到服务器的回复后,需要向服务器回复ACK数据包,表明自己可以连接了 当服务器接收到确认包后建立连接,现在可以进行正常的数据传输了     2、TCP是如何保证数据传输的可靠性的(确认机制、消息重传机制、滑动窗口)          TCP在传输数据时需要将数据分块,然后为每块数据加上一个序列号和校验和          1)三次握手建立可靠的连接          2)确认机制:在传输数据的时候按照数据块的顺序发送数据,并启动定时器,当对方通过检查数据序列号没有重复和使用校验和检查数据没有出错时需要向发送方回复一个确认数据包,在定时内没有收到确认包的话,发送方会重新发送相应的数据块。          3)消息重传机制:当发送方没有收到对方的ACK确认包时需要重传数据,TCP为了提高自己的效率,允许再重新传输的时候,只要传输包含重传数据报文的报文就可以,而不用只重传需要传输的报文         4)滑动窗口:这是一种对数据传输流量的控制的方法,建立连接的双方都会分配一个缓冲区。数据发送前都经过缓冲区,当发送端发送数据时会加上自身的缓冲区尺寸大小,接收端接收完数据后会发送回一个确认数据包,并加上接收端缓冲区剩余的尺寸大小,剩余的这块空间也叫窗口,指出窗口大小的消息称为窗口通告,如果剩余的窗口大小大于发送方的缓冲区大小,则发回的窗口通告是正的,这时发送方可以发送数据,如果剩余窗口大小小于发送方缓冲区大小,则发送回一个零的窗口通告,这时发送方停止发送数据,直到接收到一个正的窗口通告            滑动窗口在必要时可进行适应性的调整:在双方连接时互相协商窗口尺寸大小,发送方可根据协商的结果发送字节流,并等待对方的确认,发送方可以根据确认包的情况调整窗口的大小,如要是发生了拥塞,发送窗口的大小减小为原来的一半使得发送的数据包变小,超时重传的时间扩大为原来的一倍,这样可以减少重传,减少链路数据,并且这种情况下对方接受数据也会变慢     3、四次挥手        这时数据传输完毕后要断开连接所做的工作        第一次挥手:客户端向服务器发送FIN数据包,表示数据传输完毕,关闭数据传输        第二次挥手:服务器收到客户端的FIN数据包后,回复一个ACK确认包,        第三次挥手:服务器关闭客户端的连接,并发送一个FIN数据包给客户端        第四次握手:客户端向服务器发送确认包ACK,断开连接 二、进程与线程        1、进程与线程的关系          进程是系统资源分配和调用的独立单元,拥有独立的内存空间,而线程则是活在进程内存空间中,一个进程必须有一个线程,称为主线程,线程是进程的执行单           元,进程的数据处理是由线程执行处理的。            1)进程的内存空间是独立于其他进程的,所以当一个进程崩溃时是基本不会影响到其他进程,而线程则是在进程中,共享进程的内存空间,当一个线程崩溃时所有的线程都崩溃            2)线程划分的尺度小,被调用和线程之间切换时消耗资源小且快,提高了多线程的程序的并发性和工作效率            3)多线程共享内存,提高了程序的运行效率         2、线程同步            1)信号量:有一个最大资源数量和当前可用资源数量,当当前可用资源数量为0时,发出信号量信号,不许再有线程访问            2)互斥:保证线程对单个资源有访问权限,不能同时访问该资源            3)临界条件:定义一块临界区,当进入时将临界区锁上,当离开临界区时,解锁            4)事件:有人工重置事件和自动重置事件         3、进程死锁           1)进程死锁的原因:系统资源不足,进程的推进顺序不当           2)四个死锁的必要条件:互斥,不可剥夺的,请求和等待,环路等待             互斥:某个资源在同一时间里只能被一个进程占有            不可剥夺:不可去抢占被其他进程占有的资源,必须由占有者自行释放            请求和等待:当一个进程去申请其他资源时,该资源被其他进程占有,所以该进程只能等待,并且没有释放当前占有的资源,造成该资源不能被其他进程访问            环路等待:在申请资源时等待序列形成了环路,造成一直等待下去           3)解决死锁:预防,避免,检查和恢复               预防:破坏四个必要条件之一即可               避免:1.安全序列:把进程按照某一种序列分配资源                        2.银行家算法               检查和恢复:撤消进程,剥夺资源
相关文章
相关标签/搜索