32个Java面试必考点(一)-操作系统与计算机网络
操作系统与计算机网络
一,操作系统
进程与线程
区别与联系:
进程是系统资源分配的最小单位,线程是程序执行的最小单位;
进程使用独立的数据空间,线程使用进程的数据空间;
线程调度:
- 时间片轮转调度
2.先来先服务调度
3优先级调度
4多级反馈队列调度
5高响应比优先调度
线程切换的步骤:
(多线程课程中详细讲解)
进程间通信:(Linux下的IPC)
了解六种进程通信方式的原理和适用场景,中间件研发的时候会考察
- Pipe
- MessageQueue(消息队列)
- 共享内存
- UnixSocket
- Signal
- Semaphore
进程间数据共享的场景可以使用共享内存,
进程间数据交换的场景可以使用UnixSocket或者MessageQueue
协程:
协程更轻量化;
是在用户态进行调度;
切换的代价比线程上下文切换的代价低很多;
也可以了解Java的第三方协程框架如kilim和Quasar
Linux常用命令
考察候选人线上排查问题的经验;
awk
top
netstat
grep
less
tail
死锁
内存分页管理与Swap机制
任务队列与CPU Load
死锁,内存分页管理与Swap机制,任务队列与CPU Load在分析线上问题时十分有用,
扩展知识点
- 内存屏障
- 指令乱序
- 分支预测
- CPU亲和性(affinity)
- Netfilter与iptables
二,网络知识
4/7层模型(基础)
待学
TCP协议
1. 三次握手建立链接
2. 四次挥手关闭链接
3. 报文状态标志与链接状态
(在排查网络问题时非常重要,必须要明白协议状态才方便抓包分析)
4. Nagel算法与ACK延迟
(需要了解产生的背景,是要解决小包问题,提高数据载荷比,数据比较敏感,发送频率比较低的场景可以关闭Nagel算法)
5. Keepalive
(长时间没有数据发送的场景下,TCP保持链接可用的机制,Keepalive需要知道开启和关闭的方式)
6. 滑动窗口与流量控制
(需要了解TCP是如何通过滑动窗口机制来实现流量控制的)
TCP协议的特点:
是传输层协议,对应OSI网络模型的第四层传输层,特点是基于链接(点对点),就是传输数据前要建立好链接,然后再进行传输,一旦建立就可以进行双向通信;
传输时基于字节流而不是报文,将数据按照字节大小进行编号,接收端通过ACK确认收到的数据编号,通过这种机制保证数据的有序性和完整性,因此TCP能提供可靠性传输;
还能够提供流量控制能力,通过滑动窗口来控制数据的发送速率,滑动窗口的本质是动态缓冲区,接收端根据自己的处理能力,在TCP的Header中动态调整窗口大小,通过ACK应答包通知给发送端,发送端根据窗口的大小调整发送的速率;
还考虑到了网络问题导致大量重传,进而导致网络问题进一步恶化,因此提供了拥塞控制,主要用到了慢启动,拥塞避免,拥塞发生,快速恢复四个算法;
TCP实现细节
- 8种报文状态
- 滑动窗口工作流程
- KeepAlive的参数设置
- Nagel算法的规则
特定场景下Nagel和ACK延迟机制配合使用会出现延迟40毫秒,超时后才能回复ACK包的问题
三次握手建立连接
面试时需要了解三次握手是建立双向传输链接,需要了解状态变化
SYN洪泛攻击发生的原因就是,Server端收到Client的SYN请求后发送了SYN和ACK包,但是Client不进行回复,导致Server大量的链接处于SYN_RCVD状态,影响其他正常请求的建连,可以通过设置Linux的TCP参数SYNACKRetry。。。=0来加快半连接的回收速度,或者调大MAX_SYNDALog来应对少量的SYN洪泛攻击
四次挥手断连
先发起的一端为Client,TIME_WAIT后需要等待两倍的MSL(最大报文段生成时间)来保证连接的可靠关闭,才会进入CLOSED状态,来保证连接的可靠关闭;
Server收到ACK后直接进入CLOSED状态
面试题:为什么要等待两倍的MSL(最大报文段生成时间)才关闭连接
1.保证TCP全双工连接能可靠关闭
2.保证重复的数据段从网络中消失,防止端口被重用的时候可能会产生数据混淆
面试题:提到断链的问题时,可提到应用中会出现大量的Socket处于TIME_WAIT和LOSE_WAIT状态的问题
一般开启Linux的TCP参数twreues和twresaiqw,能够加快TIME_WAIT状态的回收
而出现大量的CLOSE_WAIT状态一般是被动关闭端的代码bug,没有正确关闭连接导致的
面试题:Client为什么要等待双倍的MSL时间才会关闭连接
- 要保证TCP的全双工连接的可靠关闭;
- 要保证这次连接中重复的数据段能够从网络中消失,防止端口被重用的时候可能产生数据混淆
HTTP
1.协议()
Method
Header
Cookies
2.UrlEncode
3.状态码(404,503,302)
4.HTTPS(需要了解交互流程)
5.HTTP2(比较新)
多路复用
Stream(流式交互)
流量控制
服务端推送
头部压缩
UDP
非链接
非可靠传输
效率高
QUIC(HTTP3)
是基于UDP协议的,但提供了类似TCP的可靠性保障和流量控制
避免HTTP2的前序包阻塞(HOL阻塞)
零RTT建连
FEC前向纠错