Spring相關面試題(三)

29 如何在所有的BeanDefinition注冊完成后,進行擴展

Bean工廠的后置處理器,在所有的Bean注冊完成后,就被執行。

public class A implements BeanFactoryPostProcessor {private String name = "a class";private B b;
?public String getName() {return name;}
?public void setName(String name) {this.name = name;}
?@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {//在所有的BeanDefinition注冊完成之后調用for (String beanDefinitionName : configurableListableBeanFactory.getBeanDefinitionNames()) {System.out.println(beanDefinitionName);}}
}

30 Bean的生產順序由什么決定的?

創建一個ApplicationContext,會調用refresh方法,再去調用finishBeanFactoryInitialization(),完成BeanFactory的初始化,創建所有的BeanDefinitionNames,是個ArrayList,按照注冊順序,進行創建,依賴關系也會影響Bean的創建順序。

BeanDefinition的注冊順序的由來?

主要是由注解(配置)的解析順序進行的。

  1. @Configuration

  2. @Component

  3. @Import 導入的一個類

  4. @Bean

  5. @Import——ImportBeanDefinitionRegister

也可以使用@Order來決定順序,后面注冊的會覆蓋掉前面的注冊的。

BeanDefinitionRegistryPostProcessor

31 Spring有哪幾種配置方式?
  1. 注解 Spring 2.5 +

    1. Spring.xml

  2. XML

    1. Spring.xml <component-scan base-package=""/> @Component @Autowired

  3. 基于Java配置

    1. JavaConfig Spring 3.0+

    2. @Configuration @Component

32 JavaConfig 如何替代 Spring.XML的配置方式的

應用

  1. 以前XML

    1. Spring容器是new ClassPathXMLApplicationContext()

    2. Spring.XML

    3. <Bean scope="" >

    4. <component-scan />

    5. 引入外部屬性配置文件:<property-placeHodeler resource="">

    6. 指定其他配置文件 @PropertySource("classpath:db.properties")

    7. <property name="pass" value="${mysql.password}"></property>

  2. JavaConfig

    1. Spring容器是 nw AnnotationConfigApplicationContext(javaConfig.class)

    2. JavaConfig.java ===> @Configuration

    3. @Bean @Scope @Lazy

    4. @ComponentScan("")

    5. 引入外部配置文件@PropertySource() 外部屬性配置文件。

    6. @Import 使用配置比較靈活 @Import({Config.class})

    7. @Value("${mysql.pass}")

源碼

總的來說,整體的執行步驟都是一樣的

即:讀取配置文件或配置文件XML,解析配置文件或者XML配置文件,后面的步驟就是相同的,注冊BeanDefinition,生產Bean.

29 如何在所有的BeanDefinition注冊完成后,進行擴展

Bean工廠的后置處理器,在所有的Bean注冊完成后,就被執行。

public class A implements BeanFactoryPostProcessor {private String name = "a class";private B b;
?public String getName() {return name;}
?public void setName(String name) {this.name = name;}
?@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {//在所有的BeanDefinition注冊完成之后調用for (String beanDefinitionName : configurableListableBeanFactory.getBeanDefinitionNames()) {System.out.println(beanDefinitionName);}}
}

30 Bean的生產順序由什么決定的?

創建一個ApplicationContext,會調用refresh方法,再去調用finishBeanFactoryInitialization(),完成BeanFactory的初始化,創建所有的BeanDefinitionNames,是個ArrayList,按照注冊順序,進行創建,依賴關系也會影響Bean的創建順序。

BeanDefinition的注冊順序的由來?

主要是由注解(配置)的解析順序進行的。

  1. @Configuration

  2. @Component

  3. @Import 導入的一個類

  4. @Bean

  5. @Import——ImportBeanDefinitionRegister

也可以使用@Order來決定順序,后面注冊的會覆蓋掉前面的注冊的。

BeanDefinitionRegistryPostProcessor

31 Spring有哪幾種配置方式?
  1. 注解 Spring 2.5 +

    1. Spring.xml

  2. XML

    1. Spring.xml <component-scan base-package=""/> @Component @Autowired

  3. 基于Java配置

    1. JavaConfig Spring 3.0+

    2. @Configuration @Component

32 JavaConfig 如何替代 Spring.XML的配置方式的

應用

  1. 以前XML

    1. Spring容器是new ClassPathXMLApplicationContext()

    2. Spring.XML

    3. <Bean scope="" >

    4. <component-scan />

    5. 引入外部屬性配置文件:<property-placeHodeler resource="">

    6. 指定其他配置文件 @PropertySource("classpath:db.properties")

    7. <property name="pass" value="${mysql.password}"></property>

  2. JavaConfig

    1. Spring容器是 nw AnnotationConfigApplicationContext(javaConfig.class)

    2. JavaConfig.java ===> @Configuration

    3. @Bean @Scope @Lazy

    4. @ComponentScan("")

    5. 引入外部配置文件@PropertySource() 外部屬性配置文件。

    6. @Import 使用配置比較靈活 @Import({Config.class})

    7. @Value("${mysql.pass}")

源碼

總的來說,整體的執行步驟都是一樣的

即:讀取配置文件或配置文件XML,解析配置文件或者XML配置文件,后面的步驟就是相同的,注冊BeanDefinition,生產Bean.

33 @Component @Controller @Repository @Service 有何區別?

Controller、Repository和Service都是基于Component注解。

@Controller 放在控制層

@Service 放在業務層

@Repository 放在數據層

提高代碼可閱讀性。

34 @Import有幾種用法。
  1. 直接指定類(如果配置類會按配置類正常解析、如果是個普通類就會解析成Bean)

  2. 寫個實現ImportSelector的實現類

    public class MyInportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{"com.xing.Import.heihei"};}
    }

    一次性可以注冊多個。

  3. 實現ImportBeanDefinitionRegistrar,RegisterBeanDefinitions方法中,創建BeanDefinition。

35 如何讓自動注入沒有找到依賴Bean時不報錯

@Autowired(required = false)

36 如何讓找到多個依賴Bean的時候不報錯

可以是在主要Bean上加入:@Primary注解。

37 @Autowired的作用

@Autowired的是自動注入,先按照類型,再按照名字注入。

38 @Autowired和@Resource的區別
  1. Autowired是Spring提供的,Resource是JDK提供的。

  2. Autowired默認根據類型匹配注入,Resource根據名字進行匹配,然后再根據類型進行匹配。

39 @Autowired注解自動裝配的過程是怎樣的

記住:@Autowired是通過Bean的后置處理器,進行解析的,可以用在:構造方法、普通方法、參數、字段和注解上。

  1. 核心方法:buildAutowiringMetadata

    1. 通過反射獲取該類的每一個字段和方法,并且分別用 findAutowiredAnnotation方法遍歷每一個字段和方法,如果有@Autowired注解修飾,則返回注解相關屬性。最后這個方法返回的就是包含所有帶有autowire注解修飾的一個InjectionMetadata集合。

  2. InjectionMetadata類,這個類由兩部分組成: targetClass目標類和我們要獲得的injectedElements集合。

  3. 實現注入邏輯:調用InjectionMetadata中的公共inject方法遍歷調用protect的inject方法

  4. 調用InjectionMetadata中的公共inject

  5. 遍歷調用protect的inject方法

40 @Configuration作用及原理解析

作用

  1. @Configuration用來代替xml配置方式spring.xml配置文件<bean>

  2. 但是沒有@Configuration也可以配置@Bean

    1. 那加和不加有什么區別呢?

    2. 加了@Configuration會為配置類創建一個cblib動態代理(保證配置類中的@Bean是單例),@Bean方法的調用就會通過容器的getBean獲取。

原理

  1. 創建Spring上下文的時候會注冊一個解析配置類的處理器:ConfigurationClassPostProcessor(實現了BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor)

  2. 調用invokeBeanFactoryPostProcessor方法,就會去調用ConfigurationClassPostProcessor的對應的方法(postProcessBeanDefinitionRegistry)進行解析配置(解析配置類說白了就是去解析各種注解(@Bean,@Configuration,@Import ),就是注冊BeanDefinition)

  3. ConfigurationClassPostProcessor.postProcessorBeanFactory創建cblib動態代理。

@Bean怎么保證Bean的單例的。

@Configuration如何保證@Bean單例語義?_@bean 單例-CSDN博客

  1. @Bean方法返回的對象是單例的,需要在類上加上@Configuration

41 要將一個第三方的類配置成為Bean有哪些方式
  1. @Bean

  2. @Import(DruidDataSource.class) 和@ImportSelector不能干預實例化過程。

  3. 寫個類實現ImportBeanDefinitionRegistrar

    1. 實現registerBeanDefinitions

      public class index implements ImportBeanDefinitionRegistrar {
      ?@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry, BeanNameGenerator importBeanNameGenerator) {RootBeanDefinition A = new RootBeanDefinition(A.class);//拿到props valuesA.getPropertyValues().addPropertyValue("name","wangxing");registry.registerBeanDefinition("a",A);}
      }
    2. 這樣可以干涉bean的創建

  4. 實現BeanDefinitionRegistryPostProcessor

    1. 也是拿到注冊器,和上面一樣。

  5. 后兩種方法都是在SpringIOC的擴展點拿到BeanDefinitionRegistrar,然后注入BeanDefinition。

42 為什么@ComponentScan 不設置basePackage也會掃描?

因為Spring在解析@ComponentScan的時候,拿到basePackage,如果沒有涉及basePackage會把當前所在類的位置,作為掃描包。

43 什么是AOP,能做什么?

AOP(Aspect - Originted Proaramming),一般稱為面向切面編程,用于將那些與業務無關,但卻對多個對象產生影響的公共行為和邏輯,抽取并封裝為一個可重用的模塊,這個模塊被命名為“切面”(Aspect),減少系統中的重復代碼,降低了模塊間的耦合度,同時提高了系統的可維護性。可用于權限認證、日志、事務處理等。 -

AOP、OOP在字面上雖然非常類似,但卻是面向不同領域的兩種設計思想。0OP(面向對象編程)針對業務處理過程的實體及其屬性和行為進行抽象封裝,以獲得更加清浙高效的邏輯單元劃分。而AOP作為面向對象的一種補充,則是針對業務處理過程中的切面進行提取,已達到業務代碼和公共行為代碼之間低耦合性的隔離效果。這兩種設計思想在目標上有著本質的差異。

44 在Spring中AOP如何使用?

鏈接:Spring中使用AOP的幾種方式_doaround-CSDN博客

XML方式

XML + 注解

注解方式

45 Spring AOP 中常見的名詞
  1. 切面(Aspect):在Spring AOP指的就是切面類,切面類會管理著通知和切入點。

  2. 連接點(Join point) :被增強的業務方法。

  3. 通知(Advice) : 就是需要增強到業務方法中的公共代碼,通知有很多種類分別可以在需要增強的業務方法不同位置進行(前置,后置,異常,返回,環繞通知)。

  4. 切入點(Pointcut):由切點表達式決定需要增強的方法,通常通過切點表達式進行。

  5. 目標對象(Target Object):增強的對象。

  6. 顧問:Advisor的一個包裝,Advisor是Pointcut以及Advice的一個結合,用來管理Advice和Pointcut。

  7. 織入(Weaving) :AspectJ中獨有的內容,Spring AOP :動態代理。為目標對象創建動態代理的過程叫做織入。

    1. 編譯期:切面在目標類編譯時被織入。AspectJ的織入編譯器是以這種

    2. 類加載期:切面在目標類加載到JVM時被織入。需要特殊的類加載器之可以在目標類被引入應用之前增強該目標類的字節碼。AspectJ5的加載時織入就支持以這種方式織入切面。

    3. 運行期:切面在應用運行的某個時刻被織入。一般情況下,在織入切面時,AOP容器會為目標對象動態地創建一個代理對象。SpringAOP就是以這種方式織入切面。

