0.计网和操作系统
熟悉计算机网络和操作系统知识,包括 TCP/IP、UDP、HTTP、DNS 协议等。
常见的页面置换算法:
- 先进先出(FIFO)算法:将最早进入内存的页面替换出去。
- 最近最少使用(LRU)算法:将最近最少被访问的页面替换出去。
- 最不常用(LFU)算法:将最不经常被访问的页面替换出去。
- 时钟置换算法:通过一个指针按照顺时针方向遍历页面,当需要替换页面时,替换指针指向的页面,并将该页面的访问位清零。
原文链接:https://blog.csdn.net/weixin_72256328/article/details/138327484
线程同步方式
互斥锁 读写锁 信号量 屏障 事件
- 互斥锁(Mutex) :采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。比如 Java 中的
synchronized
关键词和各种Lock
都是这种机制。 - 读写锁(Read-Write Lock) :允许多个线程同时读取共享资源,但只有一个线程可以对共享资源进行写操作。
- 信号量(Semaphore) :它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
- 屏障(Barrier) :屏障是一种同步原语,用于等待多个线程到达某个点再一起继续执行 。当一个线程到达屏障时,它会停止执行并等待其他线程到达屏障,直到所有线程都到达屏障后,它们才会一起继续执行。比如 Java 中的
CyclicBarrier
是这种机制。 - 事件(Event) :Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。
进程间通信方式
管道 消息队列 共享内存 信号 套接字
1.管道 :包括无名管道和命名管道,无名管道 半双工,只能用于具有亲缘关系的进程直接的通信(父子进程或者兄弟进程),可以看作一种特殊的文件;命名管道可以允许无亲缘关系进程间的通信。
2.消息队列:消息的链接表,放在内核中。消息队列独立于发送与接收进程,进程终止时,消息队列及其内容并不会被删除;消息队列可以实现消息的随机查询,可以按照消息的类型读取。
3.信号量semaphore(PV操作):是一个计数器,可以用来控制多个进程对共享资源的访问。信号量用于实现进程间的互斥与同步。
4.信号:用于通知接收进程某个事件的发生。
5.内存共享:使多个进程访问同一块内存空间。
6.套接字socket:用于不同主机直接的通信。
进程的调度策略
操作系统使用多种进程调度策略来管理进程的执行顺序:
- 先来先服务(FCFS):按照进程到达的顺序调度,简单但可能导致长时间等待的"饥饿"问题。
- 短作业优先(SJF):优先调度执行时间短的任务,减少平均等待时间,但需要准确预测任务长度。
- 优先级调度:根据进程的优先级选择执行顺序,优先级高的进程先执行。可以是抢占式或非抢占式。
- 时间片轮转(RR):每个进程分配一个固定的时间片,轮流执行,适用于时间共享系统,保证公平。
- 多级反馈队列(MLFQ):根据进程的执行行为动态调整优先级,短任务优先执行,长任务逐渐降低优先级。
PV操作怎么确保别的进程不会修改
- P操作(等待操作):当一个进程执行P操作时,它会检查信号量的值,如果信号量值大于0,则将其减1并继续执行;如果等于0,则进程会被阻塞,等待信号量变为正值。
- V操作(释放操作):V操作则是将信号量的值加1,并唤醒等待队列中的一个阻塞进程。
通过原子操作保证信号量的修改不可被其他进程打断,操作系统中的信号量机制能够确保在多进程或多线程环境中同步共享资源。
0.计算机网络
1.键入网址
2.TCP/IP OSI模型 关系 各个层常见的协议
3.DNS解析流程(重点!!!)
4.TCP 三次握手 四次挥手(重点!!!)
5.TCP如何保证可靠性?(重点!!!)
5.TCP和UDP的区别?(重点!!!)
6.HTTP状态码? Get Post方法区别?
7.HTTP和HTTPS区别?(重点!!!)
8.HTTPS加密过程?(重点!!!)
1.HTTP键入网址过程
- 在浏览器中输入指定网页的 URL。
- 浏览器通过 DNS 协议,获取域名对应的 IP 地址。
- 浏览器根据 IP 地址和端口号,向目标服务器发起一个 TCP 连接请求。
- 浏览器在 TCP 连接上,向服务器发送一个 HTTP 请求报文,请求获取网页的内容。
- 服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器。
- 浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示。
- 浏览器在不需要和服务器通信时,可以主动关闭 TCP 连接,或者等待服务器的关闭请求。
2.各层常见协议
应用层:HTTP DNS WebSocket SSH FTP Telnet SMTP POP3/IMAP RTP
传输层:TCP UDP
网络层:IP ARP ICMP NAT OSPF RIP BGP
3.DNS解析流程(重点!!!)
浏览器缓存 操作系统缓存 hosts文件 本地dns服务器 根域dns服务器 顶级dns服务器 权威dns服务器
1.浏览器缓存:检查浏览器是否已经缓存了域名的IP地址。
2.操作系统缓存:如果浏览器缓存没有,操作系统检查其缓存。
3.hosts
文件 :如果操作系统缓存也没有,查看hosts
文件。
4.本地DNS服务器:如果以上都没有,请求本地DNS服务器。
5.根域DNS服务器:本地DNS服务器向根域DNS服务器请求。
6.顶级DNS服务器:根域DNS服务器指向顶级DNS服务器。
7.权威DNS服务器:顶级DNS服务器指向权威DNS服务器,获取域名的实际IP地址。
返回结果:权威DNS服务器将IP地址返回给本地DNS服务器,然后由本地DNS服务器返回给操作系统,最终由操作系统返回给浏览器。
4.TCP 三次握手 四次挥手(重点!!!)
一:TCP三次握手 (Three-Way Handshake)过程
SYN:客户端发送一个SYN(同步序列编号)报文到服务器,并进入SYN_SENT状态,等待服务器确认。
SYN-ACK:服务器收到SYN报文后,发送一个SYN+ACK(确认)报文给客户端,并进入SYN_RCVD状态。
ACK:客户端收到服务器的SYN+ACK报文后,会发送一个ACK报文给服务器,然后双方进入ESTABLISHED(已建立连接)状态,完成三次握手,开始数据传输。
目的
TCP三次握手的主要目的是建立一个可靠的会话连接,确保双方通信端口的正确性,以及同步双方的序列号和确认号,为数据传输做好准备。
二:TCP四次挥手 (Four-Way Handshake)过程
FIN:当通信的一方完成所有数据传输后,会发送一个FIN(结束)报文来关闭连接。
ACK:另一方收到FIN报文后,会发送一个ACK报文作为应答,并将接收到的序列号加1。
FIN:在发送了ACK报文后,该方也可以发送一个FIN报文请求关闭连接。
ACK:最初发送FIN报文的一方收到对方的FIN报文后,发送一个ACK报文作为回应,然后等待足够时间以确保对方收到这个ACK报文。
目的
四次挥手的目的是允许双方均能清楚地关闭已建立的TCP连接。由于TCP是全双工的,因此每个方向必须单独进行关闭。
5.TCP如何保证可靠性?(重点!!!)
1.建立连接 :通过三次握手建立连接,保证双方都有通信的能力
2.序号机制 :保证数据是按序、完整到达
3.合理分片 :tcp会按最大传输单元(MTU)合理分片,接收方会缓存未按序到达的数据,重新
排序后交给应用层。
4.数据校验 :TCP报文头有校验和,用于校验报文是否损坏
5.超时重传 :如果发送一直收不到应答,可能是发送数据丢失,也可能是应答丢失,发送方再等待一段时间之后都会进行重传。
6.流量控制 :当接收方来不及处理发送方的数据,能通过滑动窗口 ,提示发送方降低发送的速率,防止包丢失。
7.拥塞控制:网络层拥堵造成的拥塞,包括慢启动,拥塞避免,快速重传三种机制
滑动窗口和拥塞控制(细节)
1.TCP滑动窗口 是一种流量控制机制,用于调节发送方可以发送而不必等待确认的数据量。它的关键特点是:
- 发送窗口:发送方可以发送不超过滑动窗口大小的数据,而不必等待每个数据包的确认。
- 接收窗口:接收方告知发送方它可以接受的最大数据量,从而决定窗口的大小。
- 窗口滑动:当发送方收到确认(ACK)后,窗口向前滑动,允许发送更多的数据包。
滑动窗口提高了传输效率,通过动态调整发送速率,避免了网络拥塞。
2.TCP拥塞控制是用于避免网络拥塞的机制,主要包括以下四个阶段:
- 慢启动(Slow Start):初始发送速率较低,通过指数增长逐步增加拥塞窗口。
- 拥塞避免(Congestion Avoidance):当网络负载增加时,发送窗口线性增长,避免过快增加流量。
- 快速重传(Fast Retransmit):在检测到重复ACK时,立即重传丢失的数据包,而不必等待超时。
- 快速恢复(Fast Recovery):当网络拥塞发生时,减少窗口,但不从慢启动重新开始。
3.拥塞控制在什么场景下效果不好?
TCP拥塞控制在高带宽-延迟产品 (BDP)的网络中效果不好。例如,在高速、长距离的网络 (如卫星网络)中,拥塞窗口的增长速度较慢,导致带宽利用率低。此外,移动网络和无线网络中,由于丢包率较高,TCP可能会错误地将丢包视为网络拥塞,从而过度降低传输速率。
6.TCP和UDP的区别?(重点!!!)
**区别:**连接 服务对象 可靠性 传输方式 分片不同 首部开销
1. 连接
- TCP 是面向连接的传输层协议,传输数据前先要建立连接。
- UDP 是不需要连接,即刻传输数据。
2. 服务对象
- TCP 是一对一的两点服务,即一条连接只有两个端点。
- UDP 支持一对一、一对多、多对多的交互通信
3. 可靠性
- TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
- UDP 是尽最大努力交付,不保证可靠交付数据。但是我们可以基于 UDP 传输协议实现一个可靠的传输协议,比如 QUIC 协议,具体可以参见这篇文章:如何基于 UDP 协议实现可靠传输?(opens new window)
4. 拥塞控制、流量控制
- TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
- UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
5. 首部开销
- TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是
20
个字节,如果使用了「选项」字段则会变长的。 - UDP 首部只有 8 个字节,并且是固定不变的,开销较小。
6. 传输方式
- TCP 是流式传输,没有边界,但保证顺序和可靠。
- UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。
7. 分片不同
- TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
- UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。
TCP 和 UDP 应用场景:
由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:
FTP
文件传输;- HTTP / HTTPS;
由于 UDP 面向无连接,它可以随时发送数据,再加上 UDP 本身的处理既简单又高效,因此经常用于:
- 包总量较少的通信,如
DNS
、SNMP
等; - 视频、音频等多媒体通信;
- 广播通信;
7.HTTP状态码?
状态码?
1XX:
2XX: 成功响应
200:查询请求被成功处理。
201:POST 添加请求被成功处理。
202:服务端已经接收到了请求,但是还未处理。
204:服务端已经成功处理了请求,但是没有返回任何内容。
3XX: 重定向
301:资源被永久重定向了。比如你的网站的网址更换了。
302::资源被临时重定向了。
4XX: 客户端错误
400:发送的 HTTP 请求存在问题。比如请求参数不合法、请求方法错误。
401:未认证却请求需要认证之后才能访问的资源。
403:直接拒绝 HTTP 请求,不处理。一般用来针对非法请求。
404:请求的资源未在服务端找到。
405:请求方式和处理请求方式不一致。
409:表示请求的资源与服务端当前的状态存在冲突,请求无法被处理。
5XX: 服务的错误
500:服务端出问题了(通常是服务端出 Bug 了)。
502:我们的网关将请求转发到服务端,但是服务端返回的却是一个错误的响应。
8.Get Post方法区别?
GET和POST的区别? 参数位置 数据长度限制 安全性 幂等性和缓存
前提是GET和POST都要满足RFC规范。
虽然GET和POST都是使用HTTP协议传输数据,但它们在一些方面有明显的区别:
- 参数位置
GET请求的参数附加在URL的末尾,形式为:http://example.com/path?param1=value1\¶m2=value2
POST请求的参数包含在请求的正文中,不会显示在URL中。
- 数据长度限制
GET请求的参数附加在URL后面,受限于URL的长度限制,一般由浏览器限制,不同浏览器可能有不同的限制,例如IE限制为2083字节。
POST请求的参数在请求的正文中,没有明确的长度限制,一般受到服务器端的配置限制。
- 安全性
GET请求的参数会显示在URL中,因此对于敏感信息不宜使用GET请求,因为敏感信息可能会被浏览器保存、历史记录或被其他人看到。
POST请求的参数在请求的正文中,相对来说更加安全,但仍然不是绝对安全,因为HTTP是明文传输的,只有使用HTTPS才能加密传 输数据。
-
缓存与历史记录
GET请求会被浏览器主动缓存,而POST请求不会被缓存,除非手动设置。因为GET请求的参数附加在URL后面,浏览器会将URL作为缓存的标识。
-
幂等性
GET请求是幂等的,多次执行相同的GET请求,服务器的状态不会发生变化。
POST请求不是幂等的,多次执行相同的POST请求可能会产生不同的结果,因为可能会导致服务器状态的变化。
GET和POST的使用场景?
GET请求主要用于获取数据,因为它是幂等的、可缓存的。常见的使用场景包括:
搜索引擎的搜索请求
获取网页内容
获取资源文件等
POST请求主要用于向服务器提交数据,因为它可能会导致状态变化或产生副作用。常见的使用场景包括:
提交表单数据
上传文件
发表评论等
在实际应用中,要根据具体的需求选择GET或POST方法,合理地使用它们可以提升应用的性能和安全性。
9.HTTP和HTTPS区别?(重点!!!)
- HTTP 是超文本传输协议,信息是明文传输 ,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议 ,使得报文能够加密传输。
- HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
- 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
- HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
10.HTTPS加密过程?(重点!!!)
HTTP 由于是明文传输,所以安全上存在以下三个风险:
-
窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
解决方法:混合加密。非对称加密(建立连接前使用1次) + 对称加密(建立连接后一直用)
-
篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
解决方法:摘要算法(哈希函数) + 数字签名(给hash值加密,防止被替换。私钥签名,公钥验证)
-
冒充风险,比如冒充淘宝网站,用户钱容易没。
解决方法:服务器注册公钥到CA;CA用私钥对服务器公钥进行签名,并颁发数字证书;服务器将证书和公钥传给客户端;客户端用CA的公钥验证服务器的证书;合法,就用服务器公钥加密数据然后发送给服务器;服务器私钥解密,接收客户端发送的信息;
11.IPv4和IPv6的区别?
ipv6相比于ipv4提供更大的地址空间 和更好的自动配置 及安全性
- 地址长度 :
- IPv4:32位地址,约43亿个地址(例如:192.168.0.1)。
- IPv6:128位地址,地址数量极大(例如:2001:0db8::1)。
- 地址表示 :
- IPv4:点分十进制表示(如:192.168.0.1)。
- IPv6:冒号十六进制表示(如:2001:0db8::1)。
- 地址空间 :
- IPv4:地址数量有限,面临耗尽问题。
- IPv6:地址数量巨大,能够满足未来需求。
- 配置 :
- IPv4:通常需要手动配置或通过DHCP分配。
- IPv6:支持自动配置(SLAAC)。
- 安全性 :
- IPv4:没有默认的安全机制。
- IPv6:默认支持IPSec,更加注重安全。