Spring - Spring 注解相关面试题总结

文章目录

      • 01. Spring 配置方式有几种?
      • 02. Spring 如何实现基于xml的配置方式?
      • 03. Spring 如何实现基于注解的配置?
      • 04. Spring 如何基于注解配置bean的作用范围?
      • 05. Spring @Component, @Controller, @Repository, @Service 注解有何区别?
      • 06. Spring 如何实现bean依赖注入注解开发?
      • 07. Spring @Value注解注入基本类型数据?
      • 08. Spring @Autowired注解注入引用类型数据?
      • 09. Spring @Autowired注解自动装配的过程是怎样的?
      • 10. Spring @Autowired注解注入多个匹配类型的Bean?
      • 11. Spring @Qualifier 注解的作用?
      • 12. Java @Resource 注解的作用?
      • 13. Spring @Autowired注解的使用方式有哪些?
      • 14. Spring @Autowired和 Java @Resource之间的区别?
      • 15. Spring @Bean注解实现非自定义bean的注入?
      • 16. Spring 基于配置类的注解开发?
      • 17. Spring 如何开启基于注解的自动写入?
      • 18. Spring 基于Java的注解配置是什么?
      • 19. Spring @Primary注解的作用?
      • 20. 一个类不加任何注解和配置会被Spring容器注册吗?
      • 21. 一个类不加任何注解和配置会依赖注入吗?

01. Spring 配置方式有几种?

Spring除了xml配置文件进行配置之外,还可以使用注解方式进行配置,注解方式慢慢成为xml配置的替代方案。

(1) 基于XML的配置方式:Spring的诞生
(2) 基于注解的配置方式:2.5时代,Spring的Bean配置可以使用注解完成
(3) 基于Java的配置方式:3.0时代,Spring其他配置也可以使用注解完成,我们进入全注解时代

02. Spring 如何实现基于xml的配置方式?

使用XML文件来配置Spring应用程序,包括Bean的定义、依赖关系、AOP等。这是Spring最早的配置方式,也是最常用的一种方式。

public class UserDaoImpl implements UserDao{
    @Override
    public void show(){
        System.out.println("执行show....");
    }
}

public class UserServiceImpl implements UserService {
    private UserDao userDao;
    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }
}
<bean id="userService" class="com.service.impl.UserServiceImpl">
    <property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="com.dao.impl.UserDaoImpl"/>

03. Spring 如何实现基于注解的配置?

第一步:使用@Component注解将其标记在一个类上,表示该类是一个Spring容器中的Bean。可以使用value属性指定Bean的名称,如果没有指定名称,则默认使用类名的首字母小写作为Bean的名称。

@Component
public class UserDaoImpl implements UserDao{
    @Override
    public void show(){
        System.out.println("执行show....");
    }
}

@Component
public class UserServiceImpl implements UserService {
    private UserDao userDao;
    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }
}

第二步:使用<context:component-scan> 标签用于指定Spring容器扫描的包路径。它可以自动扫描指定包及其子包下的所有类,并将标记为@Component、@Controller、@Service、@Repository等注解的类注册为Spring容器中的Bean。

<!--注解组件扫描-->
<context:component-scan base-package="com.hh"/>

使用context:component-scan指定了要扫描的包路径为"com.hh",这样就可以自动扫描该包及其子包下的所有类,并将标记为@Component、@Controller、@Service、@Repository等注解的类注册为Spring容器中的Bean。

第三步:测试

public class ApplicationContextTest {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext applicationContext
                = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = applicationContext.getBean(UserDao.class);
        userDao.show();
        System.out.println(userDao);
    }
}

04. Spring 如何基于注解配置bean的作用范围?

在这里插入图片描述

@Scope(value = "singleton")
@Lazy(value = false)
@Component
public class UserDaoImpl implements UserDao{

    @Override
    public void show(){
        System.out.println("执行show....");
    }
}

