Spring框架的原理及应用详解(七)

本系列文章简介:

        在当今的软件开发世界中,随着应用复杂性的不断增加和技术的快速发展,传统的编程方式已经难以满足快速迭代、高可扩展性和易于维护的需求。为此,开发者们一直在寻求更加高效、灵活且易于管理的开发框架,以帮助他们应对这些挑战。Spring框架就是在这样的背景下应运而生,并凭借其独特的优势,迅速成为了Java企业级应用开发的首选框架。

        Spring框架是一个开源的、轻量级的Java应用开发框架,它提供了全面的功能来支持Java应用程序的各个方面,包括控制反转(IoC)、面向切面编程(AOP)、数据访问、Web开发等。Spring框架的设计初衷是简化企业级应用开发,通过其强大的IoC容器和AOP支持,开发者可以更加灵活地组织和管理应用程序的组件,实现高内聚、低耦合的代码结构。

        本系列文章旨在深入解析Spring框架的原理及应用,帮助大家全面理解和掌握Spring框架的核心技术。我们将从Spring框架的历史和概述入手,逐步深入到其各个核心模块的原理和实现方式。通过具体的应用实例和最佳实践,我们将展示如何使用Spring框架来构建高效、稳定且易于维护的Java应用程序。

        在本系列文章中,我们将重点关注以下几个方面:

  1. Spring框架的核心原理:我们将详细阐述Spring框架的控制反转(IoC)和面向切面编程(AOP)的原理,以及它们如何帮助开发者更好地组织和管理应用程序的组件。
  2. Spring框架的主要模块:我们将介绍Spring框架的各个主要模块,包括Spring Core、Spring MVC、Spring Data等,并解释它们的作用和用法。
  3. Spring框架的应用实例:我们将通过具体的Java应用程序开发实例,展示如何使用Spring框架来构建Web应用程序、进行数据访问、实现安全控制等。
  4. Spring框架的最佳实践:我们将分享一些在使用Spring框架进行开发时的最佳实践,帮助读者避免一些常见的错误和问题,提高开发效率和质量。

        希望本系列文章能够为大家提供一个全面而深入的Spring框架学习指南,帮助大家更好地理解和应用Spring框架,开发出更加高效、稳定且易于维护的Java应用程序。同时,我们也希望本系列文章能够激发大家对Spring框架进一步探索和学习的兴趣,共同推动Java企业级应用开发的发展。

        欢迎大家订阅《Java技术栈高级攻略》专栏(PS:近期会涨价),一起学习,一起涨分!

目录

一、引言

二、Spring框架的最佳实践

2.1 遵循单一职责原则,合理划分Spring Bean的职责

2.2 使用Spring Profiles进行多环境配置

2.3 利用Spring的自动装配和条件装配功能简化配置

2.4 合理选择数据访问技术,如JPA、MyBatis等

2.5 使用Spring Boot Actuator进行应用程序监控和管理

三、总结与展望

3.1 总结Spring框架的核心原理和优势

3.2 展望Spring框架的未来发展方向和应用前景

四、结语


一、引言

        Spring框架是一个开源的、轻量级的Java应用开发框架,旨在为Java开发人员提供一个全面且高效的解决方案来构建企业级应用。它支持各种设计模式,并通过IoC(控制反转)和AOP(面向切面编程)等核心技术,极大地简化了应用程序的开发、管理和测试过程。

        本文将跟随《Spring框架的原理及应用详解(六)》的进度,继续介绍Spring框架。希望通过本系列文章的学习,您将能够更好地理解Spring框架的内部工作原理,掌握Spring框架的使用技巧,以及通过合理的设计完成最佳实践,充分发挥优化Spring框架的潜力,为系统的高效运行提供有力保障。


二、Spring框架的最佳实践

2.1 遵循单一职责原则,合理划分Spring Bean的职责

在Spring框架中,遵循单一职责原则(Single Responsibility Principle, SRP)是构建可维护、可扩展和可测试应用程序的关键。单一职责原则指出一个类(或模块、方法等)应该只有一个引起变化的原因。在Spring的上下文中,这通常意味着每个Spring Bean(组件)应该专注于一个特定的功能或业务逻辑。

以下是一些关于如何在Spring框架中遵循单一职责原则并合理划分Spring Bean职责的最佳实践:

  1. 明确职责边界
    • 在设计Spring Bean时,明确每个Bean的职责边界。一个Bean应该只做一件事,并且这件事应该被清晰地定义。
    • 避免在一个Bean中混合多个不相关的功能或业务逻辑。
  2. 使用接口
    • 为每个Bean定义清晰的接口,以明确其职责。
    • 使用接口可以使得Bean更加灵活和可重用,因为不同的实现可以轻松地替换现有的实现。
  3. 组件化
    • 将应用程序拆分成多个小的、独立的组件(Spring Bean)。
    • 每个组件应该负责一个特定的功能或业务逻辑。
    • 通过组件之间的依赖注入(DI)和消息传递来实现交互。
  4. 避免上帝类/对象
    • 上帝类(或对象)是那些承担过多职责的类,它们通常很难维护和理解。
    • 在Spring中,避免创建包含过多依赖项或承担过多功能的Bean。
  5. 利用AOP(面向切面编程)
    • 对于跨多个Bean的横切关注点(如日志记录、事务管理、安全等),可以使用AOP将它们分离到单独的切面中。
    • 这样做可以减少Bean之间的耦合度,并使它们更加专注于其核心职责。
  6. 测试
    • 编写针对每个Spring Bean的单元测试,以确保它们按预期工作。
    • 当测试失败时,检查并修复导致失败的Bean,而不是试图在多个Bean中修复问题。
  7. 使用配置文件或注解来定义Bean
    • 使用Spring的配置文件(如XML)或注解来定义和管理Bean。
    • 这使得Bean的配置更加灵活和可维护,因为你可以在不修改代码的情况下更改Bean的配置。
  8. 依赖注入(DI)
    • 使用Spring的DI功能来管理Bean之间的依赖关系。
    • 通过构造函数注入或属性注入来传递依赖项,以确保Bean之间的解耦。
  9. 遵循SOLID原则
    • SOLID原则(单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则)是面向对象设计和编程的基石。
    • 在设计Spring Bean时,遵循这些原则可以帮助你创建更加健壮和可维护的代码库。
  10. 持续重构和重构
    • 随着应用程序的发展,可能会发现某些Bean承担了过多的职责。在这种情况下,不要害怕重构代码,将功能拆分到新的Bean中。
    • 持续的重构可以帮助你保持代码的清洁和高效,同时减少长期维护的复杂性。

2.2 使用Spring Profiles进行多环境配置

在Spring框架中,使用Spring Profiles进行多环境配置是一种最佳实践,它允许开发者根据不同的环境(如开发环境、测试环境、生产环境等)来配置不同的Bean、属性和配置。以下是使用Spring Profiles进行多环境配置的最佳实践:

1. 定义Profiles

  • 配置文件定义:在application.propertiesapplication.yml文件中,可以为每个环境创建特定的配置文件,如application-dev.propertiesapplication-test.propertiesapplication-prod.properties
  • Java类定义:在Java配置类中,可以使用@Profile注解来定义特定Profile下的Bean配置。

2. 激活Profiles

  • spring.profiles.active属性:在application.propertiesapplication.yml文件中,可以设置spring.profiles.active属性来指定当前激活的Profile。
  • 命令行参数:在启动应用程序时,可以通过命令行参数--spring.profiles.active=profileName来指定激活的Profile。
  • 环境变量:也可以通过设置环境变量SPRING_PROFILES_ACTIVE来指定激活的Profile。
  • JVM参数:在JVM启动参数中添加-Dspring.profiles.active=profileName来指定激活的Profile。

3. 条件化Bean注册

  • 使用@Profile注解在配置类或Bean上,以指定该配置或Bean只在特定Profile下生效。

4. 条件化配置

  • application-{profile}.propertiesapplication-{profile}.yml文件中,为每个Profile定义特定的配置。

5. 最佳实践

  • 避免硬编码:不要在代码中直接引用特定的环境配置,而是通过Spring的环境抽象来访问配置。
  • 使用占位符:在配置文件中使用占位符${property.name}来引用属性,以便在不同环境下使用不同的值。
  • 统一配置管理:将所有配置文件集中管理,确保在不同的环境中可以轻松切换和部署。
  • 版本控制:对配置文件进行版本控制,以便跟踪更改和回滚。
  • 测试:为每个环境编写测试用例,确保在不同环境下应用程序的正确性。

6. 示例

  • application.yml:定义默认配置和激活的Profile。

spring: 
profiles: 
active: dev # 默认激活开发环境

  • application-dev.yml:定义开发环境的特定配置。
  • application-test.yml:定义测试环境的特定配置。
  • application-prod.yml:定义生产环境的特定配置。

使用这些配置文件和Spring Profiles的功能,可以轻松地管理不同环境下的应用程序配置,提高开发、测试和部署的效率。

2.3 利用Spring的自动装配和条件装配功能简化配置

Spring框架通过自动装配(Autowiring)和条件装配(Conditional Assembly)功能,极大地简化了应用程序的配置过程。以下是关于这两个功能的最佳实践,以及如何利用它们来简化配置的详细说明:

1. 自动装配(Autowiring)

1.1 概念与优势

  • 自动装配是Spring框架的一种特性,它可以根据一定的规则自动地将bean注入到容器中,无需手动配置。这有助于减少显式的配置,使代码更加简洁和易于维护。
  • 自动装配主要依赖于两种技术:反射和依赖注入。Spring框架通过反射机制动态地获取和操作类的属性和方法,根据装配规则自动注入相应的依赖。

1.2 自动装配类型

  • 类型匹配自动装配(byType):根据bean的类型进行自动装配,容器会自动将某个类型的bean注入到另一个bean的属性中。
  • 名称匹配自动装配(byName):根据bean的名称进行自动装配,容器会自动将某个特定名称的bean注入到另一个bean的属性中。
  • 构造器自动装配(constructor):通过构造器参数的类型进行自动装配,容器会自动调用匹配的构造器来实例化bean。但需要注意的是,当bean存在多个构造器时,构造方式可能会变得复杂,因此在实际应用中需要谨慎使用。

1.3 自动装配模式选择

  • 可以在XML配置文件或Java配置类中指定自动装配的模式(autowire),以选择合适的自动装配方式。

1.4 最佳实践

  • 明确依赖关系:在使用自动装配之前,需要明确bean之间的依赖关系,以确保正确的注入。
  • 避免过度依赖:过度依赖自动装配可能会导致代码难以理解和维护。在必要时,可以考虑使用显式的配置来明确依赖关系。
  • 优先选择构造器注入:构造器注入有助于确保bean在创建时就具有正确的依赖关系,并且可以避免在后续的代码执行过程中修改依赖关系。然而,当存在多个构造器时,需要谨慎使用。

2. 条件装配(Conditional Assembly)

虽然参考文章中没有直接提及条件装配的具体实现,但Spring框架中的条件装配通常是通过使用条件注解(如@Conditional)来实现的。这些注解允许开发者根据特定的条件来决定是否创建某个bean或配置某个属性。

2.1 最佳实践

  • 明确条件逻辑:在使用条件装配时,需要确保条件逻辑清晰明确,并且易于理解。这有助于避免在后续的代码维护过程中出现混淆或错误。
  • 减少复杂性:避免在条件逻辑中引入过多的复杂性。如果可能的话,将条件逻辑拆分成多个简单的条件,并分别处理它们。
  • 测试和验证:在开发和测试阶段,确保对条件装配进行充分的测试和验证。这有助于确保在不同的环境和配置下,应用程序都能正确地运行和表现。

总结

通过合理地使用Spring框架的自动装配和条件装配功能,可以极大地简化应用程序的配置过程,提高开发效率和代码质量。然而,在使用这些功能时需要注意避免过度依赖和引入过多的复杂性,以确保代码的可读性和可维护性。

2.4 合理选择数据访问技术,如JPA、MyBatis等

在Spring框架中,合理选择数据访问技术对于应用程序的性能、可维护性和开发效率至关重要。JPA(Java Persistence API)和MyBatis是两种常用的数据访问技术,每种技术都有其独特的特点和适用场景。以下是关于如何在Spring框架中合理选择数据访问技术的最佳实践:

1. JPA(Java Persistence API)

特点与优势

  • 标准化:JPA是Java EE规范的一部分,提供了统一的API和ORM(对象关系映射)规范。
  • 易于集成:与Spring框架无缝集成,支持Spring Data JPA项目,简化数据访问层开发。
  • 解耦:通过ORM实现对象与数据库的解耦,支持多种数据库,易于切换。

适用场景

  • 企业级应用:JPA在企业级应用中非常常见,特别适用于需要处理大量复杂数据、跨多个数据库或需要频繁切换数据库的应用。
  • 自动化需求高:对于需要快速开发、自动化配置和简化数据访问层操作的应用,JPA是一个很好的选择。

配置与使用

  • 定义实体类:使用@Entity注解标记Java类为实体类,并使用@Table注解指定对应的数据库表。
  • 声明Repository接口:继承自JpaRepository或其他相关接口,利用Spring Data JPA自动生成SQL查询语句。
  • 使用查询方法:在Repository接口中声明查询方法,Spring Data JPA会根据方法名自动生成相应的SQL查询语句。

2. MyBatis

特点与优势

  • 轻量级:MyBatis是一个轻量级的持久层框架,提供了灵活的SQL映射和Java对象映射。
  • 灵活性:支持原生SQL查询语句,允许开发人员更灵活地编写SQL查询语句。
  • 易于集成:可以与Spring框架集成,方便在Spring项目中使用MyBatis。

适用场景

  • 需要灵活控制SQL:对于需要精确控制SQL语句、进行复杂查询或优化SQL性能的应用,MyBatis是一个更好的选择。
  • 历史项目:如果项目已经使用了MyBatis或iBATIS,并且开发人员熟悉MyBatis的使用,继续使用MyBatis可以保持技术栈的一致性。

配置与使用

  • 定义Mapper接口:Mapper接口用于定义与数据库表对应的CRUD操作。
  • 编写Mapper XML文件:在Mapper XML文件中编写SQL查询语句和结果映射规则。
  • 注入Mapper:在Spring配置文件中将Mapper接口注入到相应的Service或Controller中。

总结

在选择JPA或MyBatis作为数据访问技术时,需要根据项目的具体需求、技术栈和开发人员的技能进行综合考虑。JPA适用于需要快速开发、自动化配置和跨数据库应用的企业级应用;而MyBatis则更适用于需要灵活控制SQL、进行复杂查询或优化SQL性能的应用。在实际应用中,可以根据项目需求和技术栈的特点灵活选择或组合使用这两种技术。

2.5 使用Spring Boot Actuator进行应用程序监控和管理

Spring Boot Actuator作为Spring Boot框架中的一个强大功能模块,为应用程序提供了丰富的内置端点(endpoints),用于监视应用状态、度量指标、配置信息及健康检查等,极大地便利了微服务架构下的应用管理和运维工作。以下是关于使用Spring Boot Actuator进行应用程序监控和管理的最佳实践:

1. 启用Spring Boot Actuator

  • Maven依赖:在项目的pom.xml文件中添加Spring Boot Actuator的依赖。

<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-actuator</artifactId> 
</dependency>

  • Gradle依赖(如果使用的是Gradle):在build.gradle文件中添加相应的依赖。

2. 核心端点介绍

  • /actuator/health:提供应用的健康状态概览,通常用于简单的可用性检查。
  • /actuator/info:显示应用的元数据,如构建版本、Git分支、环境变量等静态信息。
  • /actuator/metrics:收集和展示应用的各种运行时度量数据,如JVM内存使用、CPU负载、HTTP请求计数等。
  • /actuator/env:允许查看和查询当前应用的环境变量和系统属性。

3. 端点安全性

  • 敏感信息:由于某些端点可能包含敏感信息,应仔细考虑何时暴露它们。
  • 配置暴露:可以通过在application.ymlapplication.properties配置文件中修改includeexclude属性来指定暴露哪些端点。

4. 监控与告警

  • 集成监控系统:Spring Boot Actuator可以与多种监控系统(如Prometheus、Grafana等)集成,实现实时监控和告警。
  • 自定义指标:除了内置的度量指标外,还可以根据需要自定义度量指标。

5. 远程Shell访问

  • JMX或Shell:除了HTTP端点外,Spring Boot Actuator还支持通过JMX或远程Shell访问应用的运行时信息和统计数据。

6. 扩展功能

  • 审计:提供审计功能,记录应用的访问和操作日志。
  • 线程Dump:生成线程堆栈转储,用于分析应用的线程状态。

7. 最佳实践

  • 保护敏感信息:确保不将包含敏感信息的端点暴露给未经授权的用户。
  • 监控与告警集成:将Spring Boot Actuator与监控系统集成,实现实时监控和告警,确保应用的稳定性和可用性。
  • 自定义度量指标:根据业务需求自定义度量指标,以便更好地了解应用的性能和状态。
  • 使用远程Shell进行调试:在必要时使用JMX或远程Shell访问应用的运行时信息和统计数据,进行远程调试和故障排除。

通过上述最佳实践,可以充分利用Spring Boot Actuator的功能,实现对应用程序的全面监控和管理,提高应用的稳定性和可用性。

三、总结与展望

3.1 总结Spring框架的核心原理和优势

Spring框架是Java开发中最常用的框架之一,它大大简化了企业级应用的开发。以下是Spring框架的核心原理和优势的总结:

核心原理

  1. 控制反转(IOC)
    • Spring通过IOC容器来管理对象的生命周期和依赖关系。
    • 开发者不再需要直接通过new关键字来创建对象,而是由Spring容器来负责对象的创建、配置和组装。
    • 通过配置文件或注解,开发者可以声明对象之间的依赖关系,Spring容器会在运行时自动注入这些依赖。
  2. 面向切面编程(AOP)
    • AOP允许开发者将横切关注点(如日志、事务管理等)从业务逻辑中分离出来,放到切面中统一处理。
    • Spring提供了强大的AOP支持,通过切面和通知(advice)来定义横切关注点,通过切点(pointcut)来定义这些关注点应该应用到哪些方法上。
  3. 模板方法模式
    • Spring提供了许多模板类(如JdbcTemplateRestTemplate等),这些模板类封装了底层操作的通用流程,让开发者只需要关注业务逻辑的实现。
  4. 事件驱动模型
    • Spring提供了事件驱动的机制,允许开发者在应用程序的不同部分之间传递事件。
    • 通过发布事件和监听事件,可以实现组件之间的解耦和异步通信。
  5. 数据访问抽象
    • Spring提供了JDBC模板、JPA、Hibernate等ORM框架的集成,使得数据访问变得简单和统一。
    • 通过Spring Data项目,开发者可以更方便地操作NoSQL数据库(如MongoDB、Redis等)。

优势

  1. 简化开发
    • Spring通过IOC和AOP等特性,大大简化了企业级应用的开发。
    • 开发者不再需要关注底层细节,只需要关注业务逻辑的实现。
  2. 灵活性
    • Spring支持多种配置方式(XML、Java配置、注解等),可以根据项目需求灵活选择。
    • Spring还提供了许多扩展点,允许开发者根据需要进行定制。
  3. 强大的社区支持
    • Spring拥有庞大的用户群体和活跃的社区,这意味着开发者可以获得大量的帮助和资源。
    • Spring还不断吸收新技术和最佳实践,保持其技术领先性。
  4. 良好的集成性
    • Spring与许多其他框架和库(如Struts、Hibernate、MyBatis等)都有良好的集成支持。
    • 这使得开发者可以方便地组合使用这些技术,构建出功能强大的应用。
  5. 易于测试
    • Spring提供了强大的测试支持,包括单元测试、集成测试等。
    • 通过Mock对象和依赖注入等特性,开发者可以轻松地编写可测试的代码。
  6. 可扩展性
    • Spring框架是一个可扩展的框架,开发者可以根据需要添加自定义的功能和模块。
    • Spring的模块化设计使得各个模块之间的耦合度较低,便于维护和升级。

3.2 展望Spring框架的未来发展方向和应用前景

Spring框架作为Java企业级应用开发的基石,已经在过去的十几年里发挥了巨大的作用。展望未来,Spring框架的发展方向和应用前景依然十分广阔和乐观。以下是对其未来发展方向和应用前景的展望:

一、发展方向

  1. 云原生支持:随着云计算的普及和云原生技术的崛起,Spring框架将进一步加强对云原生应用的支持。这包括容器化、微服务、服务网格、DevOps等方面的集成和优化,帮助开发者更轻松地构建、部署和管理云原生应用。
  2. 响应式编程和WebFlux:随着异步、非阻塞I/O编程的兴起,响应式编程成为了一种重要的编程范式。Spring框架已经通过WebFlux等模块提供了对响应式编程的支持,未来将继续加强和优化这一方面的功能,以满足更多实时、高并发的应用场景需求。
  3. AI和大数据集成:随着人工智能和大数据技术的快速发展,越来越多的企业开始将AI和大数据技术应用于业务中。Spring框架将加强与AI和大数据技术的集成,提供更方便、更高效的API和工具,帮助开发者更轻松地构建基于AI和大数据的应用。
  4. 安全性增强:随着网络安全威胁的不断增加,应用的安全性变得越来越重要。Spring框架将进一步加强安全性方面的功能,包括身份验证、授权、加密、审计等方面的支持,帮助开发者构建更安全、更可靠的应用。
  5. 跨平台支持:除了Java平台外,Spring框架还将加强对其他编程语言和平台的支持。例如,可以通过Kotlin等现代编程语言或Spring Native等技术来提供更高效、更轻量级的解决方案。这将有助于吸引更多开发者使用Spring框架,并推动其在不同领域的应用。

二、应用前景

  1. 企业级应用开发:Spring框架在企业级应用开发领域具有广泛的应用前景。无论是传统的Web应用、RESTful API服务还是微服务架构下的复杂应用,Spring框架都能提供全面的解决方案和支持。
  2. 云计算和云原生应用:随着云计算和云原生技术的普及,越来越多的企业将采用这些技术来构建和部署应用。Spring框架作为云原生应用的重要支持框架之一,将发挥越来越重要的作用。
  3. 互联网和移动互联网应用:在互联网和移动互联网领域,Spring框架也具有广泛的应用前景。无论是电商、社交、金融等行业的应用还是各种移动应用的后端服务,Spring框架都能提供高效、可靠的解决方案。
  4. AI和大数据应用:随着AI和大数据技术的快速发展,越来越多的企业将采用这些技术来优化业务和提高效率。Spring框架作为与AI和大数据技术紧密集成的框架之一,将帮助开发者更轻松地构建基于AI和大数据的应用。
  5. 跨领域应用:除了上述领域外,Spring框架还可以在物联网、边缘计算、区块链等新兴领域得到广泛应用。这些领域的应用往往需要处理大量的实时数据、实现高效的通信和协作等功能,而Spring框架的灵活性和可扩展性将使其在这些领域发挥重要作用。

总之,Spring框架作为Java企业级应用开发的基石和云原生应用的重要支持框架之一,将继续在未来的发展中保持领先地位,并推动更多创新和应用的诞生。

四、结语

        文章至此,已接近尾声!希望此文能够对大家有所启发和帮助。同时,感谢大家的耐心阅读和对本文档的信任。在未来的技术学习和工作中,期待与各位大佬共同进步,共同探索新的技术前沿。最后,再次感谢各位的支持和关注。您的支持是作者创作的最大动力,如果您觉得这篇文章对您有所帮助,请分享给身边的朋友和同事!

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

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

相关文章

C#(C Sharp)学习笔记_多态【十九】

前言 个人觉得多态在面向对象编程中还比较重要的&#xff0c;而且不容易理解。也是学了一个下午&#xff0c;才把笔记写得相对比较完善&#xff0c;但仍欠缺一些内容。慢慢来吧…… 什么是多态&#xff1f; 基本概念 在编程语言和类型论中&#xff0c;多态&#xff08;Poly…

C# + easyui 写的一个web项目

用C# easyui 来开发&#xff0c;其实就是为了开发速度&#xff0c;用easyui可以一天写很多页面&#xff0c;比一些低代码平台还快。 登陆页面 主界面 记录数统计 家庭信息采集表 新建家庭 家庭成员 低保、五保人员帮扶情况登记表 低保、五保人员帮扶情况登记表的新增和编辑 治…

【UE数字孪生学习笔记】 Gameplay框架之TSubclassOf

声明&#xff1a;部分内容来自于b站&#xff0c;知乎&#xff0c;慕课&#xff0c;公开课等的课件&#xff0c;仅供学习使用。如有问题&#xff0c;请联系删除。 部分内容来自UE官方文档&#xff0c;博客等 TSubclassOf TSubclassOf 是一个模板类&#xff0c;用于存储对某个特…

科研辅助工具

科研工具收集 1. 如何筛选出最合适的SCI论文投稿杂志:点击直达 2. 分享三种正确查找期刊全称、缩写的网站: 点击直达

(done) AFL 都有哪些阶段? Stage progress

参考资料&#xff1a;https://afl-1.readthedocs.io/en/latest/user_guide.html 所有阶段如下&#xff0c;包括详细的解释

论文《Dual-Contrastive for Federated Social Recommendation》阅读

论文《Dual-Contrastive for Federated Social Recommendation》阅读 论文概况MotivationMethodologyClient Local ComputingCenter Server Aggregation 总结 今天简单总结一下一篇关于联邦推荐方面的论文《Dual-Contrastive for Federated Social Recommendation》&#xff0c…

Java | Leetcode Java题解之第162题寻找峰值

题目&#xff1a; 题解&#xff1a; class Solution {public int findPeakElement(int[] nums) {int n nums.length;int left 0, right n - 1, ans -1;while (left < right) {int mid (left right) / 2;if (compare(nums, mid - 1, mid) < 0 && compare(n…

【Linux 内存管理】

文章目录 1. 为什么要有虚拟内存呢&#xff1f;&#x1f50d; 1. 为什么要有虚拟内存呢&#xff1f;&#x1f50d;

如何实现element表格合并行?

前两天我一个朋友咨询我element表格合并行的问题,他研究了很久,已经开始怀疑是不是element UI出现了bug,然后跟我一阵沟通,最终解决了问题,他的问题在于他把事情想复杂了,接下来我们一起来看一下这个经典“案例”,很多人真的很有可能走入这个误区,当然老鸟就不用看了,…

读AI新生:破解人机共存密码笔记04计算的极限

1. 计算的极限 1.1. 光靠速度是无法给我们带来人工智能的 1.1.1. 在速度更快的计算机上运行糟糕的算法并不会使算法变得更优秀&#xff0c;这只意味着你会更快地得到错误的答案 1.1.2. 数据越多&#xff0c;错误答案出现的机会就越大 1.…

pytorch基础【3】torch运算

文章目录 torch运算基本运算形状操作自动调整size (参数-1) 数学运算逻辑运算常见的高级操作随机数生成 torch运算 基本运算 创建张量: import torch# 直接从列表或数组创建张量 x torch.tensor([1, 2, 3])创建特定值的张量: # 全零张量 zeros torch.zeros(3, 3)# 全一张量 …

python调用SDK的问题

问题&#xff1a;Could not find module MvCameraControl.dll 原因&#xff1a;识别环境变量runtime异常 解决&#xff1a;指定具体绝对地址即可。MvCameraControl.dll的位置C:\Program Files (x86)\Common Files\MVS\Runtime\Win64_x64 MvCamCtrldll WinDLL("MvCamer…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 石碑文字组合(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

Rust语言-线程间的消息传递mpsc::Sender

文章目录 Rust语言-线程间的消息传递mpsc::Sender标准库std::sync::mpsc消息通道mpsc::Sender实战举例 Rust语言-线程间的消息传递mpsc::Sender 标准库std::sync::mpsc 官方文档&#xff1a;https://rustwiki.org/zh-CN/std/sync/mpsc/index.html 参考URL: https://course.rs…

[C++][数据结构][哈希表]详细讲解

目录 1.哈希概念2.哈希冲突3.哈希函数4.哈希冲突解决5.闭散列1.何时扩容&#xff1f;如何扩容&#xff1f;2.线性探测3.二次探测 6.开散列(哈希桶)1.概念2.开散列增容3.开散列思考只能存储key为整形的元素&#xff0c;其他类型怎么解决&#xff1f;除留余数法&#xff0c;最好模…

一季度直播6000场,同比增长60%,遥望科技透露重要信息

6月17日&#xff0c;经由深圳证券交易所许可&#xff0c;遥望科技&#xff08;股票代码&#xff1a;002291&#xff09;正式对《年报问询函》进行公开回复&#xff0c;就经营的多个维度做出解释和回应。 在回复中&#xff0c;遥望科技预测2024年毛利率为14.4%&#xff0c;相比…

[absl_py][python]absl_py所有whl文件下载地址汇总

absl_py是Google开发并维护的一个Python软件包&#xff0c;它是C Abseil库的Python版本。该库旨在提供一系列高质量的、跨平台的实用工具&#xff0c;帮助开发者构建大规模软件项目。以下是关于absl_py的详细介绍&#xff1a; 功能概述&#xff1a; 字符串处理&#xff1a;abs…

conda在不同服务器上迁移环境的方法

conda在不同服务器上迁移环境的方法 conda迁移环境&#xff08;若服务器cuda配置相同&#xff09;我的迁移方法&#xff1a;可能要用到的压缩命令和解压命令&#xff1a; 若服务器cuda版本等配置不同 conda迁移环境&#xff08;若服务器cuda配置相同&#xff09; 我的迁移方法…

【CSS in Depth2精译】1.1.1 样式表来源

您添加到网页的样式表并非浏览器呈现样式的唯一来源。样式表有三种不同的类型或来源。您添加到页面的样式称为 作者样式&#xff08;author styles&#xff09;&#xff1b;此外还有 用户样式&#xff08;user styles&#xff09;&#xff0c;即终端用户设置的自定义样式&#…

configure: error: library ‘crypto‘ is required for OpenSSL

1、执行命令&#xff1a;./configure --prefix/opt/app/postgresql --with-openssl 报错&#xff1a; 2、解决办法 执行命令&#xff1a;yum install openssl-devel 重新执行 ./configure --prefix/opt/app/postgresql --with-openssl