241124学习日志——[CSDIY] [ByteDance] 后端训练营 [14]

news2024/11/25 23:39:30

CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!!
第一弹:Cpp零基础学习【30 DAYS 从0到1】
第二弹:Cpp刷题文档【LeetCode】
第三弹:Go开发入门【字节后端青训营】
第四弹:Cpp简单项目开发【黑马Rookie】
第五弹:数据结构绪论【数据结构与算法】
第六弹:Go工程实践【字节后端青训营】
第七弹:高质量编程和性能调优【字节后端青训营】
第八弹:Linux 基础知识【书生大模型训练营】
第九弹:Python 基础知识【书生大模型训练营】
第十弹:Git 基础知识【书生大模型训练营】
第十一弹:玩转HF/魔搭/魔乐社区【书生大模型训练营】
第十二弹:书生大模型全链路开源体系【书生大模型训练营】
第十三弹:玩转书生「多模态对话」与「AI搜索」产品【书生大模型训练营】
第十四弹:浦语提示词工程实践【书生大模型训练营】
第十五弹:HTTP 框架修炼之道【字节后端青训营】

课程背景:

  • HTTP 请求(一)
    • API 接口层
    • 状态管理
    • 页面
    • 前端路由
    • 终端
  • HTTP 请求(二)
    • 请求解析
    • 后端路由
    • 业务逻辑
    • 数据库

01. 再谈 HTTP 协议

1991年,开始大规模使用…三十多岁还在更新…可见生命力之强

1.1 HTTP 协议是什么

HTTP:超文本传输协议(Hypertext Transfer Protocol)

1.2 为什么需要协议

需要明确的边界

  • 开始和结束 [协议开始] [协议结束]

1.3 协议里有什么

发送端

POST /sis HTTP/1.1
Who: Alex
Content-Type: text/plain
Host:17.0.0.1:8888
Content-Lenth: 28

Let's watch a movie together

接受端

HTTP/1.1 200 OK
Server: hertz
Date: Thu, 21 Apr 2022 11:46:32 GMT
Content-Type: text/plain; charse=utf-8
Content-Length: 2
Upstream-Caught: 1650541592984580

OK

内容

请求行 / 状态行:

  • 方法名 - URL - 协议版本
  • 协议版本 - 状态码 - 状态码描述

请求头 / 响应头:

请求体 / 响应体:

1.4 请求流程

服务端

客服端

业务层 - 服务治理层/中间件层 - 路由层 - 协议编/解码层 - 传输层

1.5 不足和展望

HTTP1:
  • 队头阻塞

  • 传输效率低

  • 明文传输不安全

HTTP2:
  • 多路复用
  • 头部压缩
  • 二进制协议
QUIC:
  • 基于 UDP 实现

  • 解决队头阻塞

  • 加密减少握手次数

  • 支持快速启动

02. HTTP 框架的设计与实现

2.1 分层设计

OSI 七层网络模型、TCP/IP 四层概念模型

  • 专注性
  • 扩展性
  • 复用性

高内聚 低耦合 易复用 高扩展性

2.2 应用层 API 设计

提供合理地 API

  • **可理解性。**命名合理易理解
  • **简单性。**尽量简介
  • **冗余性。**做同样地事情地接口只保留一个
  • 兼容性。
  • 可测性。
  • 可见性。

不要试图在文档中说明,很多用户不看。

2.3 中间件设计

中间件需求

洋葱模型:核心逻辑与通用逻辑分离

调用链

2.4 路由设计

  • 静态路由
  • 参数路由
  • 路由修复
  • 冲突路由以及优先级
  • 匹配 HTTP 方法
  • 多处理函数:方便添加中间件

青铜:map[string]handlers
黄金:前缀匹配树

站在巨人的肩膀上

2.5 协议层设计

抽象出合适的接口

2.6 网络层设计

网络模型

03. 性能修炼之道