用指定Spring容器扫描的包路径。它可以自动扫描指定包及其子包下的所有类,并将标记为@Component、@Controller、@Service、@Repository等注解的类注册为Spring容器中的Bean。

<context:component-scan base-package="com.hh"/>

05. Spring @Component, @Controller, @Repository, @Service 注解有何区别?

在这里插入图片描述

@Component、@Controller、@Repository和@Service都是Spring框架中的注解,用于标记一个类为Spring容器中的Bean,用于替代<bean>标签。它们的区别在于使用场景和语义上的差异。

@Component注解:用于标记一个类为Spring容器中的Bean,通常用于标记中立的组件,没有明确的角色。
@Controller注解:用于标记一个类为Spring MVC中的Controller,通常用于处理HTTP请求和响应。
@Repository注解:用于标记一个类为数据访问层(DAO)中的组件,通常用于访问数据库或其他持久化存储。
@Service注解:用于标记一个类为业务逻辑层(Service)中的组件,通常用于封装业务逻辑和调用DAO层的方法。

这些注解的作用是相似的,都是用于标记一个类为Spring容器中的Bean,并且可以使用@Autowired注解进行自动装配。但是它们的语义和使用场景是不同的,使用不同的注解可以更加清晰地表达代码的意图,也有助于代码的维护和扩展。

需要注意的是,@Controller、@Repository和@Service注解都是@Component注解的派生注解,它们都可以被视为@Component注解的特殊情况。因此,如果一个类没有明确的角色,可以使用@Component注解来标记。

06. Spring 如何实现bean依赖注入注解开发?

在这里插入图片描述

07. Spring @Value注解注入基本类型数据?

Spring中的@Value注解用于将属性值注入到Spring管理的Bean中。它可以用于注入简单的值,如字符串、数字和布尔值,也可以用于注入复杂的对象,如数组、集合和自定义对象。

@Value注解可以用在字段、方法和构造函数上。它支持SpEL表达式,可以从配置文件、环境变量、系统属性等多种来源获取属性值。

@Component
public class UserDaoImpl implements UserDao{
    public UserDaoImpl(){}
    
    // 用于字段上
    @Value("zhangsan")
    private String username;
    
    // 从配置文件中取值
    @Value("${jdbc.driver}")
    private String driver;
    
    private String password;
    private int age;

    // 用于方法上
    @Value("lisi")
    public void setPassword(String password){
        this.password = password;
    }

    // 用于构造方法上
    public UserDaoImpl(@Value("18") int age){
        this.age = age;
    }

    @Override
    public void show(){
        System.out.println(username);
        System.out.println(password);
        System.out.println(age);
        System.out.println(driver);
    }
}

用指定Spring容器扫描的包路径。它可以自动扫描指定包及其子包下的所有类,并将标记为@Component、@Controller、@Service、@Repository等注解的类注册为Spring容器中的Bean。

<context:component-scan base-package="com.hh"/>
<context:property-placeholder location="jdbc.properties"/>

在上面的示例中,@Value注解用于将username的属性值注入到username字段中,将配置文件中的jdbc.driver属性值注入到driver字段中。

08. Spring @Autowired注解注入引用类型数据?

@Autowired注解是Spring框架中的一个注解,用于自动装配Bean。它可以自动在Spring容器中查找匹配类型的Bean,并将其注入到目标对象中。@Autowired注解也可以用于构造函数、Setter方法和字段上,用于不同的自动装配方式。

下面是一个使用@Autowired注解的示例:

@Component
public class MyController {
    @Autowired
    private MyService myService;
    // ...
}

在上面的示例中,我们使用@Autowired注解自动装配了MyService对象,并将其注入到MyController中。这样,我们就可以在MyController中使用MyService对象了。

09. Spring @Autowired注解自动装配的过程是怎样的?

