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

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)都是常见的数据交换格式,以下是它们的区别:

对比项JSONXML
数据结构键值对(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)1233.14整数或浮点数
布尔值(Boolean)truefalse逻辑值 truefalse
空值(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:数值 25
  • is_student:布尔值 false
  • skills:数组 ["C++", "Python", "JavaScript"]
  • address:嵌套对象,包含 cityzip 两个键值对

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 并展示(如 GETPOST 请求)。

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 解析库,强调 速度低内存使用,支持 SAXDOM 解析方式。

    • 它是 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::stringstd::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::stringstd::vector 等,提供直观的 JSON 处理接口。

    • 支持与标准 C++ 容器类型(如 std::mapstd::vector)的无缝集成。

  • 特点

    • C++11 风格 API:现代化的接口,支持 std::vectorstd::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 总结📌
语言性能使用场景优点缺点
cJSONC中等嵌入式开发、轻量级应用轻量级、无依赖性能不佳、内存管理手动
RapidJSONC++高性能大数据解析、日志、API快速、支持流式解析API 复杂、内存管理手动
JsonCppC++中等中型 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 基础知识(一)

第一部分&#xff1a;JSON 基础知识 &#x1f4e2; 快速掌握 JSON&#xff01;文章 视频双管齐下 &#x1f680; 如果你觉得阅读文章太慢&#xff0c;或者更喜欢 边看边学 的方式&#xff0c;不妨直接观看我录制的 JSON 课程视频&#xff01;&#x1f3ac; 视频里会用更直观…...

SSM框架学习(Day-1)

1.spring系统架构 自底而上进行,上层依赖于下层,首先最底层是Core Container -- 核心容器, 再往上是AOP(面向切面编程)和Aspects(AOP)思想的实现, 我个人的理解是, 它可以在不惊动你原始程序的基础上, 给它增强功能&#xff0c;类似于反射&#xff1b;再往上是数据访问层。 C…...

使用 PyTorch 的 `GradualWarmupScheduler` 实现学习率预热

使用 PyTorch 的 GradualWarmupScheduler 实现学习率预热 在深度学习中,学习率(Learning Rate, LR)是影响模型训练效果的关键超参数之一。为了提升模型的收敛速度和稳定性,学习率调度策略变得尤为重要。其中,学习率预热(Learning Rate Warmup) 是一种常用的策略,它通过…...

Redis 中 Set(例如标签) 和 ZSet(例如排行榜) 的详细对比,涵盖定义、特性、命令、适用场景及总结表格

以下是 Redis 中 Set 和 ZSet 的详细对比&#xff0c;涵盖定义、特性、命令、适用场景及总结表格&#xff1a; 1. 核心定义 数据类型SetZSet&#xff08;Sorted Set&#xff09;定义无序的、唯一的字符串集合&#xff0c;元素不重复。有序的、唯一的字符串集合&#xff0c;每个…...

在线记事本——支持Markdown

项目地址 https://github.com/Anyuersuper/CloudNotebook 百度网盘 通过网盘分享的文件&#xff1a;CloudNotebook-master.zip 链接: https://pan.baidu.com/s/1_Y--aBzNkKiFRIMHYmwPdA?pwdyuer 提取码: yuer &#x1f4dd; 云笔记 (Cloud Notebook) 云笔记是一个简洁、安全…...

C# 中充血模型和‌贫血模型

在C#中&#xff0c;‌充血模型&#xff08;Rich Domain Model&#xff09;‌和‌贫血模型&#xff08;Anemic Domain Model&#xff09;‌是两种截然不同的领域建模方式&#xff0c;核心区别在于‌业务逻辑的归属‌。以下是通俗易懂的解释&#xff1a; 1. ‌贫血模型&#xff…...

Java技术生态前沿洞察:虚拟线程引领并发革命,框架创新赋能云原生时代

Java技术生态正迎来新一轮变革浪潮。虚拟线程的落地成为高并发编程范式转折点&#xff0c;其极低资源开销特性在电商秒杀场景中展现出3倍吞吐量提升&#xff0c;彻底改写传统线程模型性能边界。Spring Boot 3.2原生支持虚拟线程&#xff0c;结合Observation API与HTTP客户端优化…...

Day2:前端项目uniapp壁纸实战

先来做一个轮番图。 效果如下&#xff1a; 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…...

人工智能赋能工业制造:智能制造的未来之路

一、引言 随着人工智能技术的飞速发展&#xff0c;其应用场景不断拓展&#xff0c;从消费电子到医疗健康&#xff0c;从金融科技到交通运输&#xff0c;几乎涵盖了所有行业。而工业制造作为国民经济的支柱产业&#xff0c;也在人工智能的浪潮中迎来了深刻的变革。智能制造&…...

V-SHOW和箭头函数在VUE项目的踩坑点

v-show和v-if v-show控制显示隐藏是通过控制CSS的display决定dom节点的显示和隐藏。v-if通过控制dom节点的渲染与否实现元素的显示和隐藏。 在vue中&#xff0c;template标签不参与页面渲染&#xff0c;也不会破坏代码的层级结构&#xff0c;所以多和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 企业级开发框架&#xff0c;它诞生于 2003 年&#xff0c;由 Rod Johnson 创建&#xff0c;初衷是简化 Java EE 的开发过程。 一、Spring 是什么&#xff1f; 简单来说&#xff1a; Spring 是一个轻量级的 Java 开发框架&#…...

状态机思想编程

1. LED流水灯的FPGA代码 在这个任务中&#xff0c;首先我们会使用状态机的思想来设计一个LED流水灯的控制逻辑。LED流水灯一般需要依次点亮不同的LED&#xff0c;并且循环播放。我们将其分为几个状态&#xff0c;每个状态控制一个或一组LED灯。 状态机设计 假设我们有8个LED…...

第二十八章:Python可视化图表扩展-和弦图、旭日图、六边形箱图、桑基图和主题流图

一、引言 在数据可视化领域&#xff0c;除了常见的折线图、柱状图和散点图&#xff0c;还有一些高级图表类型可以帮助我们更直观地展示复杂数据关系。本文将介绍五种扩展图表&#xff1a;和弦图、旭日图、六边形箱图、桑基图和主题流图。这些图表在展示数据关系、层次结构和流量…...

基于vue框架的重庆美食网站的设计与实现kt945(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,美食分类,美食菜品 开题报告内容 基于Vue框架的重庆美食网站的设计与实现开题报告 一、选题背景与意义 &#xff08;一&#xff09;选题背景 重庆&#xff0c;作为中国西南地区的璀璨明珠&#xff0c;以其独特的地理位置和丰富…...

Metal学习笔记十三:阴影

在本章中&#xff0c;您将了解阴影。阴影表示表面上没有光。当另一个表面或对象使对象与光线相遮挡时&#xff0c;您会看到对象上的阴影。在项目中添加阴影可使您的场景看起来更逼真&#xff0c;并提供深度感。 阴影贴图 阴影贴图是包含场景阴影信息的纹理。当光线照射到物体…...

时间梯度匹配损失 TGMLoss

目录 时间梯度匹配损失(Temporal Gradient Matching Loss, TGM Loss) 完整示例,该损失函数常用于视频预测、运动平滑等任务,通过约束预测序列的时间梯度与真实序列一致来提升时序连续性 训练测试demo代码: 时间梯度匹配损失(Temporal Gradient Matching Loss, TGM Los…...

iPhone XR:一代神机,止步于此

什么样的 iPhone &#xff0c;才配称为一代神机&#xff1f; 我曾经用过iPhone 4S、iPhone 6S Plus、iPhone 8 Plus&#xff0c;iPhone SE2、iPhone XR、iPhone 13、iPhone 14 Plus、iPhone 15/Pro。 不管硬件再怎么卷&#xff0c;不管囊中是否羞涩&#xff0c;主力机基本没考…...

第十四届蓝桥杯省赛真题解析(含C++详细源码)

第十四届蓝桥杯省赛 整数删除满分思路及代码solution1 &#xff08;40% 双指针暴力枚举&#xff09;solution 2&#xff08;优先队列模拟链表 AC&#xff09; 冶炼金属满分代码及思路 子串简写满分思路及代码solution 1&#xff08;60% 双指针&#xff09;solution 2&#xff0…...

OpenAI即将开源!DeepSeek“逼宫”下,AI争夺战将走向何方?

OpenAI 终于要 Open 了。 北京时间 4 月 1 日凌晨&#xff0c;OpenAI 正式宣布&#xff1a;将在未来几个月内开源一款具备推理能力的语言模型&#xff0c;并开放训练权重参数。这是自 2019 年 GPT-2 部分开源以来&#xff0c;OpenAI 首次向公众开放核心模型技术。 【图片来源于…...

mysql 8.0.27-docker

安装 可以略过本步 https://dev.mysql.com/downloads/https://dev.mysql.com/downloads/ 镜像查询与安装 先查询&#xff1a; docker search mysql 明显会报错 Error response from daemon: Get "https://index.docker.io/v1/search?qmysql&n25": dial tcp…...

使用NVM下载Node.js管理多版本

提示&#xff1a;我解决这个bug跟别人思路可能不太一样&#xff0c;因为我是之前好用&#xff0c;换个项目就不好使了&#xff0c;倦了 文章目录 前言项目场景一项目场景二解决方案&#xff1a;下载 nvm安装 nvm重新下载所需Node 版本nvm常用命令 项目结构说明 前言 提示&…...

交易引擎中的设计模式

在WtHftEngine.cpp中&#xff0c;主要运用了以下几种设计模式&#xff0c;结合代码结构具体分析如下&#xff1a; ​1. 观察者模式&#xff08;Observer Pattern&#xff09;​ 核心应用场景&#xff1a;实时市场数据的分发机制 代码体现&#xff1a; // 行情到达时分发给订阅…...

(自用)WebSocket创建流程

在Spring Boot项目中新建WebSocket服务&#xff0c;可以按照以下详细步骤进行操作&#xff1a; 1.创建Spring Boot项目 可以通过Spring Initializr&#xff08;<>&#xff09;快速创建一个新的Spring Boot项目&#xff0c;添加Spring Web和Spring Boot DevTools依赖&…...

Linux——文件(2)文件系统

我们知道&#xff0c;文件在没有被打开时是放在磁盘中的&#xff0c;通常我们未打开的文件数量要远远大于打开的文件数量&#xff0c;而且我们要想打开一个文件&#xff0c;首先需要知道文件在磁盘的位置才能打开&#xff0c;但问题是&#xff0c;面对磁盘中成百上千个文件&…...

蓝桥杯 web 水果拼盘 (css3)

做题步骤&#xff1a; 看结构&#xff1a;html 、css 、f12 分析: f12 查看元素&#xff0c;你会发现水果的高度刚好和拼盘的高度一样&#xff0c;每一种水果的盘子刚好把页面填满了&#xff0c;所以咱们就只要让元素竖着排列&#xff0c;加上是竖着&#xff0c;排不下的换行…...

【eNSP实验】RIP协议

RIP协议介绍 RIP&#xff08;路由信息协议&#xff09;是一种基于距离向量的内部网关协议&#xff0c;适用于小型网络。它通过跳数&#xff08;最多15跳&#xff09;衡量路径成本&#xff0c;定期与相邻路由器交换路由表。RIPv1使用广播更新且不支持子网&#xff0c;RIPv2新增…...

SQL Server常见问题的分类解析(二)

SQL Server常见问题解析100例(31-60) 七、数据库设计与维护问题 表设计不合理导致性能瓶颈问题:大表缺少分区,字段类型过大(如VARCHAR(MAX))。解决方案:使用分区表(PARTITION BY RANGE),优化字段类型。 索引过多导致写入性能下降问题:过度索引导致INSERT/UPDATE变慢…...

JAVA反序列化深入学习(十三):Spring2

让我们回到Spring Spring2 在 Spring1 的触发链上有所变换&#xff1a; 替换了 spring-beans 的 ObjectFactoryDelegatingInvocationHandler使用了 spring-aop 的 JdkDynamicAopProxy &#xff0c;并完成了后续触发 TemplatesImpl 的流程 简而言之&#xff0c;换了一个chain&am…...

Matlab:三维绘图

目录 1.三维曲线绘图命令&#xff1a;plot3 实例——绘制空间直线 实例——绘制三角曲线 2.三维曲线绘图命令&#xff1a;explot3 3.三维网格命令&#xff1a;mesh 实例——绘制网格面 实例——绘制山峰曲面 实例——绘制函数曲线 1.三维曲线绘图命令&#xff1a;plot3 …...