3.1 针对网络库的优化

  • go net
  • netpoll
  • netpoll with nocopy peek
    • 分配足够大的 buffer
    • 限制最大的 buffer size

不同网络库的优势

go net:流式友好、小包性能高

netpoll:中大包性能高、时间延迟低

3.2 针对协议的优化 – Headers 解析

  • 核心字段快速解析
  • 使用 byte slice 存储
  • 额外存储到成员变量中

  • 普通 header 性能较低
  • 没有 map 结构

3.3 针对协议的优化 – Header key 规范化

  • 超高的转化效率
  • 比 net.http 提高40倍

  • 额外的内存开销
  • 变更困难

3.4 热点资源池化

  • 减少内存分配
  • 提高了内粗复用
  • 降低了 GC 压力
  • 性能提升

  • 额外的 Reset 逻辑
  • 请求内有效
  • 问题定位难度增加

04. 企业实践

  • 追求性能

  • 追求易用、减少误用

  • 打通内部生态

  • 文档建设、用户群建设

碎碎念:已经开始听不懂了,很多关于计算机网络的知识,一时半会是不懂得,也正常,先记下来,留个印象,总会派上用场的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2247540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

生成式UI 动态化SDK的研发(二)--实现垂直布局、水平布局以及文字组件

文章目录 1. 概述2. 效果展示2.1 垂直布局容器(Column)2.2 水平布局容器(Row )2.3 本文示例动态化模板DSL 3. 生成式UI 动态化SDK的渲染流程4. Column和Row组件实现4.1 Column组件4.1.1 视图的渲染4.1.2 事件解析绑定 4.2 Row组件4.3 文字组件(Text) 5. 源码地址 1. 概述 在前…

JavaScript中的this指向绑定规则(超全)

JavaScript中的this指向绑定规则(超全) 1.1 为什么需要this? 为什么需要this? 在常见的编程语言中,几乎都有this这个关键字(Objective-C中使用的是self),但是在JavaScript中的this和常见的面向对象语言中的this不太一样 常见面…

Vision Transformer(VIT模型)

【11.1 Vision Transformer(vit)网络详解-哔哩哔哩】 https://b23.tv/BgsYImJ 工作流程: ①将输入的图像进行patch的划分 ②Linear Projection of Flatted patches,将patch拉平并进行线性映射生成token ③生成CLS token(用向量有效地表示整…

2024年11月最新 Alfred 5 Powerpack (MACOS)下载

在现代数字化办公中,我们常常被繁杂的任务所包围,而时间的高效利用成为一项核心需求。Alfred 5 Powerpack 是一款专为 macOS 用户打造的高效工作流工具,以其强大的定制化功能和流畅的用户体验,成为众多效率爱好者的首选。 点击链…

C#里怎么样检测文件的属性?

C#里怎么样检测文件的属性? 对于文件来说,在C#里有一种快速的方法来检查文件的属性。 比如文件是否已经压缩, 文件是否加密, 文件是否是目录等等。 属性有下面这么多: 例子演示如下: /** C# Program to View the Information of the File*/ using System; using Syste…

网络安全,文明上网(4)掌握网络安全技术

前言 在数字化时代,个人信息和企业数据的安全变得尤为重要。为了有效保护这些宝贵资产,掌握一系列网络安全技术是关键。 核心技术及实施方式 1. 网络监控与过滤系统: 这些系统构成了网络防御体系的基石,它们负责监控网络通信&…

Vue 项目中如何使用FullCalendar 时间段选择插件(类似会议室预定、课程表)

本文中是基于VUEelementui项目中实现的前后端分离的前端功能部分: 插件的官方文档:FullCalendar 1.安装对应依赖(统一安装版本为6.15) npm install --save fullcalendar/core6.15 npm install --save fullcalendar/daygrid6.…

Oracle SQL优化③——表的连接方式

前言 表(结果集)与表(结果集)之间的连接方式非常重要,如果CBO选择了错误的连接方式,本来几秒就能出结果的SQL可能执行一天都执行不完。如果想要快速定位超大型SQL性能问题,就必须深入理解表连接…

小程序25- iconfont 字体图标的使用

项目中使用到图标,一般由公司设计进行设计,设计好后上传到阿里巴巴矢量图标库 日常开发过程中,也可以通过 iconfont 图标库下载使用自带的图标 补充:使用 iconfont 图标库报错:Failed to load font 操作步骤&#xff…

Java基于SpringBoot+Vue的藏区特产销售平台

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

selinux及防火墙

selinux说明 SELinux 是 Security-Enhanced Linux 的缩写,意思是安全强化的 linux 。 SELinux 主要由美国国家安全局( NSA )开发,当初开发的目的是为了避免资源的误用。 httpd进程标签(/usr/share/nginx/html &#…

详细探索xinput1_3.dll:功能、问题与xinput1_3.dll丢失的解决方案

本文旨在深入探讨xinput1_3.dll这一动态链接库文件。首先介绍其在计算机系统中的功能和作用,特别是在游戏和输入设备交互方面的重要性。然后分析在使用过程中可能出现的诸如文件丢失、版本不兼容等问题,并提出相应的解决方案,包括重新安装相关…

生成对抗网络模拟缺失数据,辅助PAMAP2数据集仿真实验

PAMAP2数据集是一个包含丰富身体活动信息的数据集,它为我们提供了一个理想的平台来开发和测试HAR模型。本文将从数据集的基本介绍开始,逐步引导大家通过数据分割、预处理、模型训练,到最终的性能评估,在接下来的章节中&#xff0c…

IEC61850读服务器目录命令——GetServerDirectory介绍

IEC61850标准中的GetServerDirectory命令是变电站自动化系统中非常重要的一个功能,它主要用于读取服务器的目录信息,特别是服务器的逻辑设备节点(LDevice)信息。以下是对GetServerDirectory命令的详细介绍。 目录 一、命令功能 …

基于CNN+RNNs(LSTM, GRU)的红点位置检测(pytorch)

1 项目背景 需要在图片精确识别三跟红线所在的位置,并输出这三个像素的位置。 其中,每跟红线占据不止一个像素,并且像素颜色也并不是饱和度和亮度极高的红黑配色,每个红线放大后可能是这样的。 而我们的目标是精确输出每个红点的…

前端:JavaScript (学习笔记)【2】

目录 一,数组的使用 1,数组的创建 [ ] 2,数组的元素和长度 3,数组的遍历方式 4,数组的常用方法 二,JavaScript中的对象 1,常用对象 (1)String和java中的Stri…

全面解析多种mfc140u.dll丢失的解决方法,五种方法详细解决

当你满心期待地打开某个常用软件,却突然弹出一个错误框,提示“mfc140u.dll丢失”,那一刻,你的好心情可能瞬间消失。这种情况在很多电脑用户的使用过程中都可能出现。无论是游戏玩家还是办公族,面对这个问题都可能不知所…

STM32总体架构简单介绍

目录 一、引言 二、STM32的总体架构 1、三个被动单元 (1)内部SRAM (2)内部闪存存储器 (3)AHB到APB的桥(AHB to APBx) 2、四个主动(驱动)单元 &#x…

【PHP】 环境以及插件的配置,自学笔记(一)

文章目录 环境的准备安装 XAMPPWindowMacOS 配置开发环境Vscode 关于 PHP 的插件推荐Vscode 配置 php 环境Apache 启动Hello php配置热更新 参考 环境的准备 下载 XAMPP , 可以从 官网下载 https://www.apachefriends.org/download.html 安装 XAMPP XAMPP 是一个跨平台的集成开…

跟着问题学5——深度学习中的数据集详解(1)

深度学习数据集的创建与读取 数据 (计算机术语) 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始素材。 数据可以是连续的值,比如声音、图像,称为模拟数据。…