Spring Boot1(概要 入门 Spring Boot 核心配置 YAML JSR303数据校验 )
目录
一、Spring Boot概要
1. SpringBoot优点
2. SpringBoot缺点
二、Spring Boot入门开发
1. 第一个SpringBoot项目
项目创建方式一:使用 IDEA 直接创建项目
项目创建方式二:使用Spring Initializr 的 Web页面创建项目 (了解)
项目创建方式三:使用 IDEA 直接创建项目(了解)
项目创建方式四:使用 IDEA 创建Maven项目并改造为springBoot(了解)
2. 项目打jar包
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配置类
手工制作
无
控制器
手工制作
手工制作
总结
- 开发SpringBoot程序可以根据向导进行联网快速制作
- SpringBoot程序需要基于JDK8以上版本进行制作
- SpringBoot程序中需要使用何种功能通过勾选选择技术,也可以手工添加对应的要使用的技术
- 运行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测试一下是否能用了。
总结
- 打开SpringBoot官网,选择Quickstart Your Project
- 创建工程,并保存项目
- 解压项目,通过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
相关文章:
Spring Boot1(概要 入门 Spring Boot 核心配置 YAML JSR303数据校验 )
目录 一、Spring Boot概要 1. SpringBoot优点 2. SpringBoot缺点 二、Spring Boot入门开发 1. 第一个SpringBoot项目 项目创建方式一:使用 IDEA 直接创建项目 项目创建方式二:使用Spring Initializr 的 Web页面创建项目 (了解&#…...
电脑屏幕录制怎么弄?分享3个简单的电脑录屏方法
在信息爆炸的时代,屏幕上的每一个画面都可能成为我们生活中不可或缺的记忆。作为一名年轻男性,我对于录屏软件的需求可以说是既挑剔又实际。今天,我就为大家分享一下我近期体验的三款录屏软件:福昕录屏大师、转转大师录屏大师和OB…...
idea双击没有反应,打不开
问题描述 Error opening zip file or JAR manifest missing : /home/IntelliJ-IDEA/bin/jetbrains-agent.jar解决方案...
关于UniApp使用的个人笔记
UniApp 开发者中心 用于注册应用以及申请对应证书 https://dev.dcloud.net.cn/pages/app/list https://blog.csdn.net/fred_kang/article/details/124988303 下载证书后,获取SHA1关键cmd keytool -list -v -keystore test.keystore Enter keystore password…...
autoware.universe源码略读(3.16)--perception:object_range_splitter
autoware.universe源码略读3.16--perception:object_range_splitter Overviewnode(Class Constructor)ObjectRangeSplitterNode::ObjectRangeSplitterNode(mFunc)ObjectRangeSplitterNode::objectCallback Overview 这里处理的依…...
深度学习落地实战:人脸五官定位检测
前言 大家好,我是机长 本专栏将持续收集整理市场上深度学习的相关项目,旨在为准备从事深度学习工作或相关科研活动的伙伴,储备、提升更多的实际开发经验,每个项目实例都可作为实际开发项目写入简历,且都附带完整的代码与数据集。可通过百度云盘进行获取,实现开箱即用 …...
270-VC709E 基于FMC接口的Virtex7 XC7VX690T PCIeX8 接口卡
一、板卡概述 本板卡基于Xilinx公司的FPGA XC7VX690T-FFG1761 芯片,支持PCIeX8、两组 64bit DDR3容量8GByte,HPC的FMC连接器,板卡支持各种FMC子卡扩展。软件支持windows,Linux操作系统。 二、功能和技术指标: 板卡功…...
【go】Excelize处理excel表 带合并单元格、自动换行与固定列宽的文件导出
文章目录 1 简介2 相关需求与实现2.1 导出带单元格合并的excel文件2.2 导出增加自动换行和固定列宽的excel文件 1 简介 之前整理过使用Excelize导出原始excel文件与增加数据校验的excel导出。【go】Excelize处理excel表 带数据校验的文件导出 本文整理使用Excelize导出带单元…...
uniapp自定义tabBar
uniapp自定义tabBar 1、在登录页中获取该用户所有的权限 getAppFrontMenu().then(res>{if(res.length > 0){// 把所有权限存入缓存中let firstPath res.reverse()[0].path;uni.setStorageSync(qx_data, res);uni.switchTab({url: firstPath,})// 方法二 通过uni.setTabB…...
IDEA2023版本创建JavaWeb项目及配置Tomcat详细步骤!
一、创建JavaWeb项目 第一步 之前的版本能够在创建时直接选成Web项目,但是2023版本在创建项目时没有该选项,需要在创建项目之后才能配置,首先先创建一个项目。 第二步 在创建好的项目中选中项目后(一定要注意选中项目名称然后继…...
WPF中MVVM常用的框架
在WPF开发中,MVVM(Model-View-ViewModel)是一种广泛使用的设计模式,它有助于分离应用程序的用户界面(View)、业务逻辑(Model)和数据表现层(ViewModel)。以下是…...
Mysql----内置函数
前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、日期函数 日期:年月日 时间:时分秒 查询:当前时间,只显示当前日期 注意:如果类型为date或者datetime。表中数据类型为date,你插入时…...
去除重复字母
题目链接 去除重复字母 题目描述 注意点 s 由小写英文字母组成1 < s.length < 10^4需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置) 解答思路 本题与移掉 K 位数字类似,需要注意的是,并不是每个字母都能…...
Xcode进行真机测试时总是断连,如何解决?
嗨。大家好,我是兰若姐姐。最近我在用真机进行app自动化测试的时候,经常会遇到xcode和手机断连,每次断连之后需要重新连接,每次断开都会出现以下截图的报错 当这种情况出现时,之前执行的用例就相当于白执行了ÿ…...
Redis的使用(五)常见使用场景-分布式锁实现原理
1.绪论 为了解决并发问题,我们可以通过加锁的方式来保证数据的一致性,比如java中的synchronize关键字或者ReentrantLock,但是他们只能在同一jvm进程上加锁。现在的项目基本上都是分布式系统,如何对多个java实例进行加锁ÿ…...
AppML 案例:Products
AppML 案例:Products AppML(Application Markup Language)是一种创新的、基于XML的标记语言,旨在简化Web应用程序的开发。它允许开发者通过声明性的方式定义应用程序的界面和数据绑定,从而提高开发效率和减少代码量。…...
数据库端口LookUp功能:从数据库中获取并添加数据到XML
本文将为大家介绍如何使用知行之桥EDI系统数据库端口的Lookup功能,从数据库中获取数据,并添加进输入的XML中。 使用场景:期待以输入xml中的值为判断条件从数据库中获取数据,并添加进输入xml中。 例如:接收到包含采购…...
视频联网共享平台LntonCVS视频监控汇聚平台视频云解决方案
LntonCVS流媒体平台是一款遵循国家GB28181标准协议的先进视频监控与云服务平台。该平台设计独特,能够同时接入并处理多路设备的视频流,支持包括RTSP、RTMP、FLV、HLS、WebRTC在内的多种视频流格式的分发。其功能丰富多样,涵盖了视频直播监控、…...
深入探索Python中的`__slots__`类属性:优化内存与限制灵活性
深入探索Python中的__slots__类属性:优化内存与限制灵活性 在Python编程的广阔领域中,性能优化总是开发者们关注的焦点之一。特别是在处理大量对象或资源受限的环境中,减少内存占用和提高访问速度显得尤为重要。Python的__slots__类属性正是…...
llama 2 改进之 RMSNorm
RMSNorm 论文:https://openreview.net/pdf?idSygkZ3MTJE Github:https://github.com/bzhangGo/rmsnorm?tabreadme-ov-file 论文假设LayerNorm中的重新居中不变性是可有可无的,并提出了均方根层归一化(RMSNorm)。RMSNorm根据均方根(RMS)将…...
Matlab【光伏预测】基于雪融优化算法SAO优化高斯过程回归GPR实现光伏多输入单输出预测附代码
% 光伏预测 - 基于SAO优化的GPR % 数据准备 % 假设有多个输入特征 X1, X2, …, Xn 和一个目标变量 Y % 假设数据已经存储在 X 和 Y 中,每个变量为矩阵,每行表示一个样本,每列表示一个特征 % 参数设置 numFeatures size(X, 2); % 输入特征的…...
ES6 模块
ES6 模块学习记录 ES6(ECMAScript 2015)模块是JavaScript官方的标准模块系统。它允许开发者以模块化的方式编写代码,模块可以在不同的文件之间进行组织和重用。 基本特征 默认导出(Default Exports):每个…...
谷粒商城-全文检索-ElasticSearch
1.简介 一个分布式的开源搜索和分析引擎,可以 秒 级的从海量数据中检索 主要功能:做数据的检索和分析(MySQL专攻于数据的持久化存储与管理CRUD达到百万以上的数据MSQL就会很慢,海量数据的检索和分析还是要用ElasticSearch) 用途:我们电商项目里的所有的检索功能都是由Elasti…...
Java的LinkedHashMap 源码解析
LinkedHashMap 是 Java 中的一种有序 Map,它扩展了 HashMap,提供了有序的元素存储方式。在 LinkedHashMap 中,元素的有序性可以按照插入顺序或访问顺序来维护,而这个有序性是通过维护一个双向链表来实现的,这也是实现 …...
Linux系统及常用指令
目录 1、什么是Linux系统 2、为什么要用Linux系统 3、Linux系统的种类 4、如何安装Linux系统 5、常见的适配器种类 6、学习第一个Linux指令 7、安装ssh客户端软件 8、Linux系统的目录结构 9、Linux的常用命令 9.1 目录切换命令 9.2 查看目录下的内容 9.3 查看当前…...
Mac Electron 应用如何进行签名(signature)和公证(notarization)?
最近很多客户反映,从官网下载的Mac Electron应用打不开,直接报病毒,类似于这种: 这是因为在MacOS 10.14.5之后,如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核,来判断是否存…...
【C++ | 抽象类】纯虚函数 和 抽象基类,为什么需要抽象基类
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
DP(7) | 打家劫舍① | Java | LeetCode 198, 213, 337 做题总结(未完)
打家劫舍问题 来源于代码随想录:https://programmercarl.com/0198.%E6%89%93%E5%AE%B6%E5%8A%AB%E8%88%8D.html#%E6%80%9D%E8%B7%AF ① 确定dp数组(dp table)以及下标的含义 dp[i]:考虑下标i(包括i)以内的房…...
人工智能算法工程师(中级)课程17-模型的量化与部署之剪枝技巧与代码详解
大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程17-模型的量化与部署之剪枝技巧与代码详解。模型剪枝是深度学习领域中一项关键的技术,旨在减少神经网络中的冗余权重,从而降低计算成本和内存占用,同…...
JavaScript 实例:掌握编程技巧
JavaScript 实例:掌握编程技巧 JavaScript 是一种广泛使用的编程语言,它为网页添加交互性,是现代网络开发的重要组成部分。本文将通过一系列实例,帮助您更好地理解和掌握 JavaScript 的核心概念和编程技巧。 基础实例:变量和数据类型 首先,让我们从最基础的开始。Java…...
dz网站建设器/收录优美图片找不到了
1.1题目:变态跳台阶:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 1.2解题思路: 当n1时,结果为1;当n2时,结果为2;…...
网站动效是代码做的吗/上海网络seo公司
文章来源:深入理解多线程(二)—— Java的对象模型原文作者:Hollis来源平台:微信公众号上一篇文章中简单介绍过synchronized关键字的方式,其中,同步代码块使用monitorenter和monitorexit两个指令…...
网站开发中效率较高的编程语言/营销型网站推广
1. 图的表示有几种方法: 一是使用邻接矩阵(其实就是二维数组)表示,二是使用邻接表来表示 ,三是使用边集来表示 下面使用邻接表来表示 2. 首先定义一个图的节点,其中包含几个属性,包含图节点…...
专业做网站哪里好/自媒体服务平台
#pragma acc kernels: 1、kernels构件将需要进行并行化的区域,编译成一系列可以在设备上运行的CUDA kernel,这也是为什么起名叫“kernels”的原因吧。 2、kernels区域结束时,会有一个隐式的同步障碍,线程到此等待&am…...
dedecms做网站全教程/开发定制软件公司
~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 【2023王道数据结构目录】课后算法设计题C、C++代码实现完整版大全 题目: 若希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分队头指针front和队尾指针rea…...
全国公共资源交易中心官网/seo专业课程
本文实例讲述了Python实现多条件筛选目标数据功能。分享给大家供大家参考,具体如下: python中提供了一些数据过滤功能,可以使用内建函数,也可以使用循环语句来判断,或者使用pandas库,当然在有些情况下使用p…...