操作系统与计算机网络

一,操作系统

进程与线程

区别与联系:

进程是系统资源分配的最小单位,线程是程序执行的最小单位;
进程使用独立的数据空间,线程使用进程的数据空间;

线程调度:

  1. 时间片轮转调度
    2.先来先服务调度
    3优先级调度
    4多级反馈队列调度
    5高响应比优先调度

线程切换的步骤:

(多线程课程中详细讲解)

进程间通信:(Linux下的IPC)

了解六种进程通信方式的原理适用场景,中间件研发的时候会考察

  1. Pipe
  2. MessageQueue(消息队列)
  3. 共享内存
  4. UnixSocket
  5. Signal
  6. Semaphore

进程间数据共享的场景可以使用共享内存,
进程间数据交换的场景可以使用UnixSocket或者MessageQueue

协程:

协程更轻量化;
是在用户态进行调度;
切换的代价比线程上下文切换的代价低很多;
也可以了解Java的第三方协程框架如kilim和Quasar

Linux常用命令

考察候选人线上排查问题的经验;
awk
top
netstat
grep
less
tail

死锁

内存分页管理与Swap机制

任务队列与CPU Load

死锁,内存分页管理与Swap机制,任务队列与CPU Load在分析线上问题时十分有用,

扩展知识点

  1. 内存屏障
  2. 指令乱序
  3. 分支预测
  4. CPU亲和性(affinity)
  5. 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实现细节

  1. 8种报文状态
  2. 滑动窗口工作流程
  3. KeepAlive的参数设置
  4. Nagel算法的规则
    特定场景下Nagel和ACK延迟机制配合使用会出现延迟40毫秒,超时后才能回复ACK包的问题

三次握手建立连接
32个Java面试必考点(一)操作系统与计算机网络

面试时需要了解三次握手是建立双向传输链接,需要了解状态变化
SYN洪泛攻击发生的原因就是,Server端收到Client的SYN请求后发送了SYN和ACK包,但是Client不进行回复,导致Server大量的链接处于SYN_RCVD状态,影响其他正常请求的建连,可以通过设置Linux的TCP参数SYNACKRetry。。。=0来加快半连接的回收速度,或者调大MAX_SYNDALog来应对少量的SYN洪泛攻击

四次挥手断连
32个Java面试必考点(一)操作系统与计算机网络

先发起的一端为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时间才会关闭连接

  1. 要保证TCP的全双工连接的可靠关闭;
  2. 要保证这次连接中重复的数据段能够从网络中消失,防止端口被重用的时候可能产生数据混淆

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前向纠错

相关文章: