网络世界的“交通规则”——TCP/IP(一)
一、非可靠传输的协议——UDP
1.1 UDP的报文格式
(1)UDP长度:表示整个UDP数据包的长度(报头+载荷);
(2)校验和:用于验证UDP数据包在传输过程中有没发生比特翻转(由于各种原因导致的比特位变化,如0变为1,接收方在收到数据包后会重新进行校验和的计算,如果与UDP数据包中的校验和不同,就会丢弃这个数据包),前面所学的HTTPS中证书的数字签名本质上就是一段被加密的校验和。
1.2 UDP的特点
(1)无连接:知道对方的IP和端口号就能进行传输,不用建立连接
(2)不可靠:没有确认和重传机制,如果发送的数据报没有到达对方,UDP不会做出任何处理,对方也不知道发送方向自己发送了数据
(3)面向数据报:不能灵活控制数据读写的次数和数量
!!!但是除此之外,UDP在大部分情况下为TCP所取代的原因还有:由于UDP报头中UDP长度的大小仅有16位,只能够表示64kb的大小,对于现在来说是不够的(可能随便发送一个图片就要几个mb ),如果非要用UDP来传输的话,就需要拆分和组合数据报,非常麻烦
二、可靠传输的协议——TCP
2.1 TCP的报文格式
目前只讨论部分字段,其余字段将在后面了解到:
(1)16位源端口号/16位目的端口号:传输层的核心内容
(2)4位首部长度:4位,表示整个数据包的大小,使用4字节为单位(如4个比特位最多表示15,15x4=60字节)
(3)保留(6位):为未来可能的协议扩展或新功能预留的,目前保留位通常被设为0
(4)6位标志位:包含URG等6个字段,是TCP最核心的6个标志位
2.2 TCP的核心机制
2.2.1 保证传输可靠性的机制
这里所说的可靠性并不是说A给B发送一组数据,B一定能收到,而是尽可能的让B收到,就算B收不到,A也能知道
2.2.1.1 核心机制一——确认应答
如A给B发送一组数据,B接收到以后,会向A发送一个应答报文。
什么是应答报文?
答:应答报文也是一个TCP数据报,但是它的载荷不携带任何信息,在发送应答报文时,只需要将6位标志位中的ACK设置为1即可。
确认应答的过程是怎么样的?(图示)
但是,对于上述确认应答的过程,有没有可能A给B发了不止一个数据报,而B的应答报文发错对象了呢?如图:
为了解决这种情况,TCP引入了序号和确认序号两个字段
(1)序号主要是用在传输数据的报文中的(即载荷不为空的报文),当然在后面建立连接和关闭连接等阶段的报文也会使用。
(2)确认序号主要是用在ACK为1的应答报文或其他如(FIN + ACK)报文中的(也就是只有ACK为1的报文中的确认序号才生效)。
序号相当于对A的数据做了一个编号,而确认序号可以表示这个ACK是对特定序号的回复
在实际传输过程中,是如何对数据进行编码的呢?TCP采取的是对每个字节都进行编码,如
图:(下图表示每1000个字节为一个TCP数据包)
它的确认应答机制如下图:可以看到,确认序号的内容是将收到的数据报的载荷的最后一个字节的编号+1得到的
!!!确认序号的含义?
表示小于确认序号的数据报都已经收到了,接下来可以从序号为确认序号的序号开始发送数据报了(如确认序号为2001,表示1~1000还有1001~2000的数据包都已经收到)
引入序号之后,接收方就可以对收到的数据进行排序,确保应用程序通过socket api读取到的数据顺序是正确的 ,那么,具体的读取过程如何?
(1)TCP会在接收方安排一个接收缓冲区
(2)从网卡中读取到的数据,会先放到接收缓冲区中,后续代码调用read方法读取数据,也是从接收缓冲区读的
(3)在接收缓冲区中,收到的数据是根据序号来排序的,如果前面的数据还没到,后面的数据先到了,read就会进入阻塞,只有前面的数据到了,read才可以解除阻塞
2.2.1.2 核心机制二——超时重传
由于网络数据的传输链路复杂多样,各路由器/交换机的状态(是否繁忙)又不可知,导致数据在传输过程中会不可避免的出现丢包,为了应对可能出现的丢包,TCP引入了重传机制。
假设A给B发送了一个数据
(1)如果一定时间(即超时时间)内A还没有收到B发来的应答报文(ACK),A就会重新发送数据报给A(超时时间的阈值是动态变化的,如果这次超时了,那么阈值就会提高)
(2)如果超时次数达到一定次数,就会认为网络出现了严重故障,放弃此次传输。
这里出现的丢包状况有两种可能:对于这两种可能,A是无法分辨的,都是重发数据报
2.2.2 核心机制三——连接管理
2.2.2.1 三次握手——建立链接
(一)三次握手的过程
<1>客户端A先给服务器B发送一个SYN(同步报文),表示希望与B建立连接
<2>B收到SYN后,会发送一个ACK + SYN报文,表示已经收到A的SYN,且在B发送的SYN+ACK报文中还包含着一段序列号,用于标识B后续发送数据的起始位置(如初始序列号为5000表示B接下来发送的数据从5000开始编号)
<3>A收到B发送的ACK+SYN报文后也会给B发送一个ACK,表示已收到
(二)三次握手有什么用?
<1>确定双方的通信链路是否正常
<2>确定双方的发送能力和接收能力是否正常
<3>可以协商一些关键信息,如上面提到的序列号(表示接下来发送的数据的序号从哪里开始)
(三)三次握手过程中客户端和服务器对应的状态
2.2.2.2 四次挥手——断开连接
(一)四次挥手的过程
<1>A向B发送一个FIN报文(终止报文),表示断开此次连接
<2>B收到 A发来的FIN后 ,向A发送ACK表示收到
<3>B再发送一个FIN报文给A(触发A关闭连接)
<4>A收到 B发来的FIN后 ,也会向B发送ACK表示收到
(二)四次挥手中双方的状态
!!!在四次挥手过程中可能会发生丢包的问题,TIME_WAIT的作用之一就是为了防止最后一次发送的ACK丢包(有一定的等待时间,防止在对方还没有收到ACK就关闭连接,且刚好ACK发生丢包的情况)
2.2.3 核心机制四——滑动窗口
TCP是以牺牲效率来保证可靠性的,而滑动窗口通过批量发送一组数据可以在保证可靠性的基础上提高一些效率,如图:
相当于用原来的一份时间等待多组ACK
在A收到一个ACK后,不是继续等待剩下的ACK都到了才发下一条数据,而是直接发送下一条数据,如图:(同理,如果是3001的ACK先到了的话窗口就直接向后移动两个格子(因为后一个ACK可以涵盖前一个ACK的含义,如先收到3001,就表示1~3000所有的数据报都已经收到了))
当然,在滑动窗口中也可能发生丢包,分为两种情况
(一)ACK丢了
这种情况不用做任何处理,因为前面也说过后一个ACK可以涵盖前一个ACK的含义
(二)数据包丢了
可以看到,如果前面的数据包丢包了,就算后面的数据包到了ACK中的确认序号也还是前面丢失数据包的起始序号。
如果数据发送方连续收到3个同样的确认应答,就会进行快速重传,重新发送这部分数据。
直到主机A将1001~2000的数据包重新发送并且被接收,ACK中的确认序号才会更新。
2.2.4 核心机制五——流量控制
前面说到,滑动窗口可以在确保可靠性的前提下,批量发送一组TCP数据包,那是否批量发送的数据包越多越好呢?其实不是,如果批量发送的数据过多就无法确认可靠性了,因此TCP中引入了流量控制。
TCP支持根据接收端的处理能力, 来决定发送端的发送速度. 这个机制就叫做流量控制
那如何衡量接收端盖的处理能力呢?
答:在ACK中依赖一个字段——16位窗口大小,发送方会根据ACK中的窗口大小,动态的调整滑动窗口的窗口大小。
那16位窗口大小中的数据是怎么得到的呢?
答:在new 一个Socket对象的时候,会在操作系统内核中分配一个接收缓冲区,窗口大小的值,就是接收缓冲区中剩余空间的大小。
如果得到的窗口大小为0,怎么办?
答:
2.2.5 核心机制六——拥塞控制
流量控制是根据接收方的接收能力来控制的,但是两台主机进行通信过程中,两台主机可能并不是简单的连接,其中可能涉及到复杂的数据传输链路,如果数据链路过于繁忙,也会导致丢包,因此,拥塞控制就是根据数据链路的转发能力决定发送端的发送速度。
那么,如何衡量数据链路的转发能力?
答:通过实践来得出,如发送方先发送少量数据,如果没有出现丢包情况,就持续增大发送的数据量,如果出现丢包情况,就减少发送的数据量,动态的调整。具体的调整过程如下图:
因此,拥塞控制的工作过程可以描述为:慢启动——>指数增长——>线性增长——>出现丢包,窗口变为较小值。
2.2.6 核心特性七——延时应答
一般情况下,接收方在收到数据后会立即返回ACK,但是实际上我们可以通过延时应答来提高效率,如在前面计算窗口大小的时候,如果我们直接返回ACK也可以,但是否可能在ACK还没有到达对方的时候,接收缓冲区中的数据就又被读取了很多使剩余空间大小增大了呢?
很有可能,因此如果使用延时应答,就可以放回一个较大的窗口大小,提高了效率 。
但是,并不是所有的包都可以延时应答,一般
<1>数量限制:一般每个几个包就应答一次
<2>时间限制:超过最大延迟时间就应答一次
2.2.7 核心特性八—— 捎带应答
捎带应答是在延时应答的基础上建立的,它可以使得携带业务数据的报文和应答报文处于同一时期发送,这样一来就可以合并这两个报文了,起到提高效率得作用。
前面四次挥手过程中的FIN报文和ACK报文也后可能因为延时应答处于同一时机而被合并。
2.2.8 核心特性九——面向字节流
我们要讨论的问题其实并不是面向字节流本身,而是面向字节流所带来的问题——粘包问题, 即无法区分从哪个数据包到哪个数据包是一个完整的应用层数据包。
对于粘包问题,在TCP层面上误解,只能从应用层解决:
<1>约定包与包之间的分隔符,如以 /n 作为包的结束标记;
<2>约定包的长度,如将每个包的前4个字节用来表示数据包的长度;
在HTTP中,对于get请求,没有body,使用空行作为结束标记;对于post请求,有body,使用Content-Length记录body的长度。
2.2.9 核心特性十——异常情况的处理
在TCP中存在以下几种特殊情况:
<1>进程奔溃:和主动退出没有本质区别,都是是使进程释放,回收文件描述符表的每个资源(即调用socket的close方法),就会正常触发四次挥手(进程没了,但是TCP连接还在)
<2>主机关机(正常关机):本质上还是先杀死所有的进程,如果在关机前,四次挥手结束了,就是和<1>的情况相同;如果没有结束:
<3>主机掉电:
1.接收方掉电:
2.发送方掉电
<4>网线断开:站在接收方视角,就是发送方掉电
站在发送方视角,就是接收方掉电
相关文章:
网络世界的“交通规则”——TCP/IP(一)
一、非可靠传输的协议——UDP 1.1 UDP的报文格式 (1)UDP长度:表示整个UDP数据包的长度(报头载荷); (2)校验和:用于验证UDP数据包在传输过程中有没发生比特翻转ÿ…...
Excel中公式和函数的区别
Excel中公式和函数的区别 概念讲解例子公式函数 详细介绍函数面板最后再次进行演示操作文档 概念讲解 公式是用户自己编写的表达式,而函数是由Excel预定义的操作。公式可以包含各种数学运算符和逻辑表达式,函数则是执行特定任务的工具。公式可以引用其他…...
Node.js应用程序遇到了内存溢出的问题
vue 项目 跑起来,一直报错,内存溢出 在 文件node_modules 里 .bin > vue-cli-service.cmd 在依赖包这个文件第一行加上这个 node --max-old-space-size102400 "%~dp0\..\vue\cli-service\bin\vue-cli-service.js" %* node --max-old-s…...
MySQL关联关系理论与实践
MySQL 是一种关系型数据库管理系统,以其高性能、灵活性和易用性在开发者中广受欢迎。在 MySQL 中,数据存储以表格形式存在,表与表之间的关联关系构成了关系型数据库的核心。本篇文章将介绍 MySQL 关联关系的理论基础和常见实践,包…...
w138基于Spring Boot的宠物领养系统的设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...
AMBA-CHI协议详解(十三)
AMBA-CHI协议详解(一)- Introduction AMBA-CHI协议详解(二)- Channel fields / Read transactions AMBA-CHI协议详解(三)- Write transactions AMBA-CHI协议详解(四)- Other transac…...
组合的能力
在《德鲁克最后的忠告》一书中,有这样一段话: 企业将由各种积木组建而成:人员、产品、理念和建筑。积木的设计组合至少和其供给一样重要。……对于一切程序、应用软件以及附件来说,重要的是掌握将已有的软件模块组合的能力&…...
若依使用 Undertow 替代 Tomcat 容器
文章目录 需求提出应用场景解决思路注意事项完整代码第一步:在 ruoyi-framework/pom.xml 文件中进行依赖配置第二步:修改 application.yml 配置文件第三步:修改文件上传工具类 FileUploadUtils.java 运行结果 需求提出 在开发若依框架的前后…...
STC单片机 IAP在线升级功能的使用介绍
STC单片机 IAP在线升级功能的使用介绍 从官方给出的IAP在线升级的demo示例来看,目前支持的型号有STC8、STC12、STC15、STC32,前提是需要使用64K/128K容量的型号。只支持用户程序容量小于60K 的项目。 🌿IAP在线升级方式支持:CAN、…...
visio 0xC004F017
1.好久没用的电脑突然显示Office tool plus 的软件(visio)失效了 显示错误代码: 0xC004F017 2.在软件中重新配置 关键:KMS用了 kms.03k.org 3.在软件中重新配置 许可选择 4.一些额外的检查方法 打开控制台输入 slmgr /dlv 中间过程 还遇到过【错误…...
IoC设计模式详解:控制反转的核心思想
前言:在软件开发中,设计模式是一种经过验证的、在特定场景下能有效解决问题的解决方案。控制反转(Inversion of Control,IoC) 作为一种设计模式,通过让程序的控制流和对象管理反转,从而使得代码…...
C语言延时实现
C语言延时实现 在C语言中,delay 函数通过空循环实现延时,而不是像其他高级语言(如Python)直接使用 sleep 函数。这种实现方式是基于单片机的特性和C语言的底层操作。下面详细解释为什么这种空循环可以实现延时,以及它…...
CDP集群安全指南-静态数据加密
[一]静态数据加密的架构 CDP 支持两种加密组件,这些组件可以组合成独特的解决方案。在选择密钥管理系统(KMS)时,您需要决定哪些组件能够满足企业的密钥管理和加密需求。 CDP 加密组件 以下是 Cloudera 用于静态数据加密的组件描…...
# LeetCode Problem 2038: 如果相邻两个颜色均相同则删除当前颜色 (Winner of the Game)
LeetCode Problem 2038: 如果相邻两个颜色均相同则删除当前颜色 (Winner of the Game) 在本篇博客中,我们将深入探讨 LeetCode 第2038题——如果相邻两个颜色均相同则删除当前颜色。该问题涉及字符串处理与游戏策略,旨在考察如何在给定规则下判断游戏的…...
极限学习机 (Extreme Learning Machine, ELM) 算法详解与PyTorch实现
极限学习机 (Extreme Learning Machine, ELM) 算法详解与PyTorch实现 目录 极限学习机 (Extreme Learning Machine, ELM) 算法详解与PyTorch实现1. 极限学习机 (ELM) 算法概述1.1 单隐层前馈神经网络1.2 ELM的优势2. ELM的核心技术2.1 模型定义2.2 随机初始化2.3 最小二乘法2.4…...
【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列
系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录一、前言 🍃二、插入方式 💯2.1 单条插入实体2.2 批量 插入实体2.3 根据字典插入2.4 根据 Dat…...
什么是.net framework,什么是.net core,什么是.net5~8,版本对应关系
我不知道有多少人和我一样,没学习过.netCore,想要学习,但是版本号太多就蒙了,不知道学什么了,这里解释下各个版本的关系 我们一般开始学习微软的时候,都是开始学习的.netframework,常用的就是4…...
【数据库系统概论】数据库安全性和存取控制和视图机制以及审计、数据加密--复习极简总结版
1. 数据库安全性概述 1.1 数据库安全性的重要性 数据库安全性是保护数据库防止非法访问、数据泄露、篡改或破坏的能力。它随着数据共享和网络化应用的普及而变得至关重要。现实案例: 2016年,某国医院遭受黑客攻击,黑客加密数据库并勒索赎金…...
深入理解计算机系统—虚拟内存(3)
9.9 动态内存分配 虽然可以使用低级的 mmap 和 munmap 函数来创建和删除虚拟内存的区域,但是 C程序员还是会觉得当运行时需要额外虚拟内存时,用 动态内存分配器 更方便,也有更好的可移植性。 动态内存分配器维护着一个进程的虚拟内存区域&…...
Vue项目整合与优化
前几篇文章,我们讲述了 Vue 项目构建的整体流程,从无到有的实现了单页和多页应用的功能配置,但在实现的过程中不乏一些可以整合的功能点及可行性的优化方案,就像大楼造完需要进行最后的项目验收改进一样,有待我们进一步…...
MyBatis 与 MyBatis-Plus 的区别
MyBatis 和 MyBatis-Plus 都是用于简化 Java 应用程序与数据库交互的持久层框架,但它们在功能、易用性和性能优化方面存在显著差异。下面将详细介绍两者之间的区别,并通过具体的代码示例进行对比。 概述 MyBatis:作为一款经典的持久层框架&a…...
如何让大模型不再“已读乱回”——RAG技术助力生成更精确的答案
随着大语言模型(LLM) 的迅猛发展,越来越多的领域开始受益于其强大的自然语言处理能力。从写作到编程,LLM已成为我们日常生活和工作的得力助手。然而,这些看似无所不能的大模型,却有一个致命的弱点ÿ…...
Anaconda环境配置(Windows11+python3.9)
文章目录 一、 下载ANACONDA(1)点击**Free Download**。(2)点击“skip registration”,跳过登录。(3)下载对应操作系统的ANACONDA版本。 二、 安装ANACONDA(1)双击运行安…...
Spring Boot 中的虚拟线程
什么是虚拟线程? 虚拟线程(Virtual Threads)是 Java 19 引入的一项新特性,它属于 Project Loom 项目的一部分。与传统的线程(平台线程)不同,虚拟线程并不是由操作系统直接管理,而是…...
el-table 实现纵向多级表头
为了实现上图效果,最开始打算用el-row、el-col去实现,但发现把表头和数据分成两大列时,数据太多时会导致所在格高度变高。但由于每一格数据肯定不一样,为保持高度样式一致,就需要我们手动去获取最高格的高度之后再设置…...
探秘Kafka源码:关键内容解析
文章目录 一、以kafka-3.0.0为例1.1安装 gradle 二、生产者源码2.1源码主流程图2.2 初始化2.3生产者sender线程初始化2.4 程序入口2.5生产者 main 线程初始化2.6 跳转到 KafkaProducer构造方法 一、以kafka-3.0.0为例 打开 IDEA,点击 File->Open…->源码包解…...
Promise编码小挑战
题目 我们将实现一个 createImage 函数,该函数返回一个 Promise,用于处理图片加载的异步操作。此外,还会实现暂停执行的 wait 函数。 Part 1: createImage 函数 该函数会: 创建一个新的图片元素。将图片的 src 设置为提供的路径…...
PyQt实战——将pcm文本数据转换成.pcm的二进制文件
系类往期文章: PyQt5实战——多脚本集合包,前言与环境配置(一) PyQt5实战——多脚本集合包,UI以及工程布局(二) PyQt5实战——多脚本集合包,程序入口QMainWindow(三&…...
数据结构之线性表
1.什么是线性表 线性表的概念 定义:线性表是由n个数据元素组成的有限序列。每个数据元素(除了第一个和最后一个)都有且仅有一个前驱和一个后继。逻辑结构:线性表的逻辑结构可以用一个序列来表示,例如 L(a1,a2,…,an)。…...
量子行走的干涉性和叠加性
需要注意公式的一些特殊情况,举例,当dj2和dj3 dj2 dj3...
Fabric环境部署-安装Go
安装go语言环境 国内镜像:Go下载 - Go语言中文网 - Golang中文社区 1.选择版本下载后解压:注意go1.11.linux-amd64.tar.gz换成你下的 sudo tar zxvf go1.21.linux-amd64.tar.gz -C /usr/local 2.. 创建Go目录 mkdir $HOME/go 3. 用vi打开~./bashrc&…...
网站设计总结后期维护与更新的重要性
当我们谈论网站设计时,往往会聚焦在初始阶段的创意和实现上。然而,一旦网站建成并上线,后期维护与更新的重要性就显得尤为突出。一个网站的成功不仅取决于其初始设计,更在于持续的维护与更新。 首先,后期维护能够确保网…...
『SQLite』详解运算符
内容摘要:本节讲解运算符,包括:算术运算符、比较运算符、逻辑运算符和位运算符。 什么是运算符? 运算符是一个保留字或字符,主要用于 SQLite 语句的 WHERE 子句中执行操作。它用于指定 SQLite 语句中的条件࿰…...
计算机网络--根据IP地址和路由表计算下一跳
一、必备知识 1.无分类地址IPV4地址网络前缀主机号 2.每个IPV4地址由32位二进制数组成 3. /15这个地址表示网络前缀有15位,那么主机号32-1517位。 4.地址掩码(子网掩码):所对应的网络前缀为1,主机号为0。 5.计算下…...
如何使用 Ansys OptiSlang 同时运行多个参数化设计研究
了解如何通过使用 OptiSLang 同时运行多个参数化设计研究来提高工作效率。 了解参数化设计研究的重要性 参数化设计研究在工程和设计过程中起着至关重要的作用。通过改变输入参数,工程师可以探索不同设计选择的效果,并优化其设计以满足性能、成本或其他…...
《 拼数 》
题目描述 设有 nn 个正整数 a1…ana1…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。 输入格式 第一行有一个整数,表示数字个数 nn。 第二行有 nn 个整数,表示给出的 nn 个整数 aiai。 输出格…...
Memcached CAS 命令
Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作 它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。 检查是通过cas_token参数进…...
ElasticSearch基础-文章目录
ElasticSearch学习总结1(环境安装) ElasticSearch学习总结2(基础查询) ElasticSearch学习总结3(.NetCore操作ES) ElasticSearch学习总结4(sql操作ES) ElasticSearch学习总结5&am…...
后台管理系统动态面包屑Breadcrumb组件的实现
在后管理系统开发中,面包屑导航是一个非常常见的功能,通常是根据当前的 url 自动生成面包屑导航菜单,当跳转路由发生变化时,面包屑导航都会随之发生变化,即动态面包屑。 要完成动态面包屑我们需要制作一个动态数组&am…...
java项目之校园管理系统的设计与实现(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园管理系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: springboot校园…...
浅谈棋牌游戏开发流程八:运维与数据分析
一、前言:为什么“云端运维”和“数据分析”如此重要? 在前面几篇文章中,我们已经从客户端、后端架构、用户系统、房间匹配与对局流程、数据库设计与优化、支付与充值、安全与反外挂等角度,系统性地搭建了一个棋牌游戏的基本框架…...
uniapp:微信小程序文本长按无法出现复制菜单
一、问题描述 在集成腾讯TUI后,为了能让聊天文本可以复制,对消息组件的样式进行修改,主要是移除下面的user-select属性限制: user-select: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms…...
跨物种筛选同源基因
工具:R:biomaRt 原始文件:human、mouse、macaque、marmoset四个物种的gene list,有些是用ensembl ID,有的是用gene name来表示。 目的:找到四个物种的gene list之间的1v1同源基因 1. 找到物种间的1v1同源…...
大模型数据采集和预处理:把所有数据格式,word、excel、ppt、jpg、pdf、表格等转为数据
大模型数据采集和预处理:把所有数据格式,word、excel、ppt、jpg、pdf、表格等转为数据 文本/图片/表格,分别提取处理工具选择不同格式文件,使用不同工具处理1. 确认目标2. 分析过程(目标-手段分析法)3. 实现步骤4. 代码封装效果展…...
k8s修改存储目录-介绍
k8s修改存储目录-介绍 文章目录 k8s修改存储目录-介绍总结:介绍指定 Docker 或 containerd 镜像和容器存储目录Docker 存储目录containerd 存储目录 指定 Kubelet 的存储目录指定 Pod 和容器存储目录 docker 运行时,迁移目录实操:https://blo…...
【电源专题】为什么测试电源的SW波形上冲振荡之前的0V电位要先来个小的下降
在同步电源的开关节点SW波形测试中,你可能会发现周期性的SW波形在上升前的一小段时间时间内会有一个小小的下跌,这个下跌会低于0V。那么这个下跌是怎么来的呢? 如下所示为某降压转换器的SW开关节点波形: 其展开后可以看到在上升之前有20ns左右的时间,SW电压是下跌…...
常见的反规范化技术
在数据库设计中,数据规范化和反规范化是两种重要的策略,它们在一定程度上存在权衡。规范化通过组织表结构,减少数据冗余,提高数据一致性和降低更新异常,使数据存储更加高效、可靠。然而,过度的规范化会导致…...
Linux中隐藏操作身法
从历史记录中删除指定的命令 假设历史记录中已经包含了一些你不希望记录的命令。这种情况下我们怎么办?很简单。通过下面的命令来删除: history | grep "keyword"例如:history | grep set o history 批量第二条和第四条删除: sed…...
Transformer知识梳理
Transformer知识梳理 文章目录 Transformer知识梳理什么是Transformer?语言模型迁移学习 Transformer结构注意力层原始结构 总结 什么是Transformer? 语言模型 Transformer模型本质上都是预训练语言模型,大部分采用自监督学习(S…...
Nexus Message Transaction Services(MTS)
Nexus 系列交换机遇到以下情形时,可以尝试查看是否是 MTS 消息卡在缓冲区过多,因为 MTS 负责处理模块内以及跨模块(包括跨管理引擎)的各服务之间的消息路由和排队。 • CPU 高 • 命令行无响应、响应慢 • 控制平面中断 • 流量问…...