二. Spring Boot 中的 “依赖管理和自动配置” 详解透彻到底(附+详细代码流程)

二. Spring Boot 中的 “依赖管理和自动配置” 详解透彻到底(附+详细代码流程)

@

目录
  • 二. Spring Boot 中的 “依赖管理和自动配置” 详解透彻到底(附+详细代码流程)
  • 1. 如何理解 “ 约定优于配置 ”
  • 2. Spring Boot 依赖管理 和 自动配置
    • 2.1 Spring Boot 的依赖管理
      • 2.1.1 什么是依赖管理
      • 2.1.2 修改自动仲裁 / 默认版本号
    • 3.1 starter 场景启动器
      • 3.1.1 starter 场景启动器的说明介绍
      • 3.1.2 Spring Boot 官方提供的 starter 场景启动器
      • 3.1.3 Spring Boot支持的第三方 starter 场景启动器
    • 4.1 Spring Boot 的自动配置
      • 4.1.1 Spring Boot 自动配置有哪些
      • 4.1.2 如何修改 Spring Boot 中的默认配置
    • 5.1 如何修改默认配置
      • 5.1.1 如何修改默认扫描包结构
      • 5.1.2 Spring Boot中的 resources(类路径下)\application.properties 配置大全
      • 5.1.3 演示:使用一些常用的配置
      • 5.1.4 Spring Boot 中 application.properties 自定义配置
    • 6.1 Spring Boot 中在哪里配置读取 application.properties 配置文件
    • 7.1 自动配置,遵守按需加载原则
  • 3. 总结:
  • 4. 最后:


1. 如何理解 “ 约定优于配置 ”

约定优于配置(Convention over Configuration / CoC),又称约定编程,是一种软件设计规范,本质上是对系统,类库或框架中一些东西。

一个大众化合理的默认值(缺省值)
2. 例如在模型中存在一个名为User的类,那么对应到数据库会存在一个名为 user 的表,只有偏离这个约定时才需要做相关的配置(例如
你想将表名命名为:t_user等非user时才需要写关于这个名字的配置)
3. 简单来说就是假如你所期待的配置约定的配置 一致,那么就可以不做任何配置,约定不符合期待时,才需要对约定进行替换配置。
4. 约定优于配置:为什么要搞一个“约定优于配置”
约定其实就是一个规范,遵循了规范,那么就存在通用性。存在了通用性,那么事情就会变得相对简单 ,程序员之间的沟通成本就会降低,工作效率会提升,合作也会变得更加简单。
5. 生活中,这样的情况,大量存在:比如:两个都是男生,你说一起去上厕所去,那么,他们两个人都是(默认,约定好的都是去男生厕所,而特意说明是:去女生厕所。)
6. 注意:误区:默认是采用约定的,但是你配置了,还是采用你的配置的信息的。

2. Spring Boot 依赖管理 和 自动配置

2.1 Spring Boot 的依赖管理

2.1.1 什么是依赖管理

  1. spring-boot-starter-parent 还有父项目,声明了开发中常用的依赖的版本号

  2. 并且进行 自动版本仲裁 ,即如果程序员没有指定某个 依赖的 jar 的版本,则以父项目指定的版本为准。

在这里插入图片描述

在这里插入图片描述

2.1.2 修改自动仲裁 / 默认版本号

如果 Spring Boot 当中默认配置的 jar 依赖的版本,不是,我们所想要的该如何配置修改成我们自己想要的呢。

如何修改 Spring Boot 当中对应 jar。

演示: 将 SpringBoot mysql 驱动修改成 5.1.49 版本的。

首先,我们先要学会如何查看到对应我们所需的 jar 在 Spring Boot 的默认配置当中使用的是什么版本的。

在spring-boot-dependencies\2.5.3\spring-boot-dependencies-2.5.3.pom,中我们可以找到对应的 jar 包的依赖版本,如下图所示:这里 Spring Boot 对于 MySQL 的依赖默认配置是 8.0.26

在这里插入图片描述

查 看 spring-boot-dependencies.pom 里 面 规 定 当前 依 赖 的 版 本 对 应 的 key , 这 里 是 mysql.version

在这里插入图片描述

在这里插入图片描述

修改 Spring Boot 当中对应 jar;有两种方式:

  • 方式一: 直接在项目的 pom.xml 文件当中直接导入,自己想要的 jar 的版本即可。
  • 方式二: 和方式一是一样的,不同的是编写方式,有所不同:“方式二:是将 jar 信息和 jar的版本 信息分开来编写的了”。

方式一: 修改 pom.xml 重写配置 当更新 Maven 时,就依赖到新的 ,mysql 驱动。

直接导入我们自己想要的 依赖的jar 的配置,然后,更新 Maven 即可。

在这里插入图片描述

  <!--      自定义设置:1  我们自己指定mysql/驱动版本--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version> <!--不指明就是,采用SpringBoot 约定好的(也就是默认的8.26)--></dependency>

然后,我们在刷新 Maven,重新加载 jar

在这里插入图片描述

注意: 如果配置的依赖jar 包时,不指明就是version 版本的话,就会采用 SpringBoot 约定好的(也就是默认的8.26)版本的。

如下:我们将指明的版本的 version 注释掉,再次更新,看看。

在这里插入图片描述

完整的 pom.xml 信息。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.rainbowsea</groupId><artifactId>quickstartBlog</artifactId><version>1.0-SNAPSHOT</version><!-- 导入 springboot  父工程,规定的写法 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.3</version></parent><!-- 导入 web 项目场景启动器,会自动导入和 web 开发相关依赖,非常方便  --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--      自定义设置:1  我们自己指定mysql/驱动版本--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version> <!--不指明就是,采用SpringBoot 约定好的(也就是默认的8.26)--></dependency></dependencies></project>

方式二: 将依赖jar 包的配置信息,和配置版本分开来编写。

  • <properties> 标签中,配置 jar 的版本信息 ,可以配置多个不同的 jar 的版本信息。

  • <dependencies> 标签中,配置 jar 的 配置坐标信息 ,可以配置多个 jar

在这里插入图片描述

    <properties><mysql.version>5.1.49</mysql.version></properties><!-- 导入 web 项目场景启动器,会自动导入和 web 开发相关依赖,非常方便  --><dependencies><!--      自定义设置:1  我们自己指定mysql/驱动版本--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies>

更新 Maven ,重新加载 jar 。

在这里插入图片描述

完整的 pom.xml 信息。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.rainbowsea</groupId><artifactId>quickstartBlog</artifactId><version>1.0-SNAPSHOT</version><!-- 导入 springboot  父工程,规定的写法 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.3</version></parent><properties><mysql.version>5.1.49</mysql.version></properties><!-- 导入 web 项目场景启动器,会自动导入和 web 开发相关依赖,非常方便  --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--      自定义设置:1  我们自己指定mysql/驱动版本--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies></project>

3.1 starter 场景启动器

3.1.1 starter 场景启动器的说明介绍

开发中我们引入了相关场景的 starter,这个场景中所有的相关依赖都引入进来了,比如:我们之前学习到的 web 开发引入了,该 starter 将导入与 web 开发相关的所有包。

在这里插入图片描述

在这里插入图片描述

依赖树 : 可以看到 spring-boot-starter-web ,帮我们引入了 spring-web mvc,spring-web 开发模块,还引入了 spring-boot-starter-tomcat 场景,spring-boot-starter-json 场景,这些场景下面又引入了一大堆相关的包,这些依赖项可以快速启动和运行一个项目,提高开发效率.

在这里插入图片描述

在这里插入图片描述

所有场景启动器最基本的依赖就是 spring-boot-starter , 前面的依赖树分析可以看到,

在这里插入图片描述
在这里插入图片描述

这个依赖也就是 SpringBoot 自动配置的核心依赖

在这里插入图片描述

3.1.2 Spring Boot 官方提供的 starter 场景启动器

Spring Boot 官方提供的 starter 场景启动器的介绍说明:https://docs.spring.io/spring-boot/reference/using/build-systems.html#using.build-systems.starters 。

在这里插入图片描述

意思就是说:在开发中我们经常会用到 spring-boot-starter-xxx ,比如 spring-boot-starter-web,该场 景是用作 web 开发,也就是说 xxx 是某种开发场景。