46 Spring通知有哪些類型?

AOP:在某個特定的連接點(方法),執行的動作(代碼)。

  1. 前置通知(Before)

  2. 后置通知(After)

  3. 返回通知(After-returning)

  4. 異常通知(After-throwing)

  5. 環繞通知(Around)

執行順序

正常: 前置 -> 方法 -> 后置 -> 返回。

異常:前置 -> 方法 -> 后置 -> 異常

Spring 5.2.7 之后

正常: 前置 -> 方法 -> 返回 -> 后置

異常: 前置 -> 方法 -> 異常 -> 后置

47 SpringAOP和AspectJ AOP有什么區別?

AspectJ AOP也是一個面向切面的開源框架,如果要使用Spring中的AOP功能,需要引入對應的AspectJ AOP 依賴,但SpringAOP使用的僅僅是AspectJ AOP 的切點解析和匹配,AspectJ AOP 中的一些注解。

  • AspectJ AOP 使用的靜態代理。

    • AspectJ是靜態代理的增強,所謂靜態代理,就是AOP框架會在編譯階段生成AOP代理類,因此也稱為編譯時增強,他會在編譯階段將Aspect(切面)織入到Java字節碼中,運行的時候就是增強之后的AOP對象。

  • Spring AOP 使用的是動態代理。

    • 如果實現接口,是JDK的動態代理

    • 沒有實現接口就是CGLIB實現動態代理

SpringAOP致力解決企業中開發的普遍問題,AspectJ是AOP編程的完全解決方案。還有SpringAOP的性能不如AspectJ,因為SpringAOP做的是動態代理,會在容器初始化的時候加載,會加深調用棧。

48 JDK動態代理和CGLIB動態代理的區別
  • 如果實現接口,是JDK的動態代理

    • JDK會在運行的時候,為目標類生成一個動態代理類$proxy*.class

    • 該代理類是實現了接目標類接口,并且代理類會實現接口所有的方法增強代碼。

    • 調用時 通過代理類先去調用處理類進行增強,再通過反射的方式進行調用目標方法。從而實現AOP

  • 沒有實現接口就是CGLIB實現動態代理

    • 并且會重寫父類所有的方法增強代碼,CGLIB的底層是通過ASM在運行時動態的生成目標類的一個子類。 (還有其他相關類,主要是為增強調用時效率)會生成多個

    • 調用時先通過代理類進行增強,再直接調用父類對應的方法進行調用目標方法。從而實現AOP。

      • final標記的類是無法實現CGLIB代理的。

JDK生成的快,調用慢;CGLIB生產慢,調用快,但是在JDK老版本中,CGLIB的速度會比JDK快,但是隨著JDK的更新,JDK是要比CGLIB快

33 @Component @Controller @Repository @Service 有何區別?

Controller、Repository和Service都是基于Component注解。

@Controller 放在控制層

@Service 放在業務層

@Repository 放在數據層

提高代碼可閱讀性。

34 @Import有幾種用法。
  1. 直接指定類(如果配置類會按配置類正常解析、如果是個普通類就會解析成Bean)

  2. 寫個實現ImportSelector的實現類

    public class MyInportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{"com.xing.Import.heihei"};}
    }

    一次性可以注冊多個。

  3. 實現ImportBeanDefinitionRegistrar,RegisterBeanDefinitions方法中,創建BeanDefinition。

35 如何讓自動注入沒有找到依賴Bean時不報錯

@Autowired(required = false)

36 如何讓找到多個依賴Bean的時候不報錯

可以是在主要Bean上加入:@Primary注解。

37 @Autowired的作用

@Autowired的是自動注入,先按照類型,再按照名字注入。

38 @Autowired和@Resource的區別
  1. Autowired是Spring提供的,Resource是JDK提供的。

  2. Autowired默認根據類型匹配注入,Resource根據名字進行匹配,然后再根據類型進行匹配。

39 @Autowired注解自動裝配的過程是怎樣的

