初始SpringBoot
初始SpringBoot
- 1. SpringBoot创建和运行
- 1.1. SpringBoot的概念
- 1.2. SpringBoot的优点
- 1.3. SpringBoot的创建
- 1.3.0. 前置工作:安装插件(这是社区版需要做的工作, 专业版可以忽略)
- 1.3.1. 社区版创建方式
- 1.3.2. 专业版创建方式
- 1.3.3. 网页版创建方式
- 1.4. 项目目录介绍
- 1.5. SpringBoot项目的运行
- 1.6. 网页输出 Hello World
- 2. SpringBoot的配置文件
- 2.1. 配置文件的作用
- 2.2. 配置文件的格式
- 2.2.1. 关于 .properties文件
- 2.2.2. 关于 .yml文件
- 2.2.2.1. .yml属于新版本的配置文件. 是ymal的缩写
- 2.2.2.2. .yml文件的优势
- 2.2.2.3. yml基本语法
- 2.2.2.4. yml配置读取
- 2.2.2.4. yml进阶使用
- 1. yml 配置不同数据类型及 null
- 2. yml中value值添加单双引号的区别
- 3. 配置对象
- 4. 配置集合
- 3. SpringBoot的日志文件
- 3.1. 日志使用
- 3.2. 日志级别
- 3.3. 日志持久化
- 3.4. 更简单的日志输出 -- lombok
- 3.4.1. 添加lombok依赖
- 3.4.2. 使用 @slf4j 注解代替输出日志
- 4. lombok的更多注解说明
1. SpringBoot创建和运行
1.1. SpringBoot的概念
SpringBoot称为Spring的脚手架(脚手架就是盖房子的框架).
Spring是为了简化Java程序的开发诞生的, 而SpringBoot是为了简化Spring程序开发诞生的.所以称为Spring的框架.
1.2. SpringBoot的优点
- 快速集成框架
- Spring Boot 提供了启动添加依赖的功能,用于秒级集成各种框架
- 内置运行容器
- 无需配置 Tomcat 等 Web 容器,直接运行和部署程序
- 快速部署项目
- 无需外部容器即可启动并运行项目
- 抛弃Spring中繁琐的XML方式
- 使用注解和配置的方式进行开发
- 支持更多的监控的指标
- 可以更好的了解项目的运行情况
1.3. SpringBoot的创建
这里有三种创建方式, 专业版idea中自带方式, 和 社区版安装插件后的方式. 第三种方式, 就是在官网下载项目的压缩包.然后解压到自己选择的位置, 再用idea打开即可.(其实三种方式大同小异, 知道一种也可以很快的熟悉另外两种方式)

1.3.0. 前置工作:安装插件(这是社区版需要做的工作, 专业版可以忽略)
- 选择Settings进入设置页面

- 选择 Plugins --> Makelplace, 在搜索框中搜索插件名称 spring assistant. 选择插件点击 Install 即可

1.3.1. 社区版创建方式
-
为了不体现对待专业版特殊化, 我们先讲解社区版插件的方式
-
先选择New Project 进入到创建新项目的页面, 点击插件的模块
-
然后 选择自己对应的JDK 和 依赖源, 依赖源一般有默认值,可以不填写, 如果需要用国内稳定源, 可以在Custom中配置

- 填写相关的内容, 一般练习中需要更改的也就是 项目类型, Java版本 和 项目名称. 更改好以后, 继续点击Next

- 选择对应的SpringBoot的版本, 添加所需要的依赖.就可以点击Next了

- 这里需要注意地是 3的大版本要求JDK 最低版本为JDK17, 所以创建时对于版本的选择要谨慎, 选择合适的版本即可, 并不是版本越高越好.
- 填写项目名称, 并选择位置, 就可以点击Finish创建项目了

- 如果提醒没有这个文件夹, 选择Create创建就可以了

- 需要注意, 第一次打开Spring Boot项目需要加载很久, 因为当前SpringBoot框架没有在自己的本地仓库, 需要从网上拉取. 所以我们需要耐心等待
- 如图就说明加载完成了. 到这里 我们的项目也就创建成功了

1.3.2. 专业版创建方式
-
同样先选择New Project 进入到创建页面, 然后选择Spring Initializr框
-
填写相关内容, 如果需要更改拉取的源地址, 可以在上面更改. 填写好以后就可以点击Next

- 选择对应版本以及选择要添加的具体依赖. 点击Finish就开始创建了

- 耐心等待一会, 项目就加载好了

我们观察后, 不难发现, 两种创建方式创建出来的项目是没有什么差别的, 所以以后我们使用哪种方式都是可以的.
1.3.3. 网页版创建方式
-
首先访问官网地址: https://start.spring.io/
-
访问之后填写和更改具体内容, 选择要添加的依赖(内容和idea创建类似)

- 下载好以后解压出来, 用idea打开即可
1.4. 项目目录介绍
SpringBoot项目有两个主要的目录
- Java源代码目录
- 静态资源和配置文件的目录
具体细节如图:

1.5. SpringBoot项目的运行
- 打开运行类, 点击三角号即可运行(右上角的三角号同样功能)

启动类代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class ShowSpringbootUltimateApplication {public static void main(String[] args) {SpringApplication.run(ShowSpringbootUltimateApplication.class, args);}}
- 运行起来, 且等待一会项目没有报错, 就说明项目运行成功

1.6. 网页输出 Hello World
- 在启动类同包下创建一个包,包下新建一个类

- 直接输入 规范代码(包名全小写, 类名首字母大写). 图中格式会创建一个包, 包下创建一个类

- 图中为上图创建好后的目录格式. 包和启动类是同级别

- 在UserController中编写代码, 编写好以后重新启动项目

代码如下:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/sayhello")public String sayHi() {return "Hello World!";}
}
- 访问页面得到数据, 输出 Hello World 成功

注意事项: 约定大于配置!!! 上述编写代码, 运行成功是因为. 我们遵守了 项目要求的目录格式, 如果我们将controller没有建在启动类的包下, 就会出现错误.(SpringBoot 没有将对象注入到容器中). 因为默认情况下, 启动类只会注入自己同级别的包下的内容.所以要记住 约定大于配置.要遵守约定好的目录格式.
2. SpringBoot的配置文件
2.1. 配置文件的作用
整个项目中所有重要的数据都是在配置文件中配置的
- 数据库的连接信息
- 项目的启动端口
- 第三方系统的调用密钥
- 用于发现和定位问题的日志
- 等等
可见配置文件还是很重要的.
2.2. 配置文件的格式
一般有两种格式 .properties文件 和 .yml文件, 并且这两种格式的配置文件是可以共存的

2.2.1. 关于 .properties文件
-
属于老版本的配置文件, 是创建SpringBoot项目默认的配置文件
-
基本语法
- 按照键值形式配置的, key和value之间是以 “=” 连接的
- 示例
- 配置端口号: server.port=8031
- 注意: 周围不能有空格,包括"="周围
-
读取配置文件
- 使用 @Value 注解读取 @Value(“${server.port}”)的格式读取. 编写代码, 并重启项目

代码如下:
# .properties文件
server.port=8031
// .java文件
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;@RestController
@RequestMapping("/user")
public class UserController {@Value("${server.port}")private String port;@RequestMapping("/readport")public String readPort() {return "port: " + port;}@RequestMapping("/sayhello")public String sayHi() {return "Hello World!";}
}
重启项目, 访问页面观察结果

- .properties文件 缺点分析
以配置数据库为例, 可以观察出来很明显的缺点就是会有很多冗余信息

yml格式的配置文件就不会出现这样的冗余信息
2.2.2. 关于 .yml文件
2.2.2.1. .yml属于新版本的配置文件. 是ymal的缩写
2.2.2.2. .yml文件的优势
- yml的可读性高, 易于理解.并且它的语法和其他高级语言类似, 并且可以简单表达数组, 散列表, 标量等数据形态
- yml 最大的优势是可以跨语言, 不止是 Java 中可以使用. golang, python 都可以使用 yaml 作为配置文件
2.2.2.3. yml基本语法
基本语法: key: value
示例: key: value :和value中间必须有空格

使用yml连接数据库示例

代码如下:
# 演示yml配置数据库
spring:datasource:url: mysql://localhost:3306/fhs?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&nullCatalogMeansCurrent=trueusername: rootpassword: 123456
2.2.2.4. yml配置读取
- yml读取配置的方式 和properties的读取方式相同
- 使用注解 @Value
- @Value(“${string.hello}”)
2.2.2.4. yml进阶使用
1. yml 配置不同数据类型及 null

yml代码
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # 二进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null, ~代表null
null.value: ~
2. yml中value值添加单双引号的区别
- 字符串默认不用加上单引号或者双引号
- 单引号会转义特殊字符, 特殊字符最终只是⼀个普通的字符串数据(填写的什么就是什么)
- 双引号不会转义字符串里面的特殊字符; 特殊字符会作为本身想表示的意思存在.(比如 \n 就是 换行)

application.yml代码
string:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."
UserController.java代码
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;@RestController
@RequestMapping("/user")
public class UserController {@Value("${string.str1}")private String str1;@Value("${string.str2}")private String str2;@Value("${string.str3}")private String str3;//初始化调用@PostConstructpublic void postConstruct() {System.out.println("string.str1:" + str1);System.out.println("string.str2:" + str2);System.out.println("string.str3:" + str3);}
}
补充: 关于@PostConstruct 注解
a. 类初始化时调用的方法放在这里的原因是因为希望在项目启动时观察到方法输出, 并且这个注解又需要等待 属性注入, 否则无意义b. 类初始化时调用的顺序1. 构造方法 Constructor2. @Autowired3. @PostConstruct
3. 配置对象
配置: 首先在配置文件中配置对象, 有两种配置写法 普通写法和行内写法,两种同等效益

application.yml代码
# 配置对象
student:id: 1name: Javaage: 18# 行内写法
student2: { id: 1,name: Java,age: 18 }
获取: 编写对象类, 获取配置信息并观察.
右键show_springboot_ultimate包选择New–>Java Class

在运行类同级目录下创建一个子包和一个对象类

编写对象类并获取配置内容. 这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解 @ConfigurationProperties来读取

StudentComponent.java代码
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@ConfigurationProperties(prefix = "student")
@Component
public class StudentComponent {private int id;private String name;private int age;public 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 int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "StudentComponent{" +"id=" + id +", name='" + name + ''' +", age=" + age +'}';}
}
编写代码, 并重启项目. 观察Student对象配置信息获取情况. 可以观察到,成功获取信息.

ReadYml.java代码
import com.example.show_springboot_ultimate.model.StudentComponent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;@Component
public class ReadYml {@Autowiredprivate StudentComponent studentComponent;@PostConstructpublic void postConstruct() {System.out.println(studentComponent);}
}
4. 配置集合
配置: 和配置对象类似, 有两种书写方式 普通写法和行内写法

application.yml代码
# 配置集合
dbtypes:name:- mysql- sqlserver- db2# 行内写法
dbtypes2: { name: [ mysql,sqlserver,db2 ] }
获取: 同样编写有集合属性的类来观察, 先在model包下New一个类

创建拥有集合属性的类来接收获取的配置文件的信息

编写代码并获取配置信息. 集合的读取和对象⼀样,也是使用 @ConfigurationProperties 注解来读取的

ListConfig.java代码
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.List;@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {private List<String> name;
}
编写代码, 并重启项目. 观察集合配置信息获取情况. 可以观察到,成功获取信息.

ReadYmlList.java代码
import com.example.show_springboot_ultimate.model.ListConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;@Component
public class ReadYmlList {@Autowiredprivate ListConfig listConfig;@PostConstructpublic void postConstruct() {System.out.println(listConfig.getName());}
}
3. SpringBoot的日志文件
3.1. 日志使用
- 首先在程序中获取日志对象

- 使用日志打印

UserController.java代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;/*** @author Echo* @version 1.0* date 2023/3/24 16:15* name UserController* @deprecated exercises:* 类初始化调用顺序* (1)构造方法Constructor* (2)@Autowired* (3)@PostConstruct*/
@RestController
@RequestMapping("/user")
public class UserController {//首先获取日志对象//不要导错包了.//import org.slf4j.Logger;//import org.slf4j.LoggerFactory;private static Logger logger = LoggerFactory.getLogger(UserController.class);@Value("${server.port}")private String port;@Value("${string.str1}")private String str1;@Value("${string.str2}")private String str2;@Value("${string.str3}")private String str3;//初始化调用@PostConstructpublic void postConstruct() {logger.info("这是初始化方法的日志打印");System.out.println("string.str1:" + str1);System.out.println("string.str2:" + str2);System.out.println("string.str3:" + str3);}@RequestMapping("/readport")public String readPort() {//日志打印logger.info("这是返回获取配置文件中端口方法的日志打印");return "port: " + port;}@RequestMapping("/sayhello")public String sayHi() {//日志打印logger.info("这是访问方法时的日志打印");return "Hello World!";}
}
- 访问并观察


- 日志格式说明

日志格式: 日志打印时间 + 日志打印级别 + 线程ID + 线程名称 + 执行的类名 + 日志输出信息
3.2. 日志级别
-
日志级别分类
- trace: 微量, 少许的意思, 级别最低
- info: 普通的打印信息
- debug: 需要调试时候的关键信息打印
- warn: 警告, 不影响使用, 但需要注意的问题
- error: 错误信息, 级别较高的错误日志信息
- fatal: 致命的, 因为代码异常导致程序退出执行的事件
-
日志级别的顺序

越往上 , 接收到的消息越少(下打印的信息包含上的信息)
- 日志级别的配置

application.yml代码
# 配置日志打印等级
logging:level:root: trace
UserController.java代码
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;
@RestController
@RequestMapping("/user")
public class UserController {//首先获取日志对象//不要导错包了.//import org.slf4j.Logger;//import org.slf4j.LoggerFactory;private static Logger logger = LoggerFactory.getLogger(UserController.class);@Value("${string.str1}")private String str1;@Value("${string.str2}")private String str2;@Value("${string.str3}")private String str3;//初始化调用@PostConstructpublic void postConstruct() {//不同等级日志打印logger.trace("这是初始化方法的日志打印");logger.debug("这是初始化方法的日志打印");logger.info("这是初始化方法的日志打印");logger.warn("这是初始化方法的日志打印");logger.error("这是初始化方法的日志打印");// fatal等级日志, 由于程序已经退出, 所以也就不会有打印了System.out.println("string.str1:" + str1);System.out.println("string.str2:" + str2);System.out.println("string.str3:" + str3);}
}
- 观察不同等级日志打印

3.3. 日志持久化
- 在配置文件中设置日志文件保存的目录即可自动保存日志.

application.yml代码
# 配置日志打印等级 + # 设置日志文件的目录
logging:file:path: D:\home\ruoyi # 日志文件保存位置level:root: trace
设置文件保存的名称(名称里就可以包含了文件的目录, 所以目录配置就可以省略)

application.yml代码
# 配置日志打印等级 + # 设置日志文件保存的名称 + # 设置日志文件的目录
logging:file:# path: D:\home\ruoyi # 日志文件保存位置name: D:\home\ruoyi\spring-1204.log # 日志文件保存名称(内涵日志位置)level:root: trace
3.4. 更简单的日志输出 – lombok
3.4.1. 添加lombok依赖

依赖地址: https://mvnrepository.com/artifact/org.projectlombok/lombok/1.18.20
依赖内容:
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><scope>provided</scope>
</dependency>
3.4.2. 使用 @slf4j 注解代替输出日志
使用注解代替一行代码, 节省工作量(毕竟程序员很累的)

UserService.java代码
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** 使用更简便的得到日志的方法:注解*/
//@Service 设置为它无法直接访问路由
@Controller//此处没有它就无法访问路由
@ResponseBody
//此处方法没有返回任何信息,没有它就会返回500页面(因为方法无返回内容)
@Slf4j//代替了获取日志对象 (默认名称为log)
public class UserService {//得到日志对象 注解代替了下面的代码
// private static final Logger log = LoggerFactory.getLogger(UserService.class);@RequestMapping("/sayhello")public void sayhello(){//名称同样为 loglog.trace("我是sayhello trace");log.debug("我是sayhello debug");log.info("我是sayhello info");log.warn("我是sayhello warn");log.error("我是sayhello error");}
}
4. lombok的更多注解说明
| 基本注解 | 作⽤ |
|---|---|
| @Getter | ⾃动添加 getter ⽅法 |
| @Setter | ⾃动添加 setter ⽅法 |
| @ToString | ⾃动添加 toString ⽅法 |
| @EqualsAndHashCode | ⾃动添加 equals 和 hashCode ⽅法 |
| @NoArgsConstructor | ⾃动添加⽆参构造⽅法 |
| @AllArgsConstructor | ⾃动添加全属性构造⽅法, 顺序按照属性的定义顺序 |
| @NonNull | 属性不能为 null |
| @RequiredArgsConstructor | ⾃动添加必需属性的构造⽅法, final + @NonNull 的 属性为必需 |
| @Data | @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor |
| @Slf4j | 添加⼀个名为 log 的⽇志, 使⽤ slf4j |
相关文章:
初始SpringBoot
初始SpringBoot1. SpringBoot创建和运行1.1. SpringBoot的概念1.2. SpringBoot的优点1.3. SpringBoot的创建1.3.0. 前置工作:安装插件(这是社区版需要做的工作, 专业版可以忽略)1.3.1. 社区版创建方式1.3.2. 专业版创建方式1.3.3. 网页版创建方式1.4. 项目目录介绍1.5. SpringB…...
vue+springboot 上传文件、图片、视频,回显到前端。
效果图 预览: 视频: 设计逻辑 数据库表 前端vue html <div class"right-pannel"><div class"data-box"><!--上传的作业--><div style"display: block" id""><div class"tit…...
java入门-W3(K81-K143)
一. 什么是对象 什么是对象?之前我们讲过,对象就是计算机中的虚拟物体。例如 System.out,System.in 等等。然而,要开发自己的应用程序,只有这些现成的对象还远远不够。需要我们自己来创建新的对象。 例如,…...
English Learning - L2 语音作业打卡 复习元音 [ɜː] [æ] 辅元连读技巧 Day42 2023.4.3 周一
English Learning - L2 语音作业打卡 复习元音 [ɜː] [] 辅元连读技巧 Day42 2023.4.3 周一💌发音小贴士:💌当日目标音发音规则/技巧:中元音 [ɜː]前元音 []辅元连读技巧🍭 Part 1【热身练习】🍭 Part2【练习内容】&…...
Thinkphp 6.0图像处理功能
本节课我们来学习一下图像处理功能,这功能是外置的,并非系统内置。 一.图像处理功能 1. 图像处理功能不是系统内置的功能了,需要通过 composer 引入进来; composer require topthink/think-image 2. 引入进来之后&…...
表格软件界的卷王,Excel、access、foxpro全靠边,WPS:真荣幸
Excel和Access就是表格软件的选择? 现在,铺天盖地的Excel的技能教程可谓是满天飞,有网上的教程,也有视频直播课程。 很多办公人员用Excel这种表格软件与VBA结合,甚至用不遗余力去学习Python编程语法,但Exce…...
Node.js -- http模块
1. 什么是http模块 在网络节点中,负责消费资源的电脑,叫客户端;负责对外提供网络资源的电脑,叫做服务器。 http模块是Node.js官方提供的,用来创建web服务器的模块。通过http模块提供的http.createServer()方法&#…...
静态库与动态库
库是已经写好的、成熟的、可复用的代码。在我们的开发的应用中经常有一些公共代码是需要反复使用的,就把这些代码编译为库文件。库可以简单看成一组目标文件的集合,将这些目标文件经过压缩打包之后形成的一个可执行代码的二进制文件。库有两种࿱…...
问题 A: C语言11.1
题目描述: 完成一个对候选人得票的统计程序。假设有3个候选人,名字分别为Li,Zhang和Fun。使用结构体存储每一个候选人的名字和得票数。记录每一张选票的得票人名,输出每个候选人最终的得票数。结构体可以定义成如下的格式&#x…...
SLAM中后端优化的技术细节总结与回答
SLAM中后端优化的技术细节 本文档主要收集总结了一些SLAM大佬们讲解后端优化中偏理论的技术细节的博客和回答以及一些学习教材。 Written by wincent 位姿估计以及李群相关的概述 Lie theory is by no means simple ———— 谎言理论绝不简单doge 《A micro Lie theory for st…...
小白快速学习Markdown
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…...
ToBeWritten之物联网WI-FI协议
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…...
C++模板元编程深度解析:探索编译时计算的神奇之旅
C模板元编程深度解析:探索编译时计算的神奇之旅引言C模板元编程的概念与作用模板元编程在现代C编程中的应用模板元编程基础类型萃取(Type Traits)编译时条件(静态if)模板元编程中的递归与终止条件模板元编程技巧与工具…...
姿态变换及坐标变换
目录0. 空见间变换&基变换0.0 空间变换0.1 基变换1.缩放、旋转、平移机器人齐次变换坐标系变换0. 空见间变换&基变换 这是矩阵分析的相关知识,有兴趣的参考第一篇知乎文章[1]. 0.0 空间变换 空间变换是指在同一组绝对基下的变换,可以想象为世…...
从命令行管理文件
目录标题文件命名规则创建、删除普通文件创建普通文件格式创建多个普通文件删除普通文件目录操作命令创建目录--mkdir命令统计目录及文件的空间占用情况--du命令删除目录文件复制、移动文件复制(copy)文件或目录--cp命令移动(mv)文…...
电脑无法正常关机?点了关机又会自动重启
“真木马”相信不少朋友遇到过电脑关机自动重启现象,一点关机,但随后电脑有会进入重启状态,就是一直不会停,属实是很难崩。 目录 一、问题症状 二、问题原因 三、解决方案 方法一: 1.关闭系统发生错误时电脑自动…...
English Learning - L2 语音作业打卡 复习双元音 [eɪ] [aɪ] r 谦让型爆破技巧 Day46 2023.4.7 周五
English Learning - L2 语音作业打卡 复习双元音 [eɪ] [aɪ] r 谦让型爆破技巧 Day46 2023.4.7 周五💌发音小贴士:💌当日目标音发音规则/技巧:[eɪ][aɪ]谦让型爆破🍭 Part 1【热身练习】🍭 Part2【练习内容】&#x…...
webgl-画任意多边形
注意: let canvas document.getElementById(webgl) canvas.width window.innerWidth canvas.height window.innerHeight let radio window.innerWidth/window.innerHeight; let ctx canvas.getContext(webgl) 由于屏幕长宽像素不一样,导致了长宽像素…...
代码随想录打卡第51天|309.最佳买卖股票时机含冷冻期;714.买卖股票的最佳时机含手续费
309.最佳买卖股票时机含冷冻期 关键点1:dp数组的含义 1-1:dp[i][0] 第i天持有股票的最大金钱 1-2:dp[i][1] 第i天卖出股票的最大金钱 1-3:dp[i][2] 第i天处于冷冻期的最大金钱 1-4:dp[i][3] 第i天保持卖出股票的最大金…...
Spark Shuffle介绍
文章目录1. 简介2. Hash Shuffle和Sort Shuffle2.1 Hash Shuffle2.1.1 未经优化的hashShuffleManager2.1.2 经优化的hashShuffleManager2.1.3 优化前后磁盘文件数对比2.2 Srot Shuffle Manager3. Shuffle配置选项1. 简介 Spark在DAG调度阶段会将一个Job划分为多个Stage&#x…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
