Spring Boot(概要 入门 Spring Boot 核心配置 YAML JSR303数据校验 )

目录

一、Spring Boot概要

1. SpringBoot优点 

2. SpringBoot缺点 

二、Spring Boot入门开发

1. 第一个SpringBoot项目

项目创建方式一:使用 IDEA 直接创建项目

项目创建方式二:使用Spring Initializr 的 Web页面创建项目 (了解)

项目创建方式三:使用 IDEA 直接创建项目(了解)

项目创建方式四:使用 IDEA 创建Maven项目并改造为springBoot(了解)

2. 项目打jar包

3. banner修改

4. 项目列表显示优化

二、Spring Boot 核心配置

1. Spring Boot配置文件分类

2. YAML概述 

3. YAML基础语法 

语法要求:

YAML:数据格式

字面量:普通的值 [ 数字,布尔值,字符串 ]

数组:一组按次序排列的值( List、set )

对象、Map(键值对)

YAML:参数引用

YAML:小结

4. 读取配置内容 

逐个注入演示

批量注入方式1

批量注入方式2(了解) 

对比小结 

5. JSR303数据校验 

JSR303校验注解的使用步骤

练习-处理用户请求并Controller 层做参数校验

JSR303校验注解的分类 

Controller统一异常处理

6. 多环境切换profile 


一、Spring Boot概要

        随着动态语言的流行(Ruby、Scala、Node.js), Java的开发显得格外的笨重;繁多的配置、低 下的开发效率、复杂的部署流程以及第三方技术整合难度大。

        在上述环境下,Spring Boot由此诞生,它的设计是为了使您能够尽可能快地启动和运行。它使用 “习惯 优于配置” (项目中存在大量的配置,而 Spring Boot 内置一个习惯性的配置,让你无须手动进行配 置)的理念让你的项目快速运行起来。使用 Spring Boot 很容易创建一个独立运行(运行jar,内嵌 Servlet 容器)、准生产强力的基于 Spring 框架的项目,使用 Spring Boot你可以不用或者只需要很少 的 Spring 配置。提供了 J2EE 开发的一站式解决方案。

        2014 年 4 月,Spring Boot 1.0.0 发布。Spring的顶级项目之一( https://spring.io)。

1. SpringBoot优点 

  • Create stand-alone Spring applications:创建独立Spring应用
  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files):内嵌web服务器
  • Provide opinionated 'starter' dependencies to simplify your build configuration:
    • 自动starter依赖,简化构建配置
    • 起步依赖 ,起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM), 定义了对其他库的传递依赖 ,这些东西加在一起即支持某项功能。 简单的说,起步依赖就是 将具备某种功能的坐标打包到一起,并提供一些默认的功能
  • Automatically configure Spring and 3rd party libraries whenever possible:自动配置Spring以及第三方功能
  • Provide production-ready features such as metrics, health checks, and externalized configuration:提供生产级别的监控、健康检查及外部化配置
  • Absolutely no code generation and no requirement for XML configuration:无代码生成、无需编写XML

  • SpringBoot是整合Spring技术栈的一站式框架
  • SpringBoot是简化Spring技术栈的快速开发脚手架
  • Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式

2. SpringBoot缺点 

  • 人称版本帝,迭代快,需要时刻关注变化
  • 封装太深,内部原理复杂,不容易精通

二、Spring Boot入门开发

技术点要求

熟练 Spring 框架的使用

熟练 Maven 依赖管理与项目构建熟练使用 Eclipse 或 IDEA

环境准备:

  • java version "1.8.0_181"
  • Maven-3.6.1
  • SpringBoot 2.x 最新版

1. 第一个SpringBoot项目

项目创建方式一:使用 IDEA 直接创建项目

  • 1. 创建一个新项目
  • 2. 选择spring initalizr , 可以看到默认就是去官网的快速构建工具那里实现
  • 3. 填写项目信息

项目名字不能大写 同时要选择maven

  • 4. 选择初始化的组件(这里勾选 Web 即可)

  • 5. 填写项目路径
  • 6. 等待项目构建成功

        然后一直下一步          项目结构

配置pom.xml

如果进度条一直 在 关了重新开 然后导

 <!-- 父pom文件 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.13</version><relativePath/> <!-- lookup parent from repository --></parent><!-- 项目信息 --><groupId>com.zkt</groupId><artifactId>springboot_init_01</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot_init_01</name><description>Demo project for Spring Boot</description><!-- 删除 --><!--     <url/> --><!--     <licenses> --><!--         <license/> --><!--     </licenses> --><!--     <developers> --><!--         <developer/> --><!--     </developers> --><!--     <scm> --><!--         <connection/> --><!--         <developerConnection/> --><!--         <tag/> --><!--         <url/> --><!--     </scm> --><!-- 版本锁定 --><properties><java.version>8</java.version></properties><!-- 坐标 --><dependencies><!-- web启动器坐标spring+springMVC --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- junit --><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>

实现处理请求案例

  • 1、在主程序的同级目录下,新建一个controller包,一定要在同级目录下,否则识别不到
  • 2、在包中新建一个HelloController类
  • 3、编写完毕后,从主程序启动项目,浏览器发起请求,看页面返回;控制台输出了 Tomcat 访问的端口号!

controller

@Controller
public class UserController {@RequestMapping(path = "/handleRequest")//此注解处理用户请求@ResponseBody//将修饰方法的返回值以json形式返回给方法的请求者public String handleRequest(){System.out.println("===>springBoot成功处理请求~");return "helloWorld";}
}

运行结果:


和Spirng程序相比,SpringBoot程序在开发的过程中各个层面均具有优势

类配置文件

Spring

SpringBoot

pom文件中的坐标

手工添加

勾选添加

web3.0配置类

手工制作

Spring/SpringMVC配置类

手工制作

控制器

手工制作

手工制作

总结

  1. 开发SpringBoot程序可以根据向导进行联网快速制作
  2. SpringBoot程序需要基于JDK8以上版本进行制作
  3. SpringBoot程序中需要使用何种功能通过勾选选择技术,也可以手工添加对应的要使用的技术
  4. 运行SpringBoot程序通过运行Application程序入口进行

项目创建方式二:使用Spring Initializr 的 Web页面创建项目 (了解)

        开发SpringBoot程序,可以不基于任意的IDE工具进行,其实在SpringBoot的官网里面就可以直接创建SpringBoot程序

        SpringBoot官网和Spring的官网是在一起的,都是 spring.io 。你可以通过项目一级一级的找到SpringBoot技术的介绍页,然后在页面中间部位找到如下内容

  • 1. 打开 https://start.spring.io/
  • 2. 填写项目信息
  • 3. 点击”Generate Project“按钮生成项目;下载此项目
  • 4. 解压项目包,并用IDEA以Maven项目导入,一路下一步即可,直到项目导入完毕。
  • 5. 如果是第一次使用,可能速度会比较慢,包比较多、需要耐心等待一切就绪。

步骤①:点击Spring Initializr后进入到创建SpringBoot程序的界面上,下面是输入信息的过程,和前面的一样,只是界面变了而已,根据自己的要求,在左侧选择对应信息和输入对应的信息即可

步骤②:右侧的ADD DEPENDENCIES用于选择使用何种技术,和之前勾选的Spring WEB是在做同一件事,仅仅是界面不同而已,点击后打开网页版的技术选择界面

步骤③:所有信息设置完毕后,点击下面左侧按钮,生成一个文件包

步骤④:保存后得到一个压缩文件,这个文件打开后就是创建的SpringBoot工程文件夹了

步骤⑤:解压缩此文件后,得到工程目录,在Idea中导入即可使用,和之前创建的东西完全一样。下面就可以自己创建一个Controller测试一下是否能用了。

总结

  1. 打开SpringBoot官网,选择Quickstart Your Project
  2. 创建工程,并保存项目
  3. 解压项目,通过IDE导入项目

项目创建方式三:使用 IDEA 直接创建项目(了解)

1. 与方式1相同,但是参考路径为: https://start.aliyun.com

项目创建方式四:使用 IDEA 创建Maven项目并改造为springBoot(了解)

项目结构分析:

  • 1. 程序的主启动类
  • 2. 一个 application.properties 配置文件
  • 3. 一个 测试类
  • 4. 一个 pom.xml

2. 项目打jar包

jar 包 双击

打包成功

项目文件夹下的traget 就可以找到

运行 在当面目录 进入cmd 输入以下命令即可

java -jar springboot_init_01-0.0.1-SNAPSHOT.jar

3. banner修改

  • 1. 项目下的 resources 目录下新建一个banner.txt 即可。
  • 2. 图案可以到: https://www.bootschool.net/ascii 这个网站生成,然后拷贝到文件中即可
  • 3. 设置图片作为banner
​​​​ spring.banner.image.location=logo.png

4. 项目列表显示优化

二、Spring Boot 核心配置

1. Spring Boot配置文件分类

        SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用

application.properties或者application.yml(application.yaml)进行配置

application.properties

语法结构 :key=value

server.port=8081

application.yml

语法结构 :key:空格 value (冒号后面必须要有空格)

server:port: 8081

小结

  • SpringBoot提供了2种配置文件类型:properteis和yml/yaml
  • 默认配置文件名称:application
  • 在同一级目录入如果三类文件共存,优先级为:properties > yml > yaml

2. YAML概述 

        YAML全称是 YAML Ain't Markup Language 。YAML是一种直观的能够被电脑识别的的数据数据序列化格式, 并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,

比 如:C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简 洁。

YAML文件的扩展名可以使用.yml或者.yaml。

对比

properties:

server.port=8080
server.address=127.0.0.1

xml:

<server> 
<port>8080</port> 
<address>127.0.0.1</address> 
</server> 

yml:

server: port: 8080 address: 127.0.0.1 

简洁,以数据为核心

3. YAML基础语法 

语法要求:

  • 1. 大小写敏感
  • 2. 数据值前边必须有空格,作为分隔符
  • 3. 使用缩进表示层级关系
  • 4. 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混 乱)。
  • 5. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • 6. "#"表示注释,从这个字符一直到行尾,都会被解析器忽略。
#语法结构 :key:空格 value  (冒号后面必须要有空格)
server:port: 8082servlet:context-path: /demo01

YAML:数据格式

字面量:普通的值 [ 数字,布尔值,字符串 ]
###########################语法################################
#  1. 大小写敏感
#  2. 数据值前边必须有空格,作为分隔符
#  3. 使用缩进表示层级关系
#  4. 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混乱)。
#  5. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#  6. "#"表示注释,从这个字符一直到行尾,都会被解析器忽略。###########################数据类型################################
#============>字面量:普通的值  [ 数字,布尔值,字符串  ]
boolean: TRUE 				#TRUE,true,True,FALSE,false,False均可
float: 3.14 				#6.8523015e+5 #支持科学计数法
int: 123 					#0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
string: HelloWorld 			#字符串可以直接书写
数组:一组按次序排列的值( List、set )
#============>数组:一组按次序排列的值( List、set )
address:- 北京- 上海- 西安
# 行内写法
commpany: [阿里巴巴,华为,腾讯,字节跳动]
对象、Map(键值对)
#============>对象、Map(键值对)
person1:name: zktsex: 男age: 22
# 行内写法
person2: {name: 李世伟,sex: 男,age: 24}#对象数组格式一
users1:- name: Tomage: 4- name: Jerryage: 5
#对象数组格式二
users2:-name: Tomage: 4-name: Jerryage: 5
#对象数组缩略格式
users3: [ { name:Tom,age:4 },{ name:Jerry,age:5 } ]
YAML:参数引用
#============>参数引用
#name: 小gouperson3:name: zktpet: ${name}	# 引用上边定义的name值msg1: number${random.uuid} # 配置文件占位符,随机uuid
YAML:小结

4. 读取配置内容 

yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值!

支持方式:

        逐个注入:@Value

        批量注入:1.@ConfigurationProperties

                           2.Environment类

逐个注入演示

Dog类 

//@PropertySource(value = "classpath:application.yml")
@Component
public class Dog {@Value("${name}")private String name;@Value("${age}")private Integer age;get set tostring ..
}

yml:

name: 小黄
age: 4

加载指定的配置文件@PropertySource :加载指定的配置文件;

测试结果:

批量注入方式1

编写一个复杂一点的实体类:Person 类

/*@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private String name;private int age;private boolean marry;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Dog dog;
set get tostring..
}

yml

###########################批量注入################################
person:name: zktage: 22marry: falsebirth: 2002/11/18maps: {k1: v1,k2: v2}lists:- code- football- sleepdog:name: fireage: 1

@ConfigurationProperties作用: 将配置文件中配置的每一个属性的值,映射到这个组件中; 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定

参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应

如果编写完配置文件有红色提示,则可以添加坐标隐藏

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>

测试类中测试一下

@SpringBootTest
class SpringbootInit01ApplicationTests {@AutowiredDog dog;@AutowiredPerson person;@Testvoid contextLoads() {}@Testpublic  void test(){System.out.println(dog);System.out.println(person);}}

运行结果:

批量注入方式2(了解) 

直接在测试类中装配开发模式类辅助获取key对应value数据

@Autowiredprivate Environment env;@Testpublic void test(){ System.out.println(env.getProperty("person1.name"));System.out.println(env.getProperty("person1.age"));System.out.println(env.getProperty("person1.dog.name"));System.out.println(env.getProperty("person1.lists[0]"));    
}

对比小结 

@Value这个使用起来并不友好!我们需要为每个属性单独注解赋值,比较麻烦;我们来看个功能对比图

对比@ConfigurationProperties@Value
功能批量注入配置文件中的属性一个个指定
松散语法支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持
  • 1、@ConfigurationProperties只需要写一次即可 @Value则需要每个字段都添加
  • 2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟 着的字母默认是大写的。这就是松散绑定。可以测试一下

- 代替 小驼峰

  • 3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
  • 4、复杂类型封装,yml中可以封装对象 , 使用value就不支持

结论:

配置yml和配置properties都可以获取到值 , 强烈推荐 yml;

  • 如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
  • 如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接 @configurationProperties,不要犹豫!

5. JSR303数据校验 

对于web服务来说,为防止非法参数对业务造成影响,在 Controller 层一定要做参数校验的!大部分 情况下,请求参数分为如下两种形式:

  • 1. POST 、 PUT 请求,使用
  • 2. requestBody 传递参数; GET 请求,使用 requestParam/PathVariable 传递参数。

JSR的全称是Java Specification Requests(Java 规范提案),是指向JCP ( Java Community Process )提出

        新增一个标准化技术规范的正式请求。 Java API规范( JSR303 )定义了 Bean 校验的标准 validation-api ,但没有提供实现。 validation 是对这个规范的实现,并增加了校验注解如 @Email 、 @Length 等。 hibernate Spring Validation 是对 来,我们以 hibernate validation 的二次封装,用于支持 spring-boot 项目为例,介绍 spring mvc参数自动校验。接下 Spring Validation 的使用

JSR303校验注解的使用步骤

1.添加依赖,导入spring-boot-starter-validation启动器

 <!-- 数据验证 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

2.在实体类需要校验的成员字段(Field)上,添加校验注解。

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {@Email(message = "邮箱必须合法")@NotNull(message = "邮箱不能为空")private String email;private String lastName;private String name;@Max(value = 150,message = "给年轻人留点机会吧")private int age;private boolean marry;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Dog dog;
set get tostring ..
}

测试

正常结果

练习-处理用户请求并Controller 层做参数校验

方式一:

//前端发请求 localhost:8080/savePerson?email=wangyan@qq.com&name=tom&age=50&marry=true//springMVC框架通过方法的参数进行数据的接受替换之前:request.getParameter(key)@RequestMapping(path = "/savePerson")@ResponseBodypublic String savePerson(Person person){System.out.println("====="+person);return "新增成功";}

运行结果:

方式二:

 //前端发请求 localhost:8080/savePerson?email=123@163.com&name=zkt&age=22&marry=false//springMVC框架通过方法的参数进行数据的接受替换之前:request.getParameter(key)@RequestMapping(path = "/savePerson")@ResponseBodypublic String savePerson(@Valid Person person){System.out.println("====="+person);return "新增成功";}

同时需要将Person类注掉

运行结果

注意: 不是在测试类运行 是在main中的SpringbootInit01Application运行

JSR303校验注解的分类 

值校验:

 // 被注解的元素必须为null@Null(message = "必须为null") // 被注解的元素必须不为null@NotNull(message = "必须不为null") // 校验注解的元素值不为空(不为null、去除首位空格后长度为0),类型为String@NotBlank(message = "必须不为空") // 校验注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0),类型为CharSequence、
Collection、Map、Array@NotEmpty(message = "必须不为null且不为空") // 被注解的元素必须为true,并且类型为boolean@AssertTrue(message = "必须为true") // 被注解的元素必须为false,并且类型为boolean@AssertFalse(message = "必须为false")

范围校验

// 被注解的元素其值必须大于等于最小值,并且类型为int,long,float,double@Min(value = 18, message = "必须大于等于18")// 被注解的元素其值必须小于等于最小值,并且类型为int,long,float,double@Max(value = 18, message = "必须小于等于18") 
// 校验注解的元素值大于等于@DecimalMin指定的value值,并且类型为BigDecimal@DecimalMin(value = "150", message = "必须大于等于150") 
// 校验注解的元素值小于等于@DecimalMax指定的value值 ,并且类型为BigDecimal@DecimalMax(value = "300", message = "必须大于等于300")// 校验注解的元素值在最小值和最大值之间,并且类型为BigDecimal,BigInteger,CharSequence,byte,short,int,long。
@Range(max = 80, min = 18, message = "必须大于等于18或小于等于80") 
// 被注解的元素必须为过去的一个时间,并且类型为java.util.Date@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Past(message = "必须为过去的时
间")// 被注解的元素必须为未来的一个时间,并且类型为java.util.Date@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Future(message = "必须为未来的时
间")

长度校验:

// 被注解的元素的长度必须在指定范围内,并且类型为String,Array,List,Map@Size(max = 11, min = 7, message = "长度必须大于等于7或小于等于11")// 校验注解的元素值长度在min和max区间内 ,并且类型为String@Length(max = 11, min = 7, message = "长度必须大于等于7或小于等于11")

格式校验:

// 校验注解的元素值的整数位数和小数位数上限 ,并且类型为float,double,BigDecimal。
@Digits(integer=3,fraction = 2,message = "整数位上限为3位,小数位上限为2位")// 被注解的元素必须符合指定的正则表达式,并且类型为String@Pattern(regexp = "\\d{11}",message = "必须为数字,并且长度为11")// 校验注解的元素值是Email,也可以通过regexp和flag指定自定义的email格式,类型为String@Email(message = "必须是邮箱")

Controller统一异常处理

  • @ControllerAdvice:统一为Controller进行"增强"
  • @ExceptionHandler : 异常处理

实现

在util下新建BindExceptionHandler

@ControllerAdvice
public class BindExceptionHandler {@ExceptionHandler(NullPointerException.class)@ResponseBodypublic String show1(NullPointerException e){return  "全局异常处理器处理异常";}@ExceptionHandler(BindException.class)@ResponseBodypublic String show2(BindException e){return  "全局异常处理器处理异常";}
}

6. 多环境切换profile 

        我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。 其中数据库地址、服务 器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。 profile功能就是来进行动态配置切换的;

命名语法:

例如:application-环境简称.properties/yml

  • application-dev.properties/yml 开发环境
  • application-test.properties/yml 测试环境
  • application-pro.properties/yml 生产环境

1) profile配置方式

        多profile文件方式

2) profile激活方式

        配置文件 :

spring:profiles:active:  环境简称

主配置文件里面调用

dev.yml

server:port: 8082

test.yml

server:port: 8081

故用的就是test 的8081

虚拟机参数 :在VM options 指定:-Dspring.profiles.active=dev

命令行参数:java –jar xxx.jar --spring.profiles.active=dev

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习高级四

JDK8开始&#xff0c;接口新增了三种形式的方法 接口的多继承 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 import javax.swing.*; import java.awt.event.ActionEvent;public class Test {public static void main(String[] args) {// 扩展 内部类在开发中的真实使用…

深度学习LSTM之预测光伏发电

代码一&#xff1a;训练LSTM模型 代码逐段分析 import numpy as np import pandas as pd import tensorflow.keras as tk from tensorflow.keras import layers首先&#xff0c;导入了必要的库&#xff1a;numpy用于数值计算&#xff0c;pandas用于数据处理&#xff0c;tenso…

【C++】多态进阶

标题&#xff1a;【C】多态进阶 水墨不写bug 目录 &#xff08;一&#xff09;多态的原理 &#xff08;1&#xff09;虚函数表 &#xff08;2&#xff09;多态的原理 &#xff08;3&#xff09;动态绑定与静态绑定 &#xff08;一&#xff09;多态的原理 &#xff08;1&am…

windows 11 PC查询连接过的wlan密码

1:管理员打开cmd 2:输入netsh wlan show profiles 3:netsh wlan show profiles Shw2024-5G keyclear 密码关键内容&#xff1a;12345678

[Unity]碰撞器的接触捕获层详解

目录 前言※关闭效果器(Effector)的遮罩接触捕获层的官方描述官方描述的翻译和注解接触捕获层作用简介接触(Contact)和捕获(Capture)配置接触捕获层的作用※接触捕获层对碰撞响应的影响需要接触捕获的物理查询需要接触捕获的物理回调注意运行时(Runtime)修改接触的相互性总结 相…

【Git分支管理】理解分支 | 创建分支 | 切换分支 | 合并分支 | 删除分支 | 强制删除分支

目录 前言 0.理解分支 1.查看本地仓库存在的分支 2.HEAD指向分支 3.创建本地分支 4.切换分支 5.分支提交操作 6.合并分支 快进模式Fast-forward 7.删除分支 8.强制删除分支 本篇开始介绍下Git提供的杀手级的功能&#xff1a;分支管理 先提交再合并 前言 在玄幻武侠…

Linux——文件目录指令、时间日期指令、搜索查找指令、压缩解压指令

目录 文件目录指令 pwd & ls 查看当前工作目录&显示当前目录所有文件及目录 cd 切换目录 mkdir & rmdir 创建&删除目录 touch 创建空文件 cp 拷贝文件/文件夹指令 rm 删除文件或文件夹 mv 移动或重命名文件 cat 查看文件 more指令 less 查看文件内容…

[激光原理与应用-115]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 19 - 主要硬件的介绍、安装与调试

目录 一、概述 1.1 前言 1.2 系统组成 1.2.1 机柜版&#xff1a; 1.2.2 非机柜版 1.3适用范围 1.4 工作条件 1.5 安全说明 1.6 装箱清单 二、硬件安装 2.1 光学传感器安装 2.1.1 转接件安装 2.1.2 光路校准模块的安装与光路校准 2.1.3 光学传感器的安装 2.2 通…

【学习笔记】min_25筛

背景 GDCPC2024 出题人&#xff1a;出这道 min25 筛是给大家增加过题数的 [呲牙][大哭][呲牙][大哭] min25筛是干啥的 快速求一个积性函数 F ( x ) F(x) F(x) 的前缀和 这个 F ( x ) F(x) F(x) 需要满足&#xff1a; F ( p ) ∑ i 0 a i p i F(p)\sum_{i0}a_ip^i F(p)∑…

Qt各个版本安装的保姆级教程

文章目录 前言Qt简介下载Qt安装包安装Qt找到Qt的快捷方式总结 前言 Qt是一款跨平台的C图形用户界面应用程序开发框架&#xff0c;广泛应用于桌面软件、嵌入式软件、移动应用等领域。Qt的强大之处在于其高度的模块化和丰富的工具集&#xff0c;可以帮助开发者快速、高效地构建出…

C++: 位图和布隆过滤器

目录 一、位图 1.1 概念 1.2 应用 1.3 模拟实现 1.31 把比特位上的值设置为1 1.32 把比特位上的值设置为0 1.33 检测比特位上的值是否是1 1.34 代码 二、布隆过滤器 2.1 概念 2.2 优点 2.3 缺点 2.4模拟实现 一、位图 1.1 概念 运用哈希的思想&#xff0c;将整型…

【前端数据层高可用架构】

前端数据层高可用架构 前后端架构模式如下图 在这个架构下,客端数据可用率计算方式: 因此整体数据可用性分析表如下: 只有在客端和 BFF 都正常的情况下数据才能可用,而这种情况占比不是很高,因此整体的用户体验就不是很好。 本次建设目标 本文的设计方案就是要解决…

Python Linux环境(Centos8)安装minicoda3+jupyterlab

文章目录 安装miniconda安装python环境启动 最近服务器检查&#xff0c;我下面的服务器有漏洞&#xff0c;不得已重装了&#xff0c;正好记录下怎么从零到python写代码。 安装miniconda miniconda是anconda的精简版&#xff0c;就是管理python环境的得力助手。 # 创建一个名…

C语言 do while循环语句练习 下

猜数字游戏实现 //猜数字游戏 //电脑产生 一个随机数&#xff08;1-100) //猜数字 //猜大了 //猜小了 //直到猜对了&#xff0c;结束 #include <stdlib.h> #include <time.h> void menu() {printf("********************************\n");printf("…

【Redis7】高阶篇

1 Redis单线程 VS 多线程(入门篇) 1.1 面试题 redis到底是单线程还是多线程&#xff1f; IO多路复用听说过吗&#xff1f; redis为什么快&#xff1f; 1.2 Redis为什么选择单线程&#xff1f; 1.2.1 是什么 这种问法其实并不严谨&#xff0c;为啥这么说呢? Redis的版本…

怎么将图片插入excel单元格中

首先选中单元格选择插入 在图片位置选择插入图片的位置 然后就插入成功了&#xff0c;一开始会觉得图片是附在表格上面的&#xff0c;并不在单元格里面&#xff0c;但是右边有一个小图片的图标&#xff0c;点击它可以缩小到单元格里面&#xff0c;再点击就是放大&#xff1b;

【无人值守】对数据中心电力分配系统发展的影响

数据中心在现代信息发展中承载着巨量数据的计算、存储、挖掘、分析和应用等多个方面的功能&#xff0c;是国计民生各行业的多样化的信息化的资产。对稳定的运行与安全运维是基本需求也是重要的保障。 数据中心属于高能耗产业&#xff0c;对用电负荷大且要求极度稳定。除了对电力…

ROS、pix4、gazebo、qgc仿真ubuntu20.04

一、ubuntu、ros安装教程比较多&#xff0c;此文章不做详细讲解。该文章基于ubuntu20.04系统。 pix4参考地址&#xff1a;https://docs.px4.io/main/zh/index.html 二、安装pix4 1. git clone https://github.com/PX4/PX4-Autopilot.git --recursive 2. bash ./PX4-Autopilot…

华为od 100问 持续分享4-目标院校及分数线

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…

TikTok账号矩阵运营怎么做?

这几年&#xff0c;聊到出海避不过海外抖音&#xff0c;也就是TikTok&#xff0c;聊到TikTok电商直播就离不开账号矩阵&#xff1b; 在TikTok上&#xff0c;矩阵养号已经成为了出海电商人的流行策略&#xff0c;归根结底还是因为矩阵养号可以用最小的力&#xff0c;获得更大的…