当前位置: 首页 > news >正文

计算机网络第九章——数据链路层《流量控制和可靠传输》

一、回顾概念

前面上一章讲了数据链路层的《差错控制》,那么回顾一下差错控制和可靠传输的区别:

  • 差错控制发现一个帧里的位错(比特错)
    • 检错(奇偶校验码、CRC循环冗余校验码):接收方发现错后丢帧或让发送方重传
    • 纠错(海明码):接收方发现错后自己改
  • 可靠传输发现并解决帧错,帧错包括
    • 帧丢失:解决办法是设置 “超时计时器”,当 “计时器超时” ,发送方就自动再发一次
    • 帧重复:解决办法是给帧设置编号(数据帧 和 确认帧 都要设置编号,后面会细讲)
    • 帧失序:也是给帧设置编号、还有3大滑动窗口机制(停止等待协议、GBN协议、SR协议)重要!!!

注意了!!根据【有线】【无线】2种信道,数据链路层会分别向上提供【不可靠传输服务】【可靠传输服务】

  • 因为有线的以太网(像IEEE802.3、CSMA/CD)通常误码率极低,就算有问题上层也可以自己搞定,不需要数据链路层提供可靠传输
  • 无线网络(像IEEE802.11、CSMA/CA)容易受到干扰、误码率大,必须要数据链路层可靠传输

二、可靠传输机制基本解决方案

1、“一问一答”的确认机制

        首先我们需要知道,数据链路层通信时我们需要用 “一问一答” 的形式通信,发送方发的信息接收方必须回复收到了!不能 “冷暴力” 发送方!

例子: 

你要是敢不回你女朋友的信息就死定了,数据链路层同理,每发一句都要回复:“收到!”

所以数据链路层规定:

  • 发送方发过去的【数据】——【DATA】
  • 接收方返回【收到】——【ACK】
  • 如果接收方发现有问题,也得回复【有问题】——【NAK】(仅在SR协议中用到)

2、对于【帧丢失】问题

        就是设置【超时计时器】,如果发送方发了信息等了很久还没收到接收方的回复ACK,超时了就再发一次上一个数据帧

(就像你女朋友问你一个事,结果网卡没发出去,看你半天不回复,她就再问你一遍)

3、对于【帧重复】和【帧失序】问题

        各个帧的传输速度不一样,可能有的排在后面的帧会比前面的帧先到达接收方;由于网络故障接收方的ACK也可能超时回复,从而导致发送方在超时后重复发了一样的数据帧

要解决这些问题,最基本的方法就是【给帧编号】!!而且要求【发送方数据帧】和【接收方回复帧】都要编号!!!!

 ;

好理解的例子:(这里暂时忘了给发送方的数据帧编号,各位知道就行)

三、滑动窗口机制 (重点)

1、滑动窗口概念

【滑动窗口机制】是数据链路层控制【可靠传输】【流量控制】的流程和手段!!!

简单概念,不是考试重点,但是要看明白是啥意思:

简单说就是:

  • 发送方只能发他的【发送方的窗口大小WT以内】的数据帧,如果发送方发的速度太快超出了窗口,那超出的帧不让发
  • 接收方只接收【接收方的窗口大小WR以内】的数据帧,发送方如果发得太快,超出的帧接收方可以不要丢掉

        就像你的碗就那么大,但是你妈一直在给你夹菜,那你就得控制你妈了:你的碗盛满的时候还夹菜给你就丢掉;你妈也要限制在一个范围内给你夹菜,比如已经范围是3个鸡腿,已经夹了3个鸡腿之后就不准再给我夹第四个了!!

        直到你把碗里的吃完,开始第二碗开干、你妈也开始夹下一轮的菜:第4个、第5个、第6个鸡腿

对于如何给帧编号

         我们并不知道一个分组数据有多少帧?而且也不知道各个分组的帧一不一样?那么我们就规定了帧编号使用n位,这n位需要满足:WT + WR  <=  2^n

        回想计算机组成原理知识点,3bit能表示2^3=8进制(0~7)、4bit能表示2^4=16进制(0~15),所以nbit可以表示2^n个十进制数,一样的道理

2、滑动窗口3个协议

3、S-W停止等待协议

(1)记住两个重点:

  • 1、严格要求【一问一答】,发送窗口接收窗口固定死是1(帧)
  • 2、正因为是因为发送窗口接收窗口固定死是1(帧),所以帧的编号是需要【1bit】(0或1)

(2)具体流程和细节(了解即可)

        之所以帧编号取1位的原因就是,发送窗口和接收窗口距离始终不超过1,发送窗口随着接收窗口往后移动才移动

        当接收方收到错误的数帧,可以选择直接丢掉并不返回ACK,然后让发送方时钟超时重传正确的数据帧;

        如果发送方的数据帧丢失,则接收方也不会返回ACK,直到时钟超时再传一次

        而接收方的回复确认帧ACK如果丢失了,但是接收窗口确实收到了数据所以会往后移动,而发送方没收到ACK则不会往后移动,超时后重传这个重复数据帧,那么因为有【帧编号】,接收方会检查是否重复了,是的话就丢弃并返回ACK,这样发送方再正常往后移动

此时接收窗口在数据帧【编号0】处,但发送方却发【编号1】,说明【编号1】已经发过了重复了,不然接收窗口不可能自己到【编号0处】

(3)停止等待协议的信道利用率

如图所示:

        去分析这个公式我们可以知道,要想让信道利用率大,那么分母要小、分子要大;反正则信道利用率小。

  • 那么分母大的情况通常是RTT影响,当两个主机距离贼远,那信道距离就变长了,从而往返时延就大!!
  • 而分子小的情况就是发送方的传输速率很高,从而导致传输时延小(传输时延 = 发送数据大小 / 传输速率)
  • 简单来说就是看一次信息发送完成里,【传输(发送)时延】占【总的时间(接收双方传输时延 和 往返传播实验)】的比重

记住这种通过【重传-确认】的自动化机制,通常叫【自动请求重传ARQ协议】

例题

4、GBN回退N帧协议

(1)概念理解

GBN全拼Go-Back-N,对应中文回退N帧

S-W停止等待协议里,发送方需要等待接收方的ACK回复,即便是网络极好的理想状态依旧太慢了,信道利用率低;所以GBN创造了“流水线”的协议,无需等待接收方ACK,发送方直接一直发数据,同时接收方也会返回ACK

(2)重点!

  • 1、3个机制的总体要求是 WT + WR <= 2^n,不过回退N帧协议只需要记住:发送窗口WT <= 2^n - 1接收窗口WR固定死只有 1
  • 2、累计确认机制:只有GBN回退N帧有,就是只要发送方收到第N个ACK,那么自动默认前面第N个和他之前的数据帧接收方都已经接收到了!!!
  • 3、最理想状态可以实现【100%的信道率】

(3)流程细节

正常情况

发送方正常连贯往前发,收到第N-1个ACK之后,发送窗口就会往前移动到第N位; 

注意这里发送窗口的每一帧都有一个计时器,分别计时这一帧的ACK返回是否超时

发送方丢失情况

        当发送方的数据帧丢失了,接收窗口没收到就不会往前移动,也不会发ACK确认帧,同时发送方超出接收窗口的帧还在发,而接收方接收到超过接收窗口的帧,就会丢掉

        然后再次返回接收窗口的上一个ACK确认帧,此时发送方就知道这个编号的ACK和他之前的帧都已顺利被接收,只需要把发送窗口移动到ACK帧编号的前一位

        然后因为没有丢失帧的位置没有收到ACK确认,从而超时重传,这样就又达到了完整流畅的流水线

注意:【回退N帧】不是指滑动窗口回退,而是指【回退到第N位重新传数据帧!!!!】

确认帧ACK丢失

如果接收方的ACK确认帧丢失,接收窗口移动到下一位

        而此时前面发送方的数据帧部分一直没收到ACK而超时重传,而当前在最前面的接收窗口没有收到对应自己编号的数据帧,就会知道这些都是非法的重复帧,直接丢弃,并再次发送自己接收窗口的前一个的ACK确认帧

        发送方收到后就移动到这第N个ACK编号的后一位N+1,然后再重新开始传输,又恢复了正常的流水线

(4)为什么一定要发送窗口是WT <= 2^n - 1(了解即可)

看例子,假设先让WT = 2^n > 2^n-1

帧编号取3位,则滑动窗口是2^3 = 8位

假设所有的ACK确认帧都丢失

        那么当前接收窗口往前移动一位之后,居然对应着下一组编号的编号0,然后前面的发送方的数据帧因为没收到ACK开始超时重传,第0位传过来刚好对应接收窗口编号0,那么就会这么误打误撞错着传下去

但如果发送窗口是2^3-1 = 8 - 1 = 7

那么第6位的接收窗口移动一位之后在第7位

        发送方数据帧超时重传,但是和接收窗口编号不对应,那么接收窗口就会返回它的上一个ACK编号6

然后发送方就明白0~6都已经接收到了,直接移动到第7位开始传就行了

例题

5、SR选择重传机制

SR全拼:Selective Repeat

(1)重点:

  • 1、发送窗口和接收窗口都大于1,但是!发送窗口WT >= 接收窗口WR而且WT + WR <= 2^n(因为发送窗口是根据接收窗口而移动的,接收窗口只有接收了对应编号的数据帧才会动,那如果发送窗口比接收窗口小,那接收窗口右边永远获得不到发送方的数据帧,接收窗口也永远不会动,从而发送窗口也永远不动,死循环。。。)
  • 2、和GBN回退N帧不同的是,SR协议只能对应每一个数据帧都回复确认帧ACK
  • 3、发送方每个数据帧也都有计时器,哪个数据帧没收到确认帧ACK就超时重传(可以多个同时一起传),只要是在发送窗口和接收窗口之内,相当于每一对发送帧和确认帧完全是一对一关系,自己计时自己传

不满足,因为WT < WR

(2)细节流程

正常情况

通常情况都是WT == WR

然后每个编号数据帧对应确认帧,都有自己的计时器,发送窗口连贯着发过去数据帧、然后确认帧也连贯着返回,发送方可以不用等待ACK确认帧,但是每一个数据帧

数据帧丢失

数据帧丢失的情况,各个帧计时器会检测是哪几个帧没有返回ACK而导致超时

然后接收方和发送方都只能向后移动到【第一个没有返回ACK而超时的帧】

然后发送方重传,而移动完后只要在发送窗口内的数据帧都可以一起向接收方传

数据帧错误

SR可以主动地返回NAK,告诉发送方赶紧重传一个数据帧

这样就减少了计时器超时地这个时间,是SR地特点

同理,接收方和发送方只会向后移动到【第一个要重传的帧】的位置

最后移动到最后一个收到的确认帧ACK的位置的后一位,开启下一轮传数据

确认帧丢失

        当确认帧丢失后,因为前面说了数据帧和确认帧是一对一关系,接收窗口会不管那么多直接移动到【最后一ACK确认帧的后一位】,因为他只会以为自己回复了

发送窗口会移动到【第一个没收到ACK】的数据帧位置

然后没收到ACK的数据帧位置超时重传,同时进加入到发送窗口的数据帧也可以开始发数据

接收方收到对应接收窗口编号的【最新的数据帧】只会,还是自顾自往后移动

而前面【超时重传的数据帧】因为不在接收窗口,会被认为是【重复数据帧】

那么直接返回【确认帧ACK】

发送方那些超时重传的数据帧收到ack确认帧之后,才算满意,这时候发送窗口移动到【最后一个ACK的后一位】

例题

相关文章:

计算机网络第九章——数据链路层《流量控制和可靠传输》

一、回顾概念 前面上一章讲了数据链路层的《差错控制》&#xff0c;那么回顾一下差错控制和可靠传输的区别&#xff1a; 差错控制&#xff1a;发现一个帧里的【位错&#xff08;比特错&#xff09;】 检错&#xff08;奇偶校验码、CRC循环冗余校验码&#xff09;&#xff1a;接…...

Zephyr 调试实用指南:日志系统、Shell CLI 与 GDB 全面解析

本文深入讲解 Zephyr 的调试利器&#xff0c;包括统一日志系统&#xff08;logging subsystem&#xff09;、内置命令行&#xff08;Shell CLI&#xff09;、与 GDB 调试集成方法&#xff0c;帮助开发者快速定位问题、分析运行时行为&#xff0c;实现高效开发与排障。 一、日志…...

【知识图谱提取】【阶段总结】【LLM4KGC】LLM4KGC项目提取知识图谱推理部分

文章目录 前言LLM4KGC的三个部分显卡使用效果前言 之前在学习基于大模型的知识图谱提取,就找到了LLM4KGC这个项目: 项目地址: https://github.com/ChristopheCruz/LLM4KGC/ 总体来说,这个项目没有什么比较高深的idea,年份也比较古老,但确实挺适合入手的。主要是绝对简…...

基于YOLO的智能车辆检测与记录系统

基于YOLO的智能车辆检测与记录系统 摘要 本报告总结了智能车辆检测系统的开发工作&#xff0c;主要包括车辆数据标注、YOLO模型训练及QT交互系统搭建三部分。通过使用专业标注工具完成车辆目标数据集的标注与预处理&#xff0c;基于YOLO模型构建车辆检测算法并优化训练流程&a…...

5.2 Qt Creator 使用FFmpeg库

一、目录结构 ├─3rdparty # 第三方依赖库 │ └─ffmpeg-4.4.3 # ffmpeg库 │ ├─mingw # 用MinGW64编译的库 │ │ ├─bin │ │ ├─include │ │ └─lib │ └─msvc # 用MSVC编译的库 │ ├─bin │ …...

C++基础练习 sort函数,用于排序函数

题目&#xff1a; https://acm.hdu.edu.cn/showproblem.php?pid2039 解答&#xff1a; #include <iostream> #include <cmath> #include <algorithm> using namespace std;double a[3]; int main(){int n;cin>>n;while(n--){cin>>a[0]>>…...

【Docker 08】Compose - 容器编排

&#x1f308; 一、Docker Compose 介绍 ⭐ 1. Docker Compose 是什么 Docker Compose 是由 Docker 官方提供的一个用于定义和运行多容器应用的工具&#xff0c;它让用户可以通过一个 YAML 文件&#xff08;通常是 docker-compose.yml&#xff09;来配置应用所需要的服务&…...

docker执行yum报错Could not resolve host: mirrorlist.centos.org

解决办法&#xff1a; -- 依次执行以下命令cd /etc/yum.repos.d/sed -i s|#baseurlhttp://mirror.centos.org|baseurlhttp://vault.centos.org|g /etc/yum.repos.d/CentOS-*sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-*yum update -yecho "export LC_ALL…...

信贷域——信贷授信业务

摘要 本文详细介绍了信贷授信业务&#xff0c;包括其核心目标、典型流程、不同机构授信流程的对比、授信业务的其他类型以及授信模块的技术实现。信贷授信是金融机构在放贷前对客户信用额度的评估与审批流程&#xff0c;旨在控制风险、合理设定额度和期限、确保合规&#xff0…...

python的校园兼职系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…...

深度剖析 PACK_SESSIONID 实现原理与安全突破机制

