SpringBoot 框架

news2024/11/25 22:28:48

SpringBoot 框架

  • SpringBoot 简介
    • SpringBoot 开发步骤
    • SpringBoot工程快速启动
    • SpringBoot概述
      • 起步依赖
      • 自动装配
      • 切换web服务器
  • 配置文件
    • 配置文件格式
    • yaml格式
    • yaml配置文件数据读取
    • @Value注解读取配置文件
    • Environment对象
    • 自定义对象
    • 多环境配置
  • SpringBoot 整合

SpringBoot 简介

SpringBoot 的设计目的是用来简化 Spring 应用的初始搭建以及开发过程。
以 SpringMVC 开发为例。

  1. 需要在pom.xml中导入坐标。
  2. 配置 web类。
  3. 配置 SpringMVC配置类。
  4. 编写Controller类。

其中前三步都是在进行配置,SpringBoot 就是对这三步进行简化。

SpringBoot 开发步骤

1.创建新模块,选择Spring初始化,并配置模块相关基础信息
请添加图片描述
选择 Spring Initializr 来快速构建 SpringBoot 工程。而在 Module SDK 这一项选择我们安装的 JDK 版本。
请添加图片描述
请添加图片描述
2.选择当前模块需要使用的技术集,由于我们需要开发一个 web 程序,使用到了 SpringMVC 技术,所以按照下图红框进行勾选。
请添加图片描述

直接点击 Finish 完成 SpringBoot 工程的构建请添加图片描述
3.开发控制器类

@RestController
@RequestMapping("/books")
public class BookController {
	@GetMapping("/{id}")
	public String getById(@PathVariable Integer id){
		System.out.println("id ==> "+id);
		return "hello , spring boot!";
	}
}

4.运行自动生成的Application类,运行 SpringBoot 工程不需要使用本地的 Tomcat 和 插件,只运行项目 com.itheima 包下的 Application 类,我们就可以在控制台看出如下信息。
5.运行后,访问对应请求路径即可请求到对应的Controller。

注意:
1.在创建好的工程中不需要创建配置类
2.创建好的项目会自动生成其他的一些文件,而这些文件目前对我们来说没有任何作用,所以可以将这些文件删除。
可以删除的目录和文件如下:.mvn,.gitignore,HELP.md,mvnw,mvnw.cmd

通过上面的入门案例我们可以看到使用 SpringBoot 进行开发,使整个开发变得很简单。其原因在于生成的 Application 类和 pom.xml,通过Application 进行自动装配。pom.xml 通过起步依赖,加载技术所需要的所有依赖。

@SpringBootApplication
public class Application {
	public static void main(String[] args) {
	SpringApplication.run(Application.class, args);
	}
}
<?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>2.5.0</version>
	</parent>
	<groupId>com.itheima</groupId>
	<artifactId>springboot_01_quickstart</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<!--JDK 的版本-->
	<properties>
		<java.version>8</java.version>
	</properties>
	<dependencies>
		<!--该依赖就是我们在创建 SpringBoot 工程勾选的那个 Spring Web 产生的-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!--这个是单元测试的依赖,我们现在没有进行单元测试,所以这个依赖现在可以没有-->
		<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>

Spring 开发配置和SpringBoot开发配置对比:
请添加图片描述

  • 坐标
    Spring 程序中的坐标需要自己编写,而且坐标非常多
    SpringBoot 程序中的坐标是我们在创建工程时进行勾选自动生成的
  • web3.0配置类
    Spring 程序需要自己编写这个配置类。这个配置类大家之前编写过,肯定感觉很复杂
    SpringBoot 程序不需要我们自己书写
  • 配置类
    Spring/SpringMVC 程序的配置类需要自己书写。而 SpringBoot 程序则不需要书写。

SpringBoot工程快速启动

将 SpringBoot 工程打成 jar 包,该 jar 包运行不依赖于 Tomcat 和 Idea 这些工具也可以正常运行。
在构建 SpringBoot 工程时已经在 pom.xml 中配置了如下插件:

<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

所以只需要使用 Maven 的 package 指令打包就会在 target 目录下生成对应的 Jar 包。
注意:该插件必须配置,不然打好的 jar 包也是有问题的。

进入 jar 包所在位置,在 命令提示符 中输入如下命令

jar -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar

就可以正常启动Springboot 工程了。
请添加图片描述

SpringBoot概述

SpringBoot 主要作用是简化 Spring 的搭建过程和开发过程。
原始 Spring 环境搭建和开发存在以下问题:

  • 配置繁琐
  • 依赖设置繁琐

SpringBoot 程序优点恰巧就是针对 Spring 的缺点

  • 自动配置。这个是用来解决 Spring 程序配置繁琐的问题
  • 起步依赖。这个是用来解决 Spring 程序依赖设置繁琐的问题
  • 辅助功能(内置服务器,…)。我们在启动 SpringBoot 程序时既没有使用本地的 tomcat 也没有使用 tomcat 插件,而是使用 SpringBoot 内置的服务器。

起步依赖

在创建的SpringBoot 的 Maven 工程的的 pom.xml 配置文件中自动生成了很多包含 starter 的依赖。
在这里插入图片描述
这些依赖就是起步依赖。
从上面的文件中可以看到指定了一个父工程,我们进入到父工程,发现父工程中又指定了一个父工程,如下图所示
在这里插入图片描述
该父工程中可以看到配置内容结构如下图所示
在这里插入图片描述
上图中的 properties 标签中定义了各个技术软件依赖的版本,避免了我们在使用不同软件技术时考虑版本的兼容问题。
dependencyManagement 标签是进行依赖版本锁定,但是并没有导入对应的依赖;如果我们工程需要那个依赖只需要引入依赖的 groupid 和 artifactId 不需要定义 version 。
build 标签中也对插件的版本进行了锁定,如下图
在这里插入图片描述
在创建的工程中的 pom.xml 中配置了如下依赖
在这里插入图片描述
进入到该依赖,查看 pom.xml 的依赖会发现它引入了如下的依赖
在这里插入图片描述
里面的引入了 spring-web 和 spring-webmvc 的依赖,这就是为什么工程中没有依赖这两个包还能正常使用springMVC 中的注解的原因。
而依赖 spring-boot-starter-tomcat ,从名字基本能确认内部依赖了 tomcat ,所以工程才能正常启动。
结论:以后需要使用技术,只需要引入该技术对应的起步依赖即可

小结

  • starter
    SpringBoot 中常见项目名称,定义了当前项目使用的所有项目坐标,以达到减少依赖配置的目的。
  • parent
    所有 SpringBoot 项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的。

在实际开发中,使用任意坐标时,仅书写GAV中的groupid和artifactId,version 由SpringBoot提供。

自动装配

创建的每一个 SpringBoot 程序时都包含一个类似于下面的类,我们将这个类称作引导类。

@SpringBootApplication
public class Springboot01QuickstartApplication {
	public static void main(String[] args) {
		SpringApplication.run(Springboot01QuickstartApplication.class, args);
	}
}

SpringBoot 在创建项目时,采用jar的打包方式
SpringBoot 的引导类是项目的入口,运行 main 方法就可以启动项目
自动装配原理:SpringBoot 自动装配原理

切换web服务器

现在启动工程使用的是 tomcat 服务器,将 tomcat服务器切换为 jetty 服务器。步骤如下:
使用 exclusion 标签,将tomcat 起步依赖排除。

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

然后添加 jetty 的起步依赖。

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

通过切换服务器,不难发现在使用 SpringBoot 换技术时只需要导入该技术的起步依赖即可。

配置文件

配置文件格式

配置文件格式, SpringBoot 提供了多种配置文件的格式。
application.properties,application.yml,application.yaml。
SpringBoot 程序的配置文件名必须是 application ,只是后缀名不同而已。配合文件必须放在 resources 目录下。

示例,修改服务器的启动端口号
application.properties

server.port=80

application.yml
注意: 在 : 后,数据前一定要加空格。

server:
	port: 81

application.yaml
注意: 在 : 后,数据前一定要加空格。

server:
	port: 82

如果使用多种配置文件格式,三种配置文件的优先级:application.properties > application.yml > application.yaml

注意事项:

  • SpringBoot 核心配置文件名为 application
  • SpringBoot 内置属性过多,且所有属性集中在一起修改,在使用时,通过提示键+关键字修改属性

yaml格式

YAML(YAML Ain’t Markup Language),一种数据序列化格式。这种格式的配置文件在近些年已经占有主导地位,这种配置文件和前期使用的配置文件(xml配置,properties配置文件格式)是有一些优势的,我们先看之前使用的配置文件。

xml配置格式

<enterprise>
	<name>itcast</name>
	<age>16</age>
	<tel>4006184000</tel>
</enterprise>

properties 配置格式

enterprise.name=itcast
enterprise.age=16
enterprise.tel=4006184000

yaml 配置文件格式

enterprise:
	name: itcast
	age: 16
	tel: 4006184000

yaml 配置文件优点:

  • 容易阅读,yaml 类型的配置文件比 xml 类型的配置文件更容易阅读,结构更加清晰
  • 容易与脚本语言交互
  • 以数据为核心,重数据轻格式,yaml 更注重数据,而 xml 更注重格式

YAML 文件扩展名:yml (主流),yaml。这两种后缀名都可以,通常使用 yml。

YAML 语法规则:

  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键),空格的个数并不重要,只要保证同层级的左侧对齐即可。
  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  • #表示注释

yaml配置文件数据读取

在 resources 下创建一个名为 application.yml 的配置文件,里面配置了不同的数据,内容如下

lesson: SpringBoot

server:
	port: 80

enterprise:
	name: itcast
	age: 16
	tel: 4006184000
	subject:
		- Java
		- 前端
		- 大数据

@Value注解读取配置文件

使用 @Value(“表达式”) 注解可以从配置文件中读取数据,注解中用于读取属性名引用方式是: ${一级属性名.二级属性名……}。
在 BookController 中使用 @Value 注解读取配合文件数据,如下

@RestController
@RequestMapping("/books")
public class BookController {
	@Value("${lesson}")
	private String lesson;
	@Value("${server.port}")
	private Integer port;
	@Value("${enterprise.subject[0]}")
	private String subject_00;
	@GetMapping("/{id}")
	public String getById(@PathVariable Integer id){
		System.out.println(lesson);
		System.out.println(port);
		System.out.println(subject_00);
		return "hello , spring boot!";
	}
}

Environment对象

SpringBoot 还可以使用 @Autowired 注解注入 Environment 对象的方式读取数据。这种方式 SpringBoot 会将配置文件中所有的数据封装到 Environment 对象中,如果需要使用哪个数据只需要通过调用 Environment 对象的 getProperty(String name) 方法获取。

@RestController
@RequestMapping("/books")
public class BookController {
	@Autowired
	private Environment env;
	@GetMapping("/{id}")
	public String getById(@PathVariable Integer id){
		System.out.println(env.getProperty("lesson"));
		System.out.println(env.getProperty("enterprise.name"));
		System.out.println(env.getProperty("enterprise.subject[0]"));
		return "hello , spring boot!";
	}
}

注意:这种方式,框架内容大量数据,而在开发中我们很少使用。

自定义对象

SpringBoot 还提供了将配置文件中的数据封装到我们自定义的实体类对象中的方式。
Enterprise 实体类内容如下:
使用 @ConfigurationProperties 注解表示加载配置文件,在该注解中也可以使用 prefix 属性指定只加载指定前缀的数据,在类上添加 @Component 注解,将 bean 交给 Spring 管理。

@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {
	private String name;
	private int age;
	private String tel;
	private String[] subject;
	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;
	} 
	public String getTel() {
		return tel;
	} 
	public void setTel(String tel) {
		this.tel = tel;
	} 
	public String[] getSubject() {
		return subject;
	} 
	public void setSubject(String[] subject) {
		this.subject = subject;
	} 
	@Override
	public String toString() {
		return "Enterprise{" +
				"name='" + name + '\'' +
				", age=" + age +
				", tel='" + tel + '\'' +
				", subject=" + Arrays.toString(subject) +
				'}';
	}
}

BookController 内容如下:
在 BookController 中进行注入bean,读取配置文件数据。

@RestController
@RequestMapping("/books")
public class BookController {
	@Autowired
	private Enterprise enterprise;
	@GetMapping("/{id}")
	public String getById(@PathVariable Integer id){
		System.out.println(enterprise.getName());
		System.out.println(enterprise.getAge());
		System.out.println(enterprise.getSubject());
		System.out.println(enterprise.getTel());
		System.out.println(enterprise.getSubject()[0]);
		return "hello , spring boot!";
	}
}

多环境配置