Spring的@Autowired注解是一种自动装配的方式,它可以自动将一个Bean的依赖项注入到另一个Bean中。@Autowired注解的自动装配过程如下:

① Spring容器在初始化Bean时,会扫描所有的Bean,查找与依赖项类型相同的Bean。

② 如果找到了与依赖项类型相同的Bean,则将其注入到目标Bean中。如果找到了多个与依赖项类型相同的Bean,则会寻找与依赖项名称相同的Bean。

③ 如果找到了与依赖项名称相同的Bean,则将其注入到目标Bean中。如果找到了多个与依赖项名称相同的Bean,则会抛出异常。

④ 如果没有找到与依赖项名称相同的Bean,则会抛出异常。

需要注意的是,@Autowired注解默认使用byType自动装配模式,如果需要使用byName自动装配模式,可以结合@Qualifier注解来使用。@Qualifier注解可以指定要注入的Bean的名称,以解决byName自动装配模式下的歧义性问题。

另外,@Autowired注解还可以用于构造函数、Setter方法和字段上,以实现不同的自动装配方式。在构造函数和Setter方法上使用@Autowired注解,可以实现构造函数和Setter方法的自动装配;在字段上使用@Autowired注解,可以实现字段的自动装配。

10. Spring @Autowired注解注入多个匹配类型的Bean?

容器中存在3个UserDao类型的bean :

@Repository 
public class UserDaoImpl implements UserDao{
}

@Repository 
public class UserDaoImpl1 implements UserDao{
}

@Repository 
public class UserDaoImpl2 implements UserDao{
}
@Component
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;
}

用指定Spring容器扫描的包路径。它可以自动扫描指定包及其子包下的所有类,并将标记为@Component、@Controller、@Service、@Repository等注解的类注册为Spring容器中的Bean。

<context:component-scan base-package="com.hh"/>

因为容器中存在多个与依赖项类型相同,依赖项名称相同的bean,因此抛出异常:

在这里插入图片描述

此时如果想要成功注入,可以指定容器中依赖项bean的名称:

@Repository("userDao")
public class UserDaoImpl implements UserDao{
}

@Repository("userDao1")
public class UserDaoImpl1 implements UserDao{
}

@Repository("userDao2")
public class UserDaoImpl2 implements UserDao{
}
@Component
public class UserServiceImpl implements UserService {

    // 存在多个类型相同的bean时,根据名称注入,属性名称和bean的名称相同即可
    @Autowired
    private UserDao userDao;
}
@Component
public class UserServiceImpl implements UserService {

    // 存在多个类型相同的bean时,根据名称注入,属性名称和bean的名称相同即可
    @Autowired
    private UserDao userDao1;
}

11. Spring @Qualifier 注解的作用?

@Qualifier注解是Spring框架中的一个注解,用于指定要注入的Bean的名称。它通常与@Autowired注解一起使用,用于解决自动装配时存在多个匹配类型的Bean的问题。

容器中存在3个类型相同的bean,名称分别为userDao、userDao1、userDao2

@Repository("userDao")
public class UserDaoImpl implements UserDao{
}

@Repository("userDao1")
public class UserDaoImpl1 implements UserDao{
}

@Repository("userDao2")
public class UserDaoImpl2 implements UserDao{
}
@Component
public class UserServiceImpl implements UserService {

    // 存在多个类型相同的bean时,根据名称注入,属性名称和bean的名称可以不同
    // 使用@Qualifier指定注入bean的名称
    @Autowired
    @Qualifier("userDao1")
    private UserDao userDao;
}

用指定Spring容器扫描的包路径。它可以自动扫描指定包及其子包下的所有类,并将标记为@Component、@Controller、@Service、@Repository等注解的类注册为Spring容器中的Bean。

<context:component-scan base-package="com.hh"/>

@Qualifier注解也可以用于构造函数、Setter方法和字段上,用于不同的自动装配方式。

12. Java @Resource 注解的作用?

