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

【网络原理】从零开始深入理解TCP的各项特性和机制.(二)

在这里插入图片描述

本篇博客给大家带来的是TCP/IP原理的知识点,重点以TCP为主,接续上篇.
🐎文章专栏: JavaEE初阶
🚀若有问题 评论区见
欢迎大家点赞 评论 收藏 分享
如果你不知道分享给谁,那就分享给薯条.
你们的支持是我不断创作的动力 .

王子,公主请阅🚀

  • 要开心
    • 要快乐
      • 顺便进步
  • 1. TCP传输过程的重要机制.
    • 1.1 滑动窗口
    • 1.2 流量控制
    • 1.3 拥塞控制
    • 1.4 延迟应答
    • 1.5 捎带应答
    • 1.6 面向字节流
    • 1.7 粘包问题
    • 1.8 异常情况
  • 2. TCP和UDP的对比

要开心

要快乐

顺便进步

1. TCP传输过程的重要机制.

1.1 滑动窗口

Ⅰ 什么是滑动窗口?

上篇讲的前三个机制(确认应答,超时重传,连接管理)都是在保证 tcp 的可靠传输. 前三个机制在保证tcp可靠传输的同时,也影响了传输效率,传输变慢. 滑动窗口机制则是为了减小这种影响.

在这里插入图片描述

确认应答机制, 对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段. 这样做有一个比较大的缺点, 就是性能较差. 尤其是数据往返的时间较长的时候. 如果能够一次发送多条数据,就可以大大的提高性能.

在这里插入图片描述

① 一次发送多条数据, 也不是想发多少就发多少的,一次发的数量存在上限,我们把一次最多能发的数据条数称为窗口大小. 上图的窗口大小就是4000个字节.

在这里插入图片描述

② 如上图,主机A向主机B批量发送了四份数据, B返回给A一个ACK,A的窗口就往后移动一位.

Ⅱ 在传输过程中丢包了该如何解决?

① 数据包已经抵达,ACK丢包了.

在这里插入图片描述

这种情况下, 部分ACK丢了并不要紧, 因为可以通过后续的ACK进行确认;
如果1001这个ACK丢了,但是2001ACK正常传输, 2001成功传输意味着 2001之前的数据都已经确认传输成功了. 也就涵盖了1001的情况.

② 数据包丢了

在这里插入图片描述

如上图所示, 当1-1000数据包成功发送而1001-2000数据包丢了之后. 发送端会一直收到 1001 这样的ACK, 就像是在提醒发送端 “我想要的是1001” 一样;
如果发送端主机连续三次收到了同样⼀个 “1001” 这样的应答, 就会将对应的数据 1001 - 2000数据包重新发送;
这个时候接收端收到了 1001 之后, 再次返回的ACK就是7001了,因为2001 - 7000的数据包,接收端其实之前就已经收到了, 被放到了接收端操作系统内核的接收缓冲区中;
上述这种机制被称为 “高速重发控制”(也叫 “快重传”)

如果通信双方,传输数据的量比较小,也不频繁,就仍然是普通的确认应答和普通的超时重传.
如果通信双方,传输数据量更大,也比较频繁, 就会进入到滑动窗口模式,按照快速重传的方式处理.

在滑动窗口机制中,窗口越大,传输的效率就越高. 但是窗口的设置也不是越大越好.
如果传输的速度太快,就可能会使接收方处理不过来了.此时,接收方也会出现丢包,发送方还得重传.
不要忘记TCP的初心是可靠性, 一定是在可靠性的基础上,提高传输效率的.

1.2 流量控制

接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就会造成丢包, 继而引起丢包重传等等一系列连锁反应.
因此TCP支持根据接收端的处理能力, 来决定发送端的发送速度. 这个机制就叫做流量控制.

在这里插入图片描述

① 接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段, 通过ACK端通知发送端;

如上图,接收主机B 接收缓冲区总空间是 4000, 收到 1000 数据后还剩 3000,于是就把 3000 放到应答报文ACK中告诉发送方.

② 发送端接受到这个窗口之后, 就会减慢自己的发送速度;

③ 接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;

④ 如果接收端缓冲区满了, 就会将窗口置为0; 这时发送方不再发送数据, 但是需要定期发送一个窗口探
测数据段, 使接收端把窗口大小告诉发送端.

在这里插入图片描述

窗口探测包不携带具体的业务数据.只是为了查询当前接收方这边的接收缓冲区剩余空间.

剩余空间越大,意味着消费速度越快, 处理能力就越强,剩余空间越小,消费速度越慢,处理能力就越弱. 处理能力取决于B的应用程序代码是怎么写的.

上述过程类似于前面讲过的生产者消费者模型.

A给B发送数据,数据优先到达TCP socket对象上的接收缓冲区, 主机B 这边的应用程序调用read方法把数据从接收缓冲区中读出来, 该数据就从接收缓冲区删除了. 此过程中:
生产者: A
消费者: B
阻塞队列: B的接收缓冲区.

1.3 拥塞控制

流量控制考虑的是接受方的处理能力, 而拥塞控制考虑的是通信过程中间节点的情况.
由于中间节点,结构更复杂,更难以直接的进行量化因此就可以使用"实验"的方式,来找到个合适的值.

虽然TCP有了滑动窗口这个大杀器, 能够高效可靠的发送大量的数据. 但是如果在刚开始阶段就发送大量的数据, 仍然可能引发问题. 因为网络上有很多的计算机, 可能当前的网络状态就已经比较拥堵. 在不清楚当前网络状态下, 贸然发送大量的数据, 是很有可能引起雪上加霜的.
TCP引入 慢启动 机制, 先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据;

在这里插入图片描述

让 A 先按照比较低的速度先发送数据(小的窗口)如果数据传输过程非常顺利,没有丢包,再尝试使用更大的窗口,更高的速度进行发送.
随着窗口大小不停的增大,达到一定程度,可能中间节点就会出现问题了.此时这个节点就可能会出现丢包.发送方发现丢包了,就把窗口大小调整小,此时如果发现还是继续丢包,继续缩小,如果不丢包了,就继续尝试窗口变大.
这个过程中,发送方不停的调整窗口大小,逐渐达成"动态平衡".

拥塞控制, 归根结底是TCP协议想要尽可能快的把数据传输给对方, 但是又要避免给网络造成太大压力的折中方案.



1.4 延迟应答

如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小.

假设接收端缓冲区为1M. 一次收到了500K的数据; 如果立刻应答, 返回的窗口就是500K;
但实际上可能接收端处理数据的速度很快, 10ms之内就把500K数据从接收缓冲区消费掉了;
在这种情况下, 接收端处理还远没有达到自己的极限, 即使窗口再放大一些, 也能处理过来;
如果接收端稍微等一会再应答, 比如等待200ms再应答, 那么这个时候返回的窗口大小就是1M;

窗口越大, 网络吞吐量就越大, 传输效率就越高. 我们的目标是在保证网络不拥塞的情况下,尽量提高传输效率;

有延时应答机制才促成了四次挥手能够三次挥完.



1.5 捎带应答

捎带应答能够进一步提高效率.
在延迟应答的基础上, 我们发现, 很多情况下客户端服务器在应用层也是 “一发一收” 的.
意味着客户端给服务器说了 “How are you”, 服务器也会给客户端回一个 “Fine, thank you”;
那么这个时候ACK就可以搭顺风车, 和服务器回应的 “Fine, thank you” 一起回给客户端

在这里插入图片描述

1.6 面向字节流

创建一个TCP的socket, 同时在内核中创建一个 发送缓冲区 和一个 接收缓冲区.
调用write时, 数据会先写入发送缓冲区中;如果发送的字节数太长, 会被拆分成多个TCP的数据包发出;
如果发送的字节数太短, 就会先在缓冲区里等待, 等到缓冲区长度差不多了, 或者其他合适的时机发送出去;
接收数据的时候, 数据也是从网卡驱动程序到达内核的接收缓冲区;
然后应用程序可以调用read从接收缓冲区拿数据;
另一方面, TCP的一个连接, 既有发送缓冲区, 也有接收缓冲区, 那么对于这一个连接, 既可以读数据,也可以写数据. 这个概念叫做 全双工.

由于缓冲区的存在, TCP程序的读和写不需要一 一匹配, 例如:
① 写100个字节数据时, 可以调用一次write写100个字节, 也可以调用100次write, 每次写一个字节;
② 读100个字节数据时, 也完全不需要考虑写的时候是怎么写的, 既可以一次read 100个字节, 也可以一次read一个字节, 重复100次;



1.7 粘包问题

Ⅰ 什么是粘包问题?

在这里插入图片描述

如上图所示, 接收缓冲区中有三个应用层数据包, 这三个数据包以字节的形式紧紧挨在一起.
接收端B, 读取数据的时候不知道缓冲区中的数据从哪到哪是一个完整的应用数据包.

Ⅱ 粘包问题该如何解决?
避免粘包问题归根结底就一句话,明确两个包之间的边界.

① 对于定长的包, 保证每次都按固定大小读取即可; 例如上面的request结构, 是固定大小的, 那么就从缓冲区从头开始按sizeof(request)依次读取即可;

② 对于变长的包, 可以在包头的位置, 约定一个包总长度的字段, 从而就知道了包的结束位置;

③ 对于变长的包, 还可以在包和包之间使用明确的分隔符(应用层协议, 是程序猿自己来定的, 只要保证
分隔符不和正文冲突即可);

Ⅲ UDP协议是否也存在粘包问题呢?

显然不存在

在这里插入图片描述

① 对于UDP, 如果还没有上层交付数据, UDP的报文长度仍然在. 同时, UDP是一个一个把数据交付给应用层. 就有很明确的数据边界.

② 站在应用层的角度, 使用UDP的时候, 要么收到完整的UDP报文, 要么不收到. 不会出现收到"半个"的情况.

1.8 异常情况

① 进程终止(正常还是异常都一样)

进程终止会释放文件描述符表(相当于调用了socket.close()), 仍然可以发送FIN. 和正常关闭的四次挥手没有什么区别.

② 主机关机

进行关机的时候,就是会先触发强制终止进程操作.(相当于①的情况). 如果在系统关闭之前,对端返回的 ACK 和 FIN 到了,此时系统还是可以返回 ACK,进行正常的四次挥手的.
如果系统已经关闭了,ACK 和 FIN 迟到了,无法进行后续ACK 的响应,站在对端的角度,对端以为是自己的 FIN 丢包了,重传 FIN,重传几次都没有响应,自然就会放弃连接.

③ 主机非正常掉电/网线断开

这种情况是 一瞬间的事情,来不及终止进程,也来不及发送 FIN, 主机直接就停机了.

第一种情况:
如果对端是在发送数据(接收方掉电),发送的数据就会一直等待ACK, 触发超时重传.触发 TCP 连接重置功能.发起"复位报文段".如果 复位报文段 发过去之后,也没有效果,此时就会释放连接.

在这里插入图片描述

如上图所示: 上述红圈内的报文段即为复位报文段.

第二种情况:
如果对端是在接收数据(发送方掉电),对端还在等待数据到达, 等了半天没消息,此时无法区分时对端丢包了,还是对端挂了.
好在 TCP 中提供了 心跳包机制.
接收方也会周期性地给发送方发起一个特殊的, 不携带业务数据的数据包. 并且期望对方返回一个应答,如果对方多次没有返回应答, 就视为对方挂了,此时就可以单方面释放连接了.

在这里插入图片描述

TCP 的心跳机制在日常开发中非常常见,经常能碰到这种心跳机制.(尤其是在分布式系统). 后续用到的心跳,都是在应用程序中,自助实现的(秒级或者毫秒级),而不是直接使用 tcp 的心跳. 因为TCP的心跳机制周期比较长.

2. TCP和UDP的对比

Ⅰ 各自优势

① TCP的优势是可靠传输,适用于大部分场景.例如:文件传输,重要状态更新等场景.
UDP的优势是传输效率高,使用于"可靠性不敏感,但性能敏感" 的场景.例如同一机房(同一局域网),视频传输,广播.

有一种特殊的场景,需要把数据发给局域网的所有机器,这个情况就是广播.

② TCP没有长度限制, 如果要传输比较大的数据包, TCP 更优先(UDP有64KB的限制).
如果要进行广播传输,优先考虑UDP,因为UDP天然支持广播, TCP不支持(需要额外写代码实现).

Ⅱ 用UDP实现可靠传输(经典面试题)

参考TCP的可靠性机制, 在应⽤层实现类似的逻辑;
① 引入序列号, 保证数据顺序;
② 引入确认应答, 确保对端收到了数据;
③ 引入超时重传, 如果隔一段时间没有应答, 就重发数据;
④ 引入滑动窗口, 一次多传几个数据包,在确保可靠性的基础上提高传输效率.
⑤ …

本篇博客到这里就结束啦, 感谢观看 ❤❤❤

🐎期待与你的下一次相遇😊😊😊

相关文章:

【网络原理】从零开始深入理解TCP的各项特性和机制.(二)

本篇博客给大家带来的是TCP/IP原理的知识点,重点以TCP为主,接续上篇. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 …...

51单片机所有寄存器介绍

51单片机所有寄存器介绍 作者将狼才鲸创建日期2025-04-27 参考资料:Intel官方《MCS-51 Programmer’s Guide and Instruction Set.pdf》CSDN阅读地址:51单片机所有寄存器介绍 一、前言 51单片机的寄存器和ARM不一样,有自己专有的名称&…...

4.27算法题

力扣649.Dota2 参议院 649. Dota2 参议院 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程…...

衡石科技:HENGSHI SENSE 数据权限解决方案

编写目的​ 本方案主要讲述 HENGSHI SENSE 的数据权限方案,即在 HENGSHI SENSE 系统中,通过同步企业内部的人员属性和组织架构等信息,实现企业内部的每一个用户对于业务数据的读取权限。 本方案的的预期读者为:HENGSHI SENSE 的…...

矩阵系统源码搭建热门音乐功能板块开发,支持OEM

在数字音乐蓬勃发展的当下,矩阵系统中的热门音乐功能板块成为吸引用户的重要部分。它不仅能为用户推荐当下流行的音乐,还能提升用户在系统中的活跃度和留存率。本文将通过详细的源码搭建过程,带你了解如何在矩阵系统中实现一个功能完备的热门…...

深入理解Android Activity生命周期

引言 在Android开发中,理解Activity的生命周期对于创建高效、稳定的应用程序至关重要。无论你是初学者还是资深开发者,掌握Activity生命周期的概念都能帮助你更好地管理资源、优化性能以及处理各种用户交互场景。本文将详细介绍Activity生命周期中的各个事件,并通过示例代码…...

【WEB3】web3.0是什么

互联网在不断发展。 我们即将翻开新的篇章,迎来翻天覆地的变化。 — Web 1.0 只能阅读信息。 它主要是供我们访问和阅读信息,只有极少数人可以真正发布内容。 — Web 2.0,即互联网目前所处的阶段,我们能够在网络上发布内容、建立…...

2025上海车展 | 移远通信重磅发布AR脚踢毫米波雷达,重新定义“无接触交互”尾门

4月25日,在2025上海国际汽车工业展览会期间,全球领先的物联网和车联网整体解决方案供应商移远通信宣布,其全新AR脚踢毫米波雷达RD7702AC正式发布。 该产品专为汽车尾门“无接触交互”设计,基于先进的毫米波技术,融合AR…...

ubuntu安装git及使用(本地git)

ubuntu安装git及使用教程(本地git) 1.ubuntu安装git1.1 查看自己的Ubuntu是否已经装有git1.2 下面进行介绍如何Ubuntu终端安装git (若已安装则可忽略) 2. 配置Git基本信息2.1 若不清楚是否配置的可使用如下命令查看2.2 未配置用户…...

数智读书笔记系列031《HIS内核设计之道——医院信息系统规划设计系统思维》书籍简介与读书笔记

一、作者与出版信息 作者团队(核心贡献者) 任连仲 身份:中国工程院院士(2022年当选),解放军总医院信息科原主任技术贡献: 主导“军字一号”系统架构设计(1997-2005年),支撑全国300余家三甲医院信息化建设提出“医疗数据语义网格”理论,获国家科技进步二等奖(2018年…...

WinForm真入门(18)——DateTimePicker‌控件解析

一、基本概念‌ ‌DateTimePicker‌ 是 Windows 窗体中用于选择日期和时间的控件,支持以下交互方式: 通过下拉日历选择日期通过上下按钮调整时间直接输入日期或时间 适用于需要规范日期格式、限制日期范围或快速输入的场景(如预约系统、数据…...

关于堆栈指针的那些事 | bootloader 如何跳转app

问题描述 堆栈指针的值通常存储在 App 的向量表(Vector Table)的第一个位置(0x08002000),为什么? 在嵌入式系统中,堆栈指针(SP)的值存储在应用程序(App&…...

如何在 iPhone 上恢复已删除的联系人:简短指南

从 iPhone 中删除联系人相当容易,但如果您不小心删除了错误的联系人或丢失了所有联系人怎么办?这可能是任何智能手机用户都可能发生的最糟糕的噩梦之一。 如何在 iPhone 上恢复已删除的联系人 我个人在我的列表上看到几个用户发布关于他们如何丢失所有联…...

使用Aspose.Words将Word转换为HTML时,字体样式丢失问题及解决方法

使用Aspose.Words将Word转换为HTML时,字体样式丢失问题及解决方法 引言 ✨一、问题描述 📉二、问题分析 🔍三、解决方案 🛠️四、总结 🏁 引言 ✨ 在实际开发中,使用Aspose.Words将Word文档转换为HTML格式…...

更快的图像局部修改与可控生成:Flex.2-preview

Flex.2-preview 文本生成图像扩散模型介绍 一、模型简介 Flex.2-preview 是一种 开源的 80 亿参数文本生成图像扩散模型,具备通用控制和修复支持功能,是 Flex.1alpha 的下一代版本。该模型由社区开发并为社区服务,采用 Apache 2.0 许可证&a…...

汽车制造行业如何在数字化转型中抓住机遇?

近年来,随着新一轮科技革命和产业变革的深入推进,汽车制造行业正迎来一场前所未有的数字化转型浪潮。无论是传统车企还是新势力品牌,都在积极探索如何通过数字化技术提升竞争力、开拓新市场。那么,在这场变革中,汽车制…...

数据可视化 —— 直方图

一、前言 直方图(Histogram)是一种用柱状图形表示数据分布的统计图表,它将数据划分为连续的区间(称为“分箱”或“区间”),统计每个区间内的数据频数(或频率),并用柱形的…...

1、Linux操作系统下,ubuntu22.04版本切换中英文界面

切换中英文界面的方法很多,我也是按照一个能用的方法弄过来并且记录, 1.如果刚开始使用Ubuntu环境,桌面的语言环境为英文,需要安装中文简体的字体包 打开桌面终端,输入 sudo apt install language-pack-zh-hans lan…...

《MySQL 技术内幕-innoDB 存储引擎》笔记

💡 根据 遗忘曲线:如果没有记录和回顾,6天后便会忘记75%的内容 读书笔记正是帮助你记录和回顾的工具,不必拘泥于形式,其核心是:记录、翻看、思考::: 书名MySQL 技术内幕-innoDB 存储引擎作者姜承尧状态已读…...

C++ AVL树的实现

在上一篇博客我们学习了二叉搜索树的实现,现在我们开始手动实现AVL树。 二叉搜索树-CSDN博客 1.AVL树的概念 AVL树是最先发明的⾃平衡⼆叉查找树,AVL是⼀颗空树,或者具备下列性质的⼆叉搜索树:它的左右⼦树都是AVL树&#xff0c…...

多视觉编码器协同与高低分辨率特征融合技术综述

本文主要介绍(论文发表时间:24.03-25.01)在多模态中使用多个视觉编码器如何进行特征融合操作(之所以用多视觉编码器,主要用途在于:有些视觉编码器可能只能提取到部分信息,就想通过另外一个编码器…...

力扣4-最长公共前缀

一.题目 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs ["flower","flow","flight"] 输出:"fl"示例 2&…...

贪心算法-860.柠檬水找零-力扣(LeetCode)

一、题目解析 我们需要注意我们是没有初始零钱的,所以当第一个顾客支付10或20时,无法找零此时返回false。 二、算法解析 根据贪心算法的解决方式,我们需要先把解决该问题分解为若干步。 首先对于顾客支付的钱共有三种,5&#xf…...

Kubernetes学习笔记-配置Service对接第三方访问

在Kubernetes中配置Service对接第三方访问,可以选择以下方案实现: ExternalName Service(基于DNS别名)‌ 适用场景‌:外部服务必须有固定域名Service配置文件如下: apiVersion: v1 kind: Service metadata…...

pikachu靶场-敏感信息泄露

一、敏感信息泄露的危害 1. 个人隐私与数据安全 身份盗窃:泄露个人身份信息(如姓名、身份证号、手机号)可被用于诈骗、冒名开户等犯罪活动。账户劫持:暴露用户账号密码、邮箱等凭证,导致社交媒体、银行账户被非法登录。…...

ppt章节页怎么做好看?ppt章节页模板

ppt章节页怎么做好看?ppt章节页怎么排版?ppt章节页模板: PPT章节_模板素材_PPT模板_ppt素材_免抠图片_AiPPTer...

ubuntu扩展逻辑卷并调整文件系统大小步骤

安装好ubuntu如果没有调整磁盘空间,一般默认给你100G的空间,在用完时再调整也还来得及,下面是 ubuntu扩展逻辑卷并调整文件系统大小步骤: 1. 扩展逻辑卷 运行以下命令来扩展逻辑卷 /dev/ubuntu-vg/ubuntu-lv,使其使用卷组中所有未分配的空间&#xff…...

2.脚本文件初识

—>1.Makefile—自动化构建和管理项目的文件见这篇<— 1.编程语言 编程语言分为2类&#xff0c;一类是编译型语言&#xff0c;将源文件经过编译得到可执行文件&#xff0c;该执行文件可以在特定平台上运行&#xff0c;其他平台则不行&#xff0c;因此是不跨平台的编程语…...

FastAPI + Redis Pub/Sub + WebSocket 组合解决方案的详细介绍

以下是对 FastAPI Redis Pub/Sub WebSocket 组合解决方案的详细介绍&#xff0c;涵盖技术原理、实现步骤、协作流程和适用场景。 1. 技术概述 1.1 FastAPI 特性&#xff1a;基于 Python 的现代异步框架&#xff0c;支持 async/await&#xff0c;性能高效&#xff0c;适合高…...

泛型的诗意——深入C++模板的艺术与科学(模版进阶)

前言&#xff1a; 在之前&#xff0c;小编讲述了模版的初阶内容&#xff0c;当时小编讲述了模版的书写&#xff0c;方便之后容器的讲解以及模拟实现&#xff0c;现在小编已经带领各位学习了很多容器&#xff0c;模版初阶的知识已经用的很多了&#xff0c;今天小编讲述一下全新的…...

【极致版】华为云Astro轻应用抽取IoTDA影子设备参数生成表格页面全流程

做份极致详细Astro调取iotda影子设备数据的操作手册&#xff0c;每一步都分成&#xff1a; 要进入哪个界面 点哪个按钮 要填什么内容&#xff08;样例&#xff09; 如果出错怎么办 填写示例 完全对应你这个需求&#xff1a;Astro轻应用抽取IoTDA影子设备数据&#xff0c;…...

业务中台与数据中台:企业数字化转型的核心引擎

前言&#xff1a;在当今数字化浪潮下&#xff0c;企业为了提升运营效率、加速创新步伐并更好地适应市场变化&#xff0c;业务中台与数据中台应运而生&#xff0c;成为企业架构中的关键组成部分。本文将深入探讨业务中台和数据中台的简介、发展史、技术流环节以及在实际生产中的…...

前端分页与瀑布流最佳实践笔记 - React Antd 版

前端分页与瀑布流最佳实践笔记 - React Antd 版 1. 分页与瀑布流对比 分页&#xff08;Pagination&#xff09;瀑布流&#xff08;Infinite Scroll&#xff09;展示方式按页分批加载&#xff0c;有明确页码控件滚动到底部时自动加载更多内容&#xff0c;无明显分页用户控制用…...

【网络原理】从零开始深入理解TCP的各项特性和机制.(三)

上篇介绍了网络原理传输层TCP协议的知识,本篇博客给大家带来的是网络原理剩余的内容, 总体来说,这部分内容没有上两篇文章那么重要,本篇知识有一个印象即可. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分…...

MySQL:13.用户管理

13. 用户管理 如果我们只能使用root用户&#xff0c;这样存在安全隐患。这时&#xff0c;就需要使用MySQL的用户管理。 13.1 用户 13.1.1 用户信息 MySQL中的用户&#xff0c;都存储在系统数据库mysql的user表中 mysql> use mysql; Database changed mysql> select h…...

leetcode0103. 二叉树的锯齿形层序遍历-medium

1 题目&#xff1a;二叉树的锯齿形层序遍历 官方标定难度&#xff1a;中 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xf…...

【Go语言】ORM(对象关系映射)库

github.com/jinzhu/gorm 是 Go 语言中一个非常流行的 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;用于简化与关系型数据库的交互。以下是关于它的关键信息&#xff1a; 核心特点 全功能 ORM 支持主流数据库&#xff1a;MySQL、PostgreSQL、SQLite、SQL Server 等。…...

Java : GUI

AWT 初始化界面 直接封装起来&#xff1a; panel 的添加 布局 流式布局,控制按钮的位置 东西南北中布局 网格布局 frame.pack();java函数&#xff0c;会自动选择最优的布局 事件监听 给按钮添加 添加文本 画笔 鼠标监听 键盘监听 JDialog”弹窗 默认有关闭事件 标签&#…...

ipa包安装到apple手机上

获ipa包的方式 ipatool 下载appStore的ipa包-CSDN博客 方式一&#xff1a;巨魔商店 原理是利用apple的漏洞&#xff0c;但是有低版本的系统要求 TrollStore - Always Sideload Any IPAs For FreeTrollStore - The ultimate jailbreak app for iOS. Permanently install any …...

JavaScript输出数据的方法

1. console.log() console.log()是最常用的方法之一&#xff0c;用于在浏览器的控制台&#xff08;Console&#xff09;中输出信息。这对于调试和查看变量的值非常有用。 console.log("Hello, world!");2. alert() alert()方法会弹出一个带有指定消息和确定按钮的警告…...

操作系统:计算机世界的基石与演进

一、操作系统的本质与核心功能 操作系统如同计算机系统的"总管家"&#xff0c;在硬件与应用之间架起关键桥梁。从不同视角观察&#xff0c;其核心功能呈现多维价值&#xff1a; 硬件视角的双重使命&#xff1a; 硬件管理者&#xff1a;通过内存管理、进程调度和设…...

FFmpeg之三 录制音频并保存, API编解码从理论到实战

在学习FFmpeg的时候&#xff0c;想拿demo来练习&#xff0c;官方虽有示例&#xff0c;但更像是工具演示&#xff0c;新手不好掌握&#xff0c;在网上找不到有文章&#xff0c;能给出完整的示例和关键点的分析说明&#xff0c;一步一个错误&#xff0c;慢慢啃过来的&#xff0c;…...

幂等性处理解决方案实战示例

幂等性处理解决方案实战示例 幂等性是指对同一个操作执行一次或多次&#xff0c;产生的结果是相同的。在分布式系统、网络请求和金融交易等场景中&#xff0c;幂等性设计至关重要。下面我将介绍几种常见的幂等性处理方案及其实战示例。 1. 唯一标识符方案 原理&#xff1a;为…...

华为仓颉编程语言的实际用法与使用领域详解

华为仓颉编程语言的实际用法与使用领域详解 一、语言概述与核心特性 华为仓颉编程语言是面向万物智联时代的系统级编程语言,其核心特性包括: 三重内存安全机制:所有权系统 + 引用检查 + 硬件辅助防护零成本抽象:高级语法不牺牲底层性能全场景支持:从嵌入式设备到量子计算…...

JavaEE-多线程实战01

Java 多线程入门&#xff1a;第一个多线程程序 在 Java 中&#xff0c;多线程编程是非常重要的一部分。本篇文章将通过示例&#xff0c;带你快速了解如何创建第一个多线程程序&#xff0c;并深入分析其运行机制。 1. 创建一个线程类并继承 Thread 在 Java 中&#xff0c;我们…...

当AI浏览器和AI搜索替代掉传统搜索份额时,老牌的搜索引擎市场何去何从。

AI搜索与传统搜索优劣势分析 AI搜索优势 理解和处理查询方式更智能&#xff1a;利用自然语言处理&#xff08;NLP&#xff09;和机器学习技术&#xff0c;能够更好地理解用户的意图和上下文&#xff0c;处理复杂的问答、长尾问题以及多轮对话&#xff0c;提供更为精准和相关的…...

大模型——Spring.new快速构建AI驱动的定制化商业应用

大模型——Spring.new快速构建AI驱动的定制化商业应用 Spring.new 是一个基于人工智能的在线平台,专注于帮助营销经理和产品经理快速构建定制化工作流和小型应用。它通过自然语言输入,让用户描述需求,自动生成连接 Notion、Airtable、Slack 等工具的工作流或应用,例如将 F…...

django admin 中更新表数据 之后再将数据返回管理界面

在Django中&#xff0c;更新数据库中的数据并将其重新显示在Django Admin界面上通常涉及到几个步骤。这里我将详细说明如何在Django Admin中更新表数据&#xff0c;并确保更新后的数据能够立即在管理界面上显示。 定义模型 首先&#xff0c;确保你的模型&#xff08;Model&…...

深度理解linux系统—— 进程概念

一、进程 进程&#xff0c;什么是进程&#xff1f; 在课本&#xff0c;教材中是这样描述的&#xff1a;程序的一个执行示例&#xff0c;正在执行的程序&#xff1b; 从内核角度来说&#xff0c;进程就是担当分配系统资源&#xff08;CPU时间&#xff0c;内存&#xff09;的实体…...

【如何使用solidwork编辑结构导入到simscope】

这里写自定义目录标题 欢迎使用Markdown编辑器 欢迎使用Markdown编辑器 To use Simscape Multibody Link, you must install MATLAB and the CAD applications on the same computer. To ensure the successful installation of Simscape Multibody Link, before launching yo…...