Spring(面试篇)

news2024/9/24 11:27:45

目录

什么是Spring?

Spring的两大核心概念

Spring框架的设计目标,设计理念,和核心是什么

Spring的优缺点是什么?

Spring由哪些应用场景

Spring由哪些模块组成?

Spring框架中都用到了那些设计模式?

Spring应用程序有哪些不同组件?

Spring控制反转(IOC)

什么是Spring IOC容器?

控制反转(IOC)有什么作用

IOC的优点是什么?

什么是Spring的依赖注入

依赖注入的基本原则

依赖注入有什么优势

有哪些不同类型地依赖注入实现方式?

构造依赖注入和Setter方法注入的区别

Spring面向切面编程(AOP)

什么是AOP

JDK动态代理和CGLIB动态代理的区别

解释以下Spring AOP里面的几个名词

Spring Beans

什么是Spring beans?

Spring Bean定义包含什么?

Spring如何处理线程并发问题?

解释Spring框架中Bean的生命周期

SpringBean

Bean的实例化:

Bean属性填充:

Bean初始化:

Bean进入服务状态:

Bean销毁:

Spirng注解

什么是基于Java的spring注解配置?给一些注解的例子

怎么样开启注解装配?

@Component、@Controller、@Repository、@Service有何区别?

@Required注解有什么作用

@Autowired注解有什么作用

@Autowired和@Resource之间的区别

@Qualifier注解有什么作用

@RequestMapping注解有什么用?

Spring数据访问

解释JDBC抽象和DAO模块

Spring Dao有什么用?

Spring JDBC API中存在那些类?

Sprng支持的事务管理类型,spring事务实现方式有哪些?


大家一起加油吧 ! ! !

什么是Spring?

1. Spring是一个轻量级Java开发框架。

2. Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发。

3. Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些功能的底层都是依赖于它的两个核心特性,也就是依赖注入(dependecy)

为降低Java开发的复杂性,Spring采取了以下4种关键策略

1. 基于POJO的轻量级和最小侵入性编程;

2. 通过依赖注入和面向接口实现松耦合;

3. 基于切面和惯例进行声明式编程;

4. 通过切面和模板减少样板式代码;

Spring的两大核心概念

1. IOC(控制反转):

控制翻转,也叫依赖注入,他就是不会直接创建对象,只是把对象声明出来再代码中不直接于对象和服务器进行连接,但是再配置文件中描述了哪一项服务,容器将它们组件起来。再一般IOC场景容器创建了所有的对象,并设置了必要的属性将它们联系在一起,等到需要使用的时候才把它们声明出来,使用注解就更方便,容器会自动根据注解把对象组合起来

2. AOP(面向切面编程):

面对切面编程,这是一种编程模式,他允许程序员通过自定义的横切点进行模块化,将哪些影响多个类的行为封装到可重用的模块种。例如:比如日志输出语句封装一个可重用模块,在以声明的方式将他们放在类中,每次实用类就自动完成了日志输出。

Spring框架的设计目标,设计理念,和核心是什么

Spring设计目标:Spring为开发者提供一个一站式轻量级应用开发平台;

Spring设计理念:在JavaEE开发中,支持POJO和JavaBean开发方式,使用面向接口开发,充分支持OOP(面向对象)设计方法; Spring通过ioc容器实现对象耦合关系的惯例,并实现依赖反转,将对象之间的依赖关系交给IOC容器,实现解耦

Spring框架的核心:IOC容器和AOP模块。通过IOC容器管理POJO对象以及他们之间按耦合关系;通过AOP以动态非侵入的方式增强服务。

IOC让相互协作的组件保存松散的耦合,而AOP编程允许你把遍布于应用各层的功能分离出来可以形成可重用的功能组件

Spring的优缺点是什么?

优点

  • 方便解耦,简化开发
    Spring就一个大工厂,可以将所有对象的创建和依赖关系的维护,交给Spring管理。
  • AOP编程的支持
    Spring提供面向切面编程,可以方便的实现对程序进行权限拦截,运行监控等功能。
  • 声明式事务的支持
    只需要通过配置就可以完成对事务的管理,而无序手动编程。
  • 方便程序的测试
    Spring对Junit4支持,可以通过注解方便的测试Spring程序。
  • 方便集成各种优秀框架
    Spring不排斥各种优秀的开源框架,其内部提供了各种优秀框架的直接支持(如:Struts,Hibernate,MyBatis等)
  • 降低JavaEE API的使用难度
    Spring对JavaEE开发种非常难用的一些API(JDBC,JavaMail,远程调用等),都提供了封装,使用这些API应用难度大大降低

缺点

  • Spring明明一个很轻量级的框架,却给人感觉大而全
  • Spring依赖反射,反射影响性能
  • 使用门槛升高,入门Spring需要较长时间

Spring由哪些应用场景

  • 应用场景:JavaEE企业应用开发,包括SSH,SSM等

Spring价值:

  • Spring是非侵入式的框架,目标是使应用程序代码对框架依赖最小化;
  • Spring提供一个一致的编程模型,使应用直接使用POJO开发,与运行环境隔离开来;
  • Spring推动应用设计风格面向对象的面向接口开发转变,提高了代码的重用性和可测试性;

Spring由哪些模块组成?

  • Spring总共大约由20个模块,由1300多个不同的文件构成。而这些组件分别整合在核心容器(Core Cotainer)、AOP(Aspect Oriented Programming)和设备支持(Instrmentaion)、数据访问与集成(Data Access/Integeration)、Web、消息(Messaging)、Test等6个模块中。以下是Spring5的模块结构
  • Spring core:提供了框架的基本组成部分,包括控制反转(Inversion of Control ,IOC)和依赖注入(Dependency Injection ,DI)功能。
  • Spring beans:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。
  • Spring contest:构建与core封装与core封装包基础上的context封装包,提供了一种框架式的对象访问方法。
  • Spring jdbc:提供了面向切面的编程实现,让你可以自定义拦截器,切点等。
  • Spring Web:提供了针对Web开发的集成特性,例如文件上传,利用servlet listeners经行ioc容器初始化和针对Web的ApplicationContext。
  • Spring test:主要为测试提供支持的,支持使用Junit或TestNG对Spring组件进行单元测试和集成测试。

Spring框架中都用到了那些设计模式?

1. 工厂模式:BeanFactory就是一个简单工厂模式

2. 单例模式:Bean默认为单例模式。

3. 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码涩生成技术。

4. 模板方法:用来解决代码重复问题。比如,RestTemplate,JmsTemplate,JpaTemplate。

5. 观察者模式: 定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所依赖它的对象就会得到通知被动更新,如Spring中listener的实现-ApplicationListener

Spring应用程序有哪些不同组件?

1. 接口:定义功能。

2. Bean类:它包含属性,setter和getter方法,函数等。

3. Bean配置文件:包含类的信息以及如何优化配置

4. Spring面向切面编程(AOP):提供面向切面编程的功能。

5. 用户程序:它使用接口。

Spring控制反转(IOC)

什么是Spring IOC容器?

1. 控制反转即IOC(Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器的转移,从程序代码本省转移到外部容器。

2. Spring IOC负责创建对象,管理对象(通过依赖注入DI),装配对象,配置对象,并且管理这些对象的整个生命周期

控制反转(IOC)有什么作用

1. 管理对象的创建和依赖关系的维护。对象的创建并不是一件简单的事,在对象关系比较复杂时,如果依赖关系需要程序员来维护的话,那是相当头痛的。

2. 解耦,由容器去维护具体的对象

3. 托管了类的产生过程,比如我们需要产生过程中做一些处理,最直接的例子就是代理,如果由容器程序可以把这部分处理交给容器,应用程序则无需去关心类是如何完成代理的

IOC的优点是什么?

1. IOC或依赖注入把应用的代码量降到最低。

2. 它使应用容器测试,单元测试不再需要单例和NDI查找机制。

3. 最小的代缴和最小的侵入性使松耦合得以实现。

4. IOC容器支持加载服务时的饿汉式初始化和懒加载。

什么是Spring的依赖注入

控制反转IOC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:依赖注入和依赖查找依赖注入:相对于IOC而言,依赖注入(DI)更加准确描述了IOC的设计理念。所谓依赖注入(Dependecy Injection),即组件之间的依赖关系有容器在应用系统运行期间来决定,也就是由容器动态地将某种依赖关系地目标对象实例注入到应用系统中地各个关联地组件之中。组件不做定位查询,只提供普通地Java方法让容器去决定依赖关系。

依赖注入的基本原则

依赖注入的基本原则是:应用组件不应该负责查找资源或者其他依赖协作对象。配置对象的工作应该由IOC容器负责,“查找资源”的逻辑应该从应用组件的代码中抽取出来,交给IOC容器负责。容器全权负责组件的装配,他会把符合依赖关系的对象通过属性(JavaBean中setter)或则是构造器传递给需要的对象

依赖注入有什么优势

依赖注入之所以更流行时是因为它时一种更可取的方式:让容器全权负责依赖查询,受管组件只需要暴露JavaBean的setter方法或者带参数的构造器或者接口,使容器可以在初始化时组装对象的依赖关系。其与依赖查找方式相比,主要优势为:

  • 查找定位操作与应用代码完全无关。
  • 不依赖于容器的API,可以很容器地在任何容器以外使用应用对象。
  • 不需要特殊的接口,绝大多数对象可以做到完全不必依赖容器。

有哪些不同类型地依赖注入实现方式?

  • 依赖注入是时下最流行地IOC实现方式,依赖注入分为接口注入(Interface Injection),Setter方法注入(Setter Injection)和构造器注入(Constructor Injection)三种方式。其中接口注入由于在灵活性和易用性比较差,现在从Spring4开始已被废弃。
  • 构造依赖注入:构造器依赖注入通过容器触发一个类地构造器来实现地,该类有一系列参数,每个参数代表一个对他类的依赖。
  • Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。

构造依赖注入和Setter方法注入的区别

构造函数注入

setter注入

没有部分注入

有部分注入

不会覆盖setter属性

会覆盖setter属性

任意修改都会创建一个新实例

任意修改不会创建一个新实例

适用于设置很多属性

适用于设置少量属性

Spring面向切面编程(AOP)

什么是AOP

  • OOP,面向对象编程,允许开发者定义纵向的关系,允许开发者定义纵向的关系,并适用于定义横向的关系,导致大量代码的重复,而不利于各个模块的重用。
  • AOP,一般被称为面向切面编程,作为面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名未“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证,日志,事务处理等。

JDK动态代理和CGLIB动态代理的区别

  • Spring AOP中动态代理主要两种方式,JDK动态代理和CGLIB动态代理:
    • JDK动态代理只是提供接口的代理,不支持类的代理。核心InvocationHandler接口和Proxy类,InvocationHandler通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编制在一起;接着,Proxy利用InvocaionHandler动态创建一个符合某一接口地实例,生成目标类代理对象。
    • 如果代理类没有实现InvocationHandler接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成地类库,可以在运行是动态地生成指定类地一个子类对象,并覆盖其中特定方法并添加增强代码,从而实现AOP。CGLIB是通过继承的方式做的动态代理,因此如果某哥类被标记为final,那么它是无法使用CGLIB做动态代理的。
  • 静态代理与动态代理区别在于生成AOP代理对象的时机不同,相对来说Aspect的静态代理方式具有更好的性能,但是Aspect需要特定编译器进行处理,而Spring AOP则不需特定的编译器处理

解释以下Spring AOP里面的几个名词

切面(Aspect):切面是通知和切点的结合。通知和切点共同定义了切面的全部内容。在Spring AOP中,切面可以使用通用类(基于模式的风格)或者在不同类中一@AspectJ注解来实现

连接点(Join Point):指方法,在Spring AOP中,一个连接点总是代表一个方法的执行。应用可能有数以前几的时机应用通知。这些被称为连接点。连接点是在应用执行过程中能够插入切面的一个点。这个点可以调用方法时,抛出异常时,甚至修改一个字段时。切脉你代码可以利用这些点插入到应用的正常流程之中,并添加新的行为。

通知(Advice):在AOP术语中,切面的工作会被称为通知;

切入点(Pointcut):切点的定义会匹配通知所要织入的一个或多个连接点。我们通常使用

明确的类和方法名称,或是利用正则表达式定义所匹配的类和方法名称来指定这些切点。

引入(Introduction):引入允许我们向现有类添加新方法或属性。

目标对象(Target Object): 被一个或者多个切面(aspect)所通知(advise)的对象。

它通常是一个代理对象。也有人把它叫做 被通知(adviced) 对象。 既然Spring AOP是通过运行

时代理实现的,这个对象永远是一个 被代理(proxied) 对象。

织入(Weaving):织入是把切面应用到目标对象并创建新的代理对象的过程。在目标对象

的生命周期里有多少个点可以进行织入:

  1. 编译期:切面在目标类编译时被织入。AspectJ的织入编译器是以这种方式织入切面的。
  2. 类加载期:切面在目标类加载到JVM时被织入。需要特殊的类加载器,它可以在目标类被引入应用之前增强该目标类的字节码。AspectJ5的加载时织入就支持以这种方式织入切面
  3. 运行期:切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态地创建一个代理对象。SpringAOP就是以这种方式织入切面。

Spring Beans

什么是Spring beans?

Spring Beans是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。比如,以XML文件中的形式定义。

Spring Bean定义包含什么?

一个spring bean 的定义包含容器必知的所有配置元数据,包括如何创建一个bean,它的生命周期详情及它的依赖。

Spring如何处理线程并发问题?

  • 在一般情况下,只有无状态的Bean才可以在多线程环境下共享,在Spring中,绝大部分Bean都可以声明为sigleton作用域,因为Spring对一些Bean中非线程安全状态采用ThreadLocal进行处理,解决线程安全问题。
  • ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。同步机制采用了“时间换空间”的方式,仅提供一份变量,不同的线程在访问前需要获取锁,没获得锁的线程则需要排队。而ThreadLocal采用了“空间换时间”的方式。
  • ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。

解释Spring框架中Bean的生命周期

在传统的Java应用中,bean的生命周期很简单。使用Java关键字new进行bean实例化,然后该bean就可以使用了。一旦该bean不再被使用,则由Java自动回收进行垃圾回收。相比之下,Spring容器中的bean的生命周期就显得相对复杂多了。正确理解springbean的生命周期非常重要,因为你或许要利用Spring提供的扩展点来定义bean的创建过程。下图展示bean装载到spring应用上下文中的一个典型的生命周期过程。

bean在spring容器中创建到销毁尽力了若干阶段,每一阶段都可以针对spring如何管理bean进行个性化定制。

正如你所见,在bean尊卑就绪之前,bean工厂执行了若干启动步骤。

我们对上图进行详细描述:

  1. Spring对bean进行实例化;
  2. Spring将值和bean的引用注入到bean对应得属性中;
  3. 如果bean实现了BeanNameAware接口,Spring将bean得ID传递给setBean-Name()方法;
  4. 如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入;
  5. 如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在应用上下文得引用传入进来;
  6. 如果bean实现了BeanPostProcessor接口,Spring将调用它们得post-ProcessVeforInitialization()方法;
  7. 如果bean实现了Init-ilalizingBean接口,Spring将调用它们得after-PropertiesSet()方法。类似地,如果bean实现init-method生命了初始化方法,该方法也会被调用;
  8. 如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialication()方法;
  9. 此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁;
  10. 如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。

现在你已经了解了如何创建和加载一个Spring容器。但是一个空的容器并没有太大的价值,在你把东西放进去之前,它里面什么都没有。为了从spring的DI(依赖注入)中受益,我们必须将应用对象装配进spring容器中;

SpringBean

  1. Bean的实例化

    • Spring通过BeanDefinition中的信息调用无参构造器或带有特定注解(如@Autowired)的构造器来创建Bean实例。
    • 如果没有合适的构造器,Spring会选择无参构造器创建实例。
  1. Bean属性填充

    • 在实例化之后,Spring会根据BeanDefinition中配置的信息填充Bean的属性。
    • 属性可以通过XML中的<property>标签或者Java配置类中的@Autowired等方式定义。
  1. Bean初始化

    • Aware接口:如果Bean实现了某些Spring的Aware接口(例如BeanFactoryAware, ApplicationContextAware),Spring会在适当的时候调用相应的set方法。
    • BeanPostProcessor:在初始化前后,Spring会调用BeanPostProcessor的postProcessBeforeInitializationpostProcessAfterInitialization方法。
    • @PostConstruct注解:如果有方法标记了@PostConstruct注解,那么Spring会在初始化过程中调用该方法。
    • InitializingBean接口:如果Bean实现了InitializingBean接口,那么Spring会调用其afterPropertiesSet()方法。
    • 自定义初始化方法:可以在XML中通过init-method属性指定一个初始化方法;在Java配置中则可以通过@Bean注解的initMethod属性来指定。
  1. Bean进入服务状态

    • 初始化完成后,Bean进入可用状态,可以被其他Bean使用。
  1. Bean销毁

    • 当Spring容器关闭时,Bean会被销毁。
    • DisposableBean接口:如果Bean实现了DisposableBean接口,那么Spring会在销毁时调用其destroy()方法。
    • @PreDestroy注解:如果有方法标记了@PreDestroy注解,那么Spring会在销毁时调用该方法。
    • 自定义销毁方法:可以在XML中通过destroy-method属性指定一个销毁方法;在Java配置中则可以通过@Bean注解的destroyMethod属性来指定。

Spirng注解

什么是基于Java的spring注解配置?给一些注解的例子

  1. 基于Java的配置,允许你在少量的Java注解的帮助下,进行你的大部分spring配置而非通过xml文件。
  2. 以@Configuration注解为例,它用来标记类可以当做一个bean的定义,被Spring IOC容器使用。
  3. 另一个例子是@Bean注解,它表示此方法要返回一个对象,作为一个bean注解进spring应用上下文。
@Configuration
public class StudentConfig {
    @Bean
    public StudentBean myStudent() {
        return new StudentBean();
    }
}

怎么样开启注解装配?

  1. 注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在spring配置文件中配置<context:annotation-cofnig/>元素。

@Component、@Controller、@Repository、@Service有何区别?

  • @Componten:这个将Java类标记为bean。它是任何Spring管理组件通用构造型。spring的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中。
  • @Controller:这将一个类标记为Spring Web MVC控制器。标有它的Bean会自动导入到IOC容器中.
  • @Service:此注解是组件注解的特化。它不会对@Component注解提供任何其他行为。您可以在服务层类中使用@Service而不是@Component,因为他以更好的方式指定了意图。
  • @Repository:这个注解具有类似用途和功能的@Compoent注解的特化。它为DAO提供了额外的好处。它将DAO导入IOC容器,并使未经检查的异常有资格转化为Spring DataAccessException。

@Required注解有什么作用

这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显示的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitialicationException。示例:

public class Employee {
    rivate String name;
    @Required
    public void setName(String name){
        this.name=name;
    }
    public string getName(){
        return name;
    }
}

@Autowired注解有什么作用

@Autowired默认是按照装配类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性未false)。@Autowired注解提供了更细粒度的控制,包括在何处以及如何完成自动装配。它的用法和@Required一样,修饰setter方法、构造器、属性或具有任意名称或多个参数的PN方法。

public class Employee {
    private String name;
    @Autowired
    public void setName(String name) {
        this.name=name;
    }	
    public string getName(){
        return name;
    }
}

@Autowired和@Resource之间的区别

  1. @Autowired和@Resource可用于:构造函数、成员变量、Setter方法
  2. @Autowired和@Resouce之间的区别在于
    1. @Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性未false)。
    2. @Resource默认是按照名称来装配注入的,只有当找不到于名称匹配的bean才会按照类型来装配注入

@Qualifier注解有什么作用

当您创建多个相同类型的bean并希望仅使用属性装配其中一个bean时,您可以使用@Qualifier注解和@Autowired通过指定应该装配哪个确切的bean来消除歧义。

@Autowired
@Qualifier("specificBean")
private SomeService someService;

@RequestMapping注解有什么用?

  • @RequestMapping 注解用于将特定 HTTP 请求方法映射到将处理相应请求的控制器中的特定类/方法。此注释可应用于两个级别:
    • 类级别:映射请求的 URL
      • 方法级别:映射 URL 以及 HTTP 请求方法

Spring数据访问

解释JDBC抽象和DAO模块

通过使用JDBC抽象和DAO模块,保证数据库代码的简洁,并能避免数据库资源错误关闭导致的问题,它在不同的数据库的错误信息之上,提供了一个统一的异常访问层。它还利用了Spring的AOP模块给Spring应用中的对象提供事务管理服务。

Spring Dao有什么用?

Spring Dao(数据访问对象)使得JDBC,Hibernate或JDO这样的数据访问技术更容器以一种统一的方式工作。这是的用户容易在持久性技术之间切换。它还允许您编写代码时,无需考虑捕获每种技术不同的异常。

Spring JDBC API中存在那些类?

  • jdbc Template
  • SimpleJdbc Template
  • NamedParamenterJdbc Template
  • SimpleJdbcInsert
  • SimpleJdbcCall

Sprng支持的事务管理类型,spring事务实现方式有哪些?

spring支持两种类型的事务管理:

  1. 编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。
  2. 声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需要注解和xml来配置管理事务。

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

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

相关文章

Battery Cycle Life Prediction From Initial Operation Data

这个例子展示了如何使用线性回归(一种监督机器学习算法)预测快速充电锂离子电池的剩余循环寿命。使用基于物理的建模方法预测锂离子电池的循环寿命是非常复杂的&#xff0c;因为不同的操作条件和显著的设备可变性&#xff0c;即使是来自同一制造商的电池。对于这种情况&#xf…

2023高教社杯数学建模国赛C题详细代码 文章 数据教学 保姆级手把手包含文档格式 2024数模国赛教学:蔬菜类商品的自动定价和补货决策

本系列专栏将包括两大块内容 第一块赛前真题和模型教学,包括至少8次真题实战教学,每期教学专栏的最底部会提供完整的资料百度网盘包括:真题、数据、可复现代码以及文章. 第二块包括赛中思路、代码、文章的参考助攻, 会提供2024年高教社国赛各个赛题的全套参考内容(一般36h内更新…

JavaWeb学习——事务管理、AOP学习

目录 一、事务管理 1、事务回顾 2、事务进阶 a、rollbackFor属性 b、propagation属性 二、AOP学习 1、基础了解 2、AOP进阶 一、事务管理 1、事务回顾 事务的概念&#xff1a;事务必须服从ACID原则。ACID指的是原子性&#xff08;atomicity&#xff09;、一致性&#xf…

Linux网络编程:多路转接--poll/epoll

1. poll poll也是一种多路转接的方案&#xff0c;解决了select的fd有上限和每次调用都要重新设置关心的fd的问题。 2. poll接口 #include int poll(struct pollfd* fds, nfds_t nfds, int timeout); 参数&#xff1a;fds&#xff1a;可以看成是动态数组/数组/结构体数组 nfds&…

【生日视频制作】一群美女挥手拉蓝横幅条幅AE模板修改文字软件生成器教程特效素材【AE模板】

一群美女挥手拉蓝条横幅生日视频制作教程AE模板修改文字生成器 怎么如何做的【生日视频制作】一群美女挥手拉蓝横幅条幅AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频

Ai+若依(系统工具-->表单构建):【02篇】

系统工具 表单构建 介绍 允许用户通过拖放等可视化操作创建表单,比如用来收集数据的表格或调查问卷。 可以自定义表单的各个部分,比如添加不同的输入项和设置验证规则,无需编写代码。 提供了导出数据、导入数据、分享表单和设置权限的功能,方便数据管理和共享。 案例 通…

RoboCopy文件快速拷贝工具

RoboCopy是Windows平台(从Windows Vista/Window 7开始)自带的文件快速拷贝工具,它是xcopy命令工具的升级版,解除了xcopy拷贝文件时4GB的容量限制,同时,又支持多线程、给文件夹制作镜像、复制指定日期的文件等功能。 1 全部拷贝 假设从alice文件夹,全部拷贝到bob文件夹,则…

leetcode 80 删除有序数组中的重复项 II

正文 仍旧使用双指针&#xff0c; 思想与 leetcode 26 删除有序数组中的重复项 一致。只是此时因为要求保留重复元素两次&#xff0c;我们的左侧指针可以从第二个数据开始&#xff0c;且右侧指针需要和两个元素的值进行判断。 class Solution:def removeDuplicates(self, nums…

WPF—资源的使用

资源的使用 资源是可以在应用中的不同位置重复使用的对象。 资源的示例包括画笔和样式。 <Window.Resources><!--定义颜色资源--><SolidColorBrush x:Key"MyBrush" Color"#05E0E9"/><!--定义样式资源--><Style TargetType&quo…

前端技术(五)—— 使用Node.js编写简单的项目

一、 初始化项目 1. 创建项目 ⑴ 新建 api_kjzt_server 文件夹作为项目根目录&#xff0c;并初始化包管理配置文件 并在项目根目录中运行如下的命令&#xff0c;初始化包管理配置文件&#xff1a; npm init -y⑵ 运行如下的命令&#xff0c;安装特定版本的 express npm i e…

企业级WEB应用服务器TOMCAT详解

一、什么是TOMCAT 1.1来源 Tomcat是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持&#xff0c;最新的Servlet 和JSP 规范总是能…

A Neural Probabilistic Language Model

摘要 统计语言建模的一个目标是学习单词序列的联合概率函数。由于维度的诅咒&#xff0c;这在本质上是困难的:我们建议用它自己的武器来对抗它。在提出的方法中&#xff0c;人们同时学习(1)每个单词的分布式表示&#xff08;词向量&#xff09;(即单词之间的相似性)以及(2)表示…

TypeScript 类型注解(二)

一、TypeScript类型约束--对象 对象其实和数组类似&#xff0c;不是限制对象本身的类型&#xff0c;而是对对象属性类型进行限制 结构简化&#xff1a; 对对象做类型限制的好处&#xff1a; 大家都学习过一段时间编程了&#xff0c;会发现咱们经常操作的类型就是对象&#xf…

使用miniconda构建数据科学环境

背景 数据科学中&#xff0c;不同时期项目代码往往是由不同的版本的python和第三方数据科学包构建&#xff0c;这些不同版本往往会存在兼容性问题&#xff0c;要运行这些代码&#xff0c;需要管理不同的版本的安装包。Conda是一个开源的包管理和环境管理系统&#xff0c;环境管…

Linux | 编译和使用自定义动静态库的全面解析

新竹高于旧竹枝&#xff0c;全凭老干为扶持。 - 《新竹》(郑燮) 2024.8.25 目录 1、静态库和动态库简介 静态库&#xff08;.a&#xff09;&#xff1a; 动态库&#xff08;.so&#xff09;&#xff1a; 动态库和静态库的比较&#xff1a; 2、静态库的生成和使用&#xff…

GCB | 首次揭示!气候变化对常绿和落叶植物物候差异化影响的机制

气候变化引起的植物物候改变已对全球范围内生物多样性和生态系统产生重大影响&#xff08;Nature高引文章 | 北京大学朴世龙院士等&#xff1a;全球变暖对植被物候的影响及其机制&#xff1b;Nature Ecology & Evolution | 南京大学张永光教授团队揭示延长的植被物候期受CO…

set容器的所有操作

1.基本概念 2.构造和赋值 3.大小和交换 4.插入和删除 5.查找和统计 6.set和multiset的区别 7.pair对组创建 用p.first和p.second调用前后两个属性。 8.仿函数实现降序排列 自定义数据类型也一样用仿函数&#xff1a;

【领域驱动设计 打通DDD最小闭环】领域建模

本篇BLOG为DDD流程的第二步&#xff0c;在模型的建立阶段&#xff0c;领域专家与技术人员通过领域建模来完成更为细致的模型建立讨论 领域建模的目的 领域建模主要有两个目的&#xff1a; 将知识可视化&#xff0c;准确、深刻地反映领域知识&#xff0c;并且在业务和技术人…

Python优化算法14——海鸥优化算法(SOA)

科研里面优化算法都用的多&#xff0c;尤其是各种动物园里面的智能仿生优化算法&#xff0c;但是目前都是MATLAB的代码多&#xff0c;python几乎没有什么包&#xff0c;这次把优化算法系列的代码都从底层手写开始。 需要看以前的优化算法文章可以参考&#xff1a;Python优化算…

【图文并茂】ant design pro 如何给后端发送 json web token - 请求拦截器的使用

上一节有讲过 【图文并茂】ant design pro 如何对接后端个人信息接口 还差一个东西&#xff0c;去获取个人信息的时候&#xff0c;是要发送 token 的&#xff0c;不然会报 403. 就是说在你登录之后才去获得个人信息。这样后端才能知道是谁的信息。 token 就代码了某个人。 …