@Resource注解是Java EE中的一个注解,用于自动装配Bean。它可以自动在Java EE容器中查找匹配名称或类型的Bean,并将其注入到目标对象中。

使用@Resource注解时,可以指定要注入的Bean的名称或类型。如果指定了名称,则容器会查找名称匹配的Bean进行注入;如果没有指定名称,则容器会查找类型匹配的Bean进行注入。如果容器中存在多个匹配的Bean,则会抛出异常。

下面是一个使用@Resource注解的示例:

@Repository("userDao")
public class UserDaoImpl implements UserDao{
}

@Repository("userDao1")
public class UserDaoImpl1 implements UserDao{
}

@Repository("userDao2")
public class UserDaoImpl2 implements UserDao{
}
@Component
public class UserServiceImpl implements UserService {

    @Resource(name="userDao1")
    private UserDao userDao;
}
<context:component-scan base-package="com.hh"/>

需要注意的是,@Resource注解只能用于字段和Setter方法上,不能用于构造函数上。

13. Spring @Autowired注解的使用方式有哪些?

@Autowired注解可以用于构造函数、Setter方法和字段上,用于不同的自动装配方式。通常情况下,我们会在字段上使用@Autowired注解进行自动装配。

@Repository("userDao")
public class UserDaoImpl implements UserDao{
}

@Repository("userDao1")
public class UserDaoImpl1 implements UserDao{
}

@Repository("userDao2")
public class UserDaoImpl2 implements UserDao{
}
@Component
public class UserServiceImpl implements UserService {
    
    private UserDao userDao;
    
    // 根据参数的类型进行匹配,如果类型相同,则再根据参数的名称注入
    @Autowired
    public void setUserDao(UserDao userDao2){
       System.out.println(userDao2);
    }
    
    // 根据参数的类型进行匹配,将容器中UserDao类型的bean注入到集合userDaoList中
    @Autowired
    public void setXXX(List<UserDao> userDaoList){
        System.out.println(userDaoList);
    }
}

用指定Spring容器扫描的包路径。它可以自动扫描指定包及其子包下的所有类,并将标记为@Component、@Controller、@Service、@Repository等注解的类注册为Spring容器中的Bean。

<context:component-scan base-package="com.hh"/>

com.dao.impl.UserDaoImpl2@62bd765
[com.dao.impl.UserDaoImpl@44a664f2, com.dao.impl.UserDaoImpl1@7f9fcf7f, com.dao.impl.UserDaoImpl2@62bd765]

14. Spring @Autowired和 Java @Resource之间的区别?

Spring框架中的@Autowired注解和Java EE中的@Resource注解都是用于自动装配Bean的注解,它们的作用类似,但是在使用方式和功能上有一些区别。

(1) 使用方式:@Autowired注解可以用于构造函数、Setter方法和字段上,而@Resource注解只能用于字段和Setter方法上。

(2) 自动装配方式:@Autowired注解默认是按照类型进行自动装配的,如果容器中存在多个匹配类型的Bean,可以使用@Qualifier注解指定Bean的名称。而@Resource注解默认是按照名称进行自动装配的,如果指定了名称,则容器会查找名称匹配的Bean进行注入;如果没有指定名称,则容器会查找类型匹配的Bean进行注入。

(3) 作用范围:@Autowired注解是Spring框架中的注解,只能用于Spring应用程序中;而@Resource注解是Java EE中的注解,可以用于Java EE应用程序中。

(4) 兼容性:@Autowired注解是Spring框架中的注解,不兼容Java EE应用程序;而@Resource注解是Java EE中的注解,可以与Spring框架进行集成。

需要注意的是,@Autowired注解和@Resource注解都可以用于自动装配Bean,但是在使用时需要根据具体的场景进行选择。如果是在Spring应用程序中使用,建议使用@Autowired注解;如果是在Java EE应用程序中使用,建议使用@Resource注解。

