【Spring6】| Spring的入门程序、集成Log4j2日志框架

news2024/11/15 11:11:58

目录 

一:Spring的入门程序

1. Spring的下载

2. Spring的jar文件

3. 第一个Spring程序

4. 第一个Spring程序详细剖析

5. Spring6启用Log4j2日志框架


一:Spring的入门程序

1. Spring的下载

官网地址:https://spring.io/

官网地址(中文):Spring 中文网 官网

打开Spring官网后,可以看到Spring Framework,以及通过Spring Framework衍生的其它框架:

我们即将要学习的就是Spring Framework;怎么下载呢?

第一步:进入github

第二步:找到下图位置,点击超链接

第三步:找到下图位置,点击仓库地址的超链接

第四步:按照下图步骤操作,找到springframwork

第五步:继续在springframework目录下找下图的spring,点开之后你会看到很多不同的版本

第六步:选择对应的版本 

第七步:点击上图的url

点击spring-5.3.9-dist.zip下载spring框架;将下载的zip包解压,看到几个文件夹:

docs:spring框架的API帮助文档

libs:spring框架的jar文件(用spring框架就是用这些jar包

schema:spring框架的XML配置文件相关的约束文件

2. Spring的jar文件

打开libs目录,会看到很多jar包,以核心jar包为例:

spring-core-5.3.9.jar:字节码(这个是支撑程序运行的jar包)

spring-core-5.3.9-javadoc.jar:代码中的注释

spring-core-5.3.9-sources.jar:源码

 其它所有的jar包,当然这些jar包也对应这jar文件,这里就不列出来了:

spring-aop-5.3.9.jar

这个jar 文件包含在应用中使用Spring 的AOP 特性时所需的类

spring-aspects-5.3.9.jar

提供对AspectJ的支持,以便可以方便的将面向切面的功能集成进IDE中

spring-beans-5.3.9.jar

这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion ofControl / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。

spring-context-5.3.9.jar

这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。

spring-context-indexer-5.3.9.jar

虽然类路径扫描非常快,但是Spring内部存在大量的类,添加此依赖,可以通过在编译时创建候选对象的静态列表来提高大型应用程序的启动性能。

spring-context-support-5.3.9.jar

用来提供Spring上下文的一些扩展模块,例如实现邮件服务、视图解析、缓存、定时任务调度等

spring-core-5.3.9.jar

Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。

spring-expression-5.3.9.jar

Spring表达式语言。

spring-instrument-5.3.9.jar

Spring3.0对服务器的代理接口。

spring-jcl-5.3.9.jar

Spring的日志模块。JCL,全称为"Jakarta Commons Logging",也可称为"Apache Commons Logging"。

spring-jdbc-5.3.9.jar

Spring对JDBC的支持。

spring-jms-5.3.9.jar

这个jar包提供了对JMS 1.0.2/1.1的支持类。JMS是Java消息服务。属于JavaEE规范之一。

spring-messaging-5.3.9.jar

为集成messaging api和消息协议提供支持

spring-orm-5.3.9.jar

Spring集成ORM框架的支持,比如集成hibernate,mybatis等。

spring-oxm-5.3.9.jar

为主流O/X Mapping组件提供了统一层抽象和封装,OXM是Object Xml Mapping。对象和XML之间的相互转换。

spring-r2dbc-5.3.9.jar

Reactive Relational Database Connectivity (关系型数据库的响应式连接) 的缩写。这个jar文件是Spring对r2dbc的支持。

spring-test-5.3.9.jar

对Junit等测试框架的简单封装。

spring-tx-5.3.9.jar

为JDBC、Hibernate、JDO、JPA、Beans等提供的一致的声明式和编程式事务管理支持。

spring-web-5.3.9.jar

Spring集成MVC框架的支持,比如集成Struts等。

spring-webflux-5.3.9.jar

WebFlux是 Spring5 添加的新模块,用于 web 的开发,功能和 SpringMVC 类似的,Webflux 使用当前一种比较流程响应式编程出现的框架。

spring-webmvc-5.3.9.jar

SpringMVC框架的类库

spring-websocket-5.3.9.jar

Spring集成WebSocket框架时使用

注意:如果只是想用Spring的IoC功能,仅需要引入:spring-context即可,将这个jar包添加到classpath当中。如果采用maven只需要引入context的依赖即可!

现在我们学习的是Spring6,但是并没有Spring6只发布了里程碑版,并没有jar包(当然使用maven做项目管理也不需要下载jar包);需要引入依赖,并且引入依赖的同时也要引入仓库地址(因为还没有正式发布,需要内部的仓库地址)

注:其实spring-context会依赖core和bean的jar包等,但是我们使用maven就只需引入context的jar包即可,其它依赖的会自动导入!

<!--Spring6的正式版发布之前,这个仓库地址是需要的-->
<repositories>
  <repository>
    <id>repository.spring.milestone</id>
    <name>Spring Milestone Repository</name>
    <url>https://repo.spring.io/milestone</url>
  </repository>
</repositories>

<dependencies>
  <!--spring context依赖:使用的是6.0.0-M2里程碑版-->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>6.0.0-M2</version>
  </dependency>
</dependencies>

3. 第一个Spring程序

前期准备:

①打开IDEA创建Empty Project:spring6

②设置JDK版本17,编译器版本17

③设置IDEA的Maven:关联自己的maven

④在空的工程spring6中创建第一个模块:spring6-001-first

第一步:添加spring context的依赖和单元测试junit依赖,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.bjpowernode</groupId>
    <artifactId>spring6-001-first</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <!--配置多个仓库-->
    <repositories>
        <!--spring6里程碑的仓库-->
        <repository>
            <id>repository.spring.milestone</id>
            <name>Spring Milestone Repository</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>

    <dependencies>
        <!--spring context依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.0-M2</version>
        </dependency>
        <!--单元测试依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>
</project>

注意:打包方式jar!

当加入spring context的依赖之后,会关联引入其他依赖:

①spring aop:面向切面编程

②spring beans:IoC核心

③spring core:spring的核心工具包

④spring jcl:spring的日志包

⑤spring expression:spring表达式

第二步:定义bean:User,默认会调用无参构造方法

package com.bjpowernode.spring6.bean;
// 这是一个Bean,封装了用户的信息。Spring可以帮助我们创建User对象吗?
public class User {
   
}

第三步:编写spring的配置文件:spring.xml(名字随意),该文件放在类的根路径下(便于移植)。下图是使用IDEA工具自带的spring配置文件的模板进行创建。

此时就需要在配置文件中进行bean的配置,bean的id和class属性:

id属性:代表对象的唯一标识。

class属性:用来指定要创建的java对象的类名,这个类名必须是全限定类名(带包名)。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        
        <!--配置bean,这样spring才能帮助我们管理这个对象-->
        <bean id="userBean" class="com.bjpowernode.spring6.bean.User" />
</beans>

第四步:编写测试程序

先创建ClassPathXmlApplicationContext对象,参数是spring配置文件的路径;返回的是ApplicationContext 翻译为:应用上下文,其实就是Spring容器。
解释:ApplicationContext 就是一个接口,接口下有很多实现类,其中有一个实现类叫做:ClassPathXmlApplicationContext,是专门从类路径当中加载spring配置文件的一个Spring上下文对象。
②创建好ClassPathXmlApplicationContext对象,就可以调用getBean方法,参数是spring.xml配置文件当中的id,这样就可以根据bean的id从Spring容器中获取这个对象!      

package com.bjpowernode.spring6.test;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class FirstSpringTest {
    @Test
    public void testFirstSpringTest(){
        // 第一步:获取Spring容器对象
        // 这行代码只要执行:就相当于启动了Spring容器,解析spring.xml文件,并且实例化所有的bean对象,放到spring容器当中
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        // 第二步:根据bean的id从Spring容器中获取这个对象
        Object userBean = applicationContext.getBean("userBean");
        System.out.println(userBean);
    }
}

第五步:运行测试程序,验证Spring容器确实可以帮我们创建对象 

4. 第一个Spring程序详细剖析

(1)bean标签的id属性可以重复吗?

Vip.java

package com.powernode.spring6.bean;

public class Vip {
}

spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userBean" class="com.powernode.spring6.bean.User"/>
    <bean id="userBean" class="com.powernode.spring6.bean.Vip"/>
</beans>

运行测试程序:

通过测试得出:在spring的配置文件中id是不能重名!

(2)底层是怎么创建对象的?

 User.java:在User类中添加上无参数构造方法

package com.powernode.spring6.bean;

public class User {
    public User() {
        System.out.println("User的无参数构造方法执行");
    }
}

运行测试程序:

通过测试得知:创建对象时确实调用了无参数构造方法,并且是通过反射机制调用无参数构造方法。

如果提供一个有参数构造方法,不提供无参数构造方法会怎样呢?

package com.powernode.spring6.bean;

public class User {
    public User(String name){
        System.out.println("User的有参数构造方法执行");
    }
}

运行测试程序:

通过测试得知:spring是通过调用类的无参数构造方法来创建对象的,所以要想让spring给你创建对象,必须保证无参数构造方法是存在的。

Spring是如何创建对象的呢?原理是什么?

先通过dom4j解析spring.xml文件,从中获取class的全限定类名;然后通过反射机制调用无参数构造方法创建对象!

Class clazz = Class.forName("com.powernode.spring6.bean.User");
Object obj = clazz.newInstance();

(3)把创建好的对象存储到一个什么样的数据结构当中了呢?

存到一个Map集合,Map的key就是id,value就是创建的对象!

(4)spring配置文件的名字必须叫做spring.xml吗?

①这个spring配置文件名字是我们负责提供的,显然spring配置文件的名字是随意的。

②并且这个配置文件不一定就放在跟目录下,也可以先创建xml目录,然后把配置文件放到这个目录下也可以!

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("xml/beans.xml");

(5)像这样的beans.xml文件可以有多个吗?

再创建一个spring配置文件,起名:beans.xml,放到xml目录下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

      <bean id="vipBean" class="com.bjpowernode.spring6.bean.Vip" />
</beans>

编写测试

package com.bjpowernode.spring6.test;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class FirstSpringTest {
    @Test
    public void testFirstSpringTest(){
        // 第一步:获取Spring容器对象
        // 这行代码只要执行:就相当于启动了Spring容器,解析spring.xml文件,并且实例化所有的bean对象,放到spring容器当中
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml","xml/beans.xml");
        // 第二步:根据bean的id从Spring容器中获取这个对象
        Object userBean = applicationContext.getBean("userBean");
        System.out.println(userBean);
        Object vipBean = applicationContext.getBean("vipBean");
        System.out.println(vipBean);

    }
}

运行测试程序:

通过测试得知,spring的配置文件可以有多个,在ClassPathXmlApplicationContext构造方法的参数上传递文件路径即可!这是为什么呢?通过源码可以看到参数是一个可变长度参数:

(6)在配置文件中配置的类必须是自定义的吗,可以使用JDK中的类吗,例如:java.util.Date?

spring.xml中增加配置

<bean id="dateBean" class="java.util.Date"/>

编写测试

package com.bjpowernode.spring6.test;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class FirstSpringTest {
    @Test
    public void testFirstSpringTest(){
        // 第一步:获取Spring容器对象
        // 这行代码只要执行:就相当于启动了Spring容器,解析spring.xml文件,并且实例化所有的bean对象,放到spring容器当中
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml","xml/beans.xml");
        // 第二步:根据bean的id从Spring容器中获取这个对象
        Object userBean = applicationContext.getBean("userBean");
        System.out.println(userBean);
        Object vipBean = applicationContext.getBean("vipBean");
        System.out.println(vipBean);

        // 使用JDK中的类
        Object bean = applicationContext.getBean("dateBean");
        System.out.println(bean);

    }
}

运行测试程序:当然是可以的

(7)getBean()方法调用时,如果指定的id不存在会怎样?

运行测试程序:

通过测试得知:当id不存在的时候,会出现异常,而不是返回null!

(8)getBean()方法返回的类型是Object,如果访问子类的特有属性和方法时,还需要向下转型,有其它办法可以解决这个问题吗?  

对获取的时间进行格式化

spring.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!--配置bean,这样spring才能帮助我们管理这个对象-->
        <bean id="dateBean" class="java.util.Date" />
</beans>

编写测试

第一种方法:直接进行强制类型转换。

第二种方法:多传一个参数,这个参数指定要转换的类型,例如:要转换成Date类型就是Date.class。

package com.bjpowernode.spring6.test;

import com.bjpowernode.spring6.bean.User;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.text.SimpleDateFormat;
import java.util.Date;

public class FirstSpringTest {
    @Test
    public void testFirstSpringTest(){
        
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        // -------------第一种方法
        // 返回的是一个Object类型
        Object dateBean = applicationContext.getBean("dateBean");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 这个里面要传Date,需要强转
        Date date = (Date) dateBean;
        String nowDate = sdf.format(date);
        System.out.println(nowDate);
        // -------------第二种方法
        Date dateBean1 = applicationContext.getBean("dateBean", Date.class);
        String nowDate1 = sdf.format(dateBean1);
        System.out.println(nowDate1);
    }
}

执行结果:

(9)ClassPathXmlApplicationContext是从类路径中加载配置文件,如果没有在类路径当中,又应该如何加载配置文件呢?

例如:在d盘下的spring.xml,怎样去加载?

调用的方法都不同了,调用的是FileSystemXmlApplicationContext方法,并把文件的绝对路径传过去!

User.java

package com.bjpowernode.spring6.bean;

public class User {
    public void doSome(){
        System.out.println("doSome方法执行了");
    }
}

spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!--配置bean,这样spring才能帮助我们管理这个对象-->
        <bean id="userBean" class="com.bjpowernode.spring6.bean.User" />
        <bean id="dateBean" class="java.util.Date" />
</beans>

编写测试

package com.bjpowernode.spring6.test;

import com.bjpowernode.spring6.bean.User;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import java.text.SimpleDateFormat;
import java.util.Date;

public class FirstSpringTest {
    @Test
    public void testFirstSpringTest(){
        FileSystemXmlApplicationContext applicationContext = new FileSystemXmlApplicationContext("D:\\spring.xml");
        User user = applicationContext.getBean("userBean", User.class);
        user.doSome();
    }
}

运行结果:也能正常的加载创建对象 

(10)ApplicationContext的超级父接口BeanFactory

ApplicationContext接口的一个超级父接口是:BeanFactory,翻译为Bean工厂,就是能够生产Bean对象的一个工厂对象。
BeanFactory是IoC容器的顶级接口!
③实际上Spring的IoC容器底层实际上使用了:工厂模式
Spring底层的IoC是怎么实现的?XML解析 + 工厂模式 + 反射机制

(11)何时创建对象?

User.java

package com.bjpowernode.spring6.bean;

public class User {
    public User() {
        System.out.println("User的无参数构造方法执行。");
    }
}

spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!--配置bean,这样spring才能帮助我们管理这个对象-->
        <bean id="userBean" class="com.bjpowernode.spring6.bean.User" />
</beans>

编写测试

package com.bjpowernode.spring6.test;

import com.bjpowernode.spring6.bean.User;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import java.text.SimpleDateFormat;
import java.util.Date;

public class FirstSpringTest {
    @Test
    public void testFirstSpringTest(){
        // 此时就把对象已经创建出来了
        new ClassPathXmlApplicationContext("spring.xml");
    }
}

执行结果:

①实际上在执行new ClassPathXmlApplicationContext("spring.xml");时对象就创建出来了。

②调用getBean方法,只是从集合当中把数据取出来!

5. Spring6启用Log4j2日志框架

从Spring5之后,Spring框架支持集成的日志框架是Log4j2;如何启用日志框架?

第一步:在pom.xml中引入Log4j2的依赖

<!--log4j2的依赖-->
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.19.0</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-slf4j2-impl</artifactId>
  <version>2.19.0</version>
</dependency>

第二步: 在类的根路径下提供log4j2.xml配置文件

注:文件名固定为log4j2.xml,文件必须放到类根路径下!

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <loggers>
        <!--
            level指定日志级别,从低到高的优先级:
                ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
        -->
        <root level="DEBUG">
            <appender-ref ref="spring6log"/>
        </root>
    </loggers>

    <appenders>
        <!--输出日志信息到控制台-->
        <console name="spring6log" target="SYSTEM_OUT">
            <!--控制日志输出的格式-->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss SSS} [%t] %-3level %logger{1024} - %msg%n"/>
        </console>
    </appenders>

</configuration>

第三步:使用日志框架 

①第一步:调用LoggerFactory的getLogger方法,返回日志记录器对象,参数是某个具体的类,例如:获取FirstSpringTest类的日志记录器对象,参数就是FirstSpringTest.class,也就是说只要是FirstSpringTest类中的代码执行记录日志的话,就输出相关的日志信息。

②第二步:记录日志,根据不同的调用级别来输出日志。

package com.bjpowernode.spring6.test;

import com.bjpowernode.spring6.bean.User;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import java.text.SimpleDateFormat;
import java.util.Date;

public class FirstSpringTest {
    @Test
    public void testFirstSpringTest(){
        new ClassPathXmlApplicationContext("spring.xml");

        // 第一步:创建日志记录器对象
        Logger logger = LoggerFactory.getLogger(FirstSpringTest.class);
        // 第二步:记录日志,根据不同的级别来输出日志
        logger.info("我是一条消息");
        logger.debug("我是一条调试信息");
        logger.error("我是一条错误信息");
    }
}

执行结果:

前面我们设置的级别是 DEBUG ,级别比info和error级别都低,级别越高输出的信息越少,级别越低输出的信息越多;所以这三条日志都会输出!

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

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

相关文章

数学建模 latex 图片以及表格排版整理(overleaf)

无论是什么比赛&#xff0c;图片和表格的格式都非常重要&#xff0c;这边的重要不只是指规范性&#xff0c;还有抓住评委眼球的能力。 那么怎样抓住评委的眼球&#xff1f; 最重要的一点就是善用图片和表格&#xff08;当然撰写论文最重要的是逻辑&#xff0c;这个是需要长期…

CorelDRAW2023最新版序列号使用教程

CorelDRAW2023用起来非常顺手&#xff0c;旨在为用户解决因在工作上带来的问题&#xff0c;在业内可谓享有极高的声誉&#xff0c;是业内人士常用的一款工具&#xff0c;有了它&#xff0c;可以更好的帮助用户把握好各个方面的细节&#xff0c;减少其他方面的失误&#xff0c;让…

RabbitMQ交换机(Exchanges)

目录 一、概念 二、临时队列 三、绑定 四、Fanout&#xff08;扇出交换机&#xff09; &#xff08;一&#xff09;介绍 &#xff08;二&#xff09;实战 五、Direct&#xff08;直接交换机&#xff09; &#xff08;一&#xff09;介绍 &#xff08;二&#xff09;实…

【LeetCode】1255. 得分最高的单词集合

1255. 得分最高的单词集合 题目描述 你将会得到一份单词表 words&#xff0c;一个字母表 letters &#xff08;可能会有重复字母&#xff09;&#xff0c;以及每个字母对应的得分情况表 score。 请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」&#xff1a;能够由 …

我看谁还敢说不懂git

文章目录一、Git介绍1.1、Git的作用1.2、Git的理念1.3、Git的特点1.4、Git对比SVN二、Git的概念2.1、Git基础概念三、Git的基本操作3.1、使用Git管理一个代码仓库的流程3.2、Git常用命令介绍四、Git状态的变化五、Git安装和配置5.1、Git的安装5.2、Git的配置六、Git的高级操作6…

【阅读笔记】SecureML: A System for ScalablePrivacy-Preserving Machine Learning

1. Motivation 针对机器学习中的出现的数据隐私泄露的风险&#xff0c;提出了线性回归、逻辑回归以及简单神经网络的隐私保护模型。 2. Contributions 2.1 为线性回归、逻辑回归以及神经网络设计安全计算协议 2.1.1.1 线性回归 线性回归损失函数为&#xff1a; , 采用SG…

数据分析:某电商优惠卷数据分析

数据分析&#xff1a;某电商优惠卷数据分析 作者&#xff1a;AOAIYI 专栏&#xff1a;python数据分析 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;AOAIYI首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可…

单变量回归问题

单变量回归问题 对于某房价问题&#xff0c;x为房屋大小&#xff0c;h即为预估房价&#xff0c;模型公式为&#xff1a; hθ(x)θ0θ1xh_{\theta}(x)\theta_{0}\theta_{1}x hθ​(x)θ0​θ1​x 要利用训练集拟合该公式&#xff08;主要是计算θ0、θ1\theta_{0}、\theta_{1}θ…

JavaScript DOM和BOM

目录 查找html元素 1.通过id 2.通过标签名 3.通过类名 DOM 1.创建动态的HTML内容 2.修改元素内容 3.改变HTML属性 4.改变css样式 DOM事件 DOM节点 1.添加HTML元素 2.删除HTML元素 浏览器对象 1.Window对象 2.Screen对象 3.History对象 4.Location对象 5.Navi…

深入理解java虚拟机精华总结:jvm内存模型(运行时数据区域)、对象、OOM异常

深入理解java虚拟机精华总结&#xff1a;jvm内存模型、对象、OOM异常jvm内存模型对象对象的创建对象的内存布局对象的访问定位OOM异常Java堆溢出栈溢出方法区溢出直接内存溢出以前读过好几遍《深入理解java虚拟机》这本书&#xff0c;最近又打算重读一遍&#xff0c;并且做一些…

一个接口多个实现如何选择注入对应的Bean_@Primary_@Resource_@Qualifier_@ConditionalOnProperty

文章目录引入结论案例Primary 指定默认注入的BeanQualifier配合Autowired 按名称注入对应的BeanResource 默认按照类型注入&#xff0c;可指定名称注入ConditionalOnProperty 结合配置文件统一设置bean的注入引入 在springboot中&#xff0c;如果一个接口有多个实现&#xff0…

SpringMVC - 13 - SpringMVC执行流程

文章目录1、SpringMVC常用组件2、DispatcherServlet初始化过程a>初始化WebApplicationContextb>创建WebApplicationContextc>DispatcherServlet初始化策略3、DispatcherServlet调用组件处理请求a>processRequest()b>doService()c>doDispatch()d>processDi…

【Neo4j】图数据库CypherQueryLanguage随笔

CQL语言随笔 一、Cyther关系描述 如图&#xff1a;唐僧&#xff0c;孙悟空&#xff0c;白骨精三者的关系图&#xff1a; Cypher语言描述他们的关系&#xff1a; (孙悟空)<-[:赶走]-(唐僧)-[:被骗]->(白骨精)-[:被打死]->(孙悟空) 二、CQL语言的使用案例 创建结点…

七、HTTPTomcatServlet

1&#xff0c;Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 在我们日常的生活中&#xff0c;经常会使用浏览器去访问百度、京东、传智官网等这些网站&#xff0c;这些网站统称为Web网站。如下就是通…

_react

React 中 keys 的作用是什么&#xff1f; Keys是 React 用于追踪哪些列表中元素被修改、被添加或者被移除的辅助标识 在开发过程中&#xff0c;我们需要保证某个元素的 key 在其同级元素中具有唯一性。在 React Diff 算法中React 会借助元素的 Key 值来判断该元素是新近创建的还…

ADAS-可见光相机之Cmos Image Sensor

引言 “ 可见光相机在日常生活、工业生产、智能制造等应用有着重要的作用。在ADAS中更是扮演着重要的角色&#xff0c;如tesla model系列全车身10多个相机&#xff0c;不断感知周围世界。本文着重讲解下可见光相机中的CIS(CMOS Image Sensor)。” 定义 光是一种电磁波&…

如何在 iPhone 上恢复已删除的通话记录/通话记录

您的通话记录/通话记录可能很重要&#xff0c;尤其是当您想要拨打之前联系过但未保存的号码时。如果您碰巧删除了通话记录&#xff08;有意或无意&#xff09;&#xff0c;本指南将帮助您了解如何检索它们并找回您需要使用的所有记录。我们将根据您的情况和您拥有的工具讨论不同…

【Tomcat 】Tomcat 架构原理解析到架构设计借鉴

Tomcat 发展这么多年&#xff0c;已经比较成熟稳定。在如今『追新求快』的时代&#xff0c;Tomcat 作为 Java Web 开发必备的工具似乎变成了『熟悉的陌生人』&#xff0c;难道说如今就没有必要深入学习它了么&#xff1f;学习它我们又有什么收获呢&#xff1f; 静下心来&#…

一文让你彻底理解关于消息队列的使用

一、消息队列概述 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ&#xff0c;Rabbit…

Spring Security认证研究

1.项目中认证的三种方式&#xff1a; 1.统一认证 认证通过由认证服务向给用户颁发令牌&#xff0c;相当于访问系统的通行证&#xff0c;用户拿着令牌去访问系统的资源。 2.单点登录&#xff0c;对于微服务项目&#xff0c;因为包含多个模块&#xff0c;所以单点登录就是使得用户…