当前位置: 首页 > news >正文

Spring Bean的生命周期总结(包含面试题)

目录

一、Bean的初始化过程

1. 加载Spring Bean

2. 解析Bean的定义

3. Bean属性定义

4.  BeanFactoryPostProcessor 扩展接口 

5. 实例化Bean对象

6. Aware感知

7. 初始化方法

8. 后置处理

9. destroy 销毁 

二、Bean的单例与多例模式 

2.1 单例模式(Singleton)

2.2 多例模式(Prototype)

2.3 案例演示:

2.3.1 单例模式:

2.3.2 多例模式:

2.4 总结

三、关于bean的生命周期面试题

1. 请详细描述Spring框架Bean的生命周期包括哪些阶段?

2. 请详细描述一下Spring Bean的初始化过程

3. Spring Bean的销毁过程是怎样的?

4. Spring Bean的后置处理器是什么?在项目中如何使用它?

5. Spring Bean的生命周期中,哪些方法可以进行自定义操作?

6. 什么是Bean的作用域?Spring中有哪些Bean的作用域?

7. Bean的作用域是如何实现的?请描述其原理。

8. 请解释Spring中的延迟初始化是什么,如何配置延迟初始化?


一、Bean的初始化过程

1. 加载Spring Bean

        通过XML、Java annotation(注解)以及Java Configuration(配置类)等方式加载Spring Bean:这是指在Spring容器启动时,通过配置文件、注解或配置类等方式告诉Spring框架需要创建哪些Bean。

2. 解析Bean的定义

BeanDefinitionReader:这是一个解析器,它将Bean的定义解析成Spring内部的BeanDefinition结构。可以将其理解为将配置文件中的<bean>标签转换为Spring框架内部使用的数据结构。

可理解为:将spring.xml中的 <bean> 标签转换成BeanDefinition结构有点类似于XML解析。

3. Bean属性定义

BeanDefinition:它包含了Bean的各种属性和方法,例如id(标识符)、class(类名)、scope(作用域)、ref(依赖的Bean)等。BeanDefinition实际上是将配置文件中的<bean>标签的定义信息存储到对应的BeanDefinition属性中。

例如:

<bean id="" class="" scope=""> -----> BeanDefinition(id/class/scope)

4.  BeanFactoryPostProcessor 扩展接口 

BeanFactoryPostProcessor这是Spring容器的扩展接口,它在Spring容器加载完BeanDefinition之后、Bean实例化之前执行。它可以对Bean的元数据(BeanDefinition)进行加工处理,例如填充或修改BeanDefinition的属性。

5. 实例化Bean对象

BeanFactory:它是Bean的工厂,根据我们的要求生产各种不同的Bean。BeanFactory根据配置文件中的BeanDefinition信息来实例化Bean对象,并进行属性赋值。(根据class属性反射机制实例化对象,反射赋值设置属性)

6. Aware感知

Aware 感知是一种机制,它允许在Bean的生命周期中获取对Spring容器的访问权限。通过实现相应的Aware接口,Bean可以获得与Spring容器的交互能力,以便在特定的生命周期阶段执行自定义操作。

在Spring框架中,有多个Aware接口可供实现,每个接口都提供了不同的功能。以下是一些常见的Aware接口及其作用:

  1. BeanNameAware:通过实现BeanNameAware接口,Bean可以获取自己在Spring容器中的名称。这对于需要知道自己在容器中的标识的Bean非常有用。

  2. ApplicationContextAware:通过实现ApplicationContextAware接口,Bean可以获取对Spring应用上下文的引用。这使得Bean能够在需要时访问Spring容器中的其他Bean或执行其他与容器相关的操作。

  3. BeanFactoryAware:通过实现BeanFactoryAware接口,Bean可以获取对Spring Bean工厂的引用。这使得Bean能够在需要时访问Bean工厂中的其他Bean或执行其他与Bean工厂相关的操作。

        通过实现这些Aware接口,Bean可以在初始化过程中获得对Spring容器的访问权限,并在需要时执行特定的操作。这为开发人员提供了更大的灵活性和控制权,使得他们能够根据自己的需求自定义Bean的行为。

7. 初始化方法

        如果Bean定义中指定了初始化方法,容器会在属性赋值完成后调用该方法进行一些初始化操作。可以使用@PostConstruct注解或者实现InitializingBean接口来指定初始化方法。如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。

<bean id="paramAction" class="com.ycxw.beanLife.ParamAction" init-method="init"></bean>

8. 后置处理

BeanPostProcessor:它是一个后置处理器,在Bean对象实例化和依赖注入完成后,在显示调用初始化方法之前或之后添加自定义的逻辑。可以将其类比为AOP中的环绕通知。

注:只有当检测到Bean对象实现了BeanPostProcessor接口时,才会执行Before和After方法。

BeanPostProcessor的执行顺序是:

Before方法 -> 初始化Bean(InitializingBean接口和init-method方法)-> After方法。

9. destroy 销毁 

destroy:这是Bean的销毁阶段,如果这个Bean的Spring配置中配置了destroy-method属性,在Spring容器关闭时调用。在销毁阶段,可以执行一些清理工作,例如释放资源等。

<bean id="paramAction" class="com.ycxw.beanLife.ParamAction" destroy-method="destroy"></bean>

二、Bean的单例与多例模式 

2.1 单例模式(Singleton)

  • 单例模式是指在整个应用程序中只创建一个Bean实例。
  • 当使用单例模式时,Spring容器在首次请求该Bean时创建一个实例,并将其缓存起来。之后的每次请求都会返回同一个实例。
  • 优点:减少了对象创建和销毁的开销,节省了系统资源。
  • 缺点:由于共享同一个实例,可能导致状态信息被多个线程共享,需要注意线程安全问题。

2.2 多例模式(Prototype)

  • 多例模式是指每次请求时都会创建一个新的Bean实例。
  • 当使用多例模式时,Spring容器在每次请求该Bean时都会创建一个新的实例,而不是返回之前创建的实例。
  • 优点:每次请求都会返回一个全新的实例,避免了状态信息共享的问题。
  • 缺点:频繁创建和销毁对象可能导致系统资源消耗增加。

2.3 案例演示:

假设我们有一个简单的Counter类,用于计数:

public class Counter {private int count;public int getCount() {return count;}public void increment() {count++;}
}

我们将使用Spring配置来演示单例和多例模式的区别。

2.3.1 单例模式:

<bean id="counter" class="com.example.Counter" scope="singleton" />
public class SingletonDemo {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");Counter counter1 = context.getBean("counter", Counter.class);Counter counter2 = context.getBean("counter", Counter.class);counter1.increment();System.out.println("Counter 1: " + counter1.getCount()); // 输出:Counter 1: 1System.out.println("Counter 2: " + counter2.getCount()); // 输出:Counter 2: 1}
}

在单例模式下,counter1counter2引用的是同一个实例,因此它们的计数值是相同的。

2.3.2 多例模式:

<bean id="counter" class="com.example.Counter" scope="prototype" />
public class PrototypeDemo {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");Counter counter1 = context.getBean("counter", Counter.class);Counter counter2 = context.getBean("counter", Counter.class);counter1.increment();System.out.println("Counter 1: " + counter1.getCount()); // 输出:Counter 1: 1System.out.println("Counter 2: " + counter2.getCount()); // 输出:Counter 2: 0}
}

在多例模式下,counter1counter2引用的是不同的实例,因此它们的计数值是独立的。

2.4 总结

        单例模式和多例模式各有优缺点,具体使用哪种模式取决于应用程序的需求和设计考虑。在需要共享状态或资源的场景下,可以使用单例模式;在需要独立状态或避免状态共享的场景下,可以使用多例模式。

三、关于bean的生命周期面试题

1. 请详细描述Spring框架Bean的生命周期包括哪些阶段?

在Spring框架中,Bean的生命周期包括以下几个阶段:

  1. 实例化(Instantiation):在这个阶段,Spring会根据配置或注解创建Bean的实例。这可以通过构造函数实例化、工厂方法或者Bean容器中的其他方式来实现。

  2. 属性赋值(Population):在实例化后,Spring会通过依赖注入(Dependency Injection)或者属性赋值的方式,将Bean的属性值设置好。这可以通过setter方法注入或者字段注入来实现。

  3. 初始化(Initialization):在属性赋值完成后,Spring会调用Bean的初始化方法。这个方法可以通过实现InitializingBean接口的afterPropertiesSet()方法,或者在配置文件中通过init-method属性指定。

  4. 使用(In Use):在初始化完成后,Bean进入可用状态,可以被其他对象引用和使用。

  5. 销毁(Destruction):当Bean不再被需要时,Spring会调用Bean的销毁方法进行资源释放和清理工作。这个方法可以通过实现DisposableBean接口的destroy()方法,或者在配置文件中通过destroy-method属性指定。

        Bean的销毁阶段只有在容器关闭时才会触发,或者在使用单例作用域的Bean时,当Bean不再被引用时被垃圾回收器回收。以上是Spring框架中Bean的典型生命周期阶段,每个阶段都提供了相应的扩展点,可以在不同阶段进行自定义操作。

2. 请详细描述一下Spring Bean的初始化过程

👆👆👆 请看本文章第一点内容 !!!👆👆👆

3. Spring Bean的销毁过程是怎样的?

Spring Bean的销毁过程可以分为以下几个步骤:

  1. 关闭容器:当Spring容器关闭时,会触发Bean的销毁过程。这可以通过调用ApplicationContextclose()方法或者销毁容器的生命周期回调来实现。

  2. 调用Bean的销毁方法:在容器关闭时,Spring会调用Bean的销毁方法进行资源释放和清理工作。这个方法可以通过实现DisposableBean接口的destroy()方法,或者在配置文件中通过destroy-method属性指定。

  3. 应用Bean后置处理器:在销毁方法调用之前和之后,Spring会应用注册的Bean后置处理器(BeanPostProcessor)。后置处理器可以对Bean进行额外的处理,例如在Bean销毁前后进行一些自定义逻辑。

        Bean的销毁阶段只有在容器关闭时才会触发,或者在使用单例作用域的Bean时,当Bean不再被引用时被垃圾回收器回收。对于原型作用域的Bean,默认情况下,Spring不会管理其销毁过程,需要开发者手动进行资源释放。

        同时,可以通过实现DisposableBean接口或者在配置文件中指定destroy-method属性来定义Bean的销毁方法。在销毁方法中,可以进行一些资源释放、数据库连接关闭等清理工作,确保系统的正常关闭和资源的释放。

4. Spring Bean的后置处理器是什么?在项目中如何使用它?

Spring Bean后置处理器(BeanPostProcessor)是一种特殊类型的Bean,用于在容器实例化、配置和初始化Bean的过程中进行自定义的处理操作。

在项目中使用Bean后置处理器,可以通过以下步骤:

  1. 创建后置处理器类:实现BeanPostProcessor接口,该接口包含两个方法:postProcessBeforeInitialization()postProcessAfterInitialization()

    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.BeanPostProcessor;public class MyBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {// 在Bean初始化之前进行自定义处理操作return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {// 在Bean初始化之后进行自定义处理操作return bean;}
    }
    
  2. 注册后置处理器:在Spring配置文件中,将自定义的后置处理器注册到容器中。

    <bean class="com.example.MyBeanPostProcessor" />
    
  3. 启动容器:在项目启动时,启动Spring容器,容器会自动识别并应用注册的后置处理器。

    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    

通过使用Bean后置处理器,可以在Bean的初始化前后进行自定义操作,例如对Bean进行增强、属性修改、代理等。常见的应用场景包括:

  • 属性值注入前后的自定义处理。
  • 在Bean初始化前后执行一些特定的逻辑。
  • 动态代理Bean的生成。
  • 对特定类型的Bean进行特殊处理等。

        需要注意的是,Bean后置处理器会对容器中的所有Bean实例进行处理,因此在编写后置处理器时需要注意逻辑的准确性和性能的影响。

5. Spring Bean的生命周期中,哪些方法可以进行自定义操作?

在Spring Bean的生命周期中,可以进行自定义操作的方法主要包括以下几个:

  1. 初始化方法(Initialization methods):

    • 在配置文件中通过init-method属性指定的方法。
    • 在Bean类中实现InitializingBean接口,并重写afterPropertiesSet()方法。

    初始化方法用于在Bean实例化后,属性注入完成之后执行一些初始化逻辑,例如初始化资源、建立连接等。您可以根据需要选择其中一种方式来定义初始化方法。

  2. 销毁方法(Destruction methods):

    • 在配置文件中通过destroy-method属性指定的方法。
    • 在Bean类中实现DisposableBean接口,并重写destroy()方法。

    销毁方法用于在容器销毁Bean之前执行一些清理操作,例如释放资源、关闭连接等。您可以根据需要选择其中一种方式来定义销毁方法。

  3. 后置处理器(Post-processors):

    后置处理器可以在Bean的初始化前后对Bean进行自定义处理。postProcessBeforeInitialization()方法在初始化方法调用之前被调用,postProcessAfterInitialization()方法在初始化方法调用之后被调用。通过实现这些方法,您可以对Bean进行额外的操作,例如修改属性值、添加代理等。

  4. 实现BeanPostProcessor接口,并重写postProcessBeforeInitialization()postProcessAfterInitialization()方法。

        除了上述方法外,还可以使用其他扩展机制来进行自定义操作,例如使用@PostConstruct@PreDestroy注解来标记初始化方法和销毁方法,或者通过实现BeanFactoryPostProcessorBeanDefinitionRegistryPostProcessor接口来对Bean的定义进行修改。

        通过自定义这些方法,您可以在Spring Bean的生命周期中添加自己的逻辑,以满足特定的需求和业务场景。

6. 什么是Bean的作用域?Spring中有哪些Bean的作用域?

在Spring中,Bean的作用域(Scope)指的是定义了Bean的生命周期和可见范围的一组规则。作用域决定了在不同的上下文中访问和使用Bean的方式。

Spring框架提供了以下几种常用的Bean作用域:

  1. Singleton(默认):单例作用域。在整个应用程序中,只会创建一个Bean实例,并且所有对该Bean的请求都会返回同一个实例。这是Spring的默认作用域。

  2. Prototype:原型作用域。每次请求Bean时,都会创建一个新的Bean实例。每个实例都有自己的状态,因此在使用时需要注意管理和维护。

  3. Request:请求作用域。每个HTTP请求都会创建一个新的Bean实例,并且该Bean实例仅在当前请求的范围内可见。在同一个请求内的不同组件可以共享同一个实例。

  4. Session:会话作用域。每个HTTP会话(Session)都会创建一个新的Bean实例,并且该Bean实例仅在当前会话的范围内可见。在同一个会话内的不同请求可以共享同一个实例。

  5. Global Session:全局会话作用域。仅在基于portlet的web应用中有效。它类似于Session作用域,但是不同portlet之间可以共享同一个实例。

        除了上述常用的作用域,Spring还提供了其他一些作用域,如WebSocket作用域、Application作用域等,用于满足特定的应用需求。

        要指定Bean的作用域,可以使用@Scope注解或在XML配置文件中进行配置。例如,使用@Scope("prototype")将Bean的作用域设置为原型作用域。

        需要根据具体的业务需求和场景选择合适的Bean作用域。默认情况下,使用单例作用域是最常见和推荐的方式,但在某些情况下,原型作用域或其他作用域可能更适合。

7. Bean的作用域是如何实现的?请描述其原理。

在Spring中,Bean的作用域是通过Bean的创建和管理方式来实现的。不同作用域的Bean会有不同的创建和销毁策略。

  1. Singleton作用域:

    • 当容器启动时,Spring会创建并初始化Singleton作用域的Bean实例,并将其放入容器中的单例缓存池中。
    • 之后,每次请求该Bean时,容器会直接从单例缓存池中返回已经创建好的Bean实例。
    • Singleton作用域的Bean在容器关闭时会被销毁。
  2. Prototype作用域:

    • 当容器接收到对Prototype作用域Bean的请求时,会创建一个新的Bean实例。
    • 容器会对该实例进行初始化和依赖注入,并返回给请求方。
    • 对Prototype作用域的Bean,容器不会进行进一步的管理和跟踪,不负责其生命周期的管理。因此,在使用Prototype作用域的Bean时,需要手动管理其销毁。
  3. Request作用域和Session作用域:

    • 当容器接收到对Request作用域或Session作用域的Bean的请求时,会检查当前的请求或会话中是否存在对应的Bean实例。
    • 如果存在,则直接返回该实例;如果不存在,则创建一个新的Bean实例并放入请求或会话中,以便后续的访问和共享。
    • Request作用域和Session作用域的Bean在请求或会话结束时会被销毁。

        实现Bean作用域的关键在于容器的管理和跟踪机制。容器会根据作用域的不同,采取相应的策略来创建、缓存和销毁Bean实例。对于Singleton作用域的Bean,容器会负责管理其单例缓存池;对于Prototype作用域的Bean,容器只负责创建实例,不负责管理其生命周期;对于Request作用域和Session作用域的Bean,容器会将实例与请求或会话关联起来,以便后续的访问和共享。

        需要注意的是,作用域仅仅决定了Bean实例的创建和可见范围,并不影响Bean定义本身。因此,无论是Singleton作用域还是Prototype作用域,Bean的定义方式都是相同的,只是在创建和管理上有所区别。

8. 请解释Spring中的延迟初始化是什么,如何配置延迟初始化?

在Spring中,延迟初始化(Lazy Initialization)是指在容器启动时不立即创建所有的Bean实例,而是在第一次使用该Bean时才进行创建。这可以有效地减少启动时间和资源消耗,特别是对于那些初始化耗时较长或者很少被使用的Bean。

要配置延迟初始化,可以使用两种方式:

  1. 使用注解配置:

    • 在类级别上使用@Lazy注解,表示该类的Bean实例需要延迟初始化。例如:@Lazy
    • 在XML配置文件中,使用lazy-init="true"属性来配置延迟初始化。例如:
      <bean id="myBean" class="com.example.MyBean" lazy-init="true" />
      
  2. 使用编程方式配置:

    • 在Java配置类中,使用@Lazy注解来标记需要延迟初始化的Bean。例如:@Lazy
    • 在XML配置文件中,使用lazy-init="true"属性来配置延迟初始化。例如:
      <bean id="myBean" class="com.example.MyBean" lazy-init="true" />
      

        无论使用注解还是XML配置,配置了延迟初始化的Bean在容器启动时不会被立即创建。而是在第一次被请求或者被依赖注入时才会进行实例化和初始化。这样可以延迟Bean的创建,节省资源并提高应用程序的启动性能。

        需要注意的是,延迟初始化只适用于Singleton作用域的Bean。对于Prototype作用域的Bean,Spring无法延迟初始化,因为每次请求都需要创建一个新的实例。

        延迟初始化可以根据具体的业务需求和性能考虑来选择是否使用。对于那些启动时间较长或者很少被使用的Bean,延迟初始化可以提高应用程序的启动性能和资源利用率。但对于那些频繁被使用的Bean,延迟初始化可能会导致延迟的开销,需要权衡利弊进行选择。

相关文章:

Spring Bean的生命周期总结(包含面试题)

目录 一、Bean的初始化过程 1. 加载Spring Bean 2. 解析Bean的定义 3. Bean属性定义 4. BeanFactoryPostProcessor 扩展接口 5. 实例化Bean对象 6. Aware感知 7. 初始化方法 8. 后置处理 9. destroy 销毁 二、Bean的单例与多例模式 2.1 单例模式&#xff08;Sin…...

SpringjDBCTemplate_spring25

1、首先导入两个包&#xff0c;里面有模板 2、transtion事务 jDbc操作对象&#xff0c;底层默认的是事务&#xff1a; 3、我们java一般对实体类进行操作。 4、第一步写好坐标。 创建一个Account表 数据修改用update 数据进去了...

设计模式——桥接模式

引用 桥我们大家都熟悉&#xff0c;顾名思义就是用来将河的两岸联系起来的。而此处的桥是用来将两个独立的结构联系起来&#xff0c;而这两个被联系起来的结构可以独立的变化&#xff0c;所有其他的理解只要建立在这个层面上就会比较容易。 基本介绍 桥接模式&#xff08;Br…...

改进YOLO系列:2.添加ShuffleAttention注意力机制

添加ShuffleAttention注意力机制 1. ShuffleAttention注意力机制论文2. ShuffleAttention注意力机制原理3. ShuffleAttention注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. ShuffleAttention注意力机制论文 论文题目:SA-NET: SHUFFLE ATTENTION …...

利用Opencv实现人像迁移

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用Opencv实现人像迁移&#xff0c;欢迎大家一起参与探讨交流~ 本文目录&#xff1a; 一、实验要求二、实验环境三、实验原理及操作1.照片准备2.图像增强3.实现美颜功能4.背景虚化5.图像二值化处理6.人…...

Lnton羚通算法算力云平台在环境配置时 OpenCV 无法显示图像是什么原因?

问题&#xff1a; cv2.imshow 显示图像时报错&#xff0c;无法显示图像 0%| | 0/1 [00:00<…...

【JavaEE进阶】MyBatis的创建及使用

文章目录 一. MyBatis简介二. MyBatis 使用1. 数据库和数据表的创建2. 创建Mybatis项目2.1 添加MyBatis框架支持2.2 设置MyBatis配置信息 3. MyBatis开发流程4. MyBatis查询数据库测试 三. MyBatis 流程1. MyBatis 查询数据库流程2. MyBatis 框架交互流程图 一. MyBatis简介 M…...

职业学院物联网实训室建设方案

一、概述 1.1专业背景 物联网&#xff08;Internet of Things&#xff09;被称为继计算机、互联网之后世界信息产业第三次浪潮&#xff0c;它并非一个全新的技术领域&#xff0c;而是现代信息技术发展到一定阶段后出现的一种聚合性应用与技术提升&#xff0c;是随着传感网、通…...

3 个 ChatGPT 插件您需要立即下载3 ChatGPT Extensions You need to Download Immediately

在16世纪&#xff0c;西班牙探险家皮萨罗带领约200名西班牙士兵和37匹马进入了印加帝国。尽管印加帝国的军队数量达到了数万&#xff0c;其中包括5,000名精锐步兵和3,000名弓箭手&#xff0c;他们装备有大刀、长矛和弓箭等传统武器。但皮萨罗的军队中有100名火枪手&#xff0c;…...

屏蔽socket 实例化时,握手阶段报错信息WebSocket connection to ‘***‘ failed

事情起因是这样的&#xff1a; 我们网站是需要socket链接实行实时推送服务&#xff0c;有恶意竞争对手通过抓包或者断网&#xff0c;获取到了我们的socket链接地址&#xff0c;那么他就可以通过java写一个脚本无限链接这个socket地址。形成dos攻击。使socket服务器资源耗尽&…...

单发多框检测(SSD)【动手学深度学习】

单发多框检测模型主要由一个基础网络块和若干多尺度特征块串联而成。基本网络用于从输入图像中提取特征,可以使用深度卷积神经网络,原论文中选用了在分类层之前阶段的VGG,现在也常用ResNet替代。 我们可以设计基础网络,使它输出的高和宽较大,这样基于该特征图生成的锚框数…...

“RFID与光伏板的完美融合:探索能源科技的新时代!“

随着科技的不断发展&#xff0c;人类创造出了许多令人惊叹的发明。其中&#xff0c;RFID&#xff08;Radio Frequency Identification&#xff09;技术的应用在各个领域日益广泛。最近的研究表明&#xff0c;将RFID技术应用于光伏板领域&#xff0c;不仅可以提高光伏板的效率&a…...

算法leetcode|71. 简化路径(rust重拳出击)

文章目录 71. 简化路径&#xff1a;样例 1&#xff1a;样例 2&#xff1a;样例 3&#xff1a;样例 4&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 71. 简化路径&#xff1a;…...

网络技术Vlan技术STP(第一课)

一 Vlan技术的学习 对命令的增删改查 #### 1&#xff09;创建vlan[SW1]vlan 2 [2-4094] 创建vlan[SW1]vlan batch 10 20 30 创建多个不连续的vlan[SW1]display vlan 查看vlan信息[SW1]vlan batch 50 to 60创建多个连续的vlan[SW1]vlan2[SW1-vlan2]description caiwu添加描述信…...

SpringBoo t+ Vue 微人事 (十一)

职位修改操作 在对话框里面做编辑的操作 添加对话框 <el-dialogtitle"修改职位":visible.sync"dialogVisible"width"30%"><div><el-tag>职位名称</el-tag><el-input size"small" class"updatePosIn…...

自动驾驶卡车量产-第一章-用户需求

1、中国干线物流行业现状 万亿级市场&#xff0c;规模巨大。由中重卡承运的干线运输占到整体公路货运市场的82%&#xff0c;全国中重卡保有量约730 万台1&#xff0c;市场规模达4.6 万亿元1&#xff0c;体量全球第一&#xff0c;超过同城物流及乘用出租市场规模之和。同样&…...

Nginx 配置文件的完整指南 (一)

文章目录 一、简介1.1 配置文件一览 二、全局配置2.0 user2.1 worker_processes2.2 events模块2.3 http模块 三、server模块3.1 listen3.2 server_name3.3 location&#xff1a;请求处理位置 Nginx 配置文件的完整指南 (二) 一、简介 Nginx是一款高性能的Web服务器和反向代理服…...

css3+js 画出爱心特效

要使用CSS3和JavaScript绘制爱心特效&#xff0c;可以使用CSS3的动画和过渡效果来创建爱心的形状&#xff0c;并使用JavaScript来控制动画的触发和交互。以下是一个简单的示例代码&#xff1a; HTML: <div class"heart"></div> <button onclick&quo…...

蔚来李斌卖手机:安卓系统,苹果售价,一年一发

‍作者 | Amy 编辑 | 德新 车圈大佬的玩法真让人寻不着套路&#xff01; 苹果的库克和小米的雷布斯&#xff0c;甚至是FF贾老板准备许久&#xff0c;都想分一块新能源车的蛋糕&#xff0c;蔚来李斌却反手进军手机界&#xff0c;从宣布造手机到手机入网仅仅隔了一年。 近期&a…...

0008__浏览器层面缓存 Etag If-None-Match等详解

浏览器层面缓存 Etag & If-None-Match等详解_if-none-match:_shadow_zed的博客-CSDN博客...

Idea 快捷键整理

Idea快捷键和自动代码补全汇总 idea快捷键汇总 Ctrl 快捷键说明Ctrl F在当前文件进行文本查找 &#xff08;必备&#xff09;Ctrl R在当前文件进行文本替换 &#xff08;必备&#xff09;Ctrl Z撤销 &#xff08;必备&#xff09;Ctrl Y删除光标所在行 或 删除选中的行 &am…...

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——假言——第一节 充分条件

文章目录 第一节 充分条件假言命题-那么,就,则真题(2013-29)-假言-充分假言-那么,就,则-变形推理真题(2014-44)-假言-充分假言-那么,就,则-(1)建模-“那么/就/则”-前推后真题(2018-37)-假言-充分假言-那么,就,则-(1)建模-“那么/就/则”-前推后;-(2)A→…...

LSTM模型

目录 LSTM模型 LSTM结构图 LSTM的核心思想 细胞状态 遗忘门 输入门 输出门 RNN模型 LRNN LSTM模型 什么是LSTM模型 LSTM (Long Short-Term Memory)也称长短时记忆结构,它是传统RNN的变体,与经典RNN相比能够有效捕捉长序列之间的语义关联,缓解梯度消失或爆炸现象.同时LS…...

抢红包小程序

抢红包小程序 红包大战 # urls.pyfrom django.urls import pathfrom . import viewsurlpatterns [ path(login/, views.login, namelogin), path(create_red_packet/, views.create_red_packet, namecreate_red_packet), path(join_red_packet/<int:red_packet_id…...

UVA 10006 埃氏筛法+快速幂

本题目使用费马定理时&#xff0c;我随机定义了10个数字&#xff0c;循环用费马小定理判断&#xff0c;数组中的值不用和我的相同&#xff0c;随机即可。 #include <iostream> using namespace std; typedef unsigned long long ll; bool isPrime[65007]; ll a[10]; voi…...

C++--红黑树

1.什么是红黑树 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出俩倍&#xff0c;因…...

Unity 找不到 Navigation 组件的解决

当我们想利用unity 里面的Navigation 组件来实现我们的物体的自动导航时&#xff0c;有时竟然会发现我们的菜单栏里面找不到 该组件 这时我们应该怎么办&#xff1f; 请确保你的项目中已经导入了Unity的AI模块。要导入该模块&#xff0c;请打开"Project Settings"&am…...

【js】时间和时间戳转换、日期格式化

1、时间戳转换日期方法 &#xff08;格式&#xff1a;2023-08-17&#xff09; function timestampToDate(date) {var date new Date(date);var YY date.getFullYear() -;var MM (date.getMonth() 1 < 10 ? 0 (date.getMonth() 1) : date.getMonth() 1) -;var DD …...

glog体验第一天(0)glog介绍和安装

在Ubuntu上安装glog&#xff0c;可以按照以下步骤进行操作&#xff1a; 打开终端&#xff0c;使用以下命令更新本地软件包列表&#xff1a; sudo apt-get update然后&#xff0c;使用以下命令安装glog库及其开发工具&#xff1a; sudo apt-get install -y libgoogle-glog-de…...

Android 13像Settings一样获取SIM卡信息

一.背景 由于客户定制的Settings里面需要获取到SIM卡信息,所以需要实现此功能。 目录 一.背景 二.前提条件 三.调用api 二.前提条件 首先应用肯定要是系统应用,并且导入framework.jar包,具体可以参考: Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能_…...

Can‘t find end of central directory : is this a zip file ? at XMLHttpRequest

导出woed出现这个报错,原因其实很简单,路径写错了, 这个word首先必须是docx格式,然后必须放在public文件包下 如果放在public文件包下还没有用,则放在public包下 参考帖子: https://www.cnblogs.com/hejun26/p/13647927.html...

基于SpringBoot+Thymeleaf仓库管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着信息技术的快速发…...

ubuntu20.04磁盘满了 /dev/mapper/ubuntu--vg-ubuntu--lv 占用 100%

问题 执行 mysql 大文件导入任务&#xff0c;最后快完成了&#xff0c;查看结果发现错了&#xff01;悲催&#xff01;都执行了 两天了 The table ‘XXXXXX’ is full &#xff1f; 磁盘满了&#xff1f; 刚好之前另一个 centos 服务器上也出现过磁盘满了&#xff0c;因此&a…...

【制作npm包4】api-extractor 学习

制作npm包目录 本文是系列文章&#xff0c; 作者一个橙子pro&#xff0c;本系列文章大纲如下。转载或者商业修改必须注明文章出处 一、申请npm账号、个人包和组织包区别 二、了解 package.json 相关配置 三、 了解 tsconfig.json 相关配置 四、 api-extractor 学习 五、npm包…...

神经网络基础-神经网络补充概念-52-正则化网络的激活函数

概念 正则化是一种用于减少过拟合&#xff08;overfitting&#xff09;的技术&#xff0c;可以在神经网络的各个层次中应用&#xff0c;包括激活函数。激活函数的正则化主要目的是减少神经网络的复杂度&#xff0c;防止网络在训练集上过度学习&#xff0c;从而提高泛化能力。 …...

代码随想录训练营day56| 583. 两个字符串的删除操作 72. 编辑距离

TOC 前言 代码随想录算法训练营day56 一、Leetcode 583. 两个字符串的删除操作 1.题目 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea",…...

神经网络基础-神经网络补充概念-55-为什么是ML策略

“ML策略”&#xff08;Machine Learning Strategies&#xff09;是指在解决机器学习问题时&#xff0c;采取的一系列方法、技巧和策略。选择适当的ML策略对于获得高质量的模型和结果非常重要。以下是为什么要考虑ML策略的一些原因&#xff1a; 问题适应性&#xff1a;不同的机…...

C++初阶语法——内部类

前言&#xff1a;内部类&#xff0c;顾名思义是定义在类中的类&#xff0c;许多人会以为它属于外部的类&#xff0c;实际上并不是&#xff0c;它们是两个独立的类&#xff0c;但是内部类受外部类类域的限制。 目录 一.概念二.特性1.内部类和外部类相互独立2.内部类是外部类的友…...

Java基础(十四)面向对象编程 OOP 多态

Java面向对象基础知识笔记&#xff08;四&#xff09; 1. 对象数组的使用 在Java中&#xff0c;我们可以创建包含对象的数组。对象数组是一种特殊类型的数组&#xff0c;其中每个元素都是一个对象的引用。你可以将任何类的对象存储在对象数组中&#xff0c;并通过索引来访问和操…...

【Android】解决Lint found fatal errors while assembling a release target

报错信息&#xff1a; Android在debug模式下打包没有问题&#xff0c;但是在打包release版本时出现一下问题&#xff1a; 结果图 原因 我项目的原因是因为把正式、测试地址放到代码里了&#xff0c;忘记选中正式环境的地址&#xff0c;导致打正式包有问题&#xff1b;大家如果…...

CF1195E OpenStreetMap 题解

很好的单调队列题。 题目传送门 题目意思&#xff1a; 给定一个 n m n\times m nm 的矩阵&#xff0c;求出所有大小为 a b a\times b ab 的子矩形中的最小值的和。 思路&#xff1a; 通过题目给的要求建立二维数组 h h h。通过单调队列一行一行地扫&#xff0c;将扫出来…...

微信营销系统如何使用效果会更好

微信作为中国最大的社交平台之一&#xff0c;已经成为企业私域营销的重要阵地。在这个庞大的社交网络中&#xff0c;如何使用微信营销系统&#xff0c;将直接影响到企业的营销效果。本文将深入探讨如何更好地利用微信营销系统&#xff0c;以实现更好的私域营销效果。 1. 确定营…...

Linux开机启动程序添加root权限

Linux添加开机启动程序 Debain、Ubuntu系列Linux开机之后会执行/etc/rc.local文件中的命令&#xff0c;所以&#xff0c;如果是想添加登陆用户所具有权限的操作&#xff0c;可以在文件中exit 0之前添加开机自动执行的脚本命令。或者将执行脚本的权限修改为当前登录用户具有执行…...

安卓13解决链接问题

作为Android用户&#xff0c;你可能已经注意到了一个问题——Android 13不再支持PPTP协议。但请别担心&#xff0c;作为一家专业的代理供应商&#xff0c;我们将与你分享解决方案&#xff0c;让你轻松解决L2TP问题&#xff0c;享受到高水平的连接体验。本文将为你提供实用的操作…...

​《乡村振兴战略下传统村落文化旅游设计 》在2023年畅销榜排名465位

​《乡村振兴战略下传统村落文化旅游设计 》在2023年畅销榜排名465位...

实现一个自动保存高CPU占用现场的简易工具

CPU 使用率在系统监控中是一个非常重要的指标。对于大多数 Web 应用来说&#xff0c;它们往往是 IO 密集型的&#xff0c;因此只会在某些时刻可能会出现 CPU 突然飙升的情况&#xff0c;随后很快就恢复正常。然而&#xff0c;当收到报警并想要排查问题时&#xff0c;CPU 飙升的…...

易服客工作室:如何在WordPress网站中举办虚拟活动

您是否正在寻找举办和管理虚拟活动的最佳方式&#xff1f; 也许您想在线举行下一次会议或举办有关您的产品和服务的网络研讨会。您可能担心它太贵&#xff0c;或者您没有技术知识来实现​​它。 在本文中&#xff0c;我们将列出您所需的在线服务的所有设备&#xff0c;并教您…...

Java IO流(一)IO基础

概述 IO流本质 I/O表示Input/Output,即数据传输过程中的输入/输出,并且输入和输出都是相对于内存来讲Java IO(输入/输出)流是Java用于处理数据读取和写入的关键组件常见的I|O介质包括 文件(输入|输出)网络(输入|输出)键盘(输出)显示器(输出)使用场景 文件拷贝&#xff08;File&…...

区间覆盖 线段覆盖 二分

4195. 线段覆盖 - AcWing题库 P2082 区间覆盖&#xff08;加强版&#xff09; - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 做法&#xff1a; void solve() {int n; cin>>n;vector<array<LL,2>> seg(n);for(auto &t: seg) cin>>t[0]>>…...

F#奇妙游(20):主动模式

F#中主动模式的三种形式 F#中有一种特殊的模式匹配&#xff0c;叫做主动模式&#xff08;Active Pattern&#xff09;。主动模式可以让我们自定义模式匹配的方式&#xff0c;这样可以让我们的代码更加简洁&#xff0c;更加清晰。主动模式有三种形式&#xff0c;分别是&#xf…...