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

什么是 JSON?学习JSON有什么用?在springboot项目里如何实现JSON的序列化和反序列化?

作为一个学习Javaweb的新手,理解JSON的序列化和反序列化非常重要,因为它在现代Web开发,特别是Spring Boot中无处不在。

什么是 JSON?

首先,我们简单了解一下JSON (JavaScript Object Notation)。
JSON 是一种轻量级的数据交换格式。它基于JavaScript编程语言的一个子集,但是独立于语言,也就是说,几乎所有的编程语言都有解析和生成JSON数据的库。

JSON 的主要特点:

  • 易于人阅读和编写。

  • 易于机器解析和生成。

  • 常用于前后端之间的数据交换(比如浏览器和服务器之间)、API之间的数据传输。

  • 基本结构是:

    • 对象 (Object): 由键值对(key: value)组成,键是字符串,值可以是字符串、数字、布尔值、数组、对象或 null。对象用花括号 {} 包围。

      {"name": "张三","age": 30,"isStudent": false
      }
      
    • 数组 (Array): 由有序的值(可以是任何JSON类型)组成。数组用方括号 [] 包围。

      ["苹果","香蕉","橙子"
      ]
      
    • 值 (Value): 字符串、数字、布尔值 (true/false)、null、对象或数组。

什么是 序列化 (Serialization)?

概念: 将一个Java对象转换成JSON格式的字符串的过程,就叫做 JSON序列化

为什么需要?
当你的Spring Boot应用需要将数据显示给前端(比如Web页面、移动App)或者发送给其他服务时,你需要将你的Java对象(比如一个表示用户的 User 对象,一个表示商品的 Product 对象)转换成一种标准格式,以便接收方能够理解。JSON就是最常用的标准格式之一。

想象一下:你的Java程序里有一个 Product 对象,它包含了 idnameprice 等属性。你不能直接把这个Java对象“发送”出去。你需要把它包装成一个字符串,这个字符串的格式就是JSON。

Java对象 (Product)  ───────>  JSON字符串
{ id: 1, name: "Laptop", price: 8000.0 }  ─序列化─>  '{"id":1,"name":"Laptop","price":8000.0}'

什么是 反序列化 (Deserialization)?

概念: 将一个JSON格式的字符串转换成对应的Java对象的过程,就叫做 JSON反序列化

为什么需要?
当你的Spring Boot应用从前端(比如用户提交的表单数据、通过API接收到的请求体)或其他服务接收到数据时,这些数据通常是JSON格式的字符串。为了在你的Java程序中处理这些数据,你需要将这些JSON字符串转换成你可以操作的Java对象。

想象一下:前端通过一个表单提交了一个新商品的信息,数据以JSON字符串的形式发送到你的Spring Boot后端。你需要把这个JSON字符串转换回一个 Product Java对象,这样你才能方便地访问 nameprice 等属性,并进行业务逻辑处理(比如保存到数据库)。

JSON字符串  ───────>  Java对象
'{"name":"Keyboard","price":300.0}'  ─反序列化─>  Java对象 (Product: { name: "Keyboard", price: 300.0 })

Spring Boot 如何实现 JSON 序列化和反序列化?

这是Spring Boot的强大之处:它自动化地处理了大部分情况下的JSON序列化和反序列化!

核心依赖:

在你的pom.xml文件中,如果你使用了spring-boot-starter-web这个依赖,那么你就已经自动引入了处理JSON所需的所有库。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

spring-boot-starter-web 依赖会间接地引入 spring-boot-starter-json 依赖,而 spring-boot-starter-json 默认使用的是 Jackson 这个库来处理JSON。

Jackson 库:

Jackson 是一个非常流行和强大的Java库,专门用于处理JSON。Spring Boot通过自动配置,将Jackson设置为默认的 HttpMessageConverter

HttpMessageConverter 是 Spring MVC 中的一个核心概念,它负责将HTTP请求体转换成Java对象(反序列化),以及将Java对象转换成HTTP响应体(序列化)。当Spring Boot检测到请求或响应涉及JSON时,它就会使用配置好的Jackson HttpMessageConverter 来完成转换。

自动化体现在哪里?

在你编写Spring Boot的Controller时,只需要使用特定的注解:

  1. 反序列化 (@RequestBody): 当你的Controller方法的参数前面加上 @RequestBody 注解时,Spring Boot会自动尝试将HTTP请求体中的JSON字符串反序列化成这个参数对应的Java对象。
  2. 序列化 (@ResponseBody@RestController):
    • 如果你的Controller类使用了 @RestController 注解(它是 @Controller@ResponseBody 的组合),或者你的方法使用了 @ResponseBody 注解,Spring Boot会自动尝试将方法的返回值序列化成JSON字符串,并作为HTTP响应体发送出去。

简单来说,Spring Boot + Jackson 让你在大多数情况下,只需要关注你的Java对象和Controller方法,而不需要手动编写JSON解析和生成的代码。

学习 JSON 序列化和反序列化有什么用?

对于新手来说,学习这个概念以及Spring Boot如何处理它,至少有以下几个重要的用途:

  1. 理解 Web API 工作原理: 现代Web应用绝大多数都使用JSON进行前后端数据交互。理解序列化/反序列化是理解Spring Boot如何构建和响应API请求的基础。你知道为什么你返回一个Java对象,前端却收到了JSON数据;你知道为什么前端发送JSON数据,你却可以直接在方法参数中拿到一个Java对象。
  2. 开发 RESTful API: Spring Boot是构建RESTful API的强大框架。RESTful API的核心就是通过HTTP请求(GET, POST, PUT, DELETE等)和JSON数据进行资源的交互。掌握JSON处理是开发API的必备技能。
  3. 数据交换和集成: 除了前后端,不同的微服务之间、你的服务和其他第三方服务之间也经常使用JSON交换数据。理解如何处理JSON是进行系统集成和数据交换的基础。
  4. 调试和排错: 当API调用失败时,你可能会看到JSON解析或生成相关的错误(比如 HttpMessageNotReadableException 反序列化失败,或者序列化结果不符合预期)。理解底层机制可以帮助你更快地定位和解决问题。
  5. 定制化需求: 虽然Spring Boot自动化处理了很多,但有时你需要更精细地控制JSON的输出格式(比如日期格式、忽略某些字段、改变字段名等)。这时你需要了解Jackson提供的注解,而这些注解是基于序列化/反序列化的概念工作的。
  6. 数据存储和配置文件: 有些应用会将数据以JSON格式存储(比如NoSQL数据库的一些场景),或者使用JSON作为配置文件格式。了解JSON处理有助于你读写这些数据。

实践示例 (Spring Boot 项目)

我们通过一个简单的例子来演示。

1. Maven 依赖 (确保 spring-boot-starter-webpom.xml 中):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.5</version> <!-- 使用你项目的实际版本 --><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>json-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>json-demo</name><description>Demo project for JSON serialization/deserialization</description><properties><java.version>17</java.version> <!-- 使用你的Java版本 --></properties><dependencies><!-- 这个依赖会自动引入 spring-boot-starter-json (包含 Jackson) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot 测试依赖 (可选) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2. 创建一个简单的 Java 对象 (POJO):

这个对象将用于表示我们要在Java代码中操作的数据结构。Jackson在进行反序列化时,默认会寻找无参构造函数,以及通过getter/setter方法来匹配JSON字段和对象属性。为了简化,我们使用Lombok库来自动生成构造函数、getter/setter等。如果你不用Lombok,需要手动添加。

// Product.java
package com.example.jsondemo.model;import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;@Data // 自动生成 getter, setter, toString, equals, hashCode
@NoArgsConstructor // 自动生成无参构造函数 (反序列化需要)
@AllArgsConstructor // 自动生成全参构造函数 (可选,方便创建对象)
public class Product {private Long id;private String name;private double price;// 如果不用 Lombok,你需要手动添加:// public Product() {} // 无参构造函数// public Product(Long id, String name, double price) { ... } // 全参构造函数// public Long getId() { ... }// public void setId(Long id) { ... }// public String getName() { ... }// public void setName(String name) { ... }// public double getPrice() { ... }// public void setPrice(double price) { ... }
}

注意:如果你没有使用Lombok,需要手动添加Lombok的Maven依赖并在IDE中安装Lombok插件。或者手动写出构造函数和getter/setter方法。

3. 创建一个 Spring Boot Controller:

这个Controller将演示如何接收JSON数据(反序列化)和返回JSON数据(序列化)。

// ProductController.java
package com.example.jsondemo.controller;import com.example.jsondemo.model.Product;
import org.springframework.web.bind.annotation.*;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;@RestController // @RestController 包含了 @Controller 和 @ResponseBody
@RequestMapping("/api/products")
public class ProductController {// 模拟一个存储商品的列表 (实际应用中通常是数据库)private List<Product> productList = new ArrayList<>();// 用于生成唯一的IDprivate AtomicLong nextId = new AtomicLong(1);// === 演示 JSON 反序列化 ===// 这个方法接收一个 POST 请求,请求体是 JSON 格式的 Product 对象@PostMappingpublic String createProduct(@RequestBody Product product) {// @RequestBody: Spring Boot (通过 Jackson) 会自动把请求体中的 JSON 字符串// 反序列化成一个 Product Java 对象,并赋值给 product 参数。System.out.println("接收到产品信息:");System.out.println("Name: " + product.getName());System.out.println("Price: " + product.getPrice());// 模拟保存商品并赋予IDproduct.setId(nextId.getAndIncrement());productList.add(product);// 返回一个简单的字符串作为响应return "产品已创建,ID为: " + product.getId();}// === 演示 JSON 序列化 ===// 这个方法接收一个 GET 请求,并返回一个 Product 对象@GetMapping("/{id}")public Product getProductById(@PathVariable Long id) {// Spring Boot (通过 Jackson) 会自动把返回的 Product Java 对象// 序列化成 JSON 字符串,作为响应体发送出去。// 模拟从列表中查找商品 (实际应用中是查询数据库)for (Product product : productList) {if (product.getId().equals(id)) {System.out.println("正在返回产品信息 (将序列化为JSON): " + product);return product; // 返回 Java 对象}}// 如果找不到,返回 null (默认情况下 Jackson 会序列化为 'null')// 更健壮的做法是抛出异常或返回 ResponseEntity<Product> with status 404System.out.println("未找到ID为 " + id + " 的产品");return null;}// 演示返回一个列表的序列化@GetMappingpublic List<Product> getAllProducts() {// Spring Boot (通过 Jackson) 会自动把返回的 List<Product> 对象// 序列化成 JSON 数组,作为响应体发送出去。System.out.println("正在返回所有产品列表 (将序列化为JSON数组)");return productList;}
}

如何测试:

  1. 启动你的Spring Boot应用。

  2. 使用工具(如 Postman, cURL, Insomnia)进行测试:

    • 测试反序列化 (POST请求):

      • URL: http://localhost:8080/api/products (如果你的应用运行在默认端口8080)

      • Method: POST

      • Headers: Content-Type: application/json

      • Body: 选择 raw 并选择 JSON,输入以下JSON:

        {"name": "Wireless Mouse","price": 25.50
        }
        
      • 发送请求。你应该在控制台看到打印的接收信息,并收到一个包含新产品ID的响应。

    • 测试序列化 (GET请求):

      • 假设上一步创建的产品ID是1。

      • URL: http://localhost:8080/api/products/1

      • Method: GET

      • 发送请求。你应该收到一个包含该产品信息的JSON响应,类似这样:

        {"id": 1,"name": "Wireless Mouse","price": 25.5
        }
        
      • 测试返回列表 (GET请求):

        • URL: http://localhost:8080/api/products
        • Method: GET
        • 发送请求。你应该收到一个JSON数组,包含所有已创建的产品。

更进一步:Jackson 注解 (Customization)

虽然自动化很方便,但有时你需要控制JSON的输出。Jackson提供了很多注解,可以在你的POJO类属性或Getter/Setter方法上使用:

  • @JsonIgnore: 忽略某个属性,不进行序列化和反序列化。
  • @JsonProperty("newFieldName"): 改变属性在JSON中的字段名。
  • @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss"): 控制日期/时间字段的格式。
  • @JsonInclude(JsonInclude.Include.NON_NULL): 在序列化时,如果属性值为null,则不包含该字段。
  • @JsonCreator, @JsonDeserialize, @JsonSerialize: 更高级的定制。

这些注解让你能够精细地调整Java对象和JSON之间的映射关系。

总结

  1. JSON 是一种常用的数据交换格式。
  2. 序列化 是将 Java 对象转换为 JSON 字符串。
  3. 反序列化 是将 JSON 字符串转换为 Java 对象。
  4. 在 Spring Boot 项目中,通过引入 spring-boot-starter-web (它包含了 Jackson 库),Spring Boot 会自动配置 Jackson 作为默认的 HttpMessageConverter
  5. 你只需要在 Controller 方法中使用 @RequestBody (用于反序列化请求体) 和 @ResponseBody (或使用 @RestController,用于序列化返回值),Spring Boot 就会自动完成 JSON 的转换工作。
  6. 学习这些有助于你理解和开发 Web API,进行数据交互,以及更好地调试应用。

希望这个详细的解释能帮助你这个新手更好地理解 Spring Boot 中的 JSON 处理!多动手实践,你会越来越熟悉的。

相关文章:

什么是 JSON?学习JSON有什么用?在springboot项目里如何实现JSON的序列化和反序列化?

作为一个学习Javaweb的新手&#xff0c;理解JSON的序列化和反序列化非常重要&#xff0c;因为它在现代Web开发&#xff0c;特别是Spring Boot中无处不在。 什么是 JSON&#xff1f; 首先&#xff0c;我们简单了解一下JSON (JavaScript Object Notation)。 JSON 是一种轻量级的…...

[mysql]数据类型精讲

目录 数据类型精讲: 整数类型 浮点类型 日期和时间类型 文本字符串类型 数据类型精讲: 精度问题:不能损失数据 性能问题:表的设计,范式的讲解. 表设计的时候需要设置字段,我们现在要把字段类型讲完.,细节点一点点给大家拆解. Float和double是有精度的损失的,这边推荐使用…...

WordPress AI插件能自动写高质量文章吗,如何用AI提升网站流量

WordPress AI插件能自动写高质量文章吗&#xff1f; 最近很多站长都在问&#xff0c;用wordpress AI插件真的能写出搜索引擎喜欢的好文章吗&#xff1f;作为一个用过10款AI写作工具的老站长&#xff0c;今天我就来分享真实使用体验&#xff0c;告诉你哪些插件好用、怎么用才能…...

【中级软件设计师】函数调用 —— 传值调用和传地址调用 (附软考真题)

【中级软件设计师】函数调用 —— 传值调用和传地址调用 (附软考真题) 目录 【中级软件设计师】函数调用 —— 传值调用和传地址调用 (附软考真题)一、历年真题二、考点&#xff1a;函数调用 —— 传值调用和传地址调用&#x1f53a;1、传值调用&#x1f53a;2、传引用(地址)调…...

ECMAScript 1(ES1):JavaScript 的开端

1. 版本背景与发布 ●发布时间&#xff1a;1997 年 6 月&#xff0c;由 ECMA International 正式发布&#xff0c;标准编号为 ECMA-262。 ●历史意义&#xff1a;ES1 是 JavaScript 的首个标准化版本&#xff0c;结束了 Netscape Navigator 与 Internet Explorer 浏览器间脚本语…...

C++入侵检测与网络攻防之暴力破解

目录 1.nessus扫描任务 2.漏洞信息共享平台 3.nessus扫描结果 4.漏扫报告的查看 5.暴力破解以及hydra的使用 6.crunch命令生成字典 7.其他方式获取字典 8.复习 9.关于暴力破解的防御的讨论 10.pam配置的讲解 11.pam弱密码保护 12.pam锁定账户 13.shadow文件的解析 …...

基于ssm的同城上门维修平台管理系统(源码+数据库)

54基于ssm的同城上门维修平台管理系统&#xff1a;前端jsp、jquery、bootstrap&#xff0c;后端 spring、mybatis&#xff0c;集成订单管理、商品管理、商品类型管理、商品浏览、购物车等功能于一体的系统。 ## 功能介绍 ### 用户 - 基本功能&#xff1a;登录、注册、退出、…...

力扣-hot100(和为k的子数组)

560. 和为 K 的子数组 中等 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2 示例 2&#xff1a; 输入…...

【计算机视觉】CV实战 - 基于YOLOv5的人脸检测与关键点定位系统深度解析

基于YOLOv5的人脸检测与关键点定位系统深度解析 1. 技术背景与项目意义传统方案的局限性YOLOv5多任务方案的优势 2. 核心算法原理网络架构改进关键点回归分支损失函数设计 3. 实战指南&#xff1a;从环境搭建到模型应用环境配置数据准备数据格式要求数据目录结构 模型训练配置文…...

HTML word属性

介绍 CSS word-spacing 属性&#xff0c;用于指定段字之间的空间&#xff0c;例如&#xff1a; p {word-spacing:30px; }word-spacing属性增加或减少字与字之间的空白。 注意&#xff1a; 负值是允许的。 浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号。 属…...

Java—ThreadLocal底层实现原理

首先&#xff0c;ThreadLocal 本身并不提供存储数据的功能&#xff0c;当我们操作 ThreadLocal 的时候&#xff0c;实际上操作线程对象的一个名为 threadLocals 成员变量。这个成员变量的类型是 ThreadLocal 的一个内部类 ThreadLocalMap&#xff0c;它是真正用来存储数据的容器…...

GTSRB德国交通标志数据集下载以及训练集划分

GTSRB德国交通标志数据集下载以及训练集划分 一、数据集下载二、数据集划分 一、数据集下载 官网地址&#xff1a;附含数据集说明文档点击下载&#xff1a;训练数据集点击下载&#xff1a;测试数据集 二、数据集划分 在模型训练时&#xff0c;将训练数据集分成训练集和验证集&…...

python 实现客户端软件许可证书签名授权 cryptography

目录 1.需求 2.cryptography介绍 3.实际代码 4.结束语 1.需求 采用pyside6开发了一款客户端软件, 为保护核心算法源码, 采用Nuitka打包python代码&#xff0c;这仅仅保护了核心算法代码&#xff0c;不能限制用户使用软件&#xff0c;因此需要软件许可授权签名证书&#xff…...

明远智睿SD2351核心板:以48元撬动AI视觉产业革命的“硬核引擎”

在人工智能浪潮席卷全球的今天&#xff0c;AI视觉作为连接虚拟与现实的“智慧之眼”&#xff0c;正以惊人的速度重塑着产业格局。从智慧城市中的安防监控到自动驾驶汽车的“视觉神经”&#xff0c;从工业产线的缺陷检测到家庭场景的智能管家&#xff0c;AI视觉技术的每一次突破…...

【C语言】全局变量、静态本地变量

在C语言中&#xff0c;变量是存储数据的基本单元。 不同类型的变量有着不同的特性和用途&#xff0c;其中全局变量和本地变量是比较特殊且重要的两类变量。 一、全部变量 1.1 全局变量的作用域和生存期 全局变量是在函数外部定义的变量&#xff0c;其作用域从定义的位置开始&…...

32.768kHz晶振详解:作用、特性及与其他晶振的区别

一、32.768kHz晶振的核心作用 实时时钟&#xff08;RTC&#xff09;驱动&#xff1a; 提供精确的1Hz时钟信号&#xff0c;用于计时功能&#xff08;如电子表、计算机CMOS时钟&#xff09;。 分频公式&#xff1a; 1Hz 32.768kHz / 2^15&#xff08;通过15级二分频实现&#x…...

classfinal 修改过源码,支持jdk17 + spring boot 3.2.8

先贴图 使用 classfinal 修改过源码 支持jdk17 spring boot 3.3.0 使用方式&#xff1a; 1、springboot的jar加密 java -jar classfinal-fatjar-1.2.1.jar -file MySpringBoot.jar -libjars my-common.jar -packages cn.com.cmd -pwd 123456 -Y 得到&#xff1a; MySpri…...

算法训练营 Day1

努力追上那个曾经被寄予厚望的自己 —— 25.4.25 一、LeetCode_26 删除有序数组中的重复项 给你⼀个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现⼀次 &#xff0c;返回删除后数组的 新⻓度。元素的 相对顺序 应该保持 ⼀致 …...

4/25 研0学习日志

Python学习 python 4个常用的数据容器 list dict tuple set list 列表中数据类型可以不一样 构造方式 mylist["xxx","xxxx"] 获取数据方式 mylist[1] mylist[:4] mylist[-1:] 添加数据 mylist.append() mylist.extern(["aaa","aaaa&…...

手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段

手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段 --本地AI电话机器人 前言 书接上一篇&#xff0c;《手机打电话通话时如何向对方播放录制的IVR引导词声音》中介绍了【蓝牙电话SDK示例App】可以实现手机app在电话通话过程中插播预先录制的开场白等语音片段的功能。…...

汽车零配件供应商如何通过EDI与主机厂生产采购流程结合

当前&#xff0c;全球汽车产业正经历深刻的数字化转型&#xff0c;供应链协同模式迎来全新变革。作为产业链核心环节&#xff0c;汽车零部件供应商与主机厂的高效对接已成为企业发展的战略要务。然而&#xff0c;面对主机厂日益严格的数字化采购要求&#xff0c;许多供应商在ED…...

sql server 开启cdc报事务正在执行

今天开启数据库cdc 功能的时候提示&#xff1a;一个dbrole 的存储过程&#xff0c;rolemember cdc db_ower, &#xff0c;有事务正在进行&#xff0c;执行失败。 执行多次仍然如此&#xff0c;开启cdc的存储过程是sys.sp_cdc_enable_db;查询了一下网络&#xff0c;给出的方…...

03实战篇Redis02(优惠卷秒杀、分布式锁)

3、优惠卷秒杀 3.1 -全局唯一ID 每个店铺都可以发布优惠券&#xff1a; 当用户抢购时&#xff0c;就会生成订单并保存到tb_voucher_order这张表中&#xff0c;而订单表如果使用数据库自增ID就存在一些问题&#xff1a; id的规律性太明显 受单表数据量的限制 场景分析&…...

ECharts 地图开发入门

一、准备工作&#xff1a;环境搭建与数据准备​ 1. 引入 ECharts 库​ ​ TypeScript 取消自动换行复制 <!-- 引入 ECharts 核心库 -->​ <script src"https://cdn.jsdelivr.net/npm/echarts5.4.0/dist/echarts.min.js"></script>​ <!-…...

机器学习基础 - 回归模型之线性回归

机器学习: 线性回归 文章目录 机器学习: 线性回归1. 线性回归1. 简介2. 线性回归如何训练?1. 损失函数2. 正规方程3. 梯度下降法4. 两种方法的比较2. 岭回归岭回归与线性回归3. Lasso 回归4. ElasticNet 回归LWR - 局部加权回归QA1. 最小二乘法估计2. 最小二乘法的几何解释3…...

《解锁LLMs from scratch:开启大语言模型的探索之旅》

《解锁LLMs from scratch:开启大语言模型的探索之旅》 GitHub - datawhalechina/llms-from-scratch-cn: 仅需Python基础,从0构建大语言模型;从0逐步构建GLM4\Llama3\RWKV6, 深入理解大模型原理 项目首页 - LLMs-from-scratch:从零开始逐步指导开发者构建自己的大型语言模型…...

嵌入式 C 语言面试核心知识点全面解析:基础语法、运算符与实战技巧

在嵌入式面试中&#xff0c;C 语言基础是重中之重。本文针对经典面试题进行详细解析&#xff0c;帮助新手系统掌握知识点&#xff0c;提升面试应对能力。 一、数据结构逻辑分类 题目 在数据结构中&#xff0c;从逻辑上可以把数据结构分为&#xff08; &#xff09;。 A、动态…...

pyqt中以鼠标所在位置为锚点缩放图片

在编写涉及到图片缩放的pyqt程序时&#xff0c;如果以鼠标为锚点缩放图片&#xff0c;图片上处于鼠标所在位置的点&#xff08;通常也是用户关注的图片上的点&#xff09;不会移动&#xff0c;更不会消失在图片显示区域之外&#xff0c;可以提高用户体验&#xff0c;是一个值得…...

登高架设作业证考试的实操项目有哪些?

登高架设作业证考试的实操项目分为 4 个科目&#xff0c;包括安全防护用品使用、作业现场安全隐患排除、安全操作技术、作业现场应急处置&#xff0c;具体内容如下&#xff1a; 科目一&#xff1a;安全防护用品使用&#xff08;K1&#xff09; 考试项目&#xff1a;安全帽、安全…...

闻性与空性:从耳根圆通到究竟解脱的禅修路径

一、闻性之不动&#xff1a;超越动静的觉性本质 在《楞严经》中&#xff0c;佛陀以钟声为喻揭示闻性的奥秘&#xff1a;钟声起时&#xff0c;闻性显现&#xff1b;钟声歇时&#xff0c;闻性不灭。此“不动”并非如磐石般凝固&#xff0c;而是指觉性本身超越生灭、来去的绝对性…...

404了怎么办快把路由给我断掉(React配置路由)

路由基础概念 什么是前端路由&#xff1f; 核心作用&#xff1a;管理单页面应用的页面切换主要功能&#xff1a; 根据URL显示对应组件 保持浏览器历史记录 实现页面间导航不刷新 React Router 包含三个主要包&#xff1a; react-router&#xff1a;核心逻辑react-router-d…...

React类组件与React Hooks写法对比

React 类组件 vs Hooks 写法对比 分类类组件&#xff08;Class Components&#xff09;函数组件 Hooks组件定义class Component extends React.Componentconst Component () > {}状态管理this.state this.setState()useState()生命周期componentDidMount, componentDidU…...

Tailwind CSS实战:快速构建定制化UI的新思路

引言 在当今快节奏的前端开发环境中&#xff0c;开发者不断寻找能够提高效率并保持灵活性的工具。Tailwind CSS作为一个功能型优先的CSS框架&#xff0c;正在改变开发者构建用户界面的方式。与Bootstrap和Material UI等传统组件库不同&#xff0c;Tailwind不提供预设组件&…...

告别手动映射:在 Spring Boot 3 中优雅集成 MapStruct

在日常的后端开发中&#xff0c;我们经常需要在不同的对象之间进行数据转换&#xff0c;例如将数据库实体&#xff08;Entity&#xff09;转换为数据传输对象&#xff08;DTO&#xff09;发送给前端&#xff0c;或者将接收到的 DTO 转换为实体进行业务处理或持久化。手动进行这…...

JavaScript学习教程,从入门到精通,Ajax数据交换格式与跨域处理(26)

Ajax数据交换格式与跨域处理 一、Ajax数据交换格式 1. XML (eXtensible Markup Language) XML是一种标记语言&#xff0c;类似于HTML但更加灵活&#xff0c;允许用户自定义标签。 特点&#xff1a; 可扩展性强结构清晰数据与表现分离文件体积相对较大 示例代码&#xff1…...

抖音IP属地跟无线网有关系吗?一文解析

在抖音等社交平台上&#xff0c;IP属地显示功能让许多用户感到好奇——为什么自己的位置信息有时准确&#xff0c;有时却显示在其他城市&#xff1f;这时&#xff0c;用户会疑惑&#xff1a;抖音IP属地跟无线网有关系吗&#xff1f;本文将详细解析‌IP属地‌和‌无线网‌的概念…...

RDK X3新玩法:超沉浸下棋机器人开发日记

一、项目介绍 产品中文名&#xff1a;超沉浸式智能移动下棋机器人 产品英文名&#xff1a;Hackathon-TTT 产品概念&#xff1a;本项目研发的下棋机器人&#xff0c;是一款能自主移动、具备语音交互并能和玩家在真实的棋盘上进行“人机博弈”的移动下棋平台&#xff0c;能够带给…...

Trae 实测:AI 助力前端开发,替代工具还远吗?

Trae 实测&#xff1a;AI 助力前端开发&#xff0c;替代工具还远吗&#xff1f; 字节上线了一款 AI 新产品&#xff0c;名叫 Trae 。这是一款 IDE 工具&#xff0c;中文意思是「集成开发环境」&#xff0c;做技术的读者对此应该很熟悉。简单理解&#xff0c;就是程序员用来写代…...

SpringCloud基于Eureka和Feign实现一个微服务系统

Spring Cloud 是基于 Spring Boot 的 ‌微服务开发全栈解决方案‌,通过集成多种开源组件,提供分布式系统构建所需的服务治理、配置管理、容错机制‌等核心能力,简化微服务架构的复杂性。其核心目标是实现服务间的高效协同与弹性伸缩,支撑企业级云原生应用开发。Spring Clou…...

nacos设置权重进行负载均衡不生效

nacos设置权重进行负载均衡不生效&#xff0c;必须在启动类下加上这个bean Beanpublic IRule nacosRule(){return new NacosRule();}如下图所示...

Flowable7.x学习笔记(十四)查看部署流程Bpmn2.0-xml

前言 Flowable 在其前端 Modeler 中&#xff0c;采用 BPMN 2.0 标准将流程中的任务、网关、事件等元素以 XML 形式存储&#xff0c;并附带图形互换&#xff08;Diagram Interchange&#xff0c;DI&#xff09;数据&#xff0c;以保证在前端与后端都能精准重建可视化流程图。 生…...

大模型应用中Agent2Agent(A2A)的应用场景,以及A2A与MCP的区别和适用场景

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下大模型应用中Agent2Agent&#xff08;A2A&#xff09;的应用场景&#xff0c;以及A2A与MCP的区别和适用场景。 文章目录 一、引言二、Agent2Agent&#xff08;A2A&#xff09;协议原理2.1 核心架构2.2 基础框架与依…...

Windows server:

企鹅裙&#xff1a;429603659 域搭建 (细节上的问题) 1.将IP地址修改为静态IP&#xff0c;搭建完后设置DNS为本身(在搭建完域服务器后设置DNS) 2.配置之前需将计算机名更改为后面题目中所要求的. 3&#xff0e;一些版本之中比如Windows Server2012之中搭建域之后重启会显示…...

Python 3.14:探索新版本的魅力与革新

在Python编程语言的不断演进中&#xff0c;Python 3.14作为又一重要里程碑&#xff0c;承载着开发者们的期待与热情&#xff0c;悄然走进了我们的视野。尽管在撰写本文时&#xff0c;Python 3.14可能尚未正式成为主流版本&#xff08;注&#xff1a;实际发布情况需根据最新信息…...

LabVIEW基于VI Server的控件引用操作

本 VI 通过展示控件引用&#xff08;Control References&#xff09;的使用&#xff0c;借助 VI Server 实现对前面板对象的编程操作。 ​ 详细说明 隐式属性节点&#xff08;Implicitly Linked Property Node&#xff09;&#xff1a;通过右键单击控件&#xff08;或其控件终…...

【不同名字的yolo的yaml文件名是什么意思】

以下是这些 YOLO 系列配置文件的详细解析&#xff0c;按版本和功能分类说明&#xff1a; 一、YOLOv3 系列 文件名核心特性适用场景yolov3.yaml原始 YOLOv3 结构&#xff0c;3 尺度预测&#xff08;13x13,26x26,52x52&#xff09;通用目标检测yolov3-spp.yaml增加 SPP&#xff…...

《100天精通Python——基础篇 2025 第3天:变量与数据类型全面解析,掌握Python核心语法》

目录 一、Python变量的定义和使用二、Python整数类型&#xff08;int&#xff09;详解三、Python小数/浮点数&#xff08;float&#xff09;类型详解四、Python复数类型(complex)详解---了解五、Python字符串详解(包含长字符串和原始字符串)5.1 处理字符串中的引号5.2 字符串的…...

精益数据分析(24/126):聚焦第一关键指标,驱动创业成功

精益数据分析&#xff08;24/126&#xff09;&#xff1a;聚焦第一关键指标&#xff0c;驱动创业成功 在创业和数据分析的探索之旅中&#xff0c;我们都在不断寻找能够助力成功的关键因素。今天&#xff0c;我依旧带着与大家共同进步的初心&#xff0c;深入解读《精益数据分析…...

【刷题Day26】Linux命令、分段分页和中断(浅)

说下你常用的 Linux 命令&#xff1f; 文件与目录操作&#xff1a; ls&#xff1a;列出当前目录的文件和子目录&#xff0c;常用参数如-l&#xff08;详细信息&#xff09;、-a&#xff08;包括隐藏文件&#xff09;cd&#xff1a;切换目录&#xff0c;用于在文件系统中导航m…...

互联网实验室的质量管控痛点 质检LIMS系统在互联网企业的应用

在互联网行业流量红利消退与用户体验至上的时代背景下&#xff0c;产品迭代速度与质量稳定性成为企业核心竞争力的分水岭。传统测试实验室依赖人工操作、碎片化工具与线下沟通的管理模式&#xff0c;已难以应对敏捷开发、多端适配、数据安全等复合型挑战。 一、互联网实验室的…...