記住:@Autowired是通過Bean的后置處理器,進行解析的,可以用在:構造方法、普通方法、參數、字段和注解上。

  1. 核心方法:buildAutowiringMetadata

    1. 通過反射獲取該類的每一個字段和方法,并且分別用 findAutowiredAnnotation方法遍歷每一個字段和方法,如果有@Autowired注解修飾,則返回注解相關屬性。最后這個方法返回的就是包含所有帶有autowire注解修飾的一個InjectionMetadata集合。

  2. InjectionMetadata類,這個類由兩部分組成: targetClass目標類和我們要獲得的injectedElements集合。

  3. 實現注入邏輯:調用InjectionMetadata中的公共inject方法遍歷調用protect的inject方法

  4. 調用InjectionMetadata中的公共inject

  5. 遍歷調用protect的inject方法

40 @Configuration作用及原理解析

作用

  1. @Configuration用來代替xml配置方式spring.xml配置文件<bean>

  2. 但是沒有@Configuration也可以配置@Bean

    1. 那加和不加有什么區別呢?

    2. 加了@Configuration會為配置類創建一個cblib動態代理(保證配置類中的@Bean是單例),@Bean方法的調用就會通過容器的getBean獲取。

原理

  1. 創建Spring上下文的時候會注冊一個解析配置類的處理器:ConfigurationClassPostProcessor(實現了BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor)

  2. 調用invokeBeanFactoryPostProcessor方法,就會去調用ConfigurationClassPostProcessor的對應的方法(postProcessBeanDefinitionRegistry)進行解析配置(解析配置類說白了就是去解析各種注解(@Bean,@Configuration,@Import ),就是注冊BeanDefinition)

  3. ConfigurationClassPostProcessor.postProcessorBeanFactory創建cblib動態代理。

@Bean怎么保證Bean的單例的。

@Configuration如何保證@Bean單例語義?_@bean 單例-CSDN博客

  1. @Bean方法返回的對象是單例的,需要在類上加上@Configuration

41 要將一個第三方的類配置成為Bean有哪些方式
  1. @Bean

  2. @Import(DruidDataSource.class) 和@ImportSelector不能干預實例化過程。

  3. 寫個類實現ImportBeanDefinitionRegistrar

    1. 實現registerBeanDefinitions

      public class index implements ImportBeanDefinitionRegistrar {
      ?@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry, BeanNameGenerator importBeanNameGenerator) {RootBeanDefinition A = new RootBeanDefinition(A.class);//拿到props valuesA.getPropertyValues().addPropertyValue("name","wangxing");registry.registerBeanDefinition("a",A);}
      }
    2. 這樣可以干涉bean的創建

  4. 實現BeanDefinitionRegistryPostProcessor

    1. 也是拿到注冊器,和上面一樣。

  5. 后兩種方法都是在SpringIOC的擴展點拿到BeanDefinitionRegistrar,然后注入BeanDefinition。

42 為什么@ComponentScan 不設置basePackage也會掃描?

因為Spring在解析@ComponentScan的時候,拿到basePackage,如果沒有涉及basePackage會把當前所在類的位置,作為掃描包。

43 什么是AOP,能做什么?

AOP(Aspect - Originted Proaramming),一般稱為面向切面編程,用于將那些與業務無關,但卻對多個對象產生影響的公共行為和邏輯,抽取并封裝為一個可重用的模塊,這個模塊被命名為“切面”(Aspect),減少系統中的重復代碼,降低了模塊間的耦合度,同時提高了系統的可維護性。可用于權限認證、日志、事務處理等。 -

AOP、OOP在字面上雖然非常類似,但卻是面向不同領域的兩種設計思想。0OP(面向對象編程)針對業務處理過程的實體及其屬性和行為進行抽象封裝,以獲得更加清浙高效的邏輯單元劃分。而AOP作為面向對象的一種補充,則是針對業務處理過程中的切面進行提取,已達到業務代碼和公共行為代碼之間低耦合性的隔離效果。這兩種設計思想在目標上有著本質的差異。

44 在Spring中AOP如何使用?

鏈接:Spring中使用AOP的幾種方式_doaround-CSDN博客