15. Spring @Bean注解实现非自定义bean的注入?

@Component
public class OtherBean {
    
    @Bean("dataSource")
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;
    }
}

用指定Spring容器扫描的包路径。它可以自动扫描指定包及其子包下的所有类,并将标记为@Component、@Controller、@Service、@Repository等注解的类注册为Spring容器中的Bean。

<context:component-scan base-package="com.hh"/>
<context:property-placeholder location="jdbc.properties"/>

如果不加@Component注解,那么OtherBean就不会被Spring容器扫描注册,dataSource也不会注册为Spring容器的bean了。

如果@Bean工厂方法需要参数的话,则有如下几种注入方式:
1、使用@Autowired 根据类型自动进行Bean的匹配,@Autowired可以省略 ;
2、使用@Qualifier 根据名称进行Bean的匹配;
3、使用@Value 根据名称进行普通数据类型匹配。

@Component
public class OtherBean {

    @Bean("dataSource")
    public DataSource dataSource(
            @Value("${jdbc.username}") String username,
            @Qualifier("userDao2") UserDao userDao,
            UserService userService){
        
        System.out.println(username);
        System.out.println(userDao);
        return new DruidDataSource();
    }
}
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root

16. Spring 基于配置类的注解开发?

<context:property-placeholder location="classpath:jdbc.properties"/>
<context:component-scan base-package="com.itheima"/>
<import resource="classpath:beans.xml"/>

@Component等注解替代了<bean>标签,但是像<import><context:componentScan> 等非<bean> 标签怎
样去使用注解替代呢?

@ComponentScan(basePackages = "com.hh")
@PropertySource("classpath:jdbc.properties")
@Configuration
public class AppConfig {

}

<bean>标签以外的标签,一般都是在配置类上使用注解完成的:

① @Configuration 注解来标记一个类为配置类,替代原有xml配置文件,该注解第一个作用是标识该类是一个配置类,第二个作用是具备@Component作用;

② @ComponentScan 组件扫描配置;

  • 指定一个或多个包名:扫描指定包及其子包下使用注解的类;
  • 不配置包名:扫描当前@componentScan注解配置类所在包及其子包下的类;

③ @PropertySource 注解用于加载外部properties资源配置;

④ @Import 用于加载其他配置类;

17. Spring 如何开启基于注解的自动写入?

在Spring中,可以通过在配置类上添加@ComponentScan注解来开启基于注解的自动装配。@ComponentScan注解会扫描指定的包及其子包中的所有类,将其中被@Component、@Service、@Repository、@Controller等注解标记的类自动注册为Bean。

以下是一个示例:

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    // 配置其他Bean
}

在上面的示例中,@ComponentScan注解指定了要扫描的包为com.example,Spring容器会自动扫描该包及其子包中的所有类,并将其中被@Component、@Service、@Repository、@Controller等注解标记的类自动注册为Bean。

需要注意的是,开启基于注解的自动装配时,需要确保被注解标记的类已经被正确地扫描到,并且注解的作用范围和生命周期符合预期。如果出现了无法自动装配的情况,可以通过调整@ComponentScan注解的参数或添加其他注解来解决问题。

18. Spring 基于Java的注解配置是什么?

基于Java的Spring注解配置是一种使用Java代码来配置Spring应用程序的方式,它使用注解来代替传统的XML配置文件。通过使用注解,我们可以更加简洁和直观地配置Spring应用程序,同时也可以减少配置文件的数量和复杂度。

在基于Java的Spring注解配置中,我们可以使用一些特定的注解来配置Spring应用程序,例如:

@Configuration:用于标记配置类,相当于传统的XML配置文件。
@Bean:用于标记方法,表示该方法返回的对象将被注册为Spring容器中的一个Bean。
@ComponentScan:用于自动扫描指定包下的所有组件,并将其注册为Spring容器中的Bean。
@Autowired:用于自动装配Bean,可以在需要使用Bean的地方直接使用该注解进行注入。

