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

TCP实现安全传输的核心机制 + TCP的报文讲解(全程图文讲解)

目录

一、TCP的协议和数据报格式

二、TCP常见的核心机制

1. 确认应答

2. 超时重传 

3. 连接管理

三次握手(建立连接)

四次挥手(断开连接)

常见的状态和整体的传输流程

4. 滑动窗口

5. 流量控制

6. 拥塞控制

7. 延迟应答

8.捎带应答

ack 和 载荷 的区别 

9.面向字节流造成的 “粘包问题”

10、异常处理

1.进程崩溃

 2.主机关机

3.主机掉电 (没电了)和  网线断开

TCP全称为 "传输控制协议(Transmission Control Protocol"). ⼈如其名, 要对数据的传输进⾏⼀个详细的控制; 所以TCP是传输层的协议

TCP的基本特点:有链接、可靠传输、面向字节流、全双工

有链接可以通过代码层面的accept()方法体会到,面向字节流 和 全双工,也可以通过代码层面的getInputStream()、getOutputStream()来体会。但是可靠传输,我们无法通过代码层面体会到,那么就需要来了解TCP的核心机制,看它是如何保证数据的可靠性的。

虽然是可靠传输,但是也不能保证"100%"送达,只能尽可能的使数据能到达对方。

一、TCP的协议和数据报格式

TCP协议段格式:
    TCP中的报文格式比较复杂,有的需要结合TCP的机制讲解,这里做一个简单的介绍:

    1. 源/⽬的端⼝号: 表⽰数据是从哪个进程来, 到哪个进程去

    2. 32位序号/32位确认号: 后⾯详细讲

    3. 4位首部长度:指的是TCP报头的长度,TCP的报头是可变长的。4个bit来表示,4个比特位最大就是表示十进制的15,但是15个字节貌似并不能装下报头,所以这里设定了单位,是4个字节。所以TCP头部最⼤⻓度是15 * 4 = 60

    4. 保留位:这是吸取UDP的经验,虽然目前不用,但是先让它存在,防止未来需要扩展,或者某些位置需要扩容考虑了未来的可扩展性

    5. 6位标志位

    • URG: 紧急指针是否有效
    • ACK: 确认号是否有效
    • PSH: 提⽰接收端应⽤程序⽴刻从TCP缓冲区把数据读⾛
    • RST: 对⽅要求重新建⽴连接; 我们把携带RST标识的称为复位报⽂段
    • SYN: 请求建⽴连接; 我们把携带SYN标识的称为同步报⽂段
    • FIN: 通知对⽅, 本端要关闭了, 我们称携带FIN标识的为结束报⽂段

    6. 16位窗⼝⼤⼩: 后⾯再说

    7. 16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP⾸部, 也包含TCP数据部分

    8. 16位紧急指针: 标识哪部分数据是紧急数据

    9. 40字节头部选项: 暂时忽略

    二、TCP常见的核心机制

    网上有蛮多人都说,TCP的可靠传输是因为:“三次握手,四次挥手”,但其实并不是这样,“三次握手,四次挥手”只是为可靠传输提供了一些帮助或者说铺垫吧。往后面看到“三次握手,四次挥手”就可以理解我为什么这么说了。

    1. 确认应答

    确认应答其实就是每收到一条数据,就告诉对方我收到数据了

    举个例子来帮助大家理解:

    假如有个 计算机小白(客户端)博主(服务器):

    ack的缩写是 acknowledge(理会) 的缩写,做为一个应答报文:

    做为一个应答报文,那么这里的ack就会置为1

    大多数情况下,应答报文(ack)不会携带数据,只是起到一个通知的作用,不过后面有特殊情况,会进行讲解

    但是如果发多条数据:

    网络通信中存在后发先至的情况,因为:

    网络通信中可以通过各种路线到达接收方,那么就意味着,有可能 数据1 绕了一大圈在到接收方,但是在它之后发送的 数据2 、 数据3…… ,早就到了接收方,此时顺序也就乱了。

    为了处理这样的情况,给每一个发送出去的数据都进行了编号

    (其实起始位置的编号并不是1而且每一次起始的编号变化都很大为了防止数据混淆(前朝的剑斩今朝的管),这里会举例起始编号为1,为了方便大家理解)

    由于TCP是面向字节流的,假设我们每一次发送1000个字节的数据,那么第一个字节编号就是1、第二个就是2 ,一直到编号为1000的字节。

    最终接收方都收到了,就会返回1001,这代表前面1000个字节的数据都接收到了,你下一次要发送过来头数据编号是 1001.

    那么就需要一个 存放序号 和 确认序号空间

    32位序号:


    32位确认序号:

    TCP就可以针对接收方的数据,进行重新排序,确保应用程序,read到的数据一定是和发送方一致的:

    假设我要发3000个字节的数据,每一次发1000个字节:

    那么这样就可以做到 接收发送 数据顺序相同了

    但是实际上网络中的通信并不会一帆风顺,而是可能会出现 “丢包” 这样的情况。

    丢包的原因有很多,例如:遇到了磁场,发生了bit翻转、某个结点的负载太高了,达到了负载的上限,就会抛弃新接收的数据等等

    那么就引入了这样的机制->

    2. 超时重传 

    TCP会通过 应答报文(ack)来区分:

    • 如何收到了应答报文,就说明数据包没有丢
    • 如果没有收到应答报文,就说明数据包丢了

    但是没收到有可能是网络延时,过一会就收到了。为了区分是网络延时,还是丢包了,发送方发送数据之后,会给出一个 “时间限制(超时时间)” 如果在这个时间限制之内,ack没有收到,就视为丢包了 。

     如果是数据包丢了:

    如果是 “应答报文(ack)” 丢了:

    如果对方发生了重大的网络故障或者其他原因导致无法进行网络传输:

    发送方就会进行多次重传:

    发送方第一次重传,超时时间是t1,如果重传之后,仍然没有ack。就会重传第二次,超时时间是t2。 t2的时间设置是大于t1的 (t2 > t1)

    经过多次重传对方都没有响应,那么TCP就会单方面的放弃连接

    那么TCP的可靠传输,就是靠着 “确认应答” 和 “超时重传” ,相互补充 构建了 TCP “可靠传输的机制”。 

    并不是因为三次握手和四次挥手,马上就会讲到连接管理,大家看完也就知道原因了。

    3. 连接管理

    连接管理就是大家常说的:“三次握手” 和 “四次挥手”

    三次握手(建立连接)

    不过这里不一定是,客户端做为发起方,也有可能是服务器,虽然大部分来说是客户端做为主动发起的一方。

    建立连接是一个“双向的操作”:

    客户端 给 服务器说,我想和你建立连接(客户端 想保存 服务器的信息)

    服务器 给 客户端说, 我也想和你建立连接 (服务器 想保存 客户端的信息)

    通过上述描述知道了,三次握手的流程,但我们还不知道为什么要这么设置,每次发送信息的背后,都是什么意思:

    1. 投石问路,初步验证通信的链路是否正常(这是传输的前提条件)

    2. 确认通信双方的接收和发送能力

    3.在通信之前,对通信过程中需要用到的一些关键参数,进行协商

    例如TCP通信的起始序号

    四次挥手(断开连接)

    发起结束报文 fin -> (英文意思finish结束),此时“6位标志位”中的fin置为1

    问题来了,为什么建立连接只需要3次信息发送,而断开连接就需要发4次:

    对于三次握手,中间的两次ack+syn,都是在内核中,由操作系统进行的,时间都是在收到syn之后,此时同一时机,就可以合并了。

    但是对于四次挥手来说,ack是内核控制的,但是fin的触发,则是通过应用程序,(调用close/进程退出)来触发的,在close之前,我们大概率是需要做一些收尾工作的,这个时候就导致了,发出的时间不一致,从而需要发开发两次。

    常见的状态和整体的传输流程

    这里我们只关系部分常用的一些状态:

    三次握手

    listen(听):服务器会进入的状态,服务器端口绑定完成,准备迎接客户端

    established(建立):服务器客户端都会进入的状态,建立连接完成(保存了对方的信息),可以开始正常业务数据的传输了

    四次挥手:

    close_wait: 被动断开连接的一方(先收到fin的一方),等待执行close方法

    time_wait: 主动断开连接的一方,等待一段时间后释放。

    为什么time_wait要等待一段时间,为了防止发出的ack丢包,如果丢了还可以重发:

    看了上述的内容,相信你以及明白了,TCP可靠性的核心是 “确认应答 和 超时重传” ,连接管理只是确认了,当前网络具备传输的条件,保证网络传输的头 和 尾

     4. 滑动窗口

    上述的各种机制都是在保证或间接保证数据能够可靠传输,为了可靠传输损失了不少效率,滑动窗口就可以挽回一些效率。

    没有使用滑动窗口:

    使用滑动窗口:

    滑动窗口大小:

    批量发送数据,不需要等待的,数据量称为“滑动窗口”,批量发送的是字节数,不是“条”,例如上述发送的窗口大小就是4000,每一次发1000字节。

    后面会讲到窗口大小的设置

    体会滑动窗口的过程:

    上述都是一切正常的情况,没有发生丢包,那么如果发生丢包呢?

    回应的ack发生了丢包:

    此时就需要打破之前对ack的认识,现在就不仅仅是上一条数据接收到了,而是:

    下一个数据是5001开头的,并且5001之前的数据都接收到了

     数据包丢了:

    接收到3次相同的ack,就定位丢失的数据立马重发。这样的过程就是快速重传

    那么窗口的大小又是怎么设置的呢?下面讲的流量控制就会涉及到

    5. 流量控制

    为了防止接收端的数据处理不过来,接收缓冲区都满了,这个时候再发数据过去就会丢包,我们就引入了流量控制

     

    TCP就用 “接收缓冲区的剩余空间” 去设置窗口大小,来控制发送端,发送数据的数量,窗口就要做为一个传输的值了,存放在:

    只有在ack为 1 的时候, 16位窗口大小才有效

     具体发送接收流程:

    超出时间就会发出一个 “窗口弹窗包”,窗口探测包是不携带业务数据的

     6. 拥塞控制

    除了要感知接收端是否能处理得过来,还要考虑到一些中间设备是否能够接收得过来

    这样的情况就非常难衡量:

    • 中间结点非常多
    • 每次传输的数据,走的路线还不一样
    • 中间哪个结点遇到瓶颈了
    • 中间结点传输的数据还不止你一个

    那么聪明的程序员就用做工程的方式,找到了解决办法:

    1. 先按照一个比较小的速度发数据
    2. 数据非常畅通,没有丢包,说明网络上传输数据整体是比较通畅的,就可以加快传输速度
    3. 增大到一定的速度之后,发现出现丢包了,说明网络上可能存在拥堵了,就减慢数据的传输速度
    4. 减速之后,发现又不丢包了,继续加速
    5. 加速之后,又开始丢包了,继续减速

            ……

    拥塞控制也是通过,限制发送窗口大小,来控制速度的。

    那么拥塞控制和流量控制都会控制窗口大小,听哪个的呢?

    这两个机制都会起作用,最终的发送窗口大小,取决于两个机制的窗口大小最小值

    拥塞控制 控制 滑动窗口大小的过程:

    通过颜色区分文字讲解的哪部分内容

    很明显经典版本并不太合适,现在都用快恢复的方式

    7. 延迟应答

    延迟应答也是一种提升效率的机制,让窗口大小尽可能的大一点

    如果此时接收到新增数据,立即返回ack,窗口大小就是4kb。但其实接收方大概率是在消费数据的,如果我们晚一点返回ack,可能就消费了1kb的数据了。那么此时再返回窗口大小就是5kb了,从而提升了传输速度。

     

    8.捎带应答

    捎带应答是在延迟应答的基础上,再次提升效率的机制

    ack是内核返回的,收到请求后,立即就返回ack

    但是由于有延迟应答的存在,ack就有可能和响应(业务数据)同时返回,只要它两的时间刚好碰上了,就会触发捎带应答:

    ack 和 载荷 的区别 

    ack: ack只是告知对方我接收到了,主要携带的是 ack这置为1、设置窗口大小、设置确认序号

    应答:主要携带的是业务层面的一些数据

    9.面向字节流造成的 “粘包问题”

    由于TCP是面向字节流的,一次发多少个字节的数据都可以,但是在由于数据在接收缓冲区中,连成一片,如果不对正确读取的长度做限制,就可能造成粘包问题,

    例如:正确读取到的应该是aaa bbb ccc

    如果不再区分就有可能是 aaab bbcc c、aa abb bcc c……

    方案一:如果是文本数据就可以用一种符号做为结束符号例如 “\n”:

    方案二:如果是二进制的数据,就需要指定数据的长度。这是一个很重要的方式

    10、异常处理

    1.进程崩溃

    现象:运行 TCP 进程的程序突然终止(如崩溃、被强制杀死)

    正常情况:若进程通过操作系统正常释放资源,TCP 会发送 FIN 包(结束连接请求),触发四次挥手流程,双方逐步关闭连接

    异常情况:若进程未及时通知操作系统(如瞬间崩溃),TCP 层可能无法发送 FIN 包,导致对端无法感知连接已失效。对端等待数据时,因收不到响应且未收到 FIN,会触发 超时重传。若重传多次失败(超过阈值),对端会判定连接超时,进入异常关闭状态。

     2.主机关机

    现象:主机执行正常关机流程

    操作系统会先终止所有进程并关闭网络连接,TCP 层会发送 FIN 包,触发四次挥手,双方完成连接关闭。

    3.主机掉电 (没电了)和  网线断开

    现象:主机突然断电(如电源故障、强制关机),无法进行任何网络操作。

    接收方掉电:

     发送方掉电:

     

    相关文章:

    TCP实现安全传输的核心机制 + TCP的报文讲解(全程图文讲解)

    目录 一、TCP的协议和数据报格式 二、TCP常见的核心机制 1. 确认应答 2. 超时重传 3. 连接管理 三次握手(建立连接) 四次挥手(断开连接) 常见的状态和整体的传输流程 4. 滑动窗口 5. 流量控制 6. 拥塞控制 7. 延迟应…...

    【测试工具】selenium和playwright如何选择去构建自动化平台

    构建UI自动化平台服务,在底层选择自动化框架,selenium和playwright这两个如何选择 在构建UI自动化平台服务时,选择底层自动化框架(如 Selenium 和 Playwright)是一个非常关键的决策,直接影响平台的性能、可…...

    ES常识8:ES8.X如何实现热词统计

    文章目录 一、数据采集与存储设计1. 确定需记录的字段2. 设计搜索日志索引 二、数据写入与采集三、热门搜索词统计(核心逻辑)1. 基础版:近 7 天热门搜索词(按出现次数排序)2. 进阶版:加权热门词&#xff08…...

    可解释性AI 综述《Explainable AI for Industrial Fault Diagnosis: A Systematic Review》

    一、研究背景与动因(Background & Motivation) 随着工业4.0与工业5.0的发展,工业生产越来越依赖自动化与智能化手段,以实现高效、预测性维护与运行优化。在这一背景下,人工智能(AI)与机器学…...

    数据可视化-----子图的绘制及坐标轴的共享

    目录 绘制固定区域的子图 (一)、绘制单子图 subplot()函数 Jupyter Notebook的绘图模式 (二)、多子图 subplots()--可以在规划好的所有区域中一次绘制多个子图 (三)、跨行跨列 subplot2grid()---将整…...

    nginx 配置

    proxy_pass 结尾斜杠规则 不带斜杠‌:保留原始请求路径。 location /api {proxy_pass http://backend; # 转发到 http://backend/api }带斜杠‌:剥离 location 匹配的路径前缀。 location /api/ {proxy_pass http://backend/; # 转发到 http://back…...

    《从零开始入门递归算法:搜索与回溯的核心思想 + 剑指Offer+leetcode高频面试题实战(含可视化图解)》​

    一.递归 1.汉诺塔 题目链接:面试题 08.06. 汉诺塔问题 - 力扣(LeetCode) 题目解析:将A柱子上的盘子借助B柱子全部移动到C柱子上。 算法原理:递归 当A柱子上的盘子只有1个时,我们可以直接将A上的盘子直…...

    船舶制造业数字化转型:驶向智能海洋新航道

    在全球海洋经济蓬勃发展的当下,船舶制造业作为海洋产业的重要支柱,正面临着前所未有的机遇与挑战。船舶制造周期长、技术复杂,从设计图纸到最终交付,涉及成千上万的零部件和复杂的工艺流程,传统制造模式已难以满足市场…...

    SpringBoot 自动装配流程

    Spring Boot 的自动装配(Auto Configuration)是其最核心的特性之一,它让你能“开箱即用”,极大简化了配置。下面是 Spring Boot 自动装配的整体流程(从启动到生效) 的详细解析: ✅ 一、整体流程…...

    Vue 3 实现后端 Excel 文件流导出功能(Blob 下载详解)

    💡 本文以告警信息导出为例,介绍 Vue 3 中如何通过 Axios 调用后端接口并处理文件流,实现 Excel 自动下载功能。 📑 目录 一、前言 二、后端接口说明 三、前端实现思路 四、导出功能完整代码 五、常见问题处理 六、效果展示 …...

    基于IBM BAW的Case Management进行项目管理示例

    说明:使用IBM BAW的难点是如何充分利用其现有功能根据实际业务需要进行设计,本文是示例教程,因CASE Manager使用非常简单,这里重点是说明如何基于CASE Manager进行项目管理,重点在方案设计思路上,其中涉及的…...

    《Python星球日记》 第78天:CV 基础与图像处理

    名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、计算机视觉(CV)简介1. 什么是计算机视觉?2. 计算机视觉的应用场景3. 图像的基本属性a》像素(Pixel)b》通道(Channel)c》分辨率(Res…...

    Google DeepMind 推出AlphaEvolve

    每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

    Flink 1.13.2 日志配置优化:保留最近 7 天日志文件

    Flink 1.13.2 日志配置优化:保留最近 7 天日志文件 在使用 Apache Flink 1.13.2 进行流处理任务时,合理的日志配置对于作业的监控、调试和故障排查至关重要。本文将介绍如何通过修改log4j.properties文件,将 Flink 的默认日志配置升级为保留最近 7 天的日志文件配置,并解决…...

    【优化算法】协方差矩阵自适应进化策略(Covariance Matrix Adaptation Evolution Strategy,CMA-ES)

    CMA-ES(Covariance Matrix Adaptation Evolution Strategy)算法是一种无导数、基于多元正态分布的迭代优化方法,通过自适应地调整搜索分布的均值、协方差矩阵和步长,能够高效地解决非线性、非凸的连续优化问题。 算法以最大似然和…...

    基于Leaflet和天地图的免费运动场所WebGIS可视化-以长沙市为例

    目录 前言 一、免费运动场所数据整理 1、本地宝数据简介 2、Java后台数据解析 二、Leaflet前端地图展示 1、基础数据准备 2、具体位置及属性标记 三、成果展示 1、空间位置分布 2、东风路立交桥运动公园 3、芙蓉区花侯路浏阳河大桥下方 4、梅岭国际小区 5、湖南大学…...

    399. 除法求值

    https://leetcode.cn/problems/evaluate-division/description/?envTypestudy-plan-v2&envIdtop-interview-150思路:读完题后我们可以发现这题的考察已经很明确了就是考我们矩阵,我们将矩阵构建出来后,这题就变成可达性分析题了。 所以解…...

    QMK固件OLED显示屏配置教程:从零开始实现个性化键盘显示(实操部分)

    QMK固件OLED显示屏配置教程:从零开始实现个性化键盘显示 📢 前言: 作为一名键盘爱好者,近期研究了QMK固件的OLED显示屏配置,发现网上的教程要么太过复杂,要么过于简单无法实际操作。因此决定写下这篇教程,从零基础出发,带大家一步步实现键盘OLED屏幕的配置与个性化显示…...

    深度解析 Meta 开源 MR 项目《North Star》:从交互到渲染的沉浸式体验设计

    🌌 一、项目概览:什么是 North Star? North Star 是由 Meta 官方推出并开源 的一款面向 Meta Quest 平台 的混合现实(MR)视觉演示项目。它不仅上线了 Horizon Store,更以完整的技术栈与高质量内容向开发者展示了如何在 VR/MR 设备上实现“视觉上限”和“交互潜力”的结…...

    使用VS Code通过SSH编译Linux上的C++程序

    引言 在软件开发领域,跨平台开发是一项常见需求。特别是对于C开发者来说,有时需要在Windows环境下编写代码,但却需要在Linux环境中编译和运行。这种情况在系统编程、嵌入式开发或高性能计算领域尤为常见。 Visual Studio Code (VS Code) 提…...

    Datawhale 5月llm-universe 第2次笔记

    第二章 使用 LLM API 开发应用 名词解释 Temperature 参数/场景低 Temperature(0 ~ 0.3)高 Temperature(0.7 ~ 1.0)输出特点保守、稳定、可预测创造性强、多样化、不可预测语言模型行为更少的随机性,倾向于选择高概…...

    【Vue】CSS3实现关键帧动画

    关键帧动画 两个重点keyframesanimation子属性 实现案例效果展示: 两个重点 keyframes 和 animation 作用:通过定义关键帧(keyframes)和动画(animation)规则,实现复杂的关键帧动画。 keyframes 定义动画的关键帧序列…...

    Spring 模拟转账开发实战

    一、转账业务场景分析 转账是金融类应用的核心场景之一,涉及付款方扣减金额和收款方增加金额两个关键操作。在开发中需解决以下问题: 业务层与数据层解耦:通过分层架构(Service 层调用 Dao 层)实现逻辑分离。数据库事…...

    Baklib内容中台赋能资源管理升级

    内容中台驱动管理升级 在数字化转型进程中,企业级内容管理工具的效能直接影响资源协同效率。以全渠道资源整合为核心的内容中台,通过集中化处理文档、FAQ及社区论坛等非结构化数据,有效解决信息孤岛问题。例如,某金融集团通过部署…...

    数据结构(九)——排序

    一、排序的基本概念 1.排序:重新排列表中的元素,使表中的元素满足按关键字有序 2.稳定性:Ri和Rj相对位置保持不变 3.内部排序:指在排序期间元素全部存在内存中的排序(比较和移动),如插入排序…...

    MinerU安装(pdf转markdown、json)

    在Windows上安装MinerU,参考以下几个文章,可以成功安装,并使用GPU解析。 整体安装教程: MinerU本地化部署教程——一款AI知识库建站的必备工具 其中安装conda的教程: 一步步教你在 Windows 上轻松安装 Anaconda以及使…...

    Spring框架核心技术深度解析:JDBC模板、模拟转账与事务管理

    一、JDBC模板技术:简化数据库操作 在传统JDBC开发中,繁琐的资源管理和重复代码一直是开发者的痛点。Spring框架提供的 JDBC模板(JdbcTemplate) 彻底改变了这一现状,它通过封装底层JDBC操作,让开发者仅需关注SQL逻辑&a…...

    LCD电视LED背光全解析:直下式 vs 侧光式、全局调光 vs 局部调光与HDR体验

    Abstract: This article explores the various types of LED backlighting used in televisions and monitors. It categorizes backlight systems based on structural design—direct-lit and edge-lit—as well as by dimming technology—global dimming and local dimmin…...

    ET EntityRef EntityWeakRef 类分析

    EntityRef EntityWeakRef 相同点 也是这两个的作用:这两个都是用来表示一个实体引用。一般来说使用一个对象,直接持有对象就可以,但是如果对象来自于对象池,这个时候直接持有对象不合适,对象可能已经被对象池回收&…...

    Python----神经网络(基于DNN的风电功率预测)

    一、基于DNN的风电功率预测 1.1、背景 在全球能源转型的浪潮中,风力发电因其清洁和可再生的特性而日益重要。然而,风力发电功率的波动性给电网的稳定运行和能源调度带来了挑战。准确预测风力发电机的功率输出,对于优化能源管理、提高电网可靠…...

    Web前端入门:JavaScript 的应用领域

    截至目前,您应该对前端的 HTML CSS 应该有了很清楚的认知,至少实现一个静态网页已经完全不在话下了。 当然,CSS 功能绝不止这些,一些不太常用的 CSS 相关知识,后续将通过案例进行分享。 那么咱们接下来看看 JavaScrip…...

    实用工具:微软软件PowerToys(完全免费),实现多台电脑共享鼠标和键盘(支持window系统)

    实用工具:微软软件 PowerToys 让多台电脑共享鼠标和键盘 在如今的数字化办公与生活场景中,我们常常会面临同时使用多台电脑的情况。例如,办公时可能一台电脑用于处理工作文档,另一台用于运行专业软件或查看资料;家庭环…...

    精益数据分析(61/126):移情阶段评分体系构建与实战案例解析

    精益数据分析(61/126):移情阶段评分体系构建与实战案例解析 在创业的移情阶段,如何科学评估用户需求的真实性与紧迫性,是决定后续产品方向的关键。今天,我们结合《精益数据分析》中的评分框架,…...

    面试题:介绍一下JAVA中的反射机制

    什么是反射机制? Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的…...

    yarn任务筛选spark任务,判断内存/CPU使用超过限制任务

    yarn任务筛选spark任务,判断内存/CPU使用超过限制任务 curl -s “http://it-cdh-node01:8088/ws/v1/cluster/apps?statesRUNNING” | jq ‘select(.apps.app[].applicationType “SPARK”) | .apps.app[].id’ | xargs -I {} curl -s “http://it-cdh-node01:808…...

    ArcGIS Pro地块图斑顺序编号(手绘线顺序快速编号)-004

    ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放_arcgis初学者使用视频-CSDN博客 4大遥感软件!遥感影像解译!ArcGISENVIErdaseCognition_遥感解译软件-CSDN博客 今天介绍一下在ArcGIS Pro地块图斑顺序编号(手绘线顺序快速编号&am…...

    红黑树解析

    目录 一、引言 二、红黑树的概念与性质 2.1 红黑树的概念 2.2 红黑树的性质 三、红黑树的节点定义与结构 3.1 节点定义 四、红黑树的插入操作 4.1 插入步骤 4.2 插入代码实现 五、红黑树的验证 5.1 验证步骤 5.2 验证代码实现 六、红黑树迭代器的实现 6.1 迭代器的…...

    在线文档管理系统 spring boot➕vue|源码+数据库+部署教程

    📌 一、项目简介 本系统采用Spring Boot Vue ElementUI技术栈,支持管理员和员工两类角色,涵盖文档上传、分类管理、公告发布、员工资料维护、部门岗位管理等核心功能。 系统目标是打造一个简洁高效的内部文档管理平台,便于员工…...

    Python3 简易DNS服务器实现

    使用Python3开发一个简单的DNS服务器,支持配置资源记录(RR),并能通过dig命令进行查询。 让自己理解DNS原理 实现方案 我们将使用socketserver和dnslib库来构建这个DNS服务器。dnslib库能帮助我们处理DNS协议的复杂细节。 1. 安装依赖 首先确保安装了d…...

    雾锁王国开服联机教程-专用服务器

    一。阿里云服务器搭建 服务器地址:1分钟畅玩!一键部署联机服务器 《雾锁王国(Enshrouded)》融合了生存、制作以及动作 RPG 战斗,游戏背景设定在了一个基于体素构筑的辽阔大陆。无论是攀登山脉还是跨越沙漠&#xff0…...

    鸿蒙OSUniApp 开发的一键分享功能#三方框架 #Uniapp

    使用 UniApp 开发的一键分享功能 在移动应用开发中,分享功能几乎是必不可少的一环。一个好的分享体验不仅能带来更多用户,还能提升产品的曝光度。本文将详细讲解如何在 UniApp 框架下实现一个简单高效的一键分享功能,适配多个平台。 各平台分…...

    Hive PredicatePushDown 谓词下推规则的计算逻辑

    1. PredicatePushDown 谓词下推 谓词下推的处理顺序是先处理子节点的操作&#xff0c;子节点都处理完&#xff0c;然后处理父节点。 select web_site_sk from (select web_site_sk,web_name from web_site where web_cityPleasant Hill ) t where web_name <> site_…...

    2024东北四省ccpc

    F题 解题思路 数论 有限小数的条件 p q \frac{p}{q} qp​ 在 k k k 进制下是有限小数&#xff0c;当且仅当 q q q 的所有质因数都是 p p p 或 k k k 的质因数。 即&#xff0c;若 q q q 的质因数分解为 q ∏ i p i a i q \prod_{i} p_i^{a_i} q∏i​piai​​&#x…...

    【C语言】初阶数据结构相关习题(二)

    &#x1f386;个人主页&#xff1a;夜晚中的人海 今日语录&#xff1a;知识是从刻苦劳动中得来的&#xff0c;任何成就都是刻苦劳动的结果。——宋庆龄 文章目录 &#x1f384;一、链表内指定区间翻转&#x1f389;二、从链表中删去总和值为零的节点&#x1f680;三、链表求和&…...

    DeepSeek执行流程加速指南:跨框架转换与编译优化的核心策略全解析

    &#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

    解决 Conda 安装 PyTorch 1.1.0 报错:excluded by strict repo priority(附三种解决方案)

    # &#x1f4a5;解决 Conda 安装 PyTorch 1.1.0 报错问题&#xff1a;excluded by strict repo priority在使用旧版本 PyTorch&#xff08;例如 1.1.0&#xff09;时&#xff0c;有些开发者会遇到以下 conda 安装报错&#xff1a;LibMambaUnsatisfiableError: package pytorch-…...

    面试从微前端拓展到iframe是如何通信的

    一、跨域通信 1、父页面发消息给 iframe const iframe document.getElementById(myIframe); iframe.contentWindow.postMessage(form parent, https://iframe-domain.com)// iframe 接收 window.addEventListener(message, (event) > {if (event.origin ! https://paren…...

    PyTorch循环神经网络(Pytotch)

    文章目录 循环神经网络&#xff08;RNN&#xff09;简单的循环神经网络长短期记忆网络&#xff08;LSTM&#xff09;门控循环单元&#xff08;GRU&#xff09; 循环神经网络&#xff08;RNN&#xff09; 循环神经网络&#xff08;RecurrentNeuralNetwork&#xff0c;RNN&#…...

    django中用 InforSuite RDS 替代memcache

    在 Django 项目中&#xff0c;InforSuite RDS&#xff08;关系型数据库服务&#xff09;无法直接替代 Memcached&#xff0c;因为两者的设计目标和功能定位完全不同&#xff1a; 特性MemcachedInforSuite RDS核心用途高性能内存缓存&#xff0c;临时存储键值对数据持久化关系型…...

    Git 常用命令详解

    Git 常用命令详解&#xff08;含详细示例&#xff09; 本文整理了 Git 日常使用中最常用的命令&#xff0c;适合初学者和日常查阅&#xff0c;如有错误&#xff0c;敬请指正&#xff0c;谢谢&#xff01; ☁️ Git 使用流程入门&#xff08;从 pull 和 push 开始&#xff09; …...