本文为拉勾网《32个Java面试必考点》学习笔记.只是对视频内容进行简单整理,详细内容还请自行观看视频《32个Java面试必考点》.若本文侵犯了相关所有者的权益,请联系:txzw@live.cn.将会删除相关内容
知识点汇总
操作系统对于服务问题的排查定位很重要,在面试时,一般以了解和应用考察为主,面试题目占的比重不会过高.
服务之间通过不同的网络协议进行交互,在面试中被考的几率非常大.
知识点详解
HTTP
1. 需要知道协议中的Method,Header,Cookies.
2. 知道常见状态码含义
3. 了解HTTPS的交互流程
4. QUIC基于UDP实现原HTTP功能,现已被标准化为HTTP3协议
TCP
1. TCP和HTTP在服务交互中使用最多.了解报文标志状态和链接状态有利于抓包分析.
2. Nagel算法是为了解决小包问题和数据载荷比.
3. KeepALive是在长时间没有数据发送的情况下保持连接可用的机制.需要了解开启和设置方式.
4. 了解如何通过滑动窗口机制实现流量控制.
- 位于OSI模型的第四层-传输层
- 面向连接
- 每次发送数据先要建立连接
- 双工通信
- 连接建立后可进行双向通信
- 可靠
- 通过对数据包编号,并按序号接受,可确保数据的完整性和有序性
- 流量控制
- 通过滑动窗口控制数据的发送速率.滑动窗口的本质是动态缓冲区,接收端根据自己的处理能力,在tcp的Header中动态调整大小,通过应答包通知发送端
- 拥塞控制
- 主要通过慢启动,拥塞避免,拥塞发生,快速恢复算法实现
- 基于字节流
除了以上特点,还可以了解tcp协议的报文状态,滑动窗口的工作流程,KeepAlive的参数设置,Nagel算法的细节
三次握手
回答建连的问题时,可以提到syn洪水攻击.即请求端只发送SYN包,而不对接收端的SYNACK包进行回复,使得接收端大量连接处于半连接状态,影响其他正常请求的建连.
解决方法:设置linux的tcp参数
tcp_synack_retries=0,加快对于半连接的回收速度,或加大tcp_max_syn_backlog应对少量的syn洪水攻击
四次挥手
处于CLOSE_WAIT状态时,HOSTB仍有可能向HOSTA发送数据,HOSTB发送完数据后,才会向HOSTA发送FIN包
为何HOSTA要在2MSL(Maximum Segment Lifetime 最大报文生存时长)后才关闭连接?
- 要保证TCP的全双工连接能可靠关闭
- 要保证这次连接中重复的数据段从网络中消失,防止端口重用时可能的数据混淆
回答问题是也可以提到,有可能大量socket会处于TIME_WAIT和CLOSE_WAIT的问题.
解决TIME_WAIT过多,可通过开启Linux的tcp参数tw_reuse或tw_recycle能加快TIME_WAIT状态的回收.
CLOSE_WAIT过多则可能是被动关闭的一方存在代码BUG,没有正确关闭连接导致的