下面是一个简单的基于Java的Spring注解配置的示例:

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
 
    @Bean
    public MyController myController() {
        return new MyControllerImpl(myService());
    }
}

在上面的示例中,我们使用@Configuration注解标记了一个配置类,并使用@ComponentScan注解自动扫描了com.example包下的所有组件。同时,我们还使用@Bean注解标记了两个方法,分别返回MyService和MyController对象,并将其注册为Spring容器中的Bean。最后,我们在MyController的构造函数中使用@Autowired注解自动装配了MyService对象。

19. Spring @Primary注解的作用?

在 Spring 中,当存在多个相同类型的 Bean 时,如果没有指定优先级或者限定符,Spring 将无法确定应该使用哪个 Bean。这时可以使用 @Primary 注解来指定一个 Bean 为首选 Bean,当存在多个相同类型的 Bean 时,Spring 将优先选择被 @Primary 注解标记的 Bean。

public interface UserDao {
    void show();
}

@Repository
public class UserDaoImpl implements UserDao{

    @Override
    public void show() {
        System.out.println("UserDaoImpl....");
    }
}

@Repository
@Primary
public class UserDaoImpl2 implements UserDao {
    @Override
    public void show() {
        System.out.println("UserDaoImpl2....");
    }
}
@Service
public class UserServiceImpl {

    @Autowired
    private UserDao userDao;

    public UserServiceImpl(UserDao userDao){
        this.userDao = userDao;
    }

    public void test(){
        userDao.show();
    }
}

在上面的示例中,UserDaoImpl2 类被标记为 @Primary,表示它是首选的 Bean。当我们在其他组件中注入 UserDao 类型的 Bean 时,Spring 将优先选择 UserDaoImpl2 类型的 Bean:

@ComponentScan(basePackages = "com.hh")
@Configuration
public class AppConfig {

}
public class ApplicationContextTest {
    public static void main(String[] args) throws Exception {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
        UserServiceImpl userService = (UserServiceImpl)applicationContext.getBean("userServiceImpl");
        userService.test();
    }
}

UserDaoImpl2…

AnnotationConfigApplicationContext 是 Spring 框架中的一个应用上下文(ApplicationContext)实现,它可以通过 Java 配置类来加载 Spring 应用程序上下文。

在使用 AnnotationConfigApplicationContext 时,我们可以通过传入一个或多个 Java 配置类的 Class 对象来加载 Spring 应用程序上下文。这些配置类中可以包含 @Configuration、@ComponentScan、@Import 等注解,用于配置 Spring 应用程序上下文中的 Bean。

20. 一个类不加任何注解和配置会被Spring容器注册吗?

如果一个类没有任何注解和配置,它不会被Spring容器自动注册。Spring容器只会自动扫描带有特定注解的类,例如@Component、@Service、@Controller、@Repository等。如果一个类没有这些注解,也没有在配置文件中进行手动配置,那么它就不会被Spring容器注册。

21. 一个类不加任何注解和配置会依赖注入吗?

如果一个类没有任何注解和配置,它不会被Spring容器自动注册,也就不会进行依赖注入。依赖注入是通过Spring容器来实现的,只有被Spring容器管理的Bean才能进行依赖注入。如果一个类没有被Spring容器管理,那么它就无法进行依赖注入。因此,如果想要进行依赖注入,必须要将类注册到Spring容器中,可以通过在类上添加@Component、@Service、@Controller、@Repository等注解来实现。

public class I18nUtils {
    private static MessageSource messageSource;
    
    @Autowired
    public void setMessageSource(MessageSource messageSource) {
        I18nUtils.messageSource = messageSource;
    }

    public static String i18n(String code, Object... args) {
        return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
    }
}

