ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

笔试面试错题集1

2021-07-06 18:05:26  阅读:236  来源: 互联网

标签:语句 重传 面试 握手 笔试 TCP 发送 错题 序列号


1、TCP建立连接的过程采用三次握手,已知第三次握手报文的发送序列号为1000确认序列号为2000,请问第二次握手报文的发送序列号和确认序列号分别为
A、1999,999
B、1999,1000
C、999,2000
D、999,1999

发送序列是自己发送报文的序列号,当前发送序列号上一次发送序列号+1
确认序列号是从对方接收到的发送序列号+1

第三次握手发送的序列号是1000,那说明第一次握手发送的序列号是999。
注意:这里是握手,因此,第二次握手的确认序列号是1000,即确认序列号是从对方接收到的发送序列号+1。
第三次握手发送的确认号是2000,说明第二次握手的发送序列号是1999。


主要包括三部分:建立连接、传输数据、断开连接。
1)建立TCP连接很简单,通过三次握手便可建立连接。
2)建立好连接后,开始传输数据。TCP数据传输牵涉到的概念很多:超时重传、快速重传、流量控制、拥塞控制等等。
3)断开连接的过程也很简单,通过四次握手完成断开连接的过程。

三次握手建立连接:
第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

传输数据过程:
a.超时重传
超时重传机制用来保证TCP传输的可靠性。每次发送数据包时,发送的数据报都有seq号,接收端 收到数据后,会回复ack进行确认,表示某一seq号数据已经收到。发送方在发送了某个seq包后,等待一段时间,如果没有收到对应的ack回复,就会认 为报文丢失,会重传这个数据包。

b.快速重传
接受数据一方发现有数据包丢掉了。就会发送ack报文告诉发送端重传丢失的报文。如果发送端连续 收到标号相同的ack包,则会触发客户端的快速重传。比较超时重传和快速重传,可以发现超时重传是发送端在傻等超时,然后触发重传;而快速重传则是接收端 主动告诉发送端数据没收到,然后触发发送端重传。

c.流量控制
这里主要说TCP滑动窗流量控制。TCP头里有一个字段叫Window,又叫 Advertised-Window,这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数 据,而不会导致接收端处理不过来。 滑动窗可以是提高TCP传输效率的一种机制。

d.拥塞控制
滑动窗用来做流量控制。流量控制只关注发送端和接受端自身的状况,而没有考虑整个网络的通信情 况。拥塞控制,则是基于整个网络来考虑的。考虑一下这样的场景:某一时刻网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,但是,重传 会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,于是,这个情况就会进入恶性循环被不断地放大。试想一下,如果一个网络内有成千上万的TCP 连接都这么行事,那么马上就会形成“网络风暴”,TCP这个协议就会拖垮整个网络。为此,TCP引入了拥塞控制策略。拥塞策略算法主要包括:慢启动,拥塞 避免,拥塞发生,快速恢复。

四次握手断开连接:
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭 方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但此时主动关闭方还可以接受数据。

第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。

第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。


2、下列TCP连接建立过程描述正确的是:
A、服务端收到客户端的SYN包后等待2*ml时间后就会进入SYN_SENT状态
B、服务端收到客户端的ACK包后会进入SYN_RCVD状态
C、当客户端处于ESTABLISHED状态时,服务端可能仍然处于SYN_RCVD状态
D、服务端未收到客户端确认包,等待2*ml时间后会直接关闭连接


3、代码片段:

byte b1=1,b2=2,b3,b6; 
final byte b4=4,b5=6; 
b6=b4+b5; 
b3=(b1+b2); 
System.out.println(b3+b6);

关于上面代码片段叙述正确的是()
A、输出结果:13
B、语句:b6=b4+b5编译出错
C、语句:b3=b1+b2编译出错
D、运行期抛出异常

表达式的数据类型自动提升, 关于类型的自动提升,注意下面的规则。
所有的byte,short,char型的值将被提升为int型;
②如果有一个操作数是long型,计算结果是long型;
③如果有一个操作数是float型,计算结果是float型;
④如果有一个操作数是double型,计算结果是double型;
而声明为final的变量会被JVM优化,第3行相当于 b6 = 10


4、以下情况下不一定出现TCP分节RST的情况是:
A、服务器端端口未打开而客户端来连接时
B、SO_RCVTIMEO选项设置了超时时间并超时
C、服务器主机崩溃后重启
D、在一个已关闭的socket上收到数据

TCP连接关闭的正常方法是四次握手。但四次握手不是关闭TCP连接的唯一方法. 有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST (Reset)包将被发送。
四种情况会发送RST包
1、端口未打开
2、请求超时
3、提前关闭
4、在一个已关闭的socket上收到数据


5、一个数据库中现有A,B,C,D,E,F六个语句但目前这个数据库是不协调的,必须删除某些语句才能恢复数据库的协调性。已知:(1)如果保留语句A,那么必须保留语句B和C。(2)如果保留语句E,则必须同时删除语句D和语句C。(3)只有保留语句E,才能保留语句F。(4)语句A是重要的信息,不能删除以上各项如果为真,则以下哪项一定为真?

A、保留语句E并且删除语句D
B、保留语句E并且删除语句C
C、同时保留语句C和语句D
D、同时删除语句E和语句F

根据(4),A必须有;
再根据(1),B,C必须有,此时一定有ABC
根据(2),因为有C,所以一定没有E
根据(3),因为没有E,所以一定没有F
综上,ABC一定有,EF一定没有,D不确定


6、下列关于静态工厂和工厂方法表述错误的是:()
A、在工厂方法模式中,对于存在继承等级结构的产品树,产品的创建是通过相应等级结构的工厂创建的
B、不能形成静态工厂的继承结构
C、静态工厂对具体产品的创建类别和创建时机的判断是混和在一起的,这点在工厂方法中
D、二者都满足开闭原则:静态工厂以if else方式创建对象,增加需求的时候会修改源代码

开闭原则:对扩展开放,对修改封闭。静态工厂增加需要是修改源代码,对修改不封闭,不符合开闭原则。

 

标签:语句,重传,面试,握手,笔试,TCP,发送,错题,序列号
来源: https://blog.51cto.com/u_15295150/2993851

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有