XML方式

XML + 注解

注解方式

45 Spring AOP 中常見的名詞
  1. 切面(Aspect):在Spring AOP指的就是切面類,切面類會管理著通知和切入點。

  2. 連接點(Join point) :被增強的業務方法。

  3. 通知(Advice) : 就是需要增強到業務方法中的公共代碼,通知有很多種類分別可以在需要增強的業務方法不同位置進行(前置,后置,異常,返回,環繞通知)。

  4. 切入點(Pointcut):由切點表達式決定需要增強的方法,通常通過切點表達式進行。

  5. 目標對象(Target Object):增強的對象。

  6. 顧問:Advisor的一個包裝,Advisor是Pointcut以及Advice的一個結合,用來管理Advice和Pointcut。

  7. 織入(Weaving) :AspectJ中獨有的內容,Spring AOP :動態代理。為目標對象創建動態代理的過程叫做織入。

    1. 編譯期:切面在目標類編譯時被織入。AspectJ的織入編譯器是以這種

    2. 類加載期:切面在目標類加載到JVM時被織入。需要特殊的類加載器之可以在目標類被引入應用之前增強該目標類的字節碼。AspectJ5的加載時織入就支持以這種方式織入切面。

    3. 運行期:切面在應用運行的某個時刻被織入。一般情況下,在織入切面時,AOP容器會為目標對象動態地創建一個代理對象。SpringAOP就是以這種方式織入切面。

46 Spring通知有哪些類型?

AOP:在某個特定的連接點(方法),執行的動作(代碼)。

  1. 前置通知(Before)

  2. 后置通知(After)

  3. 返回通知(After-returning)

  4. 異常通知(After-throwing)

  5. 環繞通知(Around)

執行順序

正常: 前置 -> 方法 -> 后置 -> 返回。

異常:前置 -> 方法 -> 后置 -> 異常

Spring 5.2.7 之后

正常: 前置 -> 方法 -> 返回 -> 后置

異常: 前置 -> 方法 -> 異常 -> 后置

47 SpringAOP和AspectJ AOP有什么區別?

AspectJ AOP也是一個面向切面的開源框架,如果要使用Spring中的AOP功能,需要引入對應的AspectJ AOP 依賴,但SpringAOP使用的僅僅是AspectJ AOP 的切點解析和匹配,AspectJ AOP 中的一些注解。

  • AspectJ AOP 使用的靜態代理。

    • AspectJ是靜態代理的增強,所謂靜態代理,就是AOP框架會在編譯階段生成AOP代理類,因此也稱為編譯時增強,他會在編譯階段將Aspect(切面)織入到Java字節碼中,運行的時候就是增強之后的AOP對象。

  • Spring AOP 使用的是動態代理。

    • 如果實現接口,是JDK的動態代理

    • 沒有實現接口就是CGLIB實現動態代理

SpringAOP致力解決企業中開發的普遍問題,AspectJ是AOP編程的完全解決方案。還有SpringAOP的性能不如AspectJ,因為SpringAOP做的是動態代理,會在容器初始化的時候加載,會加深調用棧。

48 JDK動態代理和CGLIB動態代理的區別
  • 如果實現接口,是JDK的動態代理

    • JDK會在運行的時候,為目標類生成一個動態代理類$proxy*.class

    • 該代理類是實現了接目標類接口,并且代理類會實現接口所有的方法增強代碼。

    • 調用時 通過代理類先去調用處理類進行增強,再通過反射的方式進行調用目標方法。從而實現AOP

  • 沒有實現接口就是CGLIB實現動態代理

    • 并且會重寫父類所有的方法增強代碼,CGLIB的底層是通過ASM在運行時動態的生成目標類的一個子類。 (還有其他相關類,主要是為增強調用時效率)會生成多個

    • 調用時先通過代理類進行增強,再直接調用父類對應的方法進行調用目標方法。從而實現AOP。

      • final標記的類是無法實現CGLIB代理的。