&#x1f310; 深度剖析 PACK_SESSIONID 实现原理与安全突破机制 &#x1f5bc;️ 1. 完整数据处理流程 #mermaid-svg-TW7jVIcz81hCZVS9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-TW7jVIcz81hCZVS9 .error-ico…...

从0开始学习计算机视觉--Day02--数据驱动

上次我们在课程里了解到&#xff0c;亚马逊网站在当时构建了一个在那时候最大的供AI训练的数据集&#xff0c;为了推广这个测试&#xff0c;他们举办了比赛邀请了许多的参赛者&#xff0c;识别图片的标准是输出的类别中只要在前面五个里包含了正确答案就算识别成功。在这个过程…...

【LeetCode#第198题】打家劫舍(一维dp)

198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#…...

stm32串口(uart)2转发到串口(uart)3实现

今天博主在用kelil5写stm32的程序时遇到了一个全局变量因为在中断和任务切换时没有加 volatile 修饰&#xff0c;导致任务检测不到标志位变化&#xff0c;无法实现效果的问题。 全部代码&#xff1a; /* USER CODE BEGIN Header */ /***************************************…...

数据结构——函数填空题

链队出队入队 入队&#xff1a;新指针p赋给队尾的下一个&#xff0c;再赋给队尾 出队&#xff1a;队首指针赋给p&#xff0c;后移 p的下一个赋给队首指向的下一个 若队尾p&#xff0c;则证明首尾相连为1个 字符串匹配算法 二叉树 统计二叉树度为1的节点 树T为空&#xff0…...

什么是跨域问题?后端如何解决跨域问题?

跨域问题是指浏览器为了安全&#xff0c;对不同域&#xff08;包含不同协议、不同端口或不同主机名&#xff09;的请求进行限制&#xff0c;从而导致请求无法正常访问后端接口。 跨域问题的产生源于浏览器的同源策略&#xff08;Same-Origin Policy&#xff09;&#xff0c;这…...

使用ccs生成bin

CCS12.6 编译生成BIN文件正确方法_ccs生成bin文件-CSDN博客...

Python 邻接表详细实现指南

邻接表是图数据结构的一种高效表示方法&#xff0c;特别适合表示稀疏图。下面我将用 Python 详细讲解邻接表的多种实现方式、操作方法和实际应用。 一、邻接表基础概念 邻接表的核心思想是为图中的每个顶点维护一个列表&#xff0c;存储与该顶点直接相连的所有邻接顶点。 邻…...

FVISION 未来视界工作室:AI驱动的创新与智能外包平台

大家好&#xff0c;今天给大家介绍一个非常有意思的AI创新平台——FVISION 未来视界工作室。如果你正在寻找高效、智能、前沿的数字化工具和服务&#xff0c;这里一定有你想要的答案&#xff01; &#x1f31f; 平台简介 FVISION 未来视界工作室专注于AI驱动的创新应用开发&am…...

领域驱动设计(DDD)【3】之事件风暴

文章目录 说明一 事件风暴理论知识1.1 事件风暴的核心目标1.2事件风暴的关键步骤1.2.1 准备工作1.2.2 核心流程1.2.3 事件风暴的输出 1.3 事件风暴的优势1.4 常见问题Q1&#xff1a;事件风暴适合所有项目吗&#xff1f;Q2&#xff1a;事件风暴后如何落地&#xff1f;Q3&#xf…...

3.10 坐标导航

1.编写代码 新建文件nav_clienr.cpp编写代码 #include<ros/ros.h> #include<move_base_msgs/MoveBaseAction.h> #include<actionlib/client/simple_action_client.h>typedef actionlib::SimpleActionClient<move_base_msgs::MoveBaseAction> MoveBas…...

TensorFlow 安装与 GPU 驱动兼容(h800)

环境说明TensorFlow 安装与 GPU 驱动兼容CUDA/H800 特殊注意事项PyCharm 和终端环境变量设置方法测试 GPU 是否可用的 Python 脚本 # 使用 TensorFlow 2.13 在 NVIDIA H800 上启用 GPU 加速完整指南在使用 TensorFlow 进行深度学习训练时&#xff0c;充分利用 GPU 能力至关重要…...