I18nUtils类没有加注解bean的注解,也就不会被Spring容器注册,因此messageSource即使使用了@Autowired注解也不会被注入,@Autowired注解只有在Spring Bean内才会生效。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新人使用Git获取远程仓库项目

前言 这篇git技术篇非常的简单基础&#xff0c;写它的原因很简单&#xff0c;因为现在很多的年轻人都很浮躁&#xff0c;刚入门就想学最牛x的&#xff0c;看不起基础的一些技术&#xff0c;比如说git操作、Linux基础命令&#xff0c;编程基础啥的。我身边有很多这样的年轻人&a…

Html5版飞机大战游戏中(Boss战)制作

内容在“60行代码&#xff0c;制作飞机大战游戏”的基础上&#xff0c;继续追加入了Boss战的功能。 boss的血量默认设置为100了&#xff0c;可以二次开发调整……(^_^) 玩起来有一定难度哈。 试玩地址&#xff1a;点击试玩 实现功能 添加玩家飞机&#xff0c;并进行控制Boss能…

你的应用太慢了,给我司带来了巨额损失,该怎么办

记得很久之前看过谷歌官方有这么样的声明&#xff1a;如果一个页面的加载时间从 1 秒增加到3 秒&#xff0c;那么用户跳出的概率将增加 32%。 但是早在 2012 年&#xff0c;亚马逊就计算出了&#xff0c;页面加载速度一旦下降一秒钟&#xff0c;每年就会损失 16 亿美元的销售额…

【Python入门第三十六天】Python丨文件写入

写入已有文件 如需写入已有的文件&#xff0c;必须向 open() 函数添加参数。 “a” - 追加 - 会追加到文件的末尾“w” - 写入 - 会覆盖任何已有的内容 实例 打开文件 “demofile2.txt” 并将内容追加到文件中&#xff1a; f open("demofile2.txt", "a&qu…

【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式国赛客观题以及详细题解

题1 概念题。 USRAT&#xff1a;异步串口通信&#xff0c;常用于数据传输&#xff1b;SW-DP&#xff1a;SWD 的全称应该是 The Serial Wire Debug Port (SW-DP),也就是串行调试端口&#xff0c;是 >ARM 目前支持的两种调试端口之一&#xff1b;JTAG-DP&#xff1a;另一个调试…

使用C++编写一个AVL的增删改查代码并附上代码解释

//qq460219753提供其他代码帮助 #include <iostream> using namespace std;struct Node {int data;Node *left;Node *right;int height; };// 获取结点高度 int height(Node *node) {if (node nullptr){return 0;}return node->height; }// 获取两个数中较大的一个 i…

Java_Spring:3. IoC 的概念和作用-程序的耦合和解耦

目录 1 案例的前期准备 1.1 准备 spring 的开发包 1.2 创建业务层接口和实现类 1.3 创建持久层接口和实现类 2 基于 XML 的配置 2.1 第一步&#xff1a;拷贝必备的 jar 包到工程的 lib 目录中 2.2 第二步&#xff1a;在类的根路径下创建一个任意名称的 xml 文件&#xf…

c#文案语音配图片一键生成视频

高手略过吧&#xff0c;功能太简单&#xff0c;我自己都不好意思。。 这个是我自己的需要&#xff0c;做产品类的短视频&#xff0c;东搞西搞剪辑啊啥的&#xff0c;特别麻烦&#xff0c;所以先搞这个最简版&#xff0c;以后再一步步丰富功能。 需求&#xff1a;几张图片生成…

【设计模式-工厂方法】想象力和创造力:你考虑过自动化实现工厂吗?

无限思维-想象力和创造力&#xff1a;自动化实现工厂方法前言一、《大话设计模式》对应的Java版本工厂方法类图先行&#xff1a;代码实现&#xff1a;思考升华&#xff1a;二、想象力&#xff1a;创新型思维解决思路战略上&#xff1a;以无限思维的角度去想问题&#xff1a;部署…

建堆、堆排序、TopK问题大合集

