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

【MQTT协议 03】 抓包分析

一、MQTT测试工具

1、mqtt服务器 emqx

2、mqtt 客户端 mqttx

3、抓包工具 wireshark

搭建参考

【MQTT 协议 01】MQTT 服务器搭建_mqtt服务器搭建-CSDN博客

二、报文测试

2.1、CONNECT (客户端连接)

2.1.1、抓包

2.1.2、解析

#16进制表示 
103000044d51545405c2003c051100000000000e6d717474785f376238313731393400066e767231323300066e7672313233#固定报头(剩余长度48个字节)
10 30#可变报头(0004 表示协议名称长度为4个字节 MQTT,版本5,标志字节C2,心跳60s,属性5个字节)
00 04 4d 51 54 54 05 c2 00 3c 05 11 00 00 00 00 #余下为有效载荷字段 
#客户端标识符(000e 表示长度为14个字节,文本内容为“mqttx_7b817194”)
00 0e 6d 71 74 74 78 5f 37 62 38 31 37 31 39 34#遗嘱主题、遗嘱消息没启用,所以没有 #用户名(0006 示长度为6个字节,文本内容为“nvr123”)
00 06 6e 76 72 31 32 33#密码(0006 表示长度为6个字节,文本内容为“nvr123”)
00 06 6e 76 72 31 32 33

2.2、CONACK (服务端应答)

2.2.1、抓包

2.2.2、解析

#16进制表示 
2013000010270010000025012a01290122ffff2801#固定报文(剩余长度19个字节,连接确认标志00,返回码00) 
20 13 00  00#属性10: 总长27: ID maximum packet size 00 10 00 00: value 25 :ID retain available 01:  value2a:  ID shared subscription available 01: value29: ID subscription identifier available 01: value22: ID topic alias maximumff ff: value28: ID wildcard subsciption available 01: value

2.3、SUBSCRIBE (客户端订阅主题)

2.3.1、订阅主题topic1 Qos 0

2.3.1.1、抓包

2.3.1.2、解析
#16进制表示 
820ce453000006746f7069633100#固定报头(剩余长度12个字节)
82 0C #可变报头(报文标识符为58451)
e4 53#有效载荷(长度为6个字节,主题为“topic1”,Qos为0)
00 属性 总长00 06 74 6f 70 69 63 31 00

 2.3.2、订阅主题 topic2 Qos 1

 2.3.2.1、抓包

 2.3.2.2、解析
#16进制表示 
820ce454000006746f7069633201#固定报头(剩余长度12个字节)
82 0C #可变报头(报文标识符为58452)
e4 54#有效载荷(长度为6个字节,主题为“topic2”,Qos为1)
00 属性 总长00 06 74 6f 70 69 63 32 01

 2.3.3、订阅主题 topic3 Qos 2

 2.3.3.1、抓包

 2.3.3.2、解析
#16进制表示 
820ce455000006746f7069633302#固定报头(剩余长度12个字节)
82 0C #可变报头(报文标识符为58453)
e4 55#有效载荷(长度为6个字节,主题为“topic3”,Qos为2)
00 属性 总长00 06 74 6f 70 69 63 33 02

2.4、SUBCK (服务端应答主题)

2.4.1、应答topic1 Qos 0

2.4.1.1、抓包

2.4.1.2、解析
#16进制表示 
9004e4530000#固定报头(剩余长度4个字节) 
90 04#可变报头(报文标识符为58451)
e4 53 #有效载荷(对应订阅的topic1的qos 0) 
00 属性 总长00 返回码:授予QoS 0

2.4.2、 应答topic2 Qos 1

2.4.2.1、抓包

2.4.2.2、解析
#16进制表示 
9004e4540001#固定报头(剩余长度4个字节) 
90 04#可变报头(报文标识符为58452)
e4 54 #有效载荷(对应订阅的topic2的qos 1) 
00 属性 总长01 返回码:授予QoS 1

2.4.3、应答 topic3 Qos 2

2.4.3.1、抓包

2.4.3.2、解析
#16进制表示 
9004e4550002#固定报头(剩余长度4个字节) 
90 04#可变报头(报文标识符为58453)
e4 55 #有效载荷(对应订阅的topic3的qos 2) 
00 属性 总长02 返回码:授予QoS 2

2.5、PINGREQ (客户端发送心跳包)

2.5.1、抓包

 2.5.2、解析

#16进制表示
C0 00

2.6、PINGRESP (服务端应答心跳包)

2.6.1、抓包

2.6.2、解析

#16进制表示
D0 00

2.7、PUBLISH (发布信息)

2.7.1、发布主题topic1 Qos 0

2.7.1.1、抓包

2.7.1.2、解析
#16进制表示 
301e0006746f7069633100746f7069633120516f7320302072657461696e2030#固定报头(qos=0消息,非重传、非保留,剩余长度30个字节)
30 1e #可变报头(6个字节的主题“topic1”,无报文标识符)
00 06 74 6f 70 69 63 31 #有效载荷(信息 topic1 Qos 0 retain 0)
00 属性 总长74 6f 70 69 63 31 20 51 6f 73 20 30 20 72 65 74 61 69 6e 20 30 

2.7.2、发布主题topic2 Qos 0

2.7.2.1、抓包

2.7.2.2、解析
#16进制表示 
301e0006746f7069633200746f7069633220516f7320302072657461696e2030#固定报头(qos=0消息,非重传、非保留,剩余长度30个字节)
30 1e #可变报头(6个字节的主题“topic2”,无报文标识符)
00 06 74 6f 70 69 63 32#有效载荷(信息 topic2 Qos 0 retain 0)
00 属性 总长74 6f 70 69 63 32 20 51 6f 73 20 30 20 72 65 74 61 69 6e 20 30 

2.7.3、发布主题topic3 Qos 0

2.7.3.1、抓包

2.7.3.2、解析
#16进制表示 
301e0006746f7069633300746f7069633320516f7320302072657461696e2030#固定报头(qos=0消息,非重传、非保留,剩余长度30个字节)
30 1e #可变报头(6个字节的主题“topic3”,无报文标识符)
00 06 74 6f 70 69 63 33#有效载荷(信息 topic3 Qos 0 retain 0)
00 属性 总长74 6f 70 69 63 33 20 51 6f 73 20 30 20 72 65 74 61 69 6e 20 30

2.7.4、发布主题topic1 Qos 1

2.7.4.1、发布抓包

 2.7.4.2、发布解析
#16进制表示 
32200006746f70696331e45600746f7069633120516f7320312072657461696e2030#固定报头(qos=1消息,非重传、非保留,剩余长度32个字节)
32 20#可变报头(6个字节的主题“topic1”,标识符(e4 56)58454)
00 06 74 6f 70 69 63 31 e4 56#有效载荷(信息 topic1 Qos 1 retain 0)
00 属性 总长74 6f 70 69 63 31 20 51 6f 73 20 31 20 72 65 74 61 69 6e 20 30
2.7.4.3、PUBACK应答抓包
 2.7.4.4、PUBACK应答解析
#16进制表示 
4004e4560000#固定报头(剩余长度2个字节)
40 04#可变报头(报文标识符为58454) 
e4 56#有效载荷
00 Reason Code: Success (0)00 属性 总长

2.7.5、发布主题topic2 Qos 1

2.7.5.1、发布抓包

2.7.5.2、发布解析
#16进制表示 
32200006746f70696332e45700746f7069633220516f7320312072657461696e2030#固定报头(qos=1消息,非重传、非保留,剩余长度32个字节)
32 20#可变报头(6个字节的主题“topic2”,标识符(e4 57)58455)
00 06 74 6f 70 69 63 32 e4 57#有效载荷(信息 topic2 Qos 1 retain 0)
00 属性 总长74 6f 70 69 63 32 20 51 6f 73 20 31 20 72 65 74 61 69 6e 20 30
2.7.5.3、PUBACK应答抓包

2.7.5.4、PUBACK应答解析
#16进制表示 
4004e4560000#固定报头(剩余长度2个字节)
40 04#可变报头(报文标识符为58455) 
e4 57#有效载荷
00 Reason Code: Success (0)00 属性 总长

2.7.6、发布主题 topic3 Qos 1

2.7.6.1、发布抓包

2.7.6.2、发布解析
#16进制表示 
32200006746f70696333e45800746f7069633320516f7320312072657461696e2030#固定报头(qos=1消息,非重传、非保留,剩余长度32个字节)
32 20#可变报头(6个字节的主题“topic3”,标识符(e4 58)58456)
00 06 74 6f 70 69 63 33 e4 58 #有效载荷(信息 topic3 Qos 1 retain 0)
00 属性 总长74 6f 70 69 63 33 20 51 6f 73 20 31 20 72 65 74 61 69 6e 20 30
2.7.6.3、PUBACK应答抓包

 2.7.6.4、PUBACK应答解析
#16进制表示 
4004e4580000#固定报头(剩余长度2个字节)
40 04#可变报头(报文标识符为58456) 
e4 58#有效载荷
00 Reason Code: Success (0)00 属性 总长

2.7.7、发布主题topic1 Qos 2

2.7.7.1、发布抓包
2.7.7.2、发布解析
 #16进制表示 
34200006746f70696331e45900746f7069633120516f7320322072657461696e2030#固定报头(qos=2消息,非重传、非保留,剩余长度32个字节)
34 20#可变报头(6个字节的主题“topic1”,标识符(e4 59)58457)
00 06 74 6f 70 69 63 31 e4 59#有效载荷(信息 topic1 Qos 2 retain 0)
00 属性 总长74 6f 70 69 63 31 20 51 6f 73 20 32 20 72 65 74 61 69 6e 20 30
2.7.7.3、PUBREC(收到)
2.7.7.3.1、抓包

 2.7.7.3.2、解析
#16进制表示 
5004e4590000#固定报头(剩余长度2个字节)
50 04#可变报头(报文标识符为58457) 
e4 59#有效载荷
00 Reason Code: Success (0)00 属性 总长
 2.7.7.4、PUBREL(释放)
 2.7.7.4.1、抓包

  2.7.7.4.2、解析
#16进制表示 
6203e45900#固定报头(剩余长度3个字节)
62 03#可变报头(报文标识符为58457) 
e4 59#有效载荷
00 Reason Code: Success (0)
2.7.7.5、PUBCOMP(完成)
2.7.7.5.1、抓包

2.7.7.5.2、解析
#16进制表示 
7004e4590000#固定报头(剩余长度4个字节)
70 04
#可变报头(报文标识符为58457) 
e4 59#有效载荷
00 Reason Code: Success (0)00 属性总长

2.7.8、发布主题topic2 Qos 2

2.7.8.1、发布抓包

2.7.8.2、发布解析
#16进制表示 
34200006746f70696332e45a00746f7069633220516f7320322072657461696e2030#固定报头(qos=2消息,非重传、非保留,剩余长度32个字节)
34 20#可变报头(6个字节的主题“topic2”,标识符(e4 5a)58458)
00 06 74 6f 70 69 63 32 e4 5a#有效载荷(信息 topic2 Qos 2 retain 0)
00 属性 总长74 6f 70 69 63 32 20 51 6f 73 20 32 20 72 65 74 61 69 6e 20 30
2.7.8.3、PUBREC(收到)
2.7.8.3.1、抓包

2.7.8.3.2、解析
#16进制表示 
5004e45a0000#固定报头(剩余长度2个字节)
50 04#可变报头(报文标识符为58458) 
e4 5a#有效载荷
00 Reason Code: Success (0)00 属性 总长
2.7.8.4、PUBREL(释放)
2.7.8.4.1、抓包

2.7.8.4.2、解析
#16进制表示 
6203e45a00#固定报头(剩余长度3个字节)
62 03#可变报头(报文标识符为58458) 
e4 5a#有效载荷
00 Reason Code: Success (0)
2.7.8.5、PUBCOMP(完成)
2.7.8.5.1、抓包

2.7.8.5.2、解析
#16进制表示 
7004e45a0000#固定报头(剩余长度4个字节)
70 04
#可变报头(报文标识符为58458) 
e4 5a#有效载荷
00 Reason Code: Success (0)00 属性总长

2.7.9、发布主题topic3 Qos 2

2.7.9.1、发布抓包

2.7.9.2、发布解析
#16进制表示 
34200006746f70696333e45b00746f7069633320516f7320322072657461696e2030#固定报头(qos=2消息,非重传、非保留,剩余长度32个字节)
34 20#可变报头(6个字节的主题“topic3”,标识符(e4 5b)58459)
00 06 74 6f 70 69 63 33 e4 5b#有效载荷(信息 topic3 Qos 2 retain 0)
00 属性 总长74 6f 70 69 63 33 20 51 6f 73 20 32 20 72 65 74 61 69 6e 20 30
2.7.9.3、PUBREC(收到)
2.7.9.3.1、抓包

2.7.9.3.2、解析
#16进制表示 
5004e45b0000#固定报头(剩余长度2个字节)
50 04#可变报头(报文标识符为58459) 
e4 5b#有效载荷
00 Reason Code: Success (0)00 属性 总长
2.7.9.4、PUBREL(释放)
2.7.9.4.1、抓包

2.7.9.4.2、解析 
#16进制表示 
6203e45b00#固定报头(剩余长度3个字节)
62 03#可变报头(报文标识符为58459) 
e4 5b#有效载荷
00 Reason Code: Success (0)
2.7.9.5、PUBCOMP(完成)
2.7.9.5.1、抓包

2.7.9.5.2、解析
#16进制表示 
7004e45b0000#固定报头(剩余长度4个字节)
70 04#可变报头(报文标识符为58459) 
e4 5b#有效载荷
00 Reason Code: Success (0)00 属性总长

2.7.10、发布(报文标志位,RETAIN=1)

 发布 报文标志位RETAIN=1的主题,跟不上面测试的结果相同,不同点在固定头的第一个字节的第0位 保留位置为1。

2.8、UNSUBSCRIBE (取消订阅)

2.8.1、抓包

2.8.2、解析

#16进制表示 
a20be462000006746f70696333#固定报头(剩余长度11个字节)
a2 0b#可变报头(报文标识符为58466)
e4 62#有效载荷(长度为9个字节,主题长度为6,主题为“topic3”) 
00 属性 总长
00 06 74 6f 70 69 63 33

其他两个主题topic2、topic1 取消一样

2.9、UNSUBCK (取消订阅应答)

2.9.1 、抓包

2.9.2、 解析

#16进制表示 
b004e4620000#固定报头(剩余长度4个字节)b0 04#可变报头(报文标识符为58466) e4 62 #有效载荷
00 属性总长00 Reason Code: Success (0)

2.10、DISCONNECT (断开连接)

2.10.1、抓包

2.10.2、解析

#16进制表示
e0020000#固定头e0 02有效载荷
00  Reason Code: Normal disconnection (0)00 属性 总长

三、总结

1、发布Qos = 0 的主题,服务端不应答。

2、发布Qos = 1 的主题,服务端应答PUBACK

3、发布Qos = 2 的主题,服务端应答PUBREC,客户端再发送PUBREL,服务端再回应PUBCOMP,发布一条主题信息,需要四个报文。

4、固定头的第一个字节,报文标志位第0位RETAIN=1,发布主题信息与RETAIN=0流程一致。

抓包文件链接

https://download.csdn.net/download/u011425939/90341178

相关文章:

【MQTT协议 03】 抓包分析

一、MQTT测试工具 1、mqtt服务器 emqx 2、mqtt 客户端 mqttx 3、抓包工具 wireshark 搭建参考 【MQTT 协议 01】MQTT 服务器搭建_mqtt服务器搭建-CSDN博客 二、报文测试 2.1、CONNECT (客户端连接) 2.1.1、抓包 2.1.2、解析 #16进制表示 10300…...

深度学习-100-RAG技术之最简单的RAG系统概念和效果优化提升方向

文章目录 1 数据是基础2 Naive RAG(最简单的RAG系统)2.1 RAG周边技术2.2 标准的RAG流程2.3 RAG的潜在问题2.4 如何应对RAG的问题3 优化方向3.1 原始数据创建/准备3.1.1 易于理解的文本3.1.2 提高数据质量3.2 预检索优化3.2.1 分块优化3.2.2 添加元数据3.2.3 选对嵌入模型3.2.4 …...

Redis面试题总结(题目来源JavaGuide)

Redis 基础 问题1:Redis 有什么作用?为什么要用 Redis/为什么要用缓存? Redis 是一个开源的高性能键值对数据库,它的作用主要体现在以下几个方面: 缓存:Redis 常被用作缓存系统,可以将频繁访问的数据存储…...

Django 多数据库

django 支持项目连接多个数据库 DATABASES = {default: {ENGINE: django.db.backends.mysql,NAME: xxx,USER: root,"PASSWORD": xxxxx,HOST: xxxx,PORT: 3306,},bak: {ENGINE: django.db.backends.mysql,NAME: xxx,USER: root,"PASSWORD": xxxx,HOST: xxx…...

为AI聊天工具添加一个知识系统 之87 详细设计之28 Derivation 统一建模元模型 之1

文本要点 要点 Derivation 统一建模元模型 Derivation 统一建模元模型:意识原型的祖传代码,即支撑 程序框架的 符号学中的 自然和逻辑树。 这棵树的雏形中描述了三种建模工件:语用钩子,语法糖和语义胶水。 三种工件对应的三“…...

手机上运行AI大模型(Deepseek等)

最近deepseek的大火,让大家掀起新一波的本地部署运行大模型的热潮,特别是deepseek有蒸馏的小参数量版本,电脑上就相当方便了,直接ollamaopen-webui这种类似的组合就可以轻松地实现,只要硬件,如显存&#xf…...

电商项目-分布式事务(四)基于消息队列实现分布式事务

基于消息队列实现分布式事务,实现消息最终一致性 如何基于消息队列实现分布式事务? 通过消息队列实现分布式事务的话,可以保证当前数据的最终一致性。实现思路:将大的分布式事务,进行拆分,拆分成若干个小…...

leetcode_双指针 160.相交链表

160.相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 思路: 本题中,交点不是数值相等,而是指针相等 双指针遍历两遍后必定相遇&#xff0c…...

深入理解浮点数:单精度、双精度、半精度和BFloat16详解

文章目录 深入理解浮点数:单精度、双精度、半精度和BFloat16详解 🔢简介 🌟1. 单精度(Single Precision)🎯应用场景 🚀 2. 双精度(Double Precision)💪应用场…...

Verilog基础(三):过程

过程(Procedures) - Always块 – 组合逻辑 (Always blocks – Combinational) 由于数字电路是由电线相连的逻辑门组成的,所以任何电路都可以表示为模块和赋值语句的某种组合. 然而,有时这不是描述电路最方便的方法. 两种always block是十分有用的: 组合逻辑: always @(…...

前端知识速记:POST和GET

前端知识速记:POST和GET请求的区别 一、GET请求概述 GET请求是一种用于获取服务器资源的请求方式。**使用GET请求时,数据通过URL传递,适合用于获取数据而不修改资源。**以下是GET请求的一些基本特征: 数据附在URL后面&#xff…...

【Java】MyBatis动态SQL

在MyBatis中使用动态SQL语句。 动态SQL是指根据参数数据动态组织SQL的技术。 生活中的案例: 在京东上买东西时,用户搜索商品,可以选择筛选条件,比如品牌,价格,材质等,也可以不使用筛选条件。这时…...

java进阶知识点

java回收机制 浅谈java中的反射 依赖注入的简单理解 通过接口的引用和构造方法的表达,将一些事情整好了反过来传给需要用到的地方~ 这样做得好处:做到了单一职责,并且提高了复用性,解耦了之后,任你如何实现&#xf…...

Java/Kotlin HashMap 等集合引发 ConcurrentModificationException

在对一些非并发集合同时进行读写的时候,会抛出 ConcurrentModificationException 异常产生示例 示例一(单线程): 遍历集合时候去修改 抛出 ConcurrentModificationException 的主要原因是当你在遍历一个集合(如 Map…...

拍照对比,X70 PRO与X90 PRO+的细节差异

以下是局部截图(上X70P下X90PP) 对比1 这里看不出差异。 对比2 X90PP的字明显更清楚。 对比3 中下的字,X90PP显然更清楚。...

Node.js与嵌入式开发:打破界限的创新结合

文章目录 一、Node.js的本质与核心优势1.1 什么是Node.js?1.2 嵌入式开发的范式转变二、Node.js与嵌入式结合的四大技术路径2.1 硬件交互层2.2 物联网协议栈2.3 边缘计算架构2.4 轻量化运行时方案三、实战案例:智能农业监测系统3.1 硬件配置3.2 软件架构3.3 核心代码片段四、…...

使用java调用deepseek,调用大模型,处理问题。ollama

废话不多&#xff0c;直接上代码 Testpublic void test7171111231233(){// url:放请求地址String url "http://localhost:11434/api/generate";HttpRequest request HttpUtil.createPost(url);Map<String, String> headers new HashMap<>();String a…...

Linux驱动---字符设备

目录 一、基础简介 1.1、Linux设备驱动分类 1.2、字符设备驱动概念 二、驱动基本构成 2.1、驱动模块的加载和卸载 2.2、添加LICENNSE以及其他信息 三、字符设备驱动开发步骤 3.1、分配主次设备号 3.1.1 主次设备号 3.1.2静态注册设备号 3.1.3动态注册设备号 3.1.4释…...

php7.3安装php7.3-gmp扩展踩坑总结

环境&#xff1a; 容器里面为php7.3.3版本 服务器也为php7.3.3-14版本&#xff0c;但是因为业务量太大需要在服务器里面跑脚本 容器里面为 alpine 系统&#xff0c;安装各种扩展 服务器里面开发服为 ubuntu 16.04.7 LTS (Xenial Xerus) 系统 服务器线上为 ubuntu 20.04.6 LTS (…...

javaEE-8.JVM(八股文系列)

目录 一.简介 二.JVM中的内存划分 JVM的内存划分图: 堆区:​编辑 栈区:​编辑 程序计数器&#xff1a;​编辑 元数据区&#xff1a;​编辑 经典笔试题&#xff1a; 三,JVM的类加载机制 1.加载: 2.验证: 3.准备: 4.解析: 5.初始化: 双亲委派模型 概念: JVM的类加…...

大语言模型轻量化:知识蒸馏的范式迁移与工程实践

大语言模型轻量化&#xff1a;知识蒸馏的范式迁移与工程实践 &#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 摘要 在大型语言模型&#xff…...

数据结构:时间复杂度

文章目录 为什么需要时间复杂度分析&#xff1f;一、大O表示法&#xff1a;复杂度的语言1.1 什么是大O&#xff1f;1.2 常见复杂度速查表 二、实战分析&#xff1a;解剖C语言代码2.1 循环结构的三重境界单层循环&#xff1a;线性时间双重循环&#xff1a;平方时间动态边界循环&…...

[创业之路-276]:从燃油汽车到智能汽车:工业革命下的价值变迁

目录 前言&#xff1a; 从燃油汽车到智能汽车&#xff1a;工业革命下的价值变迁 前言&#xff1a; 燃油汽车&#xff0c;第一次、第二次工业革命&#xff0c;机械化、电气化时代的产物&#xff0c;以机械和电气自动化为核心价值。 智能汽车&#xff0c;第三次、第四次工业革…...

vue页面和 iframe多页面无刷新方案和并行 并接入 micro 微前端部分思路

前: 新进了一家公司,公司是做电商平台的, 用的系统竟然还是jsp的网站,每次修改页面还需要我下载idea代码,作为一个前端, 这可不能忍,于是向上申请,意思你们后台做的太辣鸡,我要重做,经领导层商议从去年6月开始到今年12月把系统给重构了 公司系统采用的是每个jsp页面都是一个ifr…...

Linux特权组全解析:识别GID带来的权限提升风险

组ID&#xff08;Group ID&#xff0c;简称 GID&#xff09;是Linux系统中用来标识不同用户组的唯一数字标识符。每个用户组都有一个对应的 GID&#xff0c;通过 GID&#xff0c;系统能够区分并管理不同的用户组。 在Linux系统中&#xff0c;系统用户和组的配置文件通常包括以…...

RTMP 和 WebRTC

WebRTC(Web Real-Time Communication)和 RTMP(Real-Time Messaging Protocol)是两种完全不同的流媒体协议,设计目标、协议栈、交互流程和应用场景均有显著差异。以下是两者的详细对比,涵盖协议字段、交互流程及核心设计思想。 一、协议栈与设计目标对比 特性RTMPWebRTC传…...

系统通解:超多视角理解

在科学研究和工程应用中&#xff0c;我们常常面临各种复杂系统&#xff0c;需要精确描述其行为和变化规律。从物理世界的运动现象&#xff0c;到化学反应的进程&#xff0c;再到材料在受力时的响应&#xff0c;这些系统的行为往往由一系列数学方程来刻画。通解&#xff0c;正是…...

11.享元模式 (Flyweight)

定义 Flyweight 模式&#xff08;享元模式&#xff09; 是一种结构型设计模式&#xff0c;它旨在通过共享对象来有效支持大量细粒度对象的复用。该模式主要通过共享细节来减少内存使用&#xff0c;提升性能&#xff0c;尤其在需要大量对象时非常有效。 基本思想&#xff1a; …...

Python 自学秘籍:开启编程之旅,人生苦短,我用python。

从2009年&#xff0c;用了几次python后就放弃了&#xff0c;一直用的php&#xff0c;现在人工智能时代&#xff0c;完全没php什么事情。必须搞python了&#xff0c;虽然已经40多岁了。死磕python了。让滔滔陪着你一起学python 吧。 开启新世界 在当今人工智能化的时代&#xff…...

验证工具:SVN版本控制

1-SVN概念 SVN(Subversion)是一种集中式版本控制系统,它用于文件和目录的版本管理,允许多个用户协同工作,同时追踪每个文件和目录的历史修改记录。以下是关于SVN版本控制的详细介绍: 一、SVN的基本概念 仓库(Repository):SVN的仓库是一个集中存储所有文件和目录的地…...