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

Spring Web开发注解和请求(1)


大家好我是小帅,今天我们来学习Spring Web MVC框架(入门级)

文章目录

  • 1. 什么是 Spring Web MVC?
    • 1.1 MVC 定义
    • 1.2 什么是Spring MVC ?
  • 2. 学习Spring MVC
    • 2.1 建⽴连接第一个spring MVC程序
  • 3. web开发注解的解释
    • 3.1@RestController
    • 3.2@RequestMapping
    • 3.3 @RequestMapping 是 GET 还是 POST ?
      • 3.3.1 指定GET/POST⽅法类型
      • 3.3.2 指定GET/POST⽅法类型( @GetMapping @PostMapping)
    • 3.4 @RequestParam
      • 3.4.1 ⾮必传参数设置
    • 3.5 @PathVariable用法
  • 4.请求
    • 4.1 传递单个参数
    • 4.2 传递多个参数
    • 4.3 后端参数重命名(后端参数映射)
    • 4.4 传递数组
    • 4.5 传递集合
    • 4.6 传递JSON(对象)数据
      • 4.6.1 JSON概念
      • 4.6.2 JSON的使用


1. 什么是 Spring Web MVC?

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC".

什么是Servlet呢?

Servlet 是⼀种实现动态⻚⾯的技术. 准确来讲Servlet是⼀套 Java Web 开发的规范,或者说是⼀套Java Web 开发的技术标准. 只有规范并不能做任何事情,必须要有⼈去实现它. 所谓实现 Servlet 规范,就是真正编写代码去实现 Servlet 规范提到的各种功能,包括类、⽅法、属性等.
Servlet 规范是开放的,除了 Sun 公司,其它公司也可以实现 Servlet 规范,⽬前常⻅的实现了Servlet 规范的产品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它们都被称为"Servlet 容器". Servlet 容器⽤来管理程序员编写的 Servlet 类.

1.1 MVC 定义

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分.

原生MVC交互图解:
在这里插入图片描述

  1. View(视图) 指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.
  2. Model(模型) 是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.
  3. Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型。

1.2 什么是Spring MVC ?

MVC 是⼀种架构设计模式, 也是⼀种思想, ⽽ Spring MVC 是对 MVC 思想的具体实现. 除此之外,Spring MVC还是⼀个Web框架.

Spring MVC 是⼀个实现了 MVC 模式的 Web 框架.

其实, Spring MVC 我们在前⾯已经⽤过了, 在创建 Spring Boot 项⽬时,我们勾选的 Spring Web 框架其实就是 Spring MVC 框架:

Spring Boot 只是实现Spring MVC的其中⼀种⽅式⽽已.

Spring Boot 可以添加很多依赖, 借助这些依赖实现不同的功能. Spring Boot 通过添加Spring WebMVC框架, 来实现web功能.

不过Spring在实现MVC时, 也结合⾃⾝项⽬的特点, 做了⼀些改变, 相对⽽⾔, 下⾯这个图或许更加合适⼀些
在这里插入图片描述

2. 学习Spring MVC

既然是 Web 框架, 那么当⽤⼾在浏览器中输⼊了 url 之后,我们的 Spring MVC 项⽬就可以感知到⽤⼾的请求, 并给予响应.

咱们学习Spring MVC, 重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互.

主要分以下三个⽅⾯:

  1. 建⽴连接:将⽤⼾(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。
  2. 请求: ⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数的功能.
  3. 响应: 执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾, 也就是响应.

2.1 建⽴连接第一个spring MVC程序

创建⼀个 UserController 类,实现⽤⼾通过浏览器和程序的交互,具体实现代码如下:
在这里插入图片描述
在这里插入图片描述

3. web开发注解的解释

3.1@RestController

⼀个项⽬中, 会有很多类, 每个类可能有很多的⽅法, Spring程序怎么知道要执⾏哪个⽅法呢?

Spring会对所有的类进⾏扫描, 如果类加了注解@RestController, Spring才会去看这个类⾥⾯的⽅法有没有加 @RequestMapping 这个注解, 当然他的作⽤不⽌这⼀点, 咱们先⽤, 后⾯再详细讲


3.2@RequestMapping

@RequestMapping 是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的.

表⽰服务收到请求时, 路径为 /sayHi 的请求就会调⽤ sayHi 这个⽅法的代码.
路由映射: 当⽤⼾访问⼀个 URL 时, 将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射.

@RequestMapping 既可修饰类,也可以修饰⽅法 ,当修饰类和⽅法时,访问的地址是类路径 + ⽅法路径.

就比如说什么的例子:
在这里插入图片描述

3.3 @RequestMapping 是 GET 还是 POST ?

答案是两个都是
我们通过postman第三方工具来测试一下
在这里插入图片描述

3.3.1 指定GET/POST⽅法类型

我们可以显⽰的指定@RequestMapping 来接收POST的情况,如下所⽰:
在这里插入图片描述
代码:

@RestController
@RequestMapping("test")
public class UserController {@RequestMapping("ayHi")public String sayHi() {return  "ayHi";}@RequestMapping(value = "ayHi2",method = RequestMethod.GET)public String sayHi2() {return  "RequestMethod.GET";}@RequestMapping(value ="ayHi3" ,method = RequestMethod.POST)public String sayHi3() {return  "ayHi";}}

还有一种注解可以直接指定

3.3.2 指定GET/POST⽅法类型( @GetMapping @PostMapping)

在这里插入图片描述
还可以这样写成数组的形式:
在这里插入图片描述

3.4 @RequestParam

前端传递的参数 key 和我们后端接收的 key 可以不⼀致,⽐如前端传递了⼀个time 给后端,⽽后端是使⽤ createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值.
代码:

package org.example.javaspringboot_2004_11_22;import org.apache.coyote.Request;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("test")
public class UserController {@RequestMapping("/m3")public Object method_4(@RequestParam("time") String createtime) {return "接收到参数createtime:" + createtime;}
}

使用浏览器发送请求,效果:
在这里插入图片描述
可以看到, Spring可以正确的把浏览器传递的参数time绑定到了后端参数caretetime参数上此时, 如果浏览器使⽤createtime进⾏参数传递呢?

效果:
在这里插入图片描述
在这里插入图片描述
总结:

  1. 使⽤ @RequestParam 进⾏参数重命名时, 请求参数只能和 @RequestParam 声明的名称⼀致, 才能进⾏参数绑定和赋值.
  2. 使⽤ @RequestParam 进⾏参数重命名时, 参数就变成了必传参数.

3.4.1 ⾮必传参数设置

如果我们的实际业务前端的参数是⼀个⾮必传的参数, 针对上述问题, 如何解决呢?先来了解下参数必传的原因, 我们查看 @RequestParam 注解的实现细节就可以发现端倪,注解实现如下:
在这里插入图片描述
可以看到 required 的默认值为true, 表⽰含义就是: 该注解修饰的参数默认为必传,既然如此, 我们可以通过设置 @RequestParam 中的 required=false 来避免不传递时报错,具体实现如下:
代码:

@RequestMapping("/m4")public Object method4(@RequestParam(value = "time", required = false) String createtime) {return "接收到参数createtime:" + createtime;}

可以看到, 添加required=false之后, time前⾯也加了key, 变成了 value = “time”
注解属性赋值时, 没有指明key的话, 默认为value属性.
如果需要有多个属性进⾏赋值时, 需要写上key

同时输入createtime也可以访问,time也可以
在这里插入图片描述
在这里插入图片描述

3.5 @PathVariable用法

可以拿到访问路径上的变量

代码:

@GetMapping("ayHi6/{name}/{id}")public String sayHi6(@PathVariable("name") String name, @PathParam("id") Integer id) {return "name=" + name + "\tid=" + id;}

效果:
在这里插入图片描述

4.请求

访问不同的路径, 就是发送不同的请求. 在发送请求时, 可能会带⼀些参数, 所以学习Spring的请求, 主要是学习如何传递参数到后端以及后端如何接收.

4.1 传递单个参数

接收单个参数, 在 Spring MVC 中直接⽤⽅法中的参数就可以,⽐如以下代码:

@RestController
@RequestMapping("test")
public class UserController {@RequestMapping("/m1")public String method1(String name){return "接收到参数name:"+ name;}}

在这里插入图片描述

可以看到, 后端程序正确拿到了name参数的值.

注意:
在这里插入图片描述
如果参数不⼀致, 是获取不到参数的

注意事项

使⽤基本类型来接收参数时, 参数必须传(除boolean类型), 否则会报500错误类型不匹配时, 会报400错误

案例:

package org.example.javaspringboot_2004_11_22;import org.apache.coyote.Request;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("test")
public class UserController {@RequestMapping("/int")public Object method1GetInt(int age){return "接收到参数age:" + age;}}
  1. 正常传参数
    在这里插入图片描述

  2. 不传递age参数
    在这里插入图片描述
    观察日记,解决:
    在这里插入图片描述
    所以后端传参时尽量使用包装类接收

  3. 传递参数类型不匹配
    在这里插入图片描述
    总结:
    对于参数可能为空的数据,建议使⽤包装类型

4.2 传递多个参数

和接收单个参数⼀样, 直接使⽤⽅法的参数接收即可. 使⽤多个形参.

在这里插入图片描述
可以看到, 后端程序正确拿到了name和password参数的值
当有多个参数时,前后端进⾏参数匹配时,是以参数的名称进⾏匹配的,因此参数的位置是不影响后端获取参数的结果.
比如说:

在这里插入图片描述

4.3 后端参数重命名(后端参数映射)

上面讲@RequestParam已经分析完了;

4.4 传递数组

Spring MVC 可以⾃动绑定数组参数的赋值

后端代码:

@RequestMapping("/m5")
public String method5(String[] arrayParam) {return Arrays.toString(arrayParam);
}

使⽤浏览器发送请求并传参:
数组参数:请求参数名与形参数组名称相同且请求参数为多个, 后端定义数组类型形参即可接收参数。

3种传参方法:

  1. http://127.0.0.1:8080/test/m5?arrayParam=zhangsan&arrayParam=lisi&arrayParam=wangwu
  2. http://127.0.0.1:8080/test/m6?listParam=zhangsan%2clisi%2cwangwu
  3. http://127.0.0.1:8080/test/m5?arrayParam=zhangsan,lisi,wangwu
    %2c 是逗号的转义编码
    在这里插入图片描述
    或者使⽤Postman来发送请求
    在这里插入图片描述

4.5 传递集合

集合参数:和数组类似, 同⼀个请求参数名有为多个, 且需要使⽤@RequestParam 绑定参数关系
一定使⽤@RequestParam 绑定参数关系,不然无法从数组变成集合,在里面是有一个隐藏的转换的。

代码:

@RequestMapping("/m6")
public String method6(@RequestParam List<String> listParam){return "size:"+listParam.size() + ",listParam:"+listParam;
}

使用浏览器访问和数组一样
使用postman访问,效果:
在这里插入图片描述

4.6 传递JSON(对象)数据

4.6.1 JSON概念

JSON:JavaScript Object Notation 【JavaScript 对象表⽰法】

JSON是⼀种轻量级的数据交互格式. 它基于 ECMAScript (欧洲计算机协会制定的js规范)的⼀个⼦集,采⽤完全独⽴于编程语⾔的⽂本格式来存储和表⽰数据。
作用:JSON就是⼀种数据格式, 有⾃⼰的格式和语法, 使⽤⽂本表⽰⼀个对象或数组的信息, 因此,JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换.

4.6.2 JSON的使用

JSON语法:

JSON 是⼀个字符串,其格式⾮常类似于 JavaScript 对象字⾯量的格式

  1. 数据在 键值对(Key/Value) 中
  2. 数据由逗号 , 分隔
  3. 对象⽤ {} 表⽰
  4. 数组⽤ [] 表⽰
  5. 值可以为对象, 也可以为数组, 数组中可以包含多个对象

JSON的两种结构:

  1. 对象: ⼤括号 {} 保存的对象是⼀个⽆序的 键值对 集合. ⼀个对象以左括号 { 开始, 右括号 }结束。每个"键"后跟⼀个冒号 : ,键值对使⽤逗号 , 分隔
  2. 数组: 中括号 [] 保存的数组是值(value)的有序集合. ⼀个数组以左中括号 [ 开始, 右中括号 ] 结束,值之间使⽤逗号 , 分隔。

我们来看一段josn代码:

{
{"squadName": "Super hero squad","homeTown": "Metro City","formed": 2016,"secretBase": "Super tower","active": true,"members": [{"name": "Molecule Man","age": 29,"secretIdentity": "Dan Jukes","powers": ["Radiation resistance","Turning tiny","Radiation blast"]}]
}

压缩后:

{"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"]}]}

和上⾯描述的数据⼀样, 只不过上⾯的进⾏了格式化, 更易读,

在这里插入图片描述
JSON字符串和Java对象互转

JSON本质上是⼀个字符串, 通过⽂本来存储和描述数据
Spring MVC框架也集成了JSON的转换⼯具, 我们可以直接使⽤, 来完成JSON字符串和Java对象的互转,本质上是jackson-databind提供的功能, Spring MVC框架中已经把该⼯具包引⼊了进来, 咱们直接使,⽤即可, 如果脱离Spring MVC使⽤, 需要引⼊相关依赖。

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.5</version>
</dependency>

JSON的转换⼯具包有很多, jackson-databind只是其中的⼀种.

josn的转换案例:

import com.fasterxml.jackson.databind.ObjectMapper;public class JSONUtils {private static ObjectMapper objectMapper = new ObjectMapper();public static void main(String[] args) throws Exception {Person person = new Person();person.setId(5);person.setName("zhangsan");person.setPassword("123456");// 对象转为JSON字符串String jsonStr = objectMapper.writeValueAsString(person);System.out.println("JSON字符串为:" + jsonStr);// JSON字符串转为对象Person p = objectMapper.readValue(jsonStr, Person.class);System.out.println("转换的对象 id:" + p.getId() + ", name:" + p.getName() + ", password:" + p.getPassword());}
}class Person {private int id;private String name;private String password;// Getters and Setterspublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

代码解析 :

  1. 使⽤ObjectMapper 对象提供的两个⽅法, 可以完成对象和JSON字符串的互转
  2. writeValueAsString: 把对象转为JSON字符串
  3. readValue: 把字符串转为对象

JSON优点
4. 简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换
5. 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和传输
6. 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输速度
7. 易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤
8. 安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码, 不会执⾏恶意代码,因此具有较⾼的安全性。

好了今天我们就到这里了,感谢观看。

相关文章:

Spring Web开发注解和请求(1)

大家好我是小帅&#xff0c;今天我们来学习Spring Web MVC框架&#xff08;入门级&#xff09; 文章目录 1. 什么是 Spring Web MVC&#xff1f;1.1 MVC 定义1.2 什么是Spring MVC ? 2. 学习Spring MVC2.1 建⽴连接第一个spring MVC程序 3. web开发注解的解释3.1RestControlle…...

设计模式-适配器模式-注册器模式

设计模式-适配器模式-注册器模式 适配器模式 如果开发一个搜索中台&#xff0c;需要适配或接入不同的数据源&#xff0c;可能提供的方法参数和平台调用的方法参数不一致&#xff0c;可以使用适配器模式 适配器模式通过封装对象将复杂的转换过程隐藏于幕后。 被封装的对象甚至…...

保持角色一致性!flux新模型redux用法(含模型与工作流)

​ 目录 redux模型是什么&#xff0c;能干啥&#xff1f; 用到的工具有哪些&#xff1f; 工具和模型文件在哪里下载&#xff1f; 整合包&#xff1a; 下载后需要分别放到指定目录&#xff1a; redux模型怎么用&#xff1f; 加载工作流 上传图片和输入提示词 生成结果…...

点云3DHarris角点检测算法推导

先回顾2D的Harris角点检测算法推导 自相关矩阵是Harris角点检测算法的核心之一&#xff0c;它通过计算图像局部区域的梯度信息来描述该区域的特征。在推导Harris角点检测算法中的自相关矩阵时&#xff0c;我们首先需要了解自相关矩阵的基本思想和数学背景。 参考 1. 能量函数…...

ASUS/华硕天选5Pro酷睿版 FX607J 原厂Win11 22H2系统 工厂文件 带ASUS Recovery恢复

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;一键恢复&#xff0c;以及机器所有驱动软件。 系统版本&#xff1a;windows11 原厂系统下载网址&#xff1a;http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意&#xff1a;仅支持以上型号专用…...

CentOS修改yum.repos.d源,避免“Could not resolve host: mirrorlist.centos.org”错误

1、问题现象 由于CentOS停止维护&#xff0c;mirrorlist.centos.org网站也关闭不可访问。导致CentOS默认配置的yum.repos.d源也不可用&#xff0c;所以执行yum命令会报“Could not resolve host: mirrorlist.centos.org”错误。具体如下&#xff1a; Could not retrieve mirror…...

rest-assured multiPart上传中文名称文件,文件名乱码

rest-assured是一个基于java语言的REST API测试框架&#xff0c;在使用rest-assured的multipart 上传文件后&#xff0c;后端获取的文件名称乱码。截图如下&#xff1a; 原因是rest-assured multipart/form-data默认的编码格式是US-ASCII&#xff0c;需要设置为UTF-8。 Befo…...

Springfox迁移到 Springdoc OpenAPI 3

将项目从 Springfox 迁移到 Springdoc OpenAPI 3 时&#xff0c;主要的工作是将原先使用的 Springfox 注解替换为 Springdoc OpenAPI 3 中的对应注解。虽然 Springdoc OpenAPI 3 基于 OpenAPI 3 规范&#xff0c;并且有一些不同的命名方式和设计理念&#xff0c;但大部分注解的…...

基于Java Springboot考研论坛系统

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据库&#xff1a;…...

性别需不需要加索引?

1. 什么是索引&#xff1f; 索引就像一本书的目录&#xff0c;能够帮助数据库快速定位到特定的数据&#xff0c;减少扫描的工作量。使用索引的前提是能够有效缩小查询范围&#xff0c;否则索引的存在可能并不带来性能提升。 使用索引有额外的开销&#xff1a; 索引需要额外的…...

Subprocess 和 Multiprocessing 的区别与使用要点及进程关闭方法

Subprocess 和 Multiprocessing 的区别与使用要点及进程关闭方法 最近在使用这两个库比较多&#xff0c;所以就借此机会记录一下这两个库的使用方式 一、Subprocess 和 Multiprocessing 的区别 1. 功能目标不同 Subprocess&#xff1a;主要用于在 Python 程序中启动外部程序…...

美国网络安全态势感知(4):威胁情报发展现状

美国政府依托其不断发展完善的威胁情报共享技术&#xff0c;构建了名为“网络天气地图”的威胁情报管理体系&#xff0c;如下图所示&#xff1a; “网络天气地图”的威胁情报管理体系运行过程以及每个过程中的关键信息如下所述&#xff1a; 通过国家网络安全保护系统与互联网中…...

【VRChat 改模】开发环境搭建:VCC、VRChat SDK、Unity 等环境配置

一、配置 Unity 相关 1.下载 UnityHub 下载地址&#xff1a;https://unity.com/download 安装打开后如图所示&#xff1a; 2.下载 VRChat 官方推荐版本的 Unity 跳转界面&#xff08;VRChat 官方推荐页面&#xff09;&#xff1a;https://creators.vrchat.com/sdk/upgrade/…...

android将pcm byte[]通过Librtmp进行rtmp推流

需求 我们这边做的功能是智能戒指&#xff0c;戒指可以录音&#xff0c;然后app通过蓝牙连接&#xff0c;将音频的byte[]进行rtmp推流 技术 因为我们不涉及直播&#xff0c;也不涉及视频&#xff0c;工期也比较短&#xff0c;只是音频推流&#xff0c;所以没用更复杂的ffmpe…...

宠物领养技术:SpringBoot框架应用

摘 要 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的产生往往是为了解决现有问题而产生的。针对于宠物领养…...

【前端】跨域问题与缓存

报错如下&#xff1a; 原因&#xff1a; 浏览器 缓存跨域&#xff0c;顾名思义是由于浏览器的缓存机制导致的一种跨域情况。这种跨域一般会出现在浏览器通过一些无视跨域的标签和css(如img、background-image)缓存了一些图片资源之后&#xff0c;当再次发起图片请求时&#xff…...

DepthAI 2.29版本 发布

2024年11月29日 增加在设备运行时使用新的 dai::Device.setCalibration() 更改设备校准能力的方法&#xff0c;并使用 dai::Device.getCalibration() 进行检索校准 1&#x1f343; 新的立体深度预设属性&#xff1a; 预设 面部 高细节 机器人 2&#x1f343; 多项摄像…...

C7.5【x86汇编】底层分析范围for的执行过程

目录 1.反汇编代码 2.分析 1.栈区初始化 2.设置数组元素的值 3. 逐条分析范围for 1.arr的地址被放到[ebp-2Ch]处 2.[ebp-2Ch]指向的值被复制一份到[ebp-30h]处 3.eax暂存[ebp-2Ch]指向的值,加28h后存储到[ebp-34h]处 4.跳转指令 5.比较[ebp-30h]和[ebp-34h]指向的值,…...

你听说过MIPS吗?它和ARM有何区别?

探索MX2000-B BGA核心版为何选用MIPS指令集的君正X2000处理器&#xff0c;MIPS相较于ARM有哪方面优势&#xff1f; 前段时间ZLG致远电子推出了MX2000-B BGA核心版&#xff0c;这款产品的核心芯片搭载了基于MIPS指令集的君正X2000处理器。有些工程师对于MIPS不怎么了解&#xff…...

SQL面试50题 数据库准备(存储过程)

数据表关系图 数据表 CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT,name varchar(255) NOT NULL,sex enum(female,male) NOT NULL,birth date NOT NULL,credit float(5,2) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT25 DEFAULT CHARSETutf8;…...

Github 基本使用学习笔记

1. 基本概念 1.1 一些名词 Repository&#xff08;仓库&#xff09; 用来存放代码&#xff0c;每个项目都有一个独立的仓库。 Star&#xff08;收藏&#xff09; 收藏你喜欢的项目&#xff0c;方便以后查看。 Fork&#xff08;克隆复制项目&#xff09; 复制别人的仓库&…...

react + vite 中的环境变量怎么获取

一、Vite 环境变量基础 创建一个.env文件&#xff0c;Vite 定义的环境变量需要以VITE_开头。 VITE_API_URL "http://localhost:3000/api" 生产模式创建.env.production。 VITE_API_URL "https://production-api-url.com/api" 二、在 React 组件中获…...

leetcode hot100【 LeetCode 54.螺旋矩阵】java实现

LeetCode 54.螺旋矩阵 题目描述 给定一个 m x n 的矩阵&#xff0c;返回其元素按照螺旋顺序的数组。 示例 1: 输入: [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ] ]输出: [1, 2, 3, 6, 9, 8, 7, 4, 5]示例 2: 输入: [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12] ]输出: [1, …...

Axios与FastAPI结合:构建并请求用户增删改查接口

在现代Web开发中&#xff0c;FastAPI以其高性能和简洁的代码结构成为了构建RESTful API的热门选择。而Axios则因其基于Promise的HTTP客户端特性&#xff0c;成为了前端与后端交互的理想工具。本文将介绍FastAPI和Axios的结合使用&#xff0c;通过一个用户增删改查&#xff08;C…...

插入排序算法

一、基本思想 插入排序通过构建有序序列&#xff0c;对于未排序的数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。它重复这个过程直到所有数据都被处理过。 二、示例 public class InsertionSort {public static void main(String[] args) {in…...

如何启动 Docker 服务:全面指南

如何启动 Docker 服务:全面指南 一、Linux 系统(以 Ubuntu 为例)二、Windows 系统(以 Docker Desktop 为例)三、macOS 系统(以 Docker Desktop for Mac 为例)四、故障排查五、总结Docker,作为一种轻量级的虚拟化技术,已经成为开发者和运维人员不可或缺的工具。它允许用…...

摄影相关常用名词

本文介绍与摄影相关的常用名词。 曝光 Exposure 感光元件接收光线的过程&#xff0c;决定图像的明暗程度和细节表现。 光圈 Aperture 控制镜头进光量的孔径大小&#xff0c;用 F 值&#xff08;f-stop&#xff09; 表示。 光圈越大&#xff08;F 值越小&#xff09;&#xff0c…...

kafka消费者组和分区数之间的关系是怎样的?

消费者组和分区数之间的关系决定了Kafka中消息的消费方式和负载均衡。合理配置分区数和消费者数量对于优化Kafka的性能和资源利用率至关重要。以下是这种关系的几个关键点&#xff1a; 一个分区只能被同一组的一个消费者消费&#xff1a;这是为了保证消息的顺序性。在同一个消费…...

【num_groups、 groups、init_filters以及归一化的选择】

目录 省流总结&#xff1a;一、num_groups与 groups的关系1. num_groups在代码中的作用(1) 定义(2) num_groups的值的不同影响1. 每组的通道数量&#xff1a;2. 计算效率&#xff1a;3. 对模型表现的影响&#xff1a;4. 对分割任务的影响&#xff1a;5. 训练稳定性&#xff1a;…...

Java设计模式——职责链模式:解锁高效灵活的请求处理之道

嘿&#xff0c;各位 Java 编程大神和爱好者们&#xff01;今天咱们要一同深入探索一种超厉害的设计模式——职责链模式。它就像一条神奇的“处理链”&#xff0c;能让请求在多个对象之间有条不紊地传递&#xff0c;直到找到最合适的“处理者”。准备好跟我一起揭开它神秘的面纱…...

ubuntu20配置mysql注意事项

目录 一、mysql安装 二、初始化配置密码 三、配置文件的位置 四、常用的mysql命令 五、踩坑以及解决方法 一、mysql安装 1.更新apt源 sudo apt update 2.安装mysql服务 sudo apt-get install mysql-server 3.初始化配置 sudo mysql_secure_installation 4.配置项 VALI…...

JDBC 设置 PostgreSQL 查询中 any(?) 的参数

这段时间都纠缠于 Java 如何操作 PostgreSQL 数据库上&#xff0c;千方百计的为求得更好的性能。为此我们用上了 Batch, 或用 id any(?) 这种更 PostgreSQL 化的数组参数操作。其实它还有更多数组方面的花样可以玩&#xff0c;毕竟 PostgreSQL 数据库有一种广纳百川的胸怀&am…...

论文笔记(五十七)Diffusion Model Predictive Control

Diffusion Model Predictive Control 文章概括摘要1. Introduction2. Related work3. 方法3.1 模型预测控制3.2. 模型学习3.3. 规划&#xff08;Planning&#xff09;3.4. 适应 4. 实验&#xff08;Experiments&#xff09;4.1. 对于固定奖励&#xff0c;D-MPC 可与其他离线 RL…...

【在Linux世界中追寻伟大的One Piece】多线程(三)

目录 1 -> Linux线程同步 1.1 -> 条件变量 1.2 -> 同步概念与竞态条件 1.3 -> 条件变量函数 1.4 -> 为什么pthread_cond_wait需要互斥量 1.5 -> 条件变量使用规范 2 -> 生产者消费者模型 2.1 -> 为什么要使用生产者消费者模型 2.2 -> 生产…...

eBay 基于 Celeborn RESTful API 进行自动化工具集成实践

作者&#xff1a;王斐&#xff0c;ebay Hadoop 团队软件工程师&#xff0c;Apache Kyuubi PMC member&#xff0c;Apache Celeborn Committer。 简介&#xff1a;Apache Celeborn 是一个统一的大数据中间服务&#xff0c;致力于提高不同MapReduce引擎的效率和弹性。为了Spark …...

Vue 前端 el-input 如何实现输入框内容始终添加在尾部%

要在 el-input 输入框的尾部添加 %&#xff0c;你可以通过两种方式来实现&#xff1a; 使用 suffix 插槽&#xff1a;这是最直接和最常用的方法。使用 append 插槽&#xff1a;如果你需要在输入框内或者右侧显示其他内容。 方法 1&#xff1a;使用 suffix 插槽 el-input 提供…...

如何通过轻易云实现泛微OA与金蝶云星空的数据无缝对接

FD003-非生产性付款申请 泛微>金蝶付款单-422 数据集成案例分享 在企业信息化系统中&#xff0c;数据的高效流转和准确对接是确保业务流程顺畅运行的关键。本文将重点探讨如何通过轻易云数据集成平台&#xff0c;实现泛微OA-Http与金蝶云星空之间的数据无缝对接&#xff0c…...

【docker】docker的起源与容器的由来、docker容器的隔离机制

Docker 的起源与容器的由来 1. 虚拟机的局限&#xff1a;容器的需求萌芽 在 Docker 出现之前&#xff0c;开发和部署软件主要依赖虚拟机&#xff08;VMs&#xff09;&#xff1a; 虚拟机通过模拟硬件运行操作系统&#xff0c;每个应用程序可以运行在自己的独立环境中。虽然虚…...

mysql 事务之LBCC与MVCC

一、事务 数据库事务&#xff08;Database Transaction&#xff09;是数据库管理系统&#xff08;DBMS&#xff09;中执行的一系列操作&#xff0c;这些操作被当作一个逻辑单元进行处理&#xff0c;以保证数据的一致性和完整性。 ACID&#xff0c;事务四个关键特性 1、原子性…...

记一次 .NET某hdp智能柜系统 卡死分析

一&#xff1a;背景 1. 讲故事 停了一个月时间没有更新博客了&#xff0c;主要是这段时间有些许事情导致心神不宁&#xff0c;我这个人也比较浮躁所以无法潜心修炼&#xff0c;事情如下&#xff1a; 被狗咬了 也不知道是不是出门没看黄历&#xff0c;在小区门口店里买烟&am…...

大模型专栏--Spring Ai Alibaba介绍和功能演示

Spring AI Alibaba 介绍和功能演示 背景 Spring AI Alibaba 开源项目基于 Spring AI 构建&#xff0c;是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践&#xff0c;提供高层次的 AI API 抽象与云原生基础设施集成方案&#xff0c;帮助开发者快速构建 AI 应用。…...

【GPT】为什么人需要睡觉?

睡觉对人类来说是至关重要的生理和心理需求。以下是一些为什么人需要睡觉的主要原因&#xff0c;以及睡眠对身体和大脑的影响&#xff1a; 1. 恢复与修复 身体修复&#xff1a;在睡眠期间&#xff0c;身体进行细胞修复和再生。例如&#xff0c;生长激素在深度睡眠中分泌&#…...

【Linux】磁盘 | 文件系统 | inode

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;青果大战linux 总有光环在陨落&#xff0c;总有新星在闪烁 模电好难啊&#xff…...

A051-基于Spring Boot的网络海鲜市场系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…...

谷歌浏览器Chrome打开百度很慢,其他网页正常的解决办法,试了很多,找到了适合的

最近不知怎么的&#xff0c;Chrome突然间打开百度很慢&#xff0c;甚至打不开。不光我一个人遇到这问题&#xff0c;我同事也遇到这个问题。开发中难免遇到问题&#xff0c;需要百度&#xff0c;现在是百度不了。 作为一名开发人员&#xff0c;习惯了使用Chrome进行开发&#…...

《企业级低代码开发平台技术要求》核心要点解析

一、引言 在数字化转型的浪潮中&#xff0c;企业级低代码开发平台成为推动企业创新与发展的关键力量。深圳市标准化协会发布的《企业级低代码开发平台技术要求》&#xff08;T/SZAS 77—2024&#xff09;为该领域提供了重要的规范与指引。深入剖析其核心要点&#xff0c;对于理…...

AI一键生成3D动画:腾讯最新方案,为小程序带来革命性变化

随着3D技术的快速发展,将静态的3D模型转化为能够生动展现各种动作的角色已经成为许多创作者和开发者梦寐以求的能力。然而,在过去,这一过程往往需要大量的手动工作和技术积累。现在,腾讯推出了一项创新的技术——AI一键生成3D动画,它不仅极大地简化了流程,还显著提高了效…...

AD软件如何快速切换三维视图,由2D切换至3D,以及如何恢复

在Altium Designer软件中&#xff0c;切换三维视图以及恢复二维视图的操作相对简单。以下是具体的步骤&#xff1a; 切换三维视图 在PCB设计界面中&#xff0c;2D切换3D&#xff0c;快捷键按住数字键盘中的“3”即可切换&#xff1b; 快捷键ctrlf&#xff08;或者vb快捷键也…...

【赵渝强老师】PostgreSQL的数据库

PostgreSQL的逻辑存储结构主要是指数据库中的各种数据库对象&#xff0c;包括&#xff1a;数据库集群、数据库、表、索引、视图等等。所有数据库对象都有各自的对象标识符oid&#xff08;object identifiers&#xff09;,它是一个无符号的四字节整数&#xff0c;相关对象的oid都…...

opencv 区域提取三种算法

opencv 区域提取三种算法 1.轮廓查找 findContours()函数&#xff0c;得到轮廓的点集集合 cv::vector<cv::vector<Point>> contours;threshold(roiMat,binImg,m_pPara.m_nMinGray,m_pPara.m_nMaxGray,THRESH_BINARY);//膨胀处理Mat dilaElement getStructuringE…...