青训营X豆包MarsCode 技术训练营第三课 | 豆包MarsCode AI 刷题

100 阅读3分钟

HTTP协议

课程背景

0.9最初版本,从1991年开始

HTTP协议是什么

超文本传输协议(超文本见到那理解就是超过文本数据的数据)

文字——>图片,视频

需要明确的边界:

协议开始

协议元数据

Text

协议结束

什么是对头阻塞?

对头阻塞(Head-of-Line Blocking,简称HOL Blocking)是一种在网络通信和数据传输中常见的问题,特别是在队列系统中。具体来说,当多个数据包或事务按照一定的顺序进入一个队列时,如果队列前端的数据包或事务由于某种原因(如丢失、错误或处理延迟)无法及时被处理,那么后续的所有数据包或事务也会被阻塞,即使它们本身是可以立即处理的。

常见场景

  1. 网络传输:在TCP/IP协议中,如果一个数据包丢失或延迟,后续的数据包即使到达了接收端也无法被处理,因为TCP需要按序接收数据包。
  2. 计算机系统:在操作系统中,如果一个进程或线程在队列的前端被阻塞,那么后续的进程或线程也会被阻塞,即使它们本身已经准备好运行。
  3. 数据库系统:在数据库事务处理中,如果一个事务在队列的前端被阻塞,那么后续的事务也会被阻塞,即使它们之间没有依赖关系。

解决方法

  1. 重传机制:在网络传输中,可以通过重传丢失的数据包来解决对头阻塞问题。
  2. 优先级队列:使用优先级队列,将高优先级的数据包或事务优先处理。
  3. 并行处理:在某些情况下,可以通过并行处理多个数据包或事务来减少对头阻塞的影响。
  4. 流量控制:通过流量控制机制,减少数据包的拥塞,从而减少对头阻塞的发生。

分层设计

分层设计应该注意:

提供合理的API

可理解性:API的名字应该是看起来就可以知道是什么作用的

简单性:越短越好

冗余性:不要那种两个接口拼接起来的接口

兼容性:接口与接口之间应该是相互兼容的

可测性:接口应该是可测试的

可见性:就是接口里面的一些东西都应该是有权限的,不应该是用户也可以对里面的东西进行操作的

不要在文档里说明,很多用户不看文档

中间件的引入

假设我们需要给每一个接口打印他的request,还有response,中间件,就可以帮助我们实现所有接口的打印

中间件的设计

1,既然要实现预处理还有后处理,那这个就像是调用了一个函数

,为了和普通函数做一个区分,我们可以将中间件都定义成Next

2,假设用户不去调用初始化函数怎么办,那么就在中间件里面加上,用户自增长

3,出现异常想停止怎么办

因为有的中间件只能调用一个栈,所以有的时候需要我们手动去调用中间件

路由设计

我们可以设计路由树:我么可以设计路由树来实现路由的筛选分支