WPF调试三种工具介绍:Live Visual Tree、Live Property Explorer与Snoop

WPF调试工具详解&#xff1a;Live Visual Tree、Live Property Explorer与Snoop 1. Live Visual Tree (实时可视化树) 简介 Live Visual Tree是Visual Studio内置的WPF调试工具&#xff0c;允许开发者在应用程序运行时检查可视化树结构&#xff0c;查看控件的层次关系及其状态。…...

用OBS Studio录制WAV音频,玩转语音克隆和文本转语音!

言简意赅的讲解OBS Studio解决的痛点 随着AI技术的快速发展&#xff0c;语音克隆与文本生成语音技术越来越受欢迎。无论你想要制作个人虚拟主播&#xff0c;还是给自媒体视频配音&#xff0c;拥有高质量的原始音频都是关键。本文详细教你使用免费且功能强大的软件——OBS Stud…...

5.3 VSCode使用FFmpeg库

一、VSCMake 1.1 使用ffmpeg动态库 项目目录结构&#xff1a; ./ ├── 3rdparty # 第三方依赖库 │ └── ffmpeg_4.4.1 │ ├── include # 头文件 │ ├── lib # 静态库库 │ └── share ├── build # 编译目…...

【Datawhale组队学习202506】零基础学爬虫 02 数据解析与提取

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录前言2.1 概述2.2 re 解析2.3 bs4 解析2.4 xpath 解析总结 前言 Datawhale是一个专注于…...

[muduo] ThreadPool | TcpClient | 异步任务 | 通信测试

第九章&#xff1a;线程池&#xff08;ThreadPool&#xff09; 在第八章《TcpServer》中&#xff0c;我们了解到muduo::net::TcpServer通过EventLoop线程池处理入站连接。 这些EventLoop线程主要负责网络I/O&#xff1a;套接字读写和定时器处理&#xff0c;由Poller和Channel…...

探索 Vue 替代方案

Vue vs React vs Angular 在快速迭代的前端世界&#xff0c;Vue、React和Angular三大框架的竞争从未停止。2025年的今天&#xff0c;它们各自进化出了怎样的面貌&#xff1f;让我们深入剖析它们的核心差异&#xff0c;助你做出明智的技术选型。 Vue.js 完整的基于组件的UI框…...

大模型的开发应用(十二):RAG 与 LlamaIndex基础

这里写目录标题 1 LlamaIndex 简要介绍1.1 核心价值1.2 核心组件1.3 核心流程1.4 为什么要用 LlamaIndex&#xff1f;1.5 典型应用场景1.6 与类似工具对比1.7 安装1.8 学习资源 2 文档解析与 Document 对象2.1 示例文件与代码2.2 Document 对象的核心特性2.3 在 RAG 工作流程中…...

Java面试题025:一文深入了解数据库Redis(1)

欢迎大家关注我的JAVA面试题专栏&#xff0c;该专栏会持续更新&#xff0c;从原理角度覆盖Java知识体系的方方面面。 一文吃透JAVA知识体系&#xff08;面试题&#xff09;https://blog.csdn.net/wuxinyan123/category_7521898.html?fromshareblogcolumn&sharetypeblogco…...

Web攻防-XSS跨站Cookie盗取数据包提交网络钓鱼BEEF项目XSS平台危害利用

知识点&#xff1a; 1、Web攻防-XSS跨站-手工代码&框架工具&在线平台 2、Web攻防-XSS跨站-Cookie盗取&数据提交&网络钓鱼 演示案例-WEB攻防-XSS跨站-Cookie盗取&数据提交&网络钓鱼&Beef工具 1、XSS跨站-攻击利用-凭据盗取 条件&#xff1a;无防…...

(LeetCode 面试经典 150 题) 169. 多数元素(哈希表 || 二分查找)

