滴滴二面

  • 计算机网络 (TCP三次握手)

TCP协议非常重要,这里把它的连接和释放整理一下。

首先是三次握手:

1、 客户端发起,像服务器发送的报文SYN=1,ACK=0,然后选择了一个初始序号:seq=x。

SYN是干什么用的?

在链接的时候创建一个同步序号,当SYN=1同时ACK=0的时候,表明这是一个连接请求的报文段。如果对方有意链接,返回的报文里面SYN=1,ACK=1,。从这个意义上来说,SYN=1的时候,就表明这是一个‘请求’或者‘接受请求’的报文。

SYN=1的报文段不能携带数据。但是要消耗掉一个序号,

ACK是干什么用的?

仅当ACK=1的时候,确认字号(期望收到对方下一个报文段的第一个数据字节的编号)才有效。因此,TCP规定,当链接建立之后,所有往来的报文里面的ACK都应该是1(事实上,也只有客户端发起的链接请求报文的ACK没有置1)。

现在的状态:客户端进入SYN-SEND状态;

2、 服务器接收到了SYN=1,ACK=0的请求报文之后,返回一个SYN=1,ACK=1的确认报文。

同时,确认号ack=x+1,同时也为自己选择一个初始序号seq=y

现在的状态:服务器进入SYN-REVD状态;

3、 客户端接收到了服务器的返回信息之后,还要给服务器返回最后一条确认,ACK=1,确认号ack=y+1;

现在的状态:客户端进入ESTABLISHED状态。

  • tcp链接建立之后server端挂了怎么办?
  • 如何避免这种情况(server端挂)?
  • 避免不了出现了你会怎么处理?(上面三个连环追问问傻了直接)

如果「服务端挂掉」指的是「服务端进程崩溃」,那么这个读者猜的想法是对的,服务端的进程在发生崩溃的时候,内核会发送 FIN 报文,与客户端进行四次挥手。

但是,如果「服务端挂掉」指的是「服务端主机宕机」,那么是不会发生四次挥手的,具体后续会发生什么?还要看客户端会不会发送数据?

  • 如果客户端会发送数据,由于服务端已经不存在,客户端的数据报文会超时重传,当重传次数达到一定阈值后,会断开 TCP 连接;
  • 如果客户端一直不会发送数据,再看客户端有没有开启 TCP keepalive 机制?
    • 如果有开启,客户端在一段时间后,检测到服务端的 TCP 连接已经不存在,则会断开自身的 TCP 连接;
    • 如果没有开启,客户端的 TCP 连接会一直存在,并不会断开。
  • TCP和UDP区别?
  • 打开网页用的TCP还是UDP(TCP)(刚打开数据量大,刚打开保证可靠回答了这些,面试官没说啥)
  • Http和Https区别(一直追问还有什么?)
  • Https加密机制
  • java实现多线程的方法(一面重复)
  • 一般用哪一种?
  • java创建线程池有几种方式
  • 线程池有哪些状态
  • Hashmap的实现(打断好几次,就记得说到红黑树的时候,说先停一下,说一下红黑树的五个特性)
  • Hashtable hashmap concurrenthashmap
  • (上面说到concurrenthashmap 粒度小,开始追问小到什么程度)
  • concurrenthashmap 加锁的时候put 和map怎么加的(详细说说)
  • 懒汉饿汉单例

发现单纯八股问题不大,但是就怕延伸。。。

#实习面经##面经##二面##滴滴#
全部评论
还在面嘛,提前批的还在泡池子
点赞 回复 分享
发布于 2022-11-06 10:32 北京
后端吗
点赞 回复 分享
发布于 2022-11-06 20:18 山西
不做题吗
点赞 回复 分享
发布于 2022-11-06 21:35 四川
lz,如何避免 server 端挂?避免不了怎么处理?  这两个怎么答哇?
点赞 回复 分享
发布于 2022-11-20 19:13 湖北
请问写代码是用自己的ide还是牛客和**那种在线的编译器啊
点赞 回复 分享
发布于 2023-02-02 19:13 山西

相关推荐

不愿透露姓名的神秘牛友
11-03 09:02
点赞 评论 收藏
分享
8 66 评论
分享
牛客网
牛客企业服务