JDK生成的快,調用慢;CGLIB生產慢,調用快,但是在JDK老版本中,CGLIB的速度會比JDK快,但是隨著JDK的更新,JDK是要比CGLIB快

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36824.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36824.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36824.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ARM芯片架構(RTOS)

前言&#xff1a;筆記韋東山老師的rtos教程&#xff0c;連接放在最后 #ARM介紹 arm芯片屬于精簡指令集risc&#xff0c;所用的指令比較簡單&#xff0c;ARM架構是一種精簡指令集&#xff08;RISC&#xff09;架構&#xff0c;廣泛應用于移動設備、嵌入式系統、物聯網等領域。AR…

Linux:簡單說說分號“;”、單豎線“|”、雙豎線“||”、單“”、雙“”作為多個命令分隔符的用法

以下符號都可以用來連接多個命令&#xff0c;在一行中作為多個命令的分隔符。區別如下&#xff1a; 1、分號“;” 按照先后順序執行命令。每個命令都會在前一個命令執行完畢后立即執行。 如果其中一個命令出現錯誤&#xff0c;后續命令仍然會繼續執行。 2、單豎線“|” 作為管…

2. jenkins發布java項目

jenkins發布java項目 一、環境描述二、部署tomcat業務服務器三、部署git服務器&#xff0c;上傳測試代碼1、部署git服務器2、上傳測試代碼 四、jenkins對接組件1、安裝必要的插件2、對接git客戶端3、對接maven工具4、配置maven需要的jdk5、配置gitlab服務器的連接6、在jenkins上…

1161. 最大層內元素和

1161. 最大層內元素和 題目鏈接&#xff1a;1161. 最大層內元素和 代碼如下&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr)…

AI智能體文章索引

1&#xff0c;探索AI世界系列&#xff1a;俗說AI智能體 2&#xff0c;是真的嗎&#xff0c;不會代碼也能開發一款AI應用&#xff1f;GPTs讓人夢想成真 3&#xff0c;來了&#xff0c;你的第一個AI智能體 4&#xff0c;制作一個智能體&#xff1a;抖音熱點話題文案制作助手 5&am…

【Django】網上蛋糕項目商城-首頁

概念 本文在上一文章搭建完數據庫&#xff0c;以及創建好項目之后&#xff0c;以及前端靜態文件后&#xff0c;對項目的首頁功能開發。 后端代碼編寫 這里我們使用pymysql模塊對數據庫進行操作&#xff0c;獲取數據。因此需要在dos窗口使用以下指令下載該庫文件 pip instal…

springboot3搭建WebSocket服務

springboot3搭建WebSocket服務 文章目錄 springboot3搭建WebSocket服務前言一、創建SpringBoot工程二、pom.xml中引入依賴1.引入庫2. application.yml配置 三、主啟動類四、WebSocket配置類五、編寫WebSocket服務類六、編寫測試頁面總結 前言 本文詳細介紹了如何在SpringBoot項…

新型發電系統——光伏行業推動能源轉型

一、發展背景 “十四五”期間&#xff0c;隨著“雙碳”目標提出及逐步落實&#xff0c;本就呈現出較好發展勢頭的分布式光伏發展有望大幅提速。就“十四五”光伏發展規劃&#xff0c;國家發改委能源研究所可再生能源發展中心副主任陶冶表示&#xff0c;“雙碳”目標意味著國家…

Java面試題:比較Maven和Gradle的構建生命周期和依賴管理

Maven和Gradle是兩個流行的構建工具&#xff0c;各自有不同的構建生命周期和依賴管理機制。以下是它們的比較&#xff1a; 構建生命周期 Maven Maven有一個固定的生命周期&#xff0c;由一系列階段&#xff08;phases&#xff09;組成&#xff0c;每個階段代表一個構建步驟。…

ubuntu更改ssh默認端口22

編輯 /etc/ssh/sshd_config&#xff0c;把Port前的#去掉&#xff0c;端口號改成8022&#xff0c;重啟ssh。 // 1. 修改配置 sudo vi /etc/ssh/sshd_config// 2. 重啟 ssh sudo systemctl restart ssh//【不想確認可跳過此步驟】 3. 查看 ssh 監聽端口 sudo lsof -i:22 // 無…

MySQL改密

這里寫目錄標題 更改登錄密碼&#xff1a;有權限賬號能登錄mysql中&#xff1a;有權限賬號不能登錄mysql中&#xff1a;mysql5.6版本命令mysql5.7版本命令修改密碼8.0版本改完后&#xff1a; mysql登錄不上了本機安裝了5.6后&#xff0c;又安裝了mysql8.0 更改登錄密碼&#xf…

QT QVariant 類和 C++ 的 union有什么區別

QVariant 類和 C 的 union&#xff08;共用體&#xff09;在概念、用途和實現上有所不同。以下是對它們的區別和使用的簡要概述&#xff1a; QVariantQT 如何儲存多種數據類型&#xff08;QVariant &#xff09;-CSDN博客 概念&#xff1a;QVariant 是 Qt 框架中的一個類&…

易查分小程序丨查詢開始和截止時間如何設置?

老師在發布查詢時&#xff0c;希望讓學生家長在指定的時間段才能查詢&#xff0c;應該如何實現&#xff1f; 通過查詢時段功能&#xff0c;老師可以自主設置查詢開始和截止時間&#xff0c;下面就來教給大家如何使用吧&#xff01; 設置查詢時段演示效果 &#x1f4cc;使用教程…

ASP.NETMVC-簡單例子-數據庫查詢+razor使用+項目發布

環境&#xff1a; win10&#xff0c;SQL Server 2008 R2 參考&#xff1a; asp.net mvc框架之EF的使用 - black娃 - 博客園 https://www.cnblogs.com/fjiqiang/p/11131365.html 目錄 數據庫查詢要求思路操作 razor使用項目發布要求實現 數據庫查詢 要求 從服務器的數據庫中查…

干貨分享 | 學會這7個工具方法,數字化轉型規劃不是難題

提到數字化轉型&#xff0c;首要做的便是分析企業現有的業務流程和價值流&#xff0c;發現企業利潤來源的關鍵點&#xff0c;進而有針對性的數字化轉型。要實現傳統業務向數字化業務的轉變&#xff0c;制定出高效、靈活的業務流程優化策略顯得至關重要&#xff0c;這樣才能找到…

簡化數據提取:Excel-Extractor 使用指南

前言 在當今數據驅動的世界中&#xff0c;從復雜的 Excel 文件中提取和分析數據是許多業務和研究工作的基本需求。為了簡化這一過程&#xff0c;Excel-Extractor 項目應運而生。本文將為你介紹 Excel-Extractor 的功能和如何在你的項目中使用它。 什么是 Excel-Extractor&…

【C#】制作圖集

如題目&#xff0c;用好幾個圖片拼在一個大圖里&#xff0c;博主是用于Unity游戲開發使用的&#xff0c;話不多說&#xff0c;上代碼&#xff01; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging;namespace EffectsPac…

Spring Boot中的安全性配置詳解

Spring Boot中的安全性配置詳解 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將深入探討如何在Spring Boot應用中實現全面的安全性配置&#xff0c;保…

LED裸眼3D顯示屏:開啟視覺新體驗

隨著科技的不斷進步&#xff0c;LED顯示屏作為一種新型的顯示技術&#xff0c;已經被廣泛應用于各個領域。而其中&#xff0c;LED裸眼3D顯示屏更是因其獨特的技術原理和令人震撼的視覺效果&#xff0c;成為了業界關注的焦點。 裸眼3D顯示屏是一種前沿的顯示技術&#xff0c;它…

centos系統中neo4j數據庫和python環境部署

最近因為項目需要&#xff0c;到了一個純局域網環境中進行知識圖譜構建。對于小規模數據&#xff0c;neo4j社區版能夠滿足基本的建模和查詢需要&#xff08;大規模數據需要商業版&#xff0c;或是選用其他開源分布式圖數據庫如nebula等&#xff09;。本文主要介紹圖數據庫和pyt…