这时候,我们只要引入 starter,这个场景的所有常规需要的依赖我们都自动引入。

Spring Boot3 支持的所有场景如下:官方地址:https://docs.spring.io/spring-boot/reference/using/build-systems.html#using.build-systems.starters

在这里插入图片描述

3.1.3 Spring Boot支持的第三方 starter 场景启动器

Spring Boot 也支持第三方starter。

第三方starter不要从spring-boot 开始,因为这是官方spring-boot保留的命名方式的。
第三方启动程序通常以项目名称开头,例如:名“XXx”的第三方启动程序项目通常被命名为:“XXx-spring-boot-stater”。

也就是说:xxx-spring-boot-starter是第三方为我们提供的简化开发的场景启动器

4.1 Spring Boot 的自动配置

我们是否还记得,前面学习SSM整合时,需要配置 Tomcat ,配置 Spring MVC,以及配置如何扫描包,配置字符过滤器,配置视图解析器,文件上传等 ✏️✏️✏️ SSM 整合(Spring + MyBatis;Spring + Spring MVC)-CSDN博客 。非常麻烦。而在 Spring Boot 中,存在自动配置 机制,提高开发效率。

简单回顾以前 SSM 整合的配置:

在这里插入图片描述

在这里插入图片描述

4.1.1 Spring Boot 自动配置有哪些

  1. 自动配置 Tomcat

在这里插入图片描述

  1. 自动配置了 Spring MVC

在这里插入图片描述

  1. 自动配置了 Web 常用功能: 比如 字符过滤器。

我们可以通过获取到的 ioc 容器,查看容器创建的组件来验证。

在这里插入图片描述

package com.rainbowsea.springboot;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;// @SpringBootApplication  表示是一个 springboot 应用
@SpringBootApplication
public class MainApp {public static void main(String[] args) {// 启动 SpringBoot 应用程序ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);// 查看容器里面的组件String[] beanDefinitionNames = ioc.getBeanDefinitionNames();for (String beanDefinitionName : beanDefinitionNames) {System.out.println("beanDefinitionName ---" + beanDefinitionName);}}
}

在这里插入图片描述

更加直接查看的方式:我们可以通过 Debug 的方式,在 ioc 打上断点,从而查看 ioc 容器中有哪些 Bean 对象被创建了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在Spring Boot 的自动配置中,我们不需要像Spring MVC 中一定要配置扫描包 。Spring Boot 有默认的扫描包结构。

如下是来自 Spring Boot 官方文档说明 【https://docs.spring.io/spring-boot/reference/using/structuring-your-code.html#using.structuring-your-code.using-the-default-package】的:自动扫描的包结构。你按照该“约定/自动扫描包结构”,开发项目,就不需要配置扫描包了,直接用 Spring Boot 约定的/默认的即可。

在这里插入图片描述

com+- example+- myapplication+- MyApplication.java|+- customer|   +- Customer.java|   +- CustomerController.java|   +- CustomerService.java|   +- CustomerRepository.java|+- order+- Order.java+- OrderController.java+- OrderService.java+- OrderRepository.java

在这里插入图片描述

4.1.2 如何修改 Spring Boot 中的默认配置

演示: 要求能扫描 com.rainbowsea 包下的 HiController.java 应该如何处理 ?

首先我们先测试一下,不按照 Spring Boot 默认的包结构创建的,主程序类。会怎么样。

在 quickstartBlog\src\main\java\com\rainbowsea\目录/包下创建一个,名为 HiController.java主程序类。 并测试, 这时是访问不到的。

在这里插入图片描述

运行主程序,打开浏览器输入:http://localhost:8080/hi 测试。

在这里插入图片描述

原因是:hello 配置的 HelloController 是在 Spring Boot 的默认自动配置的包结构下的,而我们的 hi 配置的 HiController 并不是在,Spring Boot 的自动配置打包结构下的,而我们自己有没有配置包扫描,Spring Boot 自然找不到了。

在这里插入图片描述

5.1 如何修改默认配置

5.1.1 如何修改默认扫描包结构

上面我们测试了,在 com.rianbowsea 包下的 HiController.java 是扫描不到了,扫描不到,也就无法加入到 ioc 容器当中被 Spring Boot管理起来了,也就无法被访问到了。

所以想要,让 HiController.java 可以被扫描到,就解决了这个,无法访问找不到的问题了。

方法:

我们修改 MainApp.java, 增加扫描的包 。

使用 @SpringBootApplication 注解当中的 scanBasePackages 注解属性,该属性的值:就是让Spring Boot 扫描的,包路径。

在这里插入图片描述

在这里插入图片描述

package com.rainbowsea.springboot;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;// @SpringBootApplication  表示是一个 springboot 应用
// 直接在    SpringBootApplication 注解后指定,让 Spring Boot 要扫描到的包路径@SpringBootApplication(scanBasePackages = {"com.rainbowsea"})
public class MainApp {public static void main(String[] args) {// 启动 SpringBoot 应用程序ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);// 查看容器里面的组件String[] beanDefinitionNames = ioc.getBeanDefinitionNames();for (String beanDefinitionName : beanDefinitionNames) {System.out.println("beanDefinitionName ---" + beanDefinitionName);}}
}

配置好之后,我们再次重启 ,运行试试。

在这里插入图片描述

5.1.2 Spring Boot中的 resources(类路径下)\application.properties 配置大全

SpringBoot 项目最重要也是最核心的配置文件就是 application.properties,所有的框架配 置都可以在这个配置文件中说明 :Spring Boot 框架中配置文件 application.properties 当中的所有配置大全-CSDN博客

5.1.3 演示:使用一些常用的配置

在Spring Boot中各种配置都有默认,而想要修改配置的话, 可 以 在 resources\application.properties文件中修改。至于application.properties 文件是需要我们手动创建的。

特别注意:该文件名必须是 application.properties,后缀也不可以修改。强烈建议将其放到 类的根路径下(也就是resources 目录下 )

其次是,注意:在.properties 后缀的配置文件,当中编写,不要有空格,尽量不要有空格。

如下:

  • 演示一:我们设置该服务器 Tomcat ,我们项目启动的端口,默认是 8080,这里我们设置为 9090。

在这里插入图片描述

编写配置:设置修改 Server 的监听窗口为 9090

# 修改server的监听窗口为 9090
# Tomcat started on port(s): 9090 (http) with context path ''
server.port=9090

在这里插入图片描述

编写配置好后,运行主程序,重新加载程序,看看。

在这里插入图片描述

在这里插入图片描述

  • 演示2: 修改文件上传的大小;

在这里插入图片描述

# 修改server的监听窗口为 9090
# Tomcat started on port(s): 9090 (http) with context path ''
server.port=9090# 修改文件上传的大小
# 解读一下这个配置是在哪里读取!
#multipart.max-file-size,属性可以指定SpringBoot 上传文件的大小限制(体现“约定优于配置”)
# 默认骗子hi最总都是映射到某个类上,比如:multipart.max-file-size
# 会映射/关联到MultipartProperties 类
# 把光标放在该属性,输入 ctrl + b,或者是按住 ctrl + 点击,就可以定位这个属性是管理到哪个类(属性)
spring.servlet.multipart.max-file-size=10MB

这里,我们想要看到效果的话,需要Debug,打上断点,进行 Debug 调试才可以比较清除的看到效果。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 演示三: 配置开始的项目根的映射路径 .

在这里插入图片描述

# 修改server的监听窗口为 9090
# Tomcat started on port(s): 9090 (http) with context path ''
server.port=9090# 修改文件上传的大小
# 解读一下这个配置是在哪里读取!
#multipart.max-file-size,属性可以指定SpringBoot 上传文件的大小限制(体现“约定优于配置”)
# 默认骗子hi最总都是映射到某个类上,比如:multipart.max-file-size
# 会映射/关联到MultipartProperties 类
# 把光标放在该属性,输入 ctrl + b,或者是按住 ctrl + 点击,就可以定位这个属性是管理到哪个类(属性)
spring.servlet.multipart.max-file-size=10MB# 配置开始的项目根的映射路径
server.servlet.context-path=/rainbowsea

重新启动程序,测试:

在这里插入图片描述

特别说明:讲解

上述的配置文件时在哪里读取的

比如:multipart.max-file-size,属性可以指定SpringBoot 上传文件的大小限制(体现“约定优于配置”)

默认 Spring Boot 都会将其映射到某个类上,比如:multipart.max-file-size,会映射/关联到MultipartProperties 类。配置都会被映射到相对应的类上的。

而我们将光标放在该属性,输入 ctrl + b,或者是按住 ctrl + 点击,就可以定位这个属性是管理到哪个类(属性)

在这里插入图片描述

5.1.4 Spring Boot 中 application.properties 自定义配置

在 Spring Boot 中,我们还可以还在 .properties 文件中自定义配置,通过 @Value("${}") 的方式来获取对应属性值。

在这里插入图片描述

# 修改server的监听窗口为 9090
# Tomcat started on port(s): 9090 (http) with context path ''
server.port=9090# 修改文件上传的大小
# 解读一下这个配置是在哪里读取!
#multipart.max-file-size,属性可以指定SpringBoot 上传文件的大小限制(体现“约定优于配置”)
# 默认骗子hi最总都是映射到某个类上,比如:multipart.max-file-size
# 会映射/关联到MultipartProperties 类
# 把光标放在该属性,输入 ctrl + b,或者是按住 ctrl + 点击,就可以定位这个属性是管理到哪个类(属性)
spring.servlet.multipart.max-file-size=10MB# 配置开始的项目根的映射路径
server.servlet.context-path=/rainbowsea# 自定义配置属性
my.website=https://www.baidu.com

在这里插入图片描述

package com.rainbowsea;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller // 注入到 ioc 容器当中
public class HiController {@RequestMapping("/hi")  // 设置请求映射路径@ResponseBody   // 表示返回的是一个 json/字符串,而不是一个网页public String hi(){System.out.println("website" + website);return "hi~, spring boot";}// 需求website,属性值从application.properties 的 k-v@Value("${my.website}")private String website;
}

运行测试:

在这里插入图片描述

当然,我们也时可以 将其 配置到 Bean 对象上的,只不过,配置到 Bean 对象上的话,有更好的方式,可以用 Spring Boot 的容器管理。

6.1 Spring Boot 中在哪里配置读取 application.properties 配置文件

打开 ConfigFileApplicationListener.java , 看一下源码;

在这里插入图片描述

在这里插入图片描述

// 指明: application.properties 可以存放的位置在哪里,Spring Boot 可以成功读取到 
private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/*/,file:./config/";// 指明: 配置类,要是为:application,  
private static final String DEFAULT_NAMES = "application";

7.1 自动配置,遵守按需加载原则

自动配置遵守按需加载原则:也就是说,引入了哪个场景 starter启动器 就会加载该场景关联,的 jar 包,没有引入的 starter 则不会加载其关联 jar 。

在这里插入图片描述

SpringBoot 所有的自动配置功能都在 spring-boot-autoconfigure 包里面;

在这里插入图片描述

在Spring Boot 中的自动配置包,一般是 XXxAutoConfiguration.java 对应 XXxProperties.java,如图

在这里插入图片描述


3. 总结:

  1. Spring Boot 理解其中的 “约定优于配置”,又称约定编程,是一种软件设计规范,本质上是对系统,类库或框架中一些东西。减少不必要的配置,使用约定(默认的配置)吗。
  2. Spring Boot 当中的 jar 版本的查看,以及 修改 Spring Boot 当中的 jar 版本的为字节所需。
    1. 方式一: 直接在项目的 pom.xml 文件当中直接导入,自己想要的 jar 的版本即可。
    2. 方式二: 和方式一是一样的,不同的是编写方式,有所不同:“方式二:是将 jar 信息和 jar的版本 信息分开来编写的了”。
  3. Spring Boot 当中的 starter 场景启动器,Spring Boot 官方提供的 starter 场景启动器的介绍说明:https://docs.spring.io/spring-boot/reference/using/build-systems.html#using.build-systems.starters 。
  4. Spring Boot 自动配置,Spring Boot 默认的扫描包结构,修改配置扫描包
  5. Spring Boot当中核心配置文件 application.properties 的理解和使用。 application.properties 的每个配置属性,都对应这 Spring Boot 当中的某个类当中的某个属性,并且加入到了 ioc 容器当中。
  6. 在Spring Boot 中的自动配置包,一般是 XXxAutoConfiguration.java 对应 XXxProperties.java

4. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

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

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

相关文章

Datawhale AI 夏令营 第五期 CV方向 02进阶

上次的baseline方案,训练的模型,获得分数并不高,DataWhale提供了两个上分的思路增加训练数据集 切换不同模型预训练权重增加训练集的大小通常可以提高模型的泛化能力,因为更多的数据可以帮助模型学习到更多的特征和模式。但是,越大的数据集,就意味着需要更多的计算资源和…

luoguP5369 [PKUSC2018] 最大前缀和

题目n<=20 题解 想了半天3位状态的折半,然后发现空间开不下(时间也不太行) 所以放弃思考,直接枚举答案答案是a中的一个集合,设为S;记集合S的和为sum[S] 考虑当S确定时,有多少种方案能使答案恰好为sum[S]。为了处理多种sum相同的情况,记S为从前往后考虑,第一次出现最…

Java Script网页设计案例

本文提供了一个简单的JavaScript网页设计案例,该案例将实现一个动态的待办事项列表(Todo List)。用户可以在页面上添加新的待办事项,标记它们为已完成,以及删除它们。这个案例将使用HTML来构建页面结构,CSS来美化页面,以及JavaScript来添加动态功能。1. JavaScript网页设…

ggml 简介

ggml 是一个用 C 和 C++ 编写、专注于 Transformer 架构模型推理的机器学习库。该项目完全开源,处于活跃的开发阶段,开发社区也在不断壮大。ggml 和 PyTorch、TensorFlow 等机器学习库比较相似,但由于目前处于开发的早期阶段,一些底层设计仍在不断改进中。 相比于 llama.cp…

层序遍历(广度优先搜索)-102

题目描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。解题思路 这里我们层次遍历我们需要使用到队列这个数据结构,我们依次从根节点开始遍历,我们需要使用一个变量来记录此时我们队列中元素的数量,因为这样我们才知道这一层…

CF1980F1 F2 Field Division

前言 纪念一下独立做出来的 \(2400\) 的题 Easy version 思路 先说 \(Easy\) 版本的 我们走路的方式只有可能是这种样子:(出处:luogu user FiraCode) 不想手绘图了 即对列排序后,所形成的一个行编号上升的序列 所以 \(Easy\) 就很简单了,对于每一列的最大值,如果大于当前前…

一篇文章讲清楚Java中的反射

介绍 每个类都有一个 Class 对象,包含了与类有关的信息。当编译一个新类时,会产生一个同名的 .class 文件,该文件内容保存着 Class 对象。 类加载相当于 Class 对象的加载。类在第一次使用时才动态加载到 JVM 中,可以使用 Class.forName("com.mysql.jdbc.Driver"…

django timezone.now 小了8小时

django.util.timezone.now()原因:setting.py中设置了时区:LANGUAGE_CODE = en-usTIME_ZONE = UTCUSE_I18N = TrueUSE_TZ = True # 若数据库中存储的是UTC时间,但在模板显示的时候,会转成TIME_ZONE所示的本地时间进行显示****将TIME_ZONE时区改为:TIME_ZONE = Asia/Shangha…

枚举实现原理

枚举的定义 在JDK1.5之前,我们要是想定义一些有关常量的内容,例如定义几个常量,表示从周一到周末,一般都是在一个类,或者一个接口中,写类似于如下代码: public class WeekDayConstant {public static final int MONDAY = 0;public static final int TUESDAY = 1;public …

航图中的扇区数据生成

今天简单聊一下机场扇区,最后再介绍一下《风标设计2025》航图模块中的扇区绘制功能。机场扇区是以机场基准点(ARP)或归航台为圆心,半径46km(25nm),外加9km(5nm)缓冲区构成。PBN程序扇区通常以ARP为圆心,传统程序扇区以导航台为圆心。对于中小机场,为了统一和简化扇区划设…