在实际的开发中,对于开发环境、测试环境、生产环境的配置肯定都不相同,比如开发阶段会在自己的电脑上安装 mysql,连接自己电脑上的 mysql 即可,但是项目开发完毕后要上线就需要该配置,将环境的配置改为线上环境的。
来回的修改配置会很麻烦,而 SpringBoot 给开发者提供了多环境的快捷配置,需要切换环境时只需要改一个配置即可。
yaml文件实现多环境配置
为每个环境创建一个配置文件,命名必须为 application-环境标识.yml
开发环境,application-dev.yml

#设置开发环境配置 
server: 
  port: 8080 #设置 Tomcat 内嵌端口号 
  servlet: 
    context-path: /dev #设置上下文根 

生产环境,application-product.yml

#设置生产环境配置 
server: 
  port: 80 
  servlet: 
    context-path: /product 

测试环境,application-test.yml

#设置测试环境配置 
server: 
  port: 9090 
  servlet: 
    context-path: /test

在总配置文件 application.yml进行环境的激活

#springboot 总配置文件 

#激活开发环境 
#spring: 
#  config: 
#    active:  
#      on-profile: dev

#激活测试环境 
#spring: 
#  config: 
#    active:
#      on-profile: test 

#激活生产环境 
spring:
  config:
    activate:
      on-profile: product

命令行启动参数设置
使用 SpringBoot 开发的程序打成 jar 包,通过 java -jar xxx.jar 的方式启动服务的。通过设置启动参数来进行环境配置。
SpringBoot 提供了在运行 jar 时设置开启指定的环境的方式,如下:

java –jar xxx.jar –-spring.profiles.active=test

还可以在启动时,指定端口号

java –jar xxx.jar –-server.port=88

当然也可以同时设置多个配置,比如即指定启用哪个环境配置,又临时指定端口,如下

java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test

命令行设置的配置参数要高于配置文件中的配置。

配置文件分类
SpringBoot 定义了配置文件不同的放置的位置;而放在不同位置的优先级时不同的。
SpringBoot 中4级配置文件放置位置

  • 1级:classpath:application.yml
  • 2级:classpath:config/application.yml
  • 3级:file :application.yml
  • 4级:file :config/application.yml

说明:级别越高优先级越高

在 resources 下创建一个名为 config 的目录,在该目录中创建 application.yml 配置文件,而在该配置文件中将端口号设置为 81 ,内容如下:

server:
  port: 81

而在 resources 下创建的 application.yml 配置文件中并将端口号设置为 80 ,内容如下

server:
  port: 80

运行启动引导类,可以在控制台看到启动的应用端口号为81。在config 目录下的配置文件要高于 resources目录下的。

将SpringBoot工厂打为 jar包。然后在jar所在的目录中新建一个配置文件,内容如下:

server:
  port: 82

然后再jar所在的目录下,创建config目录,在config目录下创建一个配置文件,内容如下:

server:
  port: 83

在命令行使用以下命令运行程序:

java -jar springboot_config_file.jar

然后发现程序的端口号为83。
file:config 下的配置文件优先于类路径下的配置文件。

SpringBoot 整合

整合junit
创建SpringBoot工程:
在这里插入图片描述
工程创建完成后,会默认创建出一个测试类。可以直接使用。

@SpringBootTest
class Springboot07TestApplicationTests {
	@Autowired
	private BookService bookService;
	@Test
	public void save() {
		bookService.save();
	}
}

注意:这里的引导类所在包必须是测试类所在包及其子包。
如:引导类所在包是 com.itheima,测试类所在包是 com.itheima
如果不满足这个要求的话,就需要在使用 @SpringBootTest 注解时,使用 classes 属性指定引导类的字节码对象。
如:@SpringBootTest(classes = Springboot07TestApplication.class)

整合mybatis
在pom文件中加入下面的依赖。

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.2.0</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
	<version>1.1.16</version>
</dependency>

在项目中创建实体类:

public class Book {
	private Integer id;
	private String name;
	private String type;
	private String description;
	//setter and getter
	//toString
}

在项目中创建 mapper接口,使用@Mapper注解,spring将为接口创建代理对象。也可以在引导类上使用@MapperScan(“com.itheima.dao”)注解,对整个包进行扫描。

@Mapper
public interface BookDao {
	@Select("select * from tbl_book where id = #{id}")
	public Book getById(Integer id);
}

在配置文件中配置数据源和连接池。

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource

在测试类中进行测试

@SpringBootTest
class Springboot08MybatisApplicationTests {
	@Autowired
	private BookDao bookDao;
	@Test
	void testGetById() {
		Book book = bookDao.getById(1);
		System.out.println(book);
	}
}

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

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

相关文章

这个 计数排序详解过程 我能吹一辈子!!!

文章目录 计数排序概念计数排序算法思路计数排序算法过程计数排序代码实现计数排序缺陷 计数排序概念 计数排序是一个非基于比较的排序算法&#xff0c;元素从未排序状态变为已排序状态的过程&#xff0c;是由额外空间的辅助和元素本身的值决定的。该算法于1954年由 Harold H.…

流行框架(一)EventBus(组件通信)、ARouter(页面跳转)

文章目录 EventBus基本使用EventBus三要素五种线程模式使用步骤EventBus黏性事件&#xff08;sticky event&#xff09; 工作原理中介者模式源码解读Event Bus中介者对象register() / 注册发布事件 / post Arouter组件化开发组件化开发的优点组件分层方案组件化的gradle工程 AR…

C919商业首航 背后功臣风洞实验室有多牛

5月28日&#xff0c;国产大型客机C919&#xff0c;顺利完成商业首航。 首航背后意味着该机型从研发、制造、取证到投运全面贯通&#xff0c;广大旅客终于有机会坐国产大飞机出行了。 很多人不知道C919其实是依托我国独立自主设计制造的世界级风洞群和风洞实验室反复测试“百炼…

Linux部署jumpserver堡垒机及问题汇总

部署过程相对复杂&#xff01;请耐心浏览&#xff01; 目录 一、jumpserver堡垒机简介 1.1 为什么需要使用堡垒机? 1.2 堡垒机主要功能 二、准备工作 2.1 关闭防火墙以及SElinux 1.2 时间同步 1.3 更改主机名 1.4 yum源备份及准备 1.5 安装初始工具 1.6 修改系统字…

基于PS-InSAR技术的形变监测分析流程

基于PS-InSAR技术的形变监测分析流程 文章目录 基于PS-InSAR技术的形变监测分析流程1. 背景知识1.1 PS-InSAR技术1.1.1 雷达干涉测量1.1.2 InSAR技术1.1.3 技术原理1.1.4 技术特征1.1.5 技术优化1.1.6 应用 1.2 Sentinel-1数据1.2.1 Sentinel-1简介1.2.2 Sentinel-1扫描模式1.2…

一分钟学会怎么让chatGPT帮你写python代码(含使用地址)

一分钟学会怎么让chatGPT帮你写python代码&#xff08;含使用地址&#xff09; 我们用chatGPT做一个python的计算器脚本为例 提出需求 1、给定角色定位 2、提出要求 3、提出要求的细节 标题等待片刻&#xff0c;等待chatGPT生成脚本即可 import tkinter as tkclass Calc…

去公司面试,10:00刚进去,10:08就出来了 ,问的实在是太...

从外包出来&#xff0c;没想到算法死在另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内…

33 KVM管理设备-配置虚拟机PCIe控制器

文章目录 33 KVM管理设备-配置虚拟机PCIe控制器33.1 概述33.2 配置PCIe Root、PCIe Root Port和PCIe-PCI-Bridge33.2.1 简化配置方法33.2.1完整配制方法 33 KVM管理设备-配置虚拟机PCIe控制器 33.1 概述 虚拟机内部的网卡、磁盘控制器、PCIe直通设备都需要挂接到PCIe Root Po…

IOC源码解析

目录 主要从3方面进行解析 Bean与BeanDefinition 容器初始化主要做的事情(主要脉络) BeanFactory ApplicationContext 模板方法模式 Resource、ResourceLoader、容器之间的关系 BeanDefinitionReader BeanDefinition的注册 小结 主要从3方面进行解析 解析配置定位与注…

EMNLP -- Call for Main Conference Papers

以下内容链接&#xff1a;Call for Main Conference Papers - EMNLP 2023 目录 审核流程&#xff1a; 与 ARR 的交叉提交政策 注意&#xff1a; 注意&#xff1a; 重要日期 强制性摘要提交 提交方向 论文提交信息 论文提交和模板 确认 长论文 短文 贡献 演示模式 著作权 引用与…

Vue设计记事本

项目描述 项目实现功能有&#xff1a;记录今天要完成的任务&#xff0c;勾选已经完成的任务&#xff0c;删除已经完成的全部任务。 界面展示&#xff1a; 代码展示 创建一个Myitem.vue文件夹 <template><li><label ><input type"checkbox"…

机器学习 监督学习 Week2

Lib01 多变量线性回归 依旧是房价预测&#xff0c;但这次引入了多个变量&#xff0c;不仅仅只有房屋面积影响着房价&#xff0c;依旧尝试使用梯度下降算法找到最优的【w,b】&#xff0c;并且习惯使用向量点乘运算提高效率 import copy, math import numpy as np import matplot…

微内核和大内核

微内核和大内核是操作系统内核的两种不同设计思路。 图片来源 微内核 微内核是指将操作系统内核中的核心功能&#xff08;如进程管理、内存管理、设备驱动等&#xff09;作为独立进程运行&#xff0c;各进程间通过IPC(进程间通信)进行通讯。其中微内核相当于一个消息中转站&…

华为OD机试真题B卷 Java 实现【数据最节约的备份方法】,附详细解题思路

一、题目描述 有若干个文件&#xff0c;使用刻录光盘的方式进行备份&#xff0c;假设每张光盘的容量是500MB。 求使用光盘最少的文件分布方式&#xff0c;所有文件的大小都是整数的MB&#xff0c;且不超过500MB&#xff0c;文件不能分隔、分卷打包。 二、输入描述 每组文件…

AD PCB元器件封装设计方法

元器件封装界面 1.元器件可以新建PCB元件库&#xff0c;然后在新建的库中添加 2.也可以采用随便右键某个库中的元器件&#xff0c;选择“Edit…”&#xff0c;进入到元器件封装绘制界面。 元器件封装设计步骤 1.点击菜单栏工具——新的空元件&#xff1b;或者直接点击 Add&a…

认识.Net MAUI跨平台框架

.NET MAUI概念: 全称: .NET 多平台应用 UI (.NET MAUI) 是一个开源的跨平台框架&#xff0c;前身是Xamarin.Forms ! 用于使用 C# 和 XAML 创建本机移动和桌面应用。 NET MAUI&#xff0c;共享代码库,可在 Android、iOS、macOS 和 Windows 上运行的应用 应用架构: github 地址…

MySQL主从复制(概念和作用、实战、常见问题和解决办法、扩展、GTID同步集群、集群扩容、半同步复制)

文章目录 1. 主从复制1.1 概念和作用1.2 主从复制的步骤1.3 搭建主从同步&#xff08;配置步骤&#xff09;1.3.1 配置master主库1.3.2 配置slave从库1.3.3 主从复制的问题和解决方法1.3.4 MySQL主从复制监控和管理、测试 1.4 主从同步扩展1.4.1 主库同步与部分同步&#xff08…

【面试】操作系统面试题

操作系统面试题一 什么是操作系统&#xff1f;请简要概述一下 操作系统是管理计算机硬件和软件资源的计算机程序&#xff0c;提供一个计算机用户与计算机硬件系统之间的接口。 向上对用户程序提供接口&#xff0c;向下接管硬件资源。 操作系统本质上也是一个软件&#xff0…

Clion开发STM32之OTA升级模块(最新完整版)

前言 程序分为上位机部分、BootLoader、App程序上位机程序使用的是C#进行开发&#xff0c;目前只做成控制台部分开发环境依然选择Clion芯片采用的是stm32f103vet6升级模块已和驱动层逻辑进行分离 BootLoader程序 Flash分区定义 头文件 #ifndef STM32F103VET6_PROJECT_APP_FL…

图论-图的基本概念与数据结构

图的基本概念 无向图 边是没有方向的&#xff0c;也就是双向的 结点 V { v 1 , v 2 , . . . , v 7 } \mathcal{V} \{ v_1,v_2,...,v_7\} V{v1​,v2​,...,v7​} 边 ε { e 1 , 2 , e 1 , 3 , . . . , e 6 , 7 } \varepsilon \{e_{1,2},e_{1,3},...,e_{6,7}\} ε{e1,2​…