题目&#xff1a;169. 多数元素 方法一&#xff1a;二分法&#xff0c;最坏的时间复杂度0(nlogn)&#xff0c;但平均0(n)即可。空间复杂度为0(1)。 C版本&#xff1a; int nnums.size();int l0,rn-1;while(l<r){int mid(lr)/2;int ans0;for(auto x:nums){if(xnums[mid]) a…...

71、单元测试-Junit5简介

71、单元测试-Junit5简介 # JUnit 5 简介 JUnit 5 是 Java 平台上最流行的单元测试框架之一&#xff0c;是 JUnit 的重大升级版本&#xff0c;引入了许多新特性和改进&#xff0c;旨在提供更现代化、灵活和强大的测试体验。 ## 主要组成部分 JUnit 5 由三个模块组成&#xff1a…...

IEC61850 一致性测试中的 UCA 测试

一、IEC61850 与 UCA 的关系背景 标准演进&#xff1a;IEC61850 是电力系统自动化领域的国际通信标准&#xff0c;其发展与美国 UCA&#xff08;User Communications Architecture&#xff09;标准密切相关。2001 年&#xff0c;UCA 国际用户组织与 IEC 合作&#xff0c;将 UC…...

ProtoBuf:proto3 语法详解

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;ProtoBuf 在语法详解部分&#xff0c;依旧使⽤项⽬推进的⽅式完成讲解。这个部分会对通讯录进⾏多次升级&#xff0c;使⽤2.x表⽰升级的版本&#xff0c;最终将会升级如下内容&#xff1a; 不再打…...

博图SCL语言GOTO语句深度解析:精准跳转

在SCL编程中&#xff0c;**GOTO语句**是控制流程的底层工具&#xff0c;它允许程序无条件跳转到指定的**标签位置**。虽然现代编程中较少使用&#xff0c;但在特定工业场景下仍能发挥独特价值。 GOTO语句核心机制 基本语法结构 // 定义标签 <标签名>: // 跳转指令 GOTO…...

面试题-在ts中有两个类型,一个是a,一个是b,这两个联合起来就是c,如何实现联合

在 TypeScript 中&#xff0c;若要将两个类型 a 和 b 联合成一个新类型 c&#xff0c;可以使用 联合类型&#xff08;Union Type&#xff09; 或 交叉类型&#xff08;Intersection Type&#xff09;&#xff0c;具体取决于你的需求&#xff1a; 一、联合类型&#xff08;Unio…...

Mac电脑-触摸板增强工具-BetterTouchTool

BetterTouchTool mac 触摸板增强工具&#xff0c;允许用户使用各种手势来控制其计算机。 Bettertouchtool mac是一个小而高效的macOS应用程序&#xff0c;旨在帮助您为手势定义快捷方式。 此外&#xff0c;Bettertouchtool可用于使用常规鼠标和键盘快捷键&#xff0c;并提供伴…...

MySQL误删数据急救指南:基于Binlog日志的实战恢复详解

背景 数据误删是一个比较严重的场景 1.典型误操作场景 场景1&#xff1a;DELETE FROM orders WHERE status0 → 漏写AND create_time>‘2025-06-20’ 场景2&#xff1a;DROP TABLE customer → 误执行于生产环境 认识 binlog 1.binlog 的核心作用 记录所有 DDL/DML 操…...

API网关Apisix管理接口速查

&#x1f9ed; 管理接口总体分类&#xff08;基于 REST API&#xff09; 资源类别接口路径前缀功能说明路由&#xff08;Routes&#xff09;/apisix/admin/routes/{id}定义 HTTP 请求的匹配规则及转发目标服务&#xff08;Services&#xff09;/apisix/admin/services/{id}封装…...

React 组件通信

