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

Linux之Tcp粘包笔记

目录

一.网络传输四层模型

二.数据传输中数据包传输的两个限制概念

 三.数据传输的中粘包问题

四.数据组装的原因

Nagle算法原理:

五.关闭Nagle优化处理粘包问题吗?

六.粘包处理方法

a.设置消息边界:

b.定义消息长度:

七.UDP是否会出现粘包

a.IP数据报文格式

 b.UDP数据报文格式

c.tcp数据报文格式

八.IP层网络层是否会产生粘包

九总结


一.网络传输四层模型

在网络传输的四层模型中:网络层接口(数据链路层)->网络层->传输层->应用层。通过这四层模型传递,进行数据传输。如下图:

发送方传递消息,经过每一层都添加对应模型的包头,在传递下一等模型,接收方接收到通过层层剥离每一层的包头,最后就得到对应的消息。

二.数据传输中数据包传输的两个限制概念

MTU:最大传输单元(这个由网络接口层决定,最大为1500字节)。

MSS:最大传输报文(表示每次传输的报文大小)表示tcp用来限制应用层每次最大发送的报文长度。

两者关系: MTU = MSS + IP(头部,20字节) + TCP(头部,20字节)

例如:如果一个报文长度< 1500,那么一次就可以发送完成。> 1500 的报文传输就需要进行分片传输。比如,2000长度的数据包,第一个分包:1460,第二个分包:540(剔除ip+tcp包头各占20个字节)

如下图,MTU跟MSS关系图解:

 三.数据传输的中粘包问题

      针对粘包的产生,产生在TCP(字节流传输),例如:a给b发送一条消息,HelloWorld。可是因为传输过程中,b接受到的信息:HelloW ,orld这样b接收到的信息就变了意思。为什么会产生此种情况。就是因为所说的粘贴包导致。

   原因:TCP传输按照字节流传输(传输的就是二进制的数据流),在下层发送的时候,可能会被切片并且重新组装,最后再发送至接收者的缓冲区,而接收端未能正确的还原对应的数据流导致。这种情况的粘包问题主要是出在了开发者对tcp数据字流的处理上。并非tcp传输方式自身会产生粘包,这个才是出现粘包的实质原因。

四.数据组装的原因

        因为受限于MTU跟MSS的报文传输限制,当要传输一个很大的报文时,就需要对该报文进行分割,将其分割成若干,依次通过限制的传输通道,接收方收到后,再将收到的分割包重新组装起来,还原发送方的数据。另外在Tcp的传输方式中还存在一个组装的情况。比如,发送两个比较小的数据报文(<MSS),这样的发送方式比较比较浪费资源。所以TCP中设计了优化算法,Nagle算法进行优化。

Nagle算法原理:

  a.在发送一个数据包如果长度达到MSS(or含有FIN的数据包),那么就立刻发送该数据包。如果当前数据包msg1<MSS,那么就会等到下一个数据包msg2到来,如果该msg1 + msg2 > MSS,那么就会让将msg2进行拆分发送。

  b.该算法每次发送数据包,(设置了一个超时等待机制,一般是200ms),第一个包长度没达到MSS,就会进行一个超时等待第二个包来,如果等待第二个包超时还没来,则立刻发送第一个数据包。

c.如下图解:

d.m1 < MSS,此时m2来了,但是len(m1+ m2) > MSS,在Nagle算法开启情况,会将m2进行拆分,m2-1,m2-2,此时len(m1 + m2-1)= MSS,将该两包进行组装并且立刻发送出去。而m2-2,会重复前面的流程等待(200ms),以此类推,如果超时还没等到包来,就立刻将当前包发送出去。

e.上图解释明确颜色表述,但实际存储的都是为二进制数据,如果接受者把m1+ m2-1,当成一个包来处理,就会造成不明消息,该情况就是粘包情况。

五.关闭Nagle优化处理粘包问题吗?

    a.Nagle算法优化了资源的浪费情况,但是带来粘包问题。另外超时等待机制也是一个很大的缺陷问题,比如当下的游戏场景,正在打游戏,因为该算法的超时等待,导致一个数据包延时到来,就会造成游戏画面卡顿。通常使用中,都会关闭该算法优化。TCP_NODELAY = 1(Nagle关闭)

    b.即便关闭了该算法的优化,是不是就不会产生粘包情况?答案是否定的。仍旧会产生粘包问题。如下图:

如图,当m1消息到来时,直接取走了,消息正常还原。然后后续有消息来了,发送到了接受方的缓冲区,因应用层未能及时读走,下一个数据包也发送到了接受方的缓冲期如上图m2m3, 此时应用层一次将所有的数据读取了,导致数据混乱,从而导致就出现了粘包问题,

六.粘包处理方法

       粘包的问题主要是字节流传输中未能定义具体的消息边界导致。换句话说就是开发者发送数据的问题导致。如下介绍几种方法:

a.设置消息边界:

        给消息定义边界头跟边界尾巴,消息结构如下:

    |消息头|消息体|消息尾||header|body| body_tail|

 但是a中存在一个问题,如果消息内容中存在跟头or尾中一样的标志,也会出现问题,处理该问题,可采用crc校验和添加来处理,如下图解:

        校验和:对整个消息生成的校验值

发送方通过对消息设置对应的校验和,接收方收到消息后,校验确保是发送方发送的完整数据。

b.定义消息长度:

        利用消息长度,应用层再度读取消息的按照消息长度读取正确的消息内容,跟http中的Content-Length表示传输的数据长度蕾丝。该种方法,也可结合a中的标志,再加上消息长度,就更加的能确保消息的读取的正确性。

结构如下:

七.UDP是否会出现粘包

       首先UDP的发送方式,使用的是数据报文方式,每次发送的数据都是一整个数据报文。无论应用层每次丢给UDP的报文多长,都会原样发送出去。这是跟tcp按照字节流发送的差异性。另外如果UDP的数据太大的话,也是会进行分片的,只不过该分片在IP层面,即便在应用层面,也不会像tcp那样分不清啥时候会结束。这就是udp跟tcp两者的区别。例如发送端发送了10次,接受端接收10次,发多少,接收多少,确保每次一完成的数据包就好了。

a.IP数据报文格式

 上图中有个16位的总长度,表明Ip包的总长度m。

 b.UDP数据报文格式

 如上图,UDP报文头有个16位的UDP长度表示n。应用层可根据该字段,读取对应大小的UDP报文。故而UDP不会产生粘包问题。另外如果不存在长度n,那么通过ip层也能够知道udp数据报文长度。计算方式: UDP包长度 = IP包总长度 - IP包头部 - UDP包头部。有个问题,这个16位的n字段是否多余的。如下答案:

c.tcp数据报文格式

 如上图tcp的报文结构中没有存储数据包的长度,但是依旧能通过如下方式计算:

tcp包长度 = IP包长度 - IP包头长度 - TCP包长度,如下图:

上面说UDP数据包头中的16位长度是否多余呢?答案否定的。如下解释:Tcp-Ip卷2中解释说是用于计算校验和,并且说UDP底层可能用的不是Ip协议,如果是其他网络类型,那么就不能计算UDP包长度了。但是还有一种解释,根据某位大佬的讲解,因为IP层是网络层协议,而UDP是传输层协议,当数据传输层,此时IP层头部已经被剥离了,此时如果UDP没有自身16位的长度,是无法计算出数据部分长度的。所有该解释感觉比较更切近点。当前卷中的解释,可能以后出现新协议作网络层处理,也是可能的。敬请期待中。。。还有,这个n跟tcp中应用层定义对应数据包长度字段是一个道理,用来确定包长度,防止粘包发生。

八.IP层网络层是否会产生粘包

  IP层传输也会对大包进行分包处理的,那么是否会产生粘包呢?

  答案是不会产生粘包的。这个前面说了,粘包的原因是使用者无法正确区分消息边界导致的。如下图所示:

整个数据包传输过程,从发送者网络层到接受者网络层,消息太长,超过MTU,会把消息分N个切片,并且每个切片会携带自身在整包的位置偏转量(offset)以及相同的头部信息。当数据包到达接受者的网络层,会将数据包重新组装起来。(过程是申请一个ip结构,将所有的分片包按照偏转量放置在各自的位置)等所有数据包组装完成,再即将数据包推到传输层。后面的处理,就是如上解释的是否粘包问题以及相关的处理。另外有关IP层分片请见如下博文,上图来自博主的下述文章:网络层协议之IP数据包层分片随笔_ip数据报分片计算-CSDN博客

九总结

         粘包的问题归根结底是开发者,未能正确区分消息边界导致,跟协议并无多大关系。

        a.TCP无论发送送什么,都是字节流发送,可能当前的字节流存在上次数据发送的内容,(就是粘包),只要使用消息边界确认就可以避免粘包。

        b.TCP有Nagle算法会导致粘包问题,但是关闭该算法并不解决粘包问题。

        c.UDP基于数据报文传输,不会产生粘包问题。

        d.IP层也会进行包分片,但仅仅是网络进行传输,并不关心数据包内容是什么,所以不会有粘包问题。

相关文章:

Linux之Tcp粘包笔记

目录 一.网络传输四层模型 二.数据传输中数据包传输的两个限制概念 三.数据传输的中粘包问题 四.数据组装的原因 Nagle算法原理: 五.关闭Nagle优化处理粘包问题吗&#xff1f; 六.粘包处理方法 a.设置消息边界&#xff1a; b.定义消息长度&#xff1a; 七.UDP是否会出…...

StarRocks 安装部署

StarRocks 安装部署 StarRocks端口&#xff1a; 官方《配置检查》有服务端口详细描述&#xff1a; https://docs.starrocks.io/zh/docs/deployment/environment_configurations/ StarRocks架构&#xff1a;https://docs.starrocks.io/zh/docs/introduction/Architecture/ Sta…...

【深度学习|迁移学习】渐进式学习策略 (Progressive Learning Strategy)详述(一)

【深度学习|迁移学习】渐进式学习策略 (Progressive Learning Strategy)详述&#xff08;一&#xff09; 【深度学习|迁移学习】渐进式学习策略 (Progressive Learning Strategy)详述&#xff08;一&#xff09; 文章目录 【深度学习|迁移学习】渐进式学习策略 (Progressive L…...

关注搜索引擎蜘蛛压力

以前在建站的时候&#xff0c;他们说蜘蛛来抓取的频率越多越好&#xff0c;因为蜘蛛来抓取说明了网站更新速度快&#xff0c;受搜索引擎的欢迎&#xff0c;但是在最近的网站统计中&#xff0c;发现很多蜘蛛爬取的频次非常的高&#xff0c;比如有的蜘蛛一天能来网站几万次&#…...

Windows上通过Git Bash激活Anaconda

在Windows上配置完Anaconda后&#xff0c;普遍通过Anaconda Prompt激活虚拟环境并执行Python&#xff0c;如下图所示&#xff1a; 有时需要连续执行多个python脚本时&#xff0c;直接在Anaconda Prompt下可以通过在以下方式&#xff0c;即命令间通过&&连接&#xff0c;…...

【架构面试】一、架构设计认知

涉及分布式锁、中间件、数据库、分布式缓存、系统高可用等多个技术领域&#xff0c;旨在考查候选人的技术深度、架构设计能力与解决实际问题的能力。 1. 以 Redis 是否可以作为分布式锁为例&#xff1a; 用 Redis 实现分布式锁会存在哪些问题&#xff1f; 死锁&#xff1a;如果…...

【Redis】常见面试题

什么是Redis&#xff1f; Redis 和 Memcached 有什么区别&#xff1f; 为什么用 Redis 作为 MySQL 的缓存&#xff1f; 主要是因为Redis具备高性能和高并发两种特性。 高性能&#xff1a;MySQL中数据是从磁盘读取的&#xff0c;而Redis是直接操作内存&#xff0c;速度相当快…...

解决vsocde ssh远程连接同一ip,不同端口情况下,无法区分的问题

一般服务器会通过镜像分身或者容器的方式&#xff0c;一个ip分出多个端口给多人使用&#xff0c;但如果碰到需要连接同一user&#xff0c;同一个ip,不同端口的情况&#xff0c;vscode就无法识别&#xff0c;如下图所示&#xff0c;vscode无法区分该ip下不同端口的连接&#xff…...

Java设计模式—观察者模式

观察者模式 目录 观察者模式1、什么是观察者模式&#xff1f;2、观察者模式优缺点及注意事项&#xff1f;3、观察者模式实现&#xff1f;4、手写线程安全的观察者模式&#xff1f; 1、什么是观察者模式&#xff1f; - 实例&#xff1a;现实生活中很多事物都是依赖存在的&#x…...

Lua 环境的安装

1.安装Lua运行环境 本人采用的是在windows系统中使用cmd指令方式进行安装&#xff0c;安装指令如下&#xff1a; winget install "lua for windows" 也曾使用可执行程序安装过&#xff0c;但由于电脑是加密电脑&#xff0c;最后都已失败告终。使用此方式安装可以安…...

MySQL回表详解:原理、优化与实践

1. 简介 在MySQL的查询过程中&#xff0c;“回表”&#xff08;又叫“二次查询”&#xff09;是一个常见的概念&#xff0c;尤其在使用覆盖索引&#xff08;covering index&#xff09;或联合索引&#xff08;composite index&#xff09;时&#xff0c;回表操作常常会对查询性…...

算法——位运算

位运算知识点 01.01. 判定字符是否唯一 面试题 01.01. 判定字符是否唯一 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool isUnique(string astr) {//鸽巢原理if(astr.size()>26) return false;int bitmap 0;for(auto ch:astr){char i ch-a;//判断…...

CVE-2025-0411 7-zip 漏洞复现

文章目录 免责申明漏洞描述影响版本漏洞poc漏洞复现修复建议 免责申明 本文章仅供学习与交流&#xff0c;请勿用于非法用途&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 漏洞描述 此漏洞 &#xff08;CVSS SCORE 7.0&#xff09; 允许远程攻击者绕…...

深度学习笔记——循环神经网络之LSTM

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的循环神经网络LSTM知识点。 文章目录 文本特征提取的方法1. 基础方法1.1 词袋模型&#xff08;Bag of Words, BOW&#xff09;工作…...

超分辨率体积重建实现术前前列腺MRI和大病理切片组织病理学图像的3D配准

摘要: 磁共振成像(MRI)在前列腺癌诊断和治疗中的应用正在迅速增加。然而,在MRI上识别癌症的存在和范围仍然具有挑战性,导致即使是专家放射科医生在检测结果上也存在高度变异性。提高MRI上的癌症检测能力对于减少这种变异性并最大化MRI的临床效用至关重要。迄今为止,这种改…...

React第二十五章(受控组件/非受控组件)

React 受控组件理解和应用 React 受控组件 受控组件一般是指表单元素&#xff0c;表单的数据由React的 State 管理&#xff0c;更新数据时&#xff0c;需要手动调用setState()方法&#xff0c;更新数据。因为React没有类似于Vue的v-model&#xff0c;所以需要自己实现绑定事件…...

Vue演练场基础知识(七)插槽

为学习Vue基础知识&#xff0c;我动手操作通关了Vue演练场&#xff0c;该演练场教程的目标是快速体验使用 Vue 是什么感受&#xff0c;设置偏好时我选的是选项式 单文件组件。以下是我结合深入指南写的总结笔记&#xff0c;希望对Vue初学者有所帮助。 文章目录 十五. 插槽插槽…...

16 分布式session和无状态的会话

在我们传统的应用中session存储在服务端&#xff0c;减少服务端的查询压力。如果以集群的方式部署&#xff0c;用户登录的session存储在该次登录的服务器节点上&#xff0c;如果下次访问服务端的请求落到其他节点上就需要重新生成session&#xff0c;这样用户需要频繁的登录。 …...

docker 部署 java 项目详解

在平常的开发工作中&#xff0c;我们经常需要部署项目&#xff0c;开发测试完成后&#xff0c;最关键的一步就是部署。今天我们以若依项目为例&#xff0c;总结下部署项目的整体流程。简单来说&#xff0c;第一步&#xff1a;安装项目所需的中间件&#xff1b;第二步&#xff1…...

csapp笔记——2.3节整数运算

目录 无符号加法 补码加法 补码的非 无符号乘法 补码乘法 乘以常数 除以2的幂 无符号加法 对于的整数x,y&#xff0c;定义表示将x与y的和截为w位 由此推得检测无符号加法是否溢出得方法是判断结果是否比x&#xff0c;y中的任何一个小。 无符号数的逆元定义为使得的y&am…...

【阅读笔记】基于图像灰度梯度最大值累加的清晰度评价算子

本文介绍的是一种新的清晰度评价算子&#xff0c;基于图像灰度梯度最大值累加 一、概述 目前在数字图像清晰度评价函数中常用的评价函数包括三类&#xff1a;灰度梯度评价函数、频域函数和统计学函数&#xff0c;其中灰度梯度评价函数具有计算简单&#xff0c;评价效果好等优…...

Docker 系列之 docker-compose 容器编排详解

文章目录 前言一、Docker-compose简介二、Docker-compose 的安装三、Docker-compose卸载四、Docker-compose常用命令4.1 Docker-compose命令格式4.2 docker-compose up4.3 docker-compose ps4.4 docker-compose stop4.5 docker-compose -h4.6 docker-compose down4.7 docker-co…...

C++资料

InterviewGuide 首页 - 八股精 Releases halfrost/LeetCode-Go GitHub GitHub - GrindGold/CppGuide: 「C/C学习面试指南」一份涵盖大部分 C 程序员所需要掌握的知识。入门、进阶、深入、校招、社招&#xff0c;准备 C 学习& 面试&#xff0c;首选 CppGuide&#xff0…...

7-Zip Mark-of-the-Web绕过漏洞复现(CVE-2025-0411)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…...

将本地项目上传到 GitLab/GitHub

以下是将本地项目上传到 GitLab 的完整步骤&#xff0c;从创建仓库到推送代码的详细流程&#xff1a; 1. 在 GitLab 上创建新项目 登录 GitLab&#xff0c;点击 New project。选择 Create blank project。填写项目信息&#xff1a; Project name: 项目名称&#xff08;如 my-p…...

基于SpringBoot+WebSocket的前后端连接,并接入文心一言大模型API

前言&#xff1a; 本片博客只讲述了操作的大致流程&#xff0c;具体实现步骤并不标准&#xff0c;请以参考为准。 本文前提&#xff1a;熟悉使用webSocket 如果大家还不了解什么是WebSocket&#xff0c;可以参考我的这篇博客&#xff1a; rWebSocket 详解&#xff1a;全双工…...

2.2.3 代码格式与风格指南

编写清晰、规范的代码是提高代码可读性、可维护性和团队协作效率的关键。虽然好多人说工控行业都是一帮电工&#xff0c;没有什么素质&#xff0c;这完全是误解&#xff0c;任何程序所在的行业&#xff0c;都需要个人保证其代码风格能够很好与团队进行协作&#xff0c;在过去一…...

数仓的数据加工过程-ETL

ETL代表Extract Transform和Load。ETL将所有三个数据库功能组合到一个工具中&#xff0c;以从一个数据库获取数据并将其放入另一个数据库。 提取&#xff1a;提取是从数据库中提取(读取)信息的过程。在此阶段&#xff0c;从多个或不同类型的来源收集数据。 转换&#xff1a;转…...

类与对象(中)

类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下 6 个默认成员函数。默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生…...

FastExcel的使用

前言 FastExcel 是一款基于 Java 的开源库&#xff0c;旨在提供快速、简洁且能解决大文件内存溢出问题的 Excel 处理工具。它兼容 EasyExcel&#xff0c;提供性能优化、bug 修复&#xff0c;并新增了如读取指定行数和将 Excel 转换为 PDF 的功能。 FastExcel 的主要功能 高性…...

微信小程序1.3 开发工具的使用2

内容提要 1.1 编辑器区域 1.2 调试器区域 1.3 工具栏区域 1.4 云开发 1.5 常用快捷键 1.1 编辑器区域 1.2 调试器区域 1.3 工具栏区域 1.4 云开发 1.5 常用快捷键...

pytest自动化测试 - pytest夹具的基本概念

<< 返回目录 1 pytest自动化测试 - pytest夹具的基本概念 夹具可以为测试用例提供资源(测试数据)、执行预置条件、执行后置条件&#xff0c;夹具可以是函数、类或模块&#xff0c;使用pytest.fixture装饰器进行标记。 1.1 夹具的作用范围 夹具的作用范围&#xff1a; …...

个人网站搭建

搭建 LNMP环境搭建&#xff1a; LNMP环境指&#xff1a;Linux Nginx MySQL/MariaDB PHP&#xff0c;在debian上安装整体需要300MB的磁盘空间。MariaDB 是 MySQL 的一个分支&#xff0c;由 MySQL 的原开发者维护&#xff0c;通常在性能和优化上有所改进。由于其轻量化和与M…...

doris:Insert Into Values

INSERT INTO VALUES 语句支持将 SQL 中的值导入到 Doris 的表中。INSERT INTO VALUES 是一个同步导入方式&#xff0c;执行导入后返回导入结果。可以通过请求的返回判断导入是否成功。INSERT INTO VALUES 可以保证导入任务的原子性&#xff0c;要么全部导入成功&#xff0c;要么…...

Linux 环境变量

目录 一、环境变量的基本概念 1.常见环境变量 2.查看环境变量方法 ​3.几个环境变量 环境变量&#xff1a;PATH 环境变量&#xff1a;HOME 环境变量&#xff1a;SHELL 二、和环境变量相关的命令 三、库函数getenv&#xff0c;setenv 四、环境变量和本地变量 五、命令行…...

人工智能在数字化转型中的角色:从数据分析到智能决策

引言 在数字化转型浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;正迅速崛起&#xff0c;成为推动企业创新和变革的关键力量。面对日益复杂的市场环境和激烈的行业竞争&#xff0c;企业亟需借助技术手段提高运营效率、优化决策过程&#xff0c;并增强市场竞争力。而AI…...

Spring Boot 自动配置

目录 什么是自动配置&#xff1f; Spring 加载 Bean ComponentScan Import 导入类 导入 ImportSelector 接口的实现类 SpringBoot 原理分析 EnableAutoConfiguration Import(AutoConfigurationImportSelector.class) AutoConfigurationPackage SpringBoot 自动配置流…...

PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(下.代码部分)

医疗 MLLM 框架编程实现 本医疗 MLLM 框架结合 Python 与 PyQt6 构建,旨在实现多模态医疗数据融合分析并提供可视化界面。下面从数据预处理、模型构建与训练、可视化界面开发、模型 - 界面通信与部署这几个关键部分详细介绍编程实现。 6.1 数据预处理 在医疗 MLLM 框架中,多…...

【LC】1148. 文章浏览 I

题目描述&#xff1a; Views 表&#xff1a; ------------------------ | Column Name | Type | ------------------------ | article_id | int | | author_id | int | | viewer_id | int | | view_date | date | ----------------------…...

Linux学习笔记——网络管理命令

一、网络基础知识 TCP/IP四层模型 以太网地址&#xff08;MAC地址&#xff09;&#xff1a; 段16进制数据 IP地址&#xff1a; 子网掩码&#xff1a; 二、接口管命令 ip命令&#xff1a;字符终端&#xff0c;立即生效&#xff0c;重启配置会丢失 nmcli命令&#xff1a;字符…...

Arduino大师练成手册 --控制 OLED

要在 Arduino 上使用 U8glib 库控制带有 7 个引脚的 SPI OLED 显示屏&#xff0c;你可以按照以下步骤进行&#xff1a; 7pin OLED硬件连接 GND&#xff1a;连接到 Arduino 的 GND 引脚。 VCC&#xff1a;连接到 Arduino 的 5V 引脚。 D0&#xff08;或 SCK/CLK&#xff09;…...

2024年终总结

距离放假还有一个小时&#xff0c;闲来无事&#xff0c;写篇总结。 最近关注我的朋友不少&#xff0c;关注我的多半都是因为几篇博客。既然关注了&#xff0c;我也想分享点工作中的经验给大家。 今年的节点是跳槽。 4月份跳槽的&#xff0c;跳槽之前呢在上家公司还有3W多奖金…...

Kafka 消费端反复 Rebalance: `Attempt to heartbeat failed since group is rebalancing`

文章目录 Kafka 消费端反复 Rebalance: Attempt to heartbeat failed since group is rebalancing1. Rebalance 过程概述2. 错误原因分析2.1 消费者组频繁加入或退出2.1.1 消费者故障导致频繁重启2.1.2. 消费者加入和退出导致的 Rebalance2.1.3 消费者心跳超时导致的 Rebalance…...

【Linux】Linux编译器-g++、gcc、动静态库

只要积极创造&#xff0c;机遇无时不有&#xff1b;只要善于探索&#xff0c;真理无处不在。&#x1f493;&#x1f493;&#x1f493; 目录 ✨说在前面 &#x1f34b;知识点一&#xff1a;Linux编译器-g、gcc •&#x1f330;1. 背景知识 •&#x1f330;2. gcc如何完成 •…...

android12源码中用第三方APK替换原生launcher

一、前言 如何用第三方的apk替换原生launcher呢&#xff1f;我是参考着这位大神的博客https://blog.csdn.net/hyu001/article/details/131044358做的&#xff0c;完美实现。 这边博客中又加入了我个人的一些改变&#xff0c;整理的。 二、步骤 1.在/packages/apps/MyApp文件…...

Ubuntu20.04 深度学习环境配置(持续完善)

文章目录 常用的一些命令安装 Anaconda创建conda虚拟环境查看虚拟环境大小 安装显卡驱动安装CUDA安装cuDNN官方仓库安装 cuDNN安装 cuDNN 库验证 cuDNN 安装确认 CUDA 和 cuDNN 是否匹配&#xff1a; TensorRT下载 TensorRT安装 TensorRT 本地仓库配置 GPG 签名密钥安装 Tensor…...

Java 实现Excel转HTML、或HTML转Excel

Excel是一种电子表格格式&#xff0c;广泛用于数据处理和分析&#xff0c;而HTM则是一种用于创建网页的标记语言。虽然两者在用途上存在差异&#xff0c;但有时我们需要将数据从一种格式转换为另一种格式&#xff0c;以便更好地利用和展示数据。本文将介绍如何通过 Java 实现 E…...

jQuery小游戏

jQuery小游戏&#xff08;一&#xff09; 嘻嘻&#xff0c;今天我们来写个jquery小游戏吧 首先&#xff0c;我们准备一下写小游戏需要准备的佩饰&#xff0c;如果&#xff1a;图片、音乐、搞怪的小表情 这里我准备了一些游戏中需要涉及到的图片 游戏中使用到的方法 eval() 函…...

Cpp::静态 动态的类型转换全解析(36)

文章目录 前言一、C语言中的类型转换二、为什么C会有四种类型转换&#xff1f;内置类型 -> 自定义类型自定义类型 -> 内置类型自定义类型 -> 自定义类型隐式类型转换的坑 三、C强制类型转换static_castreinterpret_castconst_castdynamic_cast 四、RTTI总结 前言 Hell…...

【PostgreSQL内核学习 —— (WindowAgg(一))】

WindowAgg 窗口函数介绍WindowAgg理论层面源码层面WindowObjectData 结构体WindowStatePerFuncData 结构体WindowStatePerAggData 结构体eval_windowaggregates 函数update_frameheadpos 函数 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊…...