一、如何建堆 1、向上调整建堆法O(NlogN) 原理&#xff1a; 利用向上调整的方法进行建堆&#xff0c;是通过模仿之前堆的插入操作&#xff0c;从第二个数开始&#xff0c;每次插入一个数&#xff0c;就对这个数进行向上调整&#xff0c;这样子既保证了原有数据为堆&#xff…

一文让你吃透 Vue3中的组件间通讯 【一篇通】

文章目录前情回顾前言1. 父组件 > 子组件通讯传递2. 子组件 > 父组件通讯传递3. 爷孙组件&#xff0c;后代组件通讯数据总结前情回顾 在本专栏前一章节中&#xff0c;我为大家带来了 Vue3 新特性变化上手指南 的归纳梳理&#xff0c;主要介绍了 Vue3 的 Proxy 响应式原理…

【Docker】Compose容器编排LNMP上云

文章目录什么是Docker-Compose下载安装官网官网下载安装卸载Compose核心概念一文件两要素三个步骤Compose常用命令DjangoMysqlRedisNginx部署部署架构构建django容器 - - - dockerfile编写构建Nginx容器docker-compose 编排容器Django项目配置custom_webmysql容器redis容器Djan…

IO流你了解多少

IO流你了解多少 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在某公…

springboot校友社交系统

050-springboot校友社交系统演示录像开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;e…

机器学习之图像处理——基本概念知识介绍

图像处理的概论 图像分析一般利用数学模型并结合图像处理的技术来分析底层特征和上层结构&#xff0c;到从而提取具有一定智能性的信息&#xff0c;其中对图片内容分析&#xff0c;图片内容识别和检测都离不开图像的分类。 图像分类目标&#xff1a;已有固定的分类标签集合&a…

python+appium+pytest自动化测试-参数化设置

来自APP Android端自动化测试初学者的笔记&#xff0c;写的不对的地方大家多多指教哦。&#xff08;所有内容均以微博V10.11.2版本作为例子&#xff09;在自动化测试用例执行过程中&#xff0c;经常出现执行相同的用例&#xff0c;但传入不同的参数&#xff0c;导致我们需要重复…

Qt之实现类似软件安装时的新功能介绍界面

一.效果 在软件安装时,一般会轮播软件的新功能,安装后,如果还想查看这些新功能该怎么办呢,我们可以把这个介绍新新功能的小应用集成到软件的“帮助”菜单中,比起纯黑文字的无趣介绍,图文方式的呈现会生动得多。 最近在看《赘婿》,借几张图过来用用。 二.原理 1.分层结…

Jetson Nano驱动机器人的左右两路电机

基于Jetson Nano板子搭建一个无人车&#xff0c;少不了减速电机驱动轮子滚动&#xff0c;那如何驱动呢&#xff1f;从Jetson.GPIO库文件来说&#xff0c;里面没有支持产生PWM的引脚&#xff0c;也就意味着Jetson nano没有硬件产生PWM的能力&#xff0c;所以我们不得不使用别的方…

安全防御 --- 防火墙

防火墙 1、基础 &#xff08;1&#xff09;防御对象&#xff1a;授权用户&#xff1b;非授权用户 &#xff08;2&#xff09;含义&#xff1a; 防火墙是一种隔离&#xff08;非授权用户所在区域间&#xff09;并过滤&#xff08;对受保护网络中的有害流量或数据包&#xff0…

python变量内存管理

目录 ❤ 引入 ❤ 什么是垃圾回收机制? ❤ 为什么需要垃圾回收机制? ❤ 栈区与堆区 ❤ 直接引用与间接引用 ❤ 垃圾回收机制原理分析 ❤ 什么是引用计数? ❤ 引用计数扩展阅读 ❤ 标记和清除 ❤ 分代 ❤ 小整数对象池 ❤ 字符串驻留机制 什么是字符…
最新文章