父传子 函数式组件 function Footer(props){const [count,setCount] useState(0)const {name,age} propsconst onClick ()>{setCount(count1)}return (<div><button onClick{()>{onClick()}}>点此1</button><div>{count}</div><di…...

Zephyr 电源管理机制深度解析:从 Tickless Idle 到平台 Suspend 实践

本文系统解析 Zephyr 的电源管理机制&#xff0c;包括 Tickless Idle 模式、系统 suspend/resume 生命周期管理、平台级功耗优化 Hook、自定义设备电源域&#xff0c;以及如何结合低功耗 SoC 实现最小化功耗设计。全文超过 5000 字&#xff0c;适合构建对功耗敏感的 IoT、BLE、…...

clickhouse-server连不上clickhouse-keeper的问题记录

背景 想简单部署一个1 shard 2 replica&#xff0c;1keeper的集群。 有两个虚拟机&#xff1a;192.168.1.3&#xff0c;192.168.1.6。 192.168.1.3&#xff1a;部署1个ck&#xff0c;1个keeper 192.168.1.6&#xff1a;部署1个ck 192.168.1.3和192.168.1.6的ck组成1个shar…...

Python 数据分析与可视化 Day 3 - Pandas 数据筛选与排序操作

&#x1f3af; 今日目标 掌握 DataFrame 的条件筛选&#xff08;布尔索引&#xff09;学会多条件筛选、逻辑运算熟练使用排序&#xff08;sort_values&#xff09;提升数据组织力结合列选择进行数据提取分析 &#x1f9ea; 一、列选择与基本筛选 ✅ 选择单列 / 多列 df[&quo…...

Android NDK下载链接及配置版本

Android NDK下载链接及配置版本 https://github.com/android/ndk/releases 在build.gralde里面这样配置ndk具体版本号&#xff1a; android {ndkVersion "27.0.12077973" } Android Studio报错&#xff1a;Could not move temporary workspace () to immutable locat…...

Mac Parallels Desktop Kali 2025 代理设置

Mac Parallels Desktop Kali 2025 代理设置 核心步骤&#xff1a; kali设置桥接wifi 查看kali和主机ip 运行命令ifconfig查看kali ip&#xff1a; mac主机ip&#xff1a; kali设置proxy ip填写主机ip&#xff0c;port为主机proxy端口 enjoy...

Python 的内置函数 hash

Python 内建函数列表 > Python 的内置函数 hash Python 的内置函数 hash() 是一个非常有用的工具函数&#xff0c;主要用于获取对象的哈希值。哈希值是一个固定长度的整数&#xff0c;代表该对象的唯一标识。在 Python 中&#xff0c;hash() 函数常用于字典键值、集合元素等…...

文生视频(Text-to-Video)

&#x1f552; 生成时间&#xff1a;每张图大概 10–60 秒&#xff08;取决于设备&#xff09; ✅ 二、文生视频&#xff08;Text-to-Video&#xff09; 以下项目中&#xff0c;很多都基于 SD 模型扩展&#xff0c;但视频生成复杂度高&#xff0c;生成时间一般 超过 30 秒&am…...

(LeetCode 面试经典 150 题) 80. 删除有序数组中的重复项 II (双指针、栈)

题目&#xff1a;80. 删除有序数组中的重复项 II 思路&#xff1a;左指针 left 类似于指向栈顶的下一个待填的元素&#xff0c;每次遍历只需看当前元素nums[i]和栈顶的下一个元素nums[left-2]是否相等&#xff0c;不等就可以插入栈当中。时间复杂度0(n)。 C版本&#xff1a; …...

【舞蹈】编排:如何对齐拍子并让小节倍数随BPM递减

音的强弱关系 当前划分编排最小单位的代码的分析 📊 代码逻辑分析 ✅ 完整性方面 代码逻辑相对完整,包含了: 结构段落分析(intro, verse, chorus等)强拍时间点提取歌词时间轴处理AI增强的编舞建议生成⚠️ 主要问题 1. 强拍对齐逻辑不够精确 # 当前代码只是简单提取…...