JSON 基础知识(一)
第一部分:JSON 基础知识
📢 快速掌握 JSON!文章 + 视频双管齐下 🚀
如果你觉得阅读文章太慢,或者更喜欢 边看边学 的方式,不妨直接观看我录制的 JSON 课程视频!🎬 视频里会用更直观的方式讲解 JSON 的核心概念、实战技巧,并配有动手演示,让你更高效地掌握 JSON 的处理方法!
当然,如果你喜欢深度阅读,这篇文章会帮助你系统地理解 JSON,从基础到进阶!无论你选择哪种方式,最终目标都是让你成为 JSON 处理的高手!💪
🎥 点击这里观看视频 👉 视频链接
一:JSON 介绍
1.1 JSON 是什么?
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于前后端数据传输、配置文件存储、API 交互等。
- 它基于 JavaScript 语言的对象表示法,但与编程语言无关,因此被广泛应用于 C/C++、Python、Java、Go、Rust 等语言中。
1.2 JSON 的特点及优点
✅ 可读性强:JSON 采用 键值对(Key-Value) 结构,语法简单直观,易于人和机器解析。
✅ 轻量级:相比 XML,JSON 体积更小,解析速度更快。
✅ 跨语言兼容:JSON 可以在不同的编程语言之间交换数据,各种语言都支持 JSON 解析。
✅ 层次结构(嵌套):支持 数组、对象、嵌套数据结构,适合存储复杂数据。
✅ 无格式要求:不需要像 XML 那样定义模式(Schema),使用灵活。
1.3 JSON 与 XML 的对比
JSON 与 XML(Extensible Markup Language)都是常见的数据交换格式,以下是它们的区别:
| 对比项 | JSON | XML |
|---|---|---|
| 数据结构 | 键值对(Key-Value) | 标签(Tag-Based) |
| 可读性 | 结构清晰,易理解 | 层级嵌套复杂 |
| 解析效率 | 解析速度快 | 解析速度慢 |
| 数据体积 | 体积小 | 体积较大 |
| 可扩展性 | 适用于结构化数据 | 适用于更复杂的数据格式 |
📌 JSON 与 XML 实例对比
✅ JSON 格式数据:
{"person": {"name": "张三","age": 25,"hobbies": ["篮球", "足球"],"sex":"男"}
}
✅ XML 格式数据:
<person><name>张三</name><age>25</age><hobbies><hobby>篮球</hobby><hobby>足球</hobby></hobbies><sex>男</sex>
</person>
结论:
- JSON 结构更加紧凑,更适合数据交换。
- XML 适合文档存储(如配置文件、HTML、RSS 订阅等)。
二:JSON 的数据结构和语法
2.1 JSON 的数据结构
- JSON 由 对象(Object) 和 数组(Array) 组成,核心元素包括:
- 对象(使用
{}表示,存储键值对) - 数组(使用
[]表示,存储多个值) - 值类型(支持
字符串、数值、布尔值、null、对象、数组)
- 对象(使用
JSON 支持以下六种数据类型:
| 数据类型 | 示例 | 描述 |
|---|---|---|
| 对象(Object) | { "name": "张三", "age": 25 } | 键值对的集合,类似于 C++ 的 std::map 或 Python 的字典 |
| 数组(Array) | [1, 2, 3, 4] | 有序的值列表,对应 C++ 的 std::vector 或 Python 的列表 |
| 字符串(String) | "hello" | 双引号包裹的文本数据, 必须使用双引号 "",不能使用单引号 |
| 数值(Number) | 123,3.14 | 整数或浮点数 |
| 布尔值(Boolean) | true,false | 逻辑值 true 和 false |
| 空值(null) | null | 表示空对象 |
2.2 JSON 语法规则
JSON 数据的核心是键值对(Key-Value),其中:
- 键(Key)必须是字符串,且用双引号
""包围。 - 值(Value)可以是字符串、数值、布尔值、数组、对象或
null。 - 多个键值对之间用 逗号
,分隔,对象用 大括号{}包围,数组用 方括号[]包围。 - 字符串 必须使用双引号
""。
📌 示例:一个完整的 JSON 数据结构
{"name": "Alice","age": 25,"is_student": false,"skills": ["C++", "Python", "JavaScript"],"address": {"city": "New York","zip_code": "10001"},"null":null
}
📌 解析该 JSON 结构:
name:字符串"Alice"age:数值25is_student:布尔值falseskills:数组["C++", "Python", "JavaScript"]address:嵌套对象,包含city和zip两个键值对
JSON 解析后相当于 C 语言的结构体:
struct Address {char city[20];char zip_code[10];
};struct Person {char name[20];int age;int is_student;char* skills[3];struct Address address;
};
2.3 JSON 语法规则(重要)
❌ 错误示例(常见语法错误):
{name: "张三", // ❌ 错误:键名必须使用双引号"age": 25, "hobbies": [ "篮球", "足球", ], // ❌ 错误:数组最后一个元素后不能有逗号"address": { "city": "上海", "zip_code": "200000", } // ❌ 错误:对象最后一个键值对后不能有逗号
}
✅ 正确格式:
{"name": "张三","age": 25,"hobbies": ["篮球", "足球"],"address": { "city": "上海", "zip_code": "200000" }
}
三:JSON 的实际应用场景
JSON 适用于多种编程场景,常见应用如下:
3.1 Web API 数据交互
服务器通过 REST API / GraphQL 以 JSON 格式返回数据,前端(Vue、React)解析 JSON 并展示(如 GET、POST 请求)。
JSON 替代 XML,成为 API 传输的主流数据格式。
📌 示例:前端 JavaScript 发送 JSON 请求到服务器
fetch("https://api.example.com/user", {method: "POST",headers: { "Content-Type": "application/json" },body: JSON.stringify({ name: "Alice", age: 25 })
})
.then(response => response.json())
.then(data => console.log(data));
3.2 配置文件存储
JSON 用于软件、Web 服务器、数据库的 配置文件,如 config.json。
📌 示例:Web 服务器 Nginx 的配置
{"server": "localhost","port": 8080,"enable_ssl": true
}
3.3 数据存储与日志管理
JSON 可用于存储日志、数据缓存,如 NoSQL 数据库(MongoDB)使用 JSON 作为存储格式。
📌 MongoDB 文档存储示例
{"_id": "user123","username": "Alice","email": "alice@example.com"
}
3.4 机器学习与日志分析
- 训练数据、日志文件等大量使用 JSON 进行数据存储。
- 便于后续分析和处理。
JSON 适用于存储服务器日志:
{"timestamp": "2024-02-09T12:30:45Z","level": "ERROR","message": "数据库连接失败","details": {"host": "db.example.com","port": 3306}
}
日志分析工具可以轻松解析 JSON 日志,进行故障排查!
3.5 物联网(IoT)
-
IoT 设备通过 JSON 格式传输传感器数据。
-
示例:
{"device_id": "sensor_001","temperature": 22.5,"humidity": 60 }
四:JSON 解析和生成
3.1 JSON 解析(Parsing)和生成(Serialization)概述
- 解析(Parsing):把 JSON 字符串转换为可操作的数据结构(C 结构体或 C++ 类)。
- 序列化(Serialization):把 C/C++ 数据结构转换为 JSON 字符串,便于存储和传输。
3.2 JSON 在不同编程语言中的支持情况
-
C 语言处理 JSON 需要使用专门的解析库(如 cJSON)。
-
C++ 提供多个 JSON 库(RapidJSON、JsonCpp、nlohmann/json等)。
3.3 JSON 解析的基本流程
- 步骤 1:读取 JSON 数据(从字符串或文件)。
- 步骤 2:解析 JSON 并存入内存中的数据结构。
- 步骤 3:访问 JSON 数据(读取键值、遍历数组)。
- 步骤 4:修改 JSON 数据(添加/删除键值对)。
- 步骤 5:将数据重新序列化为 JSON 字符串,供存储或网络传输。
示例代码(伪代码,后续库会具体实现)
char* json_string = "{ \"name\": \"张三\", \"age\": 25 }";
JsonObject obj = json_parse(json_string);
printf("姓名: %s\n", json_get_string(obj, "name"));
json_set_number(obj, "age", 26);
char* new_json_string = json_serialize(obj);
printf("修改后的 JSON: %s\n", new_json_string);
3.4 C/C++ 解析 JSON 的常见库对比
- cJSON、RapidJSON、JsonCpp、JSON for Modern C++
3.4.1 cJSON📌
-
概述
-
cJSON 是一个轻量级的 C 语言实现的 JSON 库,专为嵌入式设备和资源受限的环境设计。
-
它非常简洁,适合简单的 JSON 数据解析任务。
-
-
特点
-
纯 C 实现:没有任何外部依赖,适用于嵌入式开发和低资源环境。
-
API 简单直观:易于上手,接口简单,适合 C 开发者。
-
内存管理:需要手动管理内存,易产生内存泄漏问题。
-
-
性能表现
- 在单线程和小数据量的情况下,cJSON 解析性能较好,但在处理大量数据时,性能会略显不足。
-
使用场景
-
嵌入式设备开发(如 IoT)
-
需要轻量化的 JSON 解析任务
-
-
优缺点
优点
- 轻量级:非常适合资源受限的嵌入式系统。
- 易用性高:API 设计简洁,快速上手。
- 没有外部依赖:纯 C 实现,不依赖其他库。
缺点
- 性能限制:在大数据量处理上,性能和内存管理上有一定的瓶颈。
- 内存管理手动:需要开发者自己管理内存,容易引入内存泄漏问题。
3.4.2 RapidJSON📌
-
概述
-
RapidJSON 是一个 C++ 实现的高性能 JSON 解析库,强调 速度 和 低内存使用,支持 SAX 和 DOM 解析方式。
-
它是 C++ 中最受欢迎的 JSON 解析库之一,适用于高性能的 JSON 解析场景。
-
-
特点
-
C++ 实现:支持现代 C++ 语法和标准,适用于 C++ 开发者。
-
高性能:在解析速度和内存占用方面,尤其是在大数据量时具有明显优势。
-
流式解析(SAX):支持流式解析,可以在解析大 JSON 文件时避免内存占用过高。
-
-
性能表现
-
解析速度:在大数据量 JSON 解析时,RapidJSON 表现出色,比大多数 C++ 库要快。
-
内存使用:内存使用高效,适合需要优化性能的场景。
-
-
使用场景
-
高性能计算和大数据处理
-
日志解析
-
金融、游戏、科学计算等需要高效解析的大型 JSON 数据
-
-
优缺点
优点
- 高性能:在大数据量的解析上,表现比其他库更好。
- 支持流式解析:适合大文件的逐步解析,内存消耗低。
- 支持标准 C++:支持 C++11 和以上标准,现代化的接口。
缺点
- 不支持动态内存管理:需要开发者自己处理内存分配与管理。
- 接口复杂:与其他库相比,API 比较复杂,上手稍有难度。
3.4.3 JsonCpp📌
-
概述
-
JsonCpp 是一个功能强大的 C++ JSON 解析库,旨在提供一种简单的接口来操作 JSON 数据。
-
适用于中到大型 C++ 项目的 JSON 数据解析与操作。
-
-
特点
-
C++ 实现:适用于 C++ 项目,API 风格符合 C++ 的习惯。
-
支持读取和写入 JSON:不仅可以解析 JSON,还可以方便地将数据写回 JSON 格式。
-
与 STL 兼容:可以直接与 C++ 的
std::string和std::vector等数据结构进行交互。
-
-
性能表现
-
解析速度:性能中等,适合大多数应用场景,尤其是中等规模的数据解析。
-
内存消耗:内存使用较为稳定,但与 RapidJSON 相比,速度稍慢。
-
-
使用场景
-
配置文件解析
-
常见桌面应用的数据存储
-
需要 JSON 读写操作的场景
-
-
优缺点
优点
- API 易用性:符合 C++ 风格的接口,易于开发者上手。
- 功能全面:除了 JSON 解析,还支持 JSON 数据的生成与修改。
- STL 兼容性强:可以与 C++ 标准库的容器和数据结构无缝对接。
缺点
- 性能一般:在大数据量处理时,解析速度较慢,内存消耗较高。
- 库体积较大:相比其他库,JsonCpp 的体积稍大,可能不适合嵌入式设备。
3.4.4 JSON for Modern C++📌
-
概述
-
JSON for Modern C++(由 nlohmann/json 提供)是一个流行的 C++ JSON 库,利用 C++11 特性,如
std::string、std::vector等,提供直观的 JSON 处理接口。 -
支持与标准 C++ 容器类型(如
std::map、std::vector)的无缝集成。
-
-
特点
-
C++11 风格 API:现代化的接口,支持
std::vector、std::map等 C++ 标准库容器。 -
JSON 数据转换:提供简洁的方式将 C++ 对象转换为 JSON,反之亦然。
-
简洁易用:API 设计现代且简洁,代码量少,易于理解。
-
-
性能表现
-
解析速度:与 RapidJSON 相比稍慢,但仍适用于大多数应用场景。
-
内存占用:内存使用高效,适合较大数据集。
-
-
使用场景
-
现代 C++ 项目
-
配置文件管理
-
Web 开发中前后端数据交互
-
-
优缺点
优点
- 易用性高:简洁的 API,适合现代 C++ 开发者。
- 兼容性强:与标准 C++ 容器和 STL 兼容。
- 支持转换 C++ 对象和 JSON:可以轻松将 C++ 对象序列化为 JSON,反之亦然。
缺点
- 性能相对较低:解析大规模 JSON 数据时,性能可能不如 RapidJSON。
- 对旧版 C++ 不友好:要求至少 C++11。
3.4.5 总结📌
| 库 | 语言 | 性能 | 使用场景 | 优点 | 缺点 |
|---|---|---|---|---|---|
| cJSON | C | 中等 | 嵌入式开发、轻量级应用 | 轻量级、无依赖 | 性能不佳、内存管理手动 |
| RapidJSON | C++ | 高性能 | 大数据解析、日志、API | 快速、支持流式解析 | API 复杂、内存管理手动 |
| JsonCpp | C++ | 中等 | 中型 C++ 项目、配置文件 | STL 兼容、功能全面 | 性能一般、库体积较大 |
| JSON for Modern C++ | C++ | 中等 | 现代 C++ 项目、Web 应用 | 简洁易用、C++11 风格 | 性能较低、仅支持 C++11 以上 |
五:JSON 的性能优化策略
5.1 避免 JSON 过度嵌套
过度嵌套会 影响解析速度,应尽量 扁平化 JSON 结构。
❌ 差的 JSON 结构(深度嵌套)
{"user": {"profile": {"details": {"name": "Alice"}}}
}
✅ 优化后(扁平化 JSON)
{"user_name": "Alice"
}
5.2 使用流式解析(SAX 解析)
对于 大 JSON 文件,不要一次性加载到内存,而使用 流式解析(SAX 解析)。
📌 C++ 解析 JSON 时使用 RapidJSON 流式解析(节省内存)
#include "rapidjson/reader.h"using namespace rapidjson;class MyHandler : public BaseReaderHandler<UTF8<>, MyHandler> {
public:bool String(const char* str, SizeType length, bool copy) {printf("解析到字符串: %s\n", str);return true;}
};int main() {const char* json = "{\"name\":\"Alice\",\"age\":25}";MyHandler handler;Reader reader;StringStream ss(json);reader.Parse(ss, handler);return 0;
}
5.3 常见问题分析与解决方案
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| JSON 解析失败 | 语法错误(如 , 结尾) | 使用 jsonlint 校验 JSON |
| JSON 体积过大 | 包含大量冗余数据 | 优化 JSON 结构,减少嵌套 |
| 解析速度慢 | 使用 DOM 解析大文件 | 采用 流式解析(SAX) |
| 不支持 JSON 注释 | JSON 规范不允许注释 | 使用 // 伪注释字段或 YAML |
相关文章:
JSON 基础知识(一)
第一部分:JSON 基础知识 📢 快速掌握 JSON!文章 视频双管齐下 🚀 如果你觉得阅读文章太慢,或者更喜欢 边看边学 的方式,不妨直接观看我录制的 JSON 课程视频!🎬 视频里会用更直观…...
SSM框架学习(Day-1)
1.spring系统架构 自底而上进行,上层依赖于下层,首先最底层是Core Container -- 核心容器, 再往上是AOP(面向切面编程)和Aspects(AOP)思想的实现, 我个人的理解是, 它可以在不惊动你原始程序的基础上, 给它增强功能,类似于反射;再往上是数据访问层。 C…...
使用 PyTorch 的 `GradualWarmupScheduler` 实现学习率预热
使用 PyTorch 的 GradualWarmupScheduler 实现学习率预热 在深度学习中,学习率(Learning Rate, LR)是影响模型训练效果的关键超参数之一。为了提升模型的收敛速度和稳定性,学习率调度策略变得尤为重要。其中,学习率预热(Learning Rate Warmup) 是一种常用的策略,它通过…...
Redis 中 Set(例如标签) 和 ZSet(例如排行榜) 的详细对比,涵盖定义、特性、命令、适用场景及总结表格
以下是 Redis 中 Set 和 ZSet 的详细对比,涵盖定义、特性、命令、适用场景及总结表格: 1. 核心定义 数据类型SetZSet(Sorted Set)定义无序的、唯一的字符串集合,元素不重复。有序的、唯一的字符串集合,每个…...
在线记事本——支持Markdown
项目地址 https://github.com/Anyuersuper/CloudNotebook 百度网盘 通过网盘分享的文件:CloudNotebook-master.zip 链接: https://pan.baidu.com/s/1_Y--aBzNkKiFRIMHYmwPdA?pwdyuer 提取码: yuer 📝 云笔记 (Cloud Notebook) 云笔记是一个简洁、安全…...
C# 中充血模型和贫血模型
在C#中,充血模型(Rich Domain Model)和贫血模型(Anemic Domain Model)是两种截然不同的领域建模方式,核心区别在于业务逻辑的归属。以下是通俗易懂的解释: 1. 贫血模型ÿ…...
Java技术生态前沿洞察:虚拟线程引领并发革命,框架创新赋能云原生时代
Java技术生态正迎来新一轮变革浪潮。虚拟线程的落地成为高并发编程范式转折点,其极低资源开销特性在电商秒杀场景中展现出3倍吞吐量提升,彻底改写传统线程模型性能边界。Spring Boot 3.2原生支持虚拟线程,结合Observation API与HTTP客户端优化…...
Day2:前端项目uniapp壁纸实战
先来做一个轮番图。 效果如下: common-style.css view,swiper,swiper-item{box-sizing: border-box; } index.vue <template><view class"homeLayout"><view class"banner"><swiper circular indicator-dots autoplay…...
人工智能赋能工业制造:智能制造的未来之路
一、引言 随着人工智能技术的飞速发展,其应用场景不断拓展,从消费电子到医疗健康,从金融科技到交通运输,几乎涵盖了所有行业。而工业制造作为国民经济的支柱产业,也在人工智能的浪潮中迎来了深刻的变革。智能制造&…...
V-SHOW和箭头函数在VUE项目的踩坑点
v-show和v-if v-show控制显示隐藏是通过控制CSS的display决定dom节点的显示和隐藏。v-if通过控制dom节点的渲染与否实现元素的显示和隐藏。 在vue中,template标签不参与页面渲染,也不会破坏代码的层级结构,所以多和v-if结合控制元素的显示隐…...
LeetCode Hot100 刷题笔记(3)—— 链表
目录 前言 1. 相交链表 2. 反转链表 3. 回文链表 4. 环形链表 5. 环形链表 II 6. 合并两个有序链表 7. 两数相加 8. 删除链表的倒数第 N 个结点 9. 两两交换链表中的节点 10. K 个一组翻转链表 11. 随机链表的复制 12. 排序链表 13. 合并 K 个升序链表 14. LRU 缓存 前言 一、…...
Spring 概念
Spring 是一个功能强大、灵活且广泛使用的 Java 企业级开发框架,它诞生于 2003 年,由 Rod Johnson 创建,初衷是简化 Java EE 的开发过程。 一、Spring 是什么? 简单来说: Spring 是一个轻量级的 Java 开发框架&#…...
状态机思想编程
1. LED流水灯的FPGA代码 在这个任务中,首先我们会使用状态机的思想来设计一个LED流水灯的控制逻辑。LED流水灯一般需要依次点亮不同的LED,并且循环播放。我们将其分为几个状态,每个状态控制一个或一组LED灯。 状态机设计 假设我们有8个LED…...
第二十八章:Python可视化图表扩展-和弦图、旭日图、六边形箱图、桑基图和主题流图
一、引言 在数据可视化领域,除了常见的折线图、柱状图和散点图,还有一些高级图表类型可以帮助我们更直观地展示复杂数据关系。本文将介绍五种扩展图表:和弦图、旭日图、六边形箱图、桑基图和主题流图。这些图表在展示数据关系、层次结构和流量…...
基于vue框架的重庆美食网站的设计与实现kt945(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:用户,美食分类,美食菜品 开题报告内容 基于Vue框架的重庆美食网站的设计与实现开题报告 一、选题背景与意义 (一)选题背景 重庆,作为中国西南地区的璀璨明珠,以其独特的地理位置和丰富…...
Metal学习笔记十三:阴影
在本章中,您将了解阴影。阴影表示表面上没有光。当另一个表面或对象使对象与光线相遮挡时,您会看到对象上的阴影。在项目中添加阴影可使您的场景看起来更逼真,并提供深度感。 阴影贴图 阴影贴图是包含场景阴影信息的纹理。当光线照射到物体…...
时间梯度匹配损失 TGMLoss
目录 时间梯度匹配损失(Temporal Gradient Matching Loss, TGM Loss) 完整示例,该损失函数常用于视频预测、运动平滑等任务,通过约束预测序列的时间梯度与真实序列一致来提升时序连续性 训练测试demo代码: 时间梯度匹配损失(Temporal Gradient Matching Loss, TGM Los…...
iPhone XR:一代神机,止步于此
什么样的 iPhone ,才配称为一代神机? 我曾经用过iPhone 4S、iPhone 6S Plus、iPhone 8 Plus,iPhone SE2、iPhone XR、iPhone 13、iPhone 14 Plus、iPhone 15/Pro。 不管硬件再怎么卷,不管囊中是否羞涩,主力机基本没考…...
第十四届蓝桥杯省赛真题解析(含C++详细源码)
第十四届蓝桥杯省赛 整数删除满分思路及代码solution1 (40% 双指针暴力枚举)solution 2(优先队列模拟链表 AC) 冶炼金属满分代码及思路 子串简写满分思路及代码solution 1(60% 双指针)solution 2࿰…...
OpenAI即将开源!DeepSeek“逼宫”下,AI争夺战将走向何方?
OpenAI 终于要 Open 了。 北京时间 4 月 1 日凌晨,OpenAI 正式宣布:将在未来几个月内开源一款具备推理能力的语言模型,并开放训练权重参数。这是自 2019 年 GPT-2 部分开源以来,OpenAI 首次向公众开放核心模型技术。 【图片来源于…...
mysql 8.0.27-docker
安装 可以略过本步 https://dev.mysql.com/downloads/https://dev.mysql.com/downloads/ 镜像查询与安装 先查询: docker search mysql 明显会报错 Error response from daemon: Get "https://index.docker.io/v1/search?qmysql&n25": dial tcp…...
使用NVM下载Node.js管理多版本
提示:我解决这个bug跟别人思路可能不太一样,因为我是之前好用,换个项目就不好使了,倦了 文章目录 前言项目场景一项目场景二解决方案:下载 nvm安装 nvm重新下载所需Node 版本nvm常用命令 项目结构说明 前言 提示&…...
交易引擎中的设计模式
在WtHftEngine.cpp中,主要运用了以下几种设计模式,结合代码结构具体分析如下: 1. 观察者模式(Observer Pattern) 核心应用场景:实时市场数据的分发机制 代码体现: // 行情到达时分发给订阅…...
(自用)WebSocket创建流程
在Spring Boot项目中新建WebSocket服务,可以按照以下详细步骤进行操作: 1.创建Spring Boot项目 可以通过Spring Initializr(<>)快速创建一个新的Spring Boot项目,添加Spring Web和Spring Boot DevTools依赖&…...
Linux——文件(2)文件系统
我们知道,文件在没有被打开时是放在磁盘中的,通常我们未打开的文件数量要远远大于打开的文件数量,而且我们要想打开一个文件,首先需要知道文件在磁盘的位置才能打开,但问题是,面对磁盘中成百上千个文件&…...
蓝桥杯 web 水果拼盘 (css3)
做题步骤: 看结构:html 、css 、f12 分析: f12 查看元素,你会发现水果的高度刚好和拼盘的高度一样,每一种水果的盘子刚好把页面填满了,所以咱们就只要让元素竖着排列,加上是竖着,排不下的换行…...
【eNSP实验】RIP协议
RIP协议介绍 RIP(路由信息协议)是一种基于距离向量的内部网关协议,适用于小型网络。它通过跳数(最多15跳)衡量路径成本,定期与相邻路由器交换路由表。RIPv1使用广播更新且不支持子网,RIPv2新增…...
SQL Server常见问题的分类解析(二)
SQL Server常见问题解析100例(31-60) 七、数据库设计与维护问题 表设计不合理导致性能瓶颈问题:大表缺少分区,字段类型过大(如VARCHAR(MAX))。解决方案:使用分区表(PARTITION BY RANGE),优化字段类型。 索引过多导致写入性能下降问题:过度索引导致INSERT/UPDATE变慢…...
JAVA反序列化深入学习(十三):Spring2
让我们回到Spring Spring2 在 Spring1 的触发链上有所变换: 替换了 spring-beans 的 ObjectFactoryDelegatingInvocationHandler使用了 spring-aop 的 JdkDynamicAopProxy ,并完成了后续触发 TemplatesImpl 的流程 简而言之,换了一个chain&am…...
Matlab:三维绘图
目录 1.三维曲线绘图命令:plot3 实例——绘制空间直线 实例——绘制三角曲线 2.三维曲线绘图命令:explot3 3.三维网格命令:mesh 实例——绘制网格面 实例——绘制山峰曲面 实例——绘制函数曲线 1.三维曲线绘图命令:plot3 …...
