Spring boot框架指南
1. Spring Boot 概述
1.1 定义与起源
Spring Boot是一种基于Spring框架的开源框架,旨在简化Spring应用程序的创建和开发过程。它通过提供一系列默认配置和自动配置功能,减少了开发者在配置上的工作量,使得快速搭建生产级别的Spring应用程序成为可能。
Spring Boot的起源可以追溯到Spring框架的发展需求。随着企业应用的复杂性增加,传统的Spring应用程序配置变得繁琐,需要一种更简洁、更快速的方式来构建应用。因此,Pivotal团队(现为VMware的一部分)在2013年开始研发Spring Boot,并在2014年发布了首个版本。
1.2 核心特性
Spring Boot的核心特性包括但不限于以下几个方面:
-
自动配置:Spring Boot根据项目中添加的依赖自动配置Spring应用程序,极大地减少了XML或Java配置的工作量。
-
独立运行:Spring Boot应用程序可以打包成一个独立的JAR或WAR文件,内嵌了Tomcat、Jetty或Undertow等Servlet容器,无需部署到外部服务器。
-
微服务支持:Spring Boot与Spring Cloud等项目结合,为微服务架构提供了强大的支持。
-
社区生态:Spring Boot拥有活跃的社区和丰富的插件生态,支持各种数据库、消息队列、缓存等第三方技术。
1.3 版本迭代
自2014年发布以来,Spring Boot经历了多个版本的迭代,每个版本都带来了新的特性和改进:
-
1.0.x:首个版本,引入了自动配置、独立运行等核心特性。
-
1.2.x:增强了安全性、增加了对JPA的支持。
-
1.3.x:引入了新的
@SpringBootApplication
注解,整合了@Configuration
、@EnableAutoConfiguration
和@ComponentScan
。 -
1.5.x:增加了对响应式编程的支持。
-
2.0.x:基于Spring Framework 5,支持Java 8及以上版本,引入了新的WebFlux模块。
-
2.2.x:引入了对Spring WebFlux的改进和性能优化。
-
2.x系列:持续更新,增加了对新版本的Spring Framework和第三方库的支持,以及对新特性的不断探索。
随着Spring Boot的不断发展,它已经成为Java开发领域中不可或缺的一部分,帮助开发者以更高效、更简洁的方式构建企业级应用程序。
2. Spring Boot 的自动配置机制
2.1 工作原理
Spring Boot 的自动配置机制是其核心特性之一,旨在简化开发流程,提高开发效率。该机制通过@EnableAutoConfiguration
或@SpringBootApplication
注解触发。
-
@EnableAutoConfiguration:此注解告诉Spring Boot根据添加的jar依赖自动配置Spring应用。它通过
@Import(AutoConfigurationImportSelector.class)
实现,后者负责加载/META-INF/spring.factories
中定义的自动配置类。 -
SpringFactoriesLoader:这个加载器用于加载
spring.factories
文件,其中包含了自动配置类列表。这些类随后会根据条件注解判断是否应该被应用。 -
自动配置类:通常以
AutoConfiguration
结尾的类,它们通过实现@Configuration
注解来提供配置。这些类利用条件注解来控制其激活条件。
2.2 条件注解的使用
Spring Boot 提供了一系列的条件注解,允许开发者根据特定的条件来激活或禁用配置。
-
@ConditionalOnClass:当类路径上存在特定的类时,才激活配置。
-
@ConditionalOnBean:当容器中存在特定的Bean时,激活配置。
-
@ConditionalOnMissingBean:当容器中不存在特定的Bean时,激活配置。
-
@ConditionalOnProperty:当指定的属性值满足条件时,激活配置。
这些条件注解可以单独使用,也可以组合使用,以实现更复杂的条件逻辑。
示例代码
@Configuration
@ConditionalOnClass(DataSource.class)
public class MyDatabaseConfig {// 配置数据库连接...
}
2.3 覆盖自动配置
尽管Spring Boot提供了丰富的自动配置,但开发者可能需要根据特定需求覆盖这些配置。
-
自定义配置类:通过创建自定义的配置类,并使用
@Configuration
注解,可以定义自己的Bean来覆盖自动配置的Bean。 -
@Conditional:使用
@Conditional
注解可以控制自定义配置的激活条件。 -
@AutoConfigureAfter 或 @AutoConfigureBefore:这些注解可以用来指定自动配置类的加载顺序,确保自定义配置在自动配置之前或之后加载。
示例代码
@Configuration
@ConditionalOnWebApplication
@AutoConfigureAfter(MyDatabaseAutoConfiguration.class)
public class CustomWebConfig {// 自定义Web配置...
}
通过深入理解Spring Boot的自动配置机制和条件注解的使用,开发者可以灵活地扩展Spring Boot的功能,满足各种复杂的业务需求。同时,通过阅读和分析源代码,我们可以学习到Spring Boot的设计模式和最佳实践,这对于设计和实现自定义的Spring Boot扩展至关重要。在下一篇文章中,我们将探讨如何通过具体的代码示例来实现自定义的Spring Boot扩展。
3. 启动器(Starters)与依赖管理
3.1 起步依赖介绍
起步依赖,通常称为“Starters”,是Spring Boot提供的一种便捷的依赖管理方式。它们是预定义的依赖集合,用于简化构建配置并提供对常见场景的开箱即用支持。
-
起步依赖的作用:起步依赖通过
<parent>
或<dependencyManagement>
的方式,统一管理了项目中使用的库的版本号,避免了版本冲突,简化了Maven项目的配置。 -
使用起步依赖:在项目的
pom.xml
文件中,通过指定spring-boot-starter-parent
作为父项目,或者通过spring-boot-dependencies
来管理依赖版本。
<!-- 引入Spring Boot的父项目依赖管理 -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.3</version>
</parent><!-- 或者使用dependencyManagement来管理依赖版本 -->
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.5.3</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
3.2 依赖管理的最佳实践
明确指定依赖版本
在项目中,应尽量避免不指定版本号的依赖声明,以减少因依赖库版本不明确而导致的潜在冲突。
使用Maven或Gradle进行依赖管理
利用这些工具的依赖管理功能,可以自动处理依赖的传递性问题和版本冲突。
定期更新依赖
定期检查并更新项目依赖,以确保应用能够使用到库的最新功能和安全修复。
避免依赖树中的冗余
使用Maven的mvn dependency:tree
命令或Gradle的gradlew dependencies
命令,检查依赖树,移除不必要的依赖。
利用Spring Boot的自动配置
Spring Boot的自动配置机制可以根据项目中包含的依赖自动配置Spring应用。例如,如果项目中包含了spring-boot-starter-web
,Spring Boot会自动配置Tomcat和Spring MVC。
// 启用Spring MVC的自动配置
@SpringBootApplication
public class MyWebApplication {public static void main(String[] args) {SpringApplication.run(MyWebApplication.class, args);}
}
自定义自动配置
在某些情况下,你可能需要根据项目特定的需求来自定义自动配置。通过创建自己的@Configuration
类并使用@Conditional
注解,可以控制配置类在特定条件下的加载。
@Configuration
@ConditionalOnClass(CustomClass.class)
public class CustomAutoConfiguration {// 自定义配置的Bean
}
利用Spring Boot的Profile
使用Spring Boot的Profile功能,可以根据不同的环境(如开发、测试、生产)来加载不同的配置。
# application.properties
my.property=value# application-dev.properties
my.property=devValue
监控和管理依赖
使用Spring Boot Actuator的/health
和/info
端点,监控应用的健康状况,并获取关于应用配置和依赖的信息。
通过这些最佳实践,可以确保Spring Boot应用的依赖管理是清晰、有效且易于维护的。
4. 扩展Spring Boot功能
4.1 自定义类与配置
在Spring Boot中,自定义类与配置是一种常见的扩展方式,允许开发者根据业务需求添加特定的功能。以下是一些关键点和示例代码,展示如何实现自定义扩展。
自定义自动配置类
Spring Boot的自动配置机制允许开发者通过定义带有@Configuration
注解的类来自动配置Bean。以下是创建自定义自动配置类的基本步骤:
@Configuration
public class MyAutoConfiguration {@Bean@ConditionalOnMissingBean(MyBean.class)public MyBean myBean() {return new MyBean();}
}
在这个例子中,如果Spring Boot的ApplicationContext中没有MyBean
类型的Bean,就会自动创建并注册一个MyBean
的实例。
使用@Conditional
注解
@Conditional
注解可以用来控制Bean的创建过程,只有满足特定条件时才会注册Bean。以下是使用@ConditionalOnProperty
注解的示例:
@Configuration
@ConditionalOnProperty(name = "my.config.enabled", havingValue = "true")
public class MyConditionalConfiguration {@Beanpublic MyService myService() {return new MyService();}
}
这个配置只有在application.properties
或application.yml
中设置了my.config.enabled=true
时才会生效。
自定义FactoryBean
FactoryBean
是一个允许开发者自定义Bean创建逻辑的接口。以下是实现自定义FactoryBean
的示例:
public class MyFactoryBean implements FactoryBean<MyBean> {@Overridepublic MyBean getObject() throws Exception {return new MyBean();}@Overridepublic Class<MyBean> getObjectType() {return MyBean.class;}
}
4.2 集成第三方库
Spring Boot的启动器(Starters)机制使得集成第三方库变得非常简单。以下是集成第三方库的一般步骤:
添加依赖
首先,需要在项目的pom.xml
文件中添加相应的依赖:
<dependency><groupId>com.example</groupId><artifactId>third-party-library</artifactId><version>1.0.0</version>
</dependency>
自动配置
Spring Boot通常会自动检测到第三方库并提供相应的自动配置类。如果第三方库没有提供Spring Boot的自动配置支持,可以自定义自动配置类。
编写自定义配置
如果需要进一步自定义第三方库的配置,可以创建一个配置类,并使用@Configuration
注解标记:
@Configuration
public class ThirdPartyLibraryConfig {@Beanpublic ThirdPartyService thirdPartyService() {ThirdPartyService service = new ThirdPartyService();// 定制化配置service.setSomeProperty("value");return service;}
}
使用@Enable
注解
有些第三方库可能需要通过特定的@Enable
注解来启用。例如,启用Spring Data JPA的示例:
@EnableJpaRepositories
public class JpaConfig {// JPA相关配置
}
通过上述步骤,可以有效地扩展Spring Boot的功能,满足各种业务需求。在实际开发中,应该根据具体场景选择合适的扩展方式,并充分利用Spring Boot提供的丰富生态和自动化配置特性。
5. 源码分析
5.1 设计模式识别
在Spring Boot的源码中,设计模式的运用无处不在,它们为框架的扩展性和灵活性提供了坚实的基础。以下是一些在Spring Boot源码中常见的设计模式:
-
工厂模式:Spring Boot使用工厂模式来创建和管理bean的生命周期。
BeanFactory
是Spring中实现工厂模式的核心接口,它允许通过配置元数据来控制bean的创建和初始化。 -
单例模式:Spring Boot中,单例模式确保一个类只有一个实例,并提供一个全局访问点。通过
SingletonBeanRegistry
实现,它负责注册和管理单例bean。 -
代理模式:Spring AOP使用代理模式来实现面向切面编程。通过动态代理或静态代理,在不修改目标对象的情况下,为目标对象添加额外的功能。
-
观察者模式:Spring的事件发布机制使用了观察者模式。
ApplicationEventPublisher
作为事件的发布者,而ApplicationListener
则作为事件的监听者。 -
适配器模式:Spring Boot中的
HandlerAdapter
是适配器模式的典型应用,它使得不同类型的handler能够被统一的处理。 -
装饰器模式:在Spring中,通过
Wrapper
类实现装饰器模式,动态地给对象添加职责,如HttpServletRequestWrapper
。 -
模板方法模式:在Spring的
JdbcTemplate
中,模板方法模式被用来执行一系数据库操作,子类可以重写某些方法以实现特定的数据库操作。
5.2 核心类与接口
Spring Boot的核心类和接口是理解其扩展机制的关键。以下是一些重要的核心类和接口:
-
SpringApplication:作为Spring Boot应用的入口点,负责创建和配置Spring应用上下文,并启动Spring Boot应用。
-
SpringApplicationRunListener:监听SpringApplication的生命周期事件,允许在SpringApplication的启动过程中进行自定义扩展。
-
ApplicationContextInitializer:在Spring应用上下文准备好之后,执行额外的初始化逻辑。
-
BeanDefinitionRegistryPostProcessor:在BeanDefinition注册到Spring容器之后,对其进行修改或添加新的BeanDefinition。
-
BeanPostProcessor:在Bean的生命周期中的不同阶段,提供额外的处理逻辑,如
@PostConstruct
和@PreDestroy
注解的处理。 -
Condition:定义条件注解的接口,通过实现此接口,可以控制Bean的创建过程是否满足特定条件。
-
AutoConfigurationImportSelector:用于实现@EnableAutoConfiguration的功能,通过加载
spring.factories
中的自动配置类来扩展Spring Boot的功能。 -
FactoryBean:用于创建复杂对象的工厂模式实现,Spring容器通过调用
getObject()
方法来获取bean实例。
通过深入分析上述设计模式和核心类与接口,我们可以更好地理解Spring Boot的工作原理,并在此基础上进行功能扩展和自定义开发。在公众号文章中,我们将通过实际的代码示例来展示如何应用这些设计模式和核心机制,以满足特定的业务需求。
6. 实践:自定义Spring Boot扩展
6.1 项目结构设计
自定义Spring Boot扩展通常从理解Spring Boot的标准项目结构开始。一个典型的Spring Boot项目结构如下:
src/
|-- main/
| |-- java/
| | `-- com/
| | `-- example/
| | `-- demo/
| | |-- DemoApplication.java
| | |-- config/
| | | `-- MyAutoConfiguration.java
| | |-- service/
| | | `-- MyService.java
| | `-- component/
| | `-- MyComponent.java
| `-- resources/
| |-- application.properties
| `-- META-INF/
| `-- spring.factories
`-- test/`-- java/`-- com/`-- example/`-- demo/`-- DemoApplicationTests.java
-
DemoApplication.java
:项目的主入口类,使用@SpringBootApplication
注解。 -
config/
:存放自动配置类。 -
service/
:业务逻辑层。 -
component/
:存放自动扫描的组件。 -
application.properties
:配置文件。 -
spring.factories
:自动配置类的注册文件。
6.2 功能实现与测试
自动配置类实现
自定义自动配置通常需要以下几个步骤:
-
创建配置类,并使用
@Configuration
注解。 -
使用
@Bean
注解声明需要创建的Bean。 -
使用
@Conditional
系列注解来指定Bean创建的条件。
@Configuration
public class MyAutoConfiguration {@Bean@ConditionalOnMissingBean(MyService.class)public MyService myService() {return new MyServiceImpl();}
}
条件注解使用
Spring Boot提供了多种条件注解,例如:
-
@ConditionalOnClass
:类路径下有指定的类时,才创建Bean。 -
@ConditionalOnMissingClass
:类路径下没有指定的类时,才创建Bean。 -
@ConditionalOnProperty
:指定的属性存在时,才创建Bean。
@Configuration
@ConditionalOnClass(DataSource.class)
public class DatabaseAutoConfiguration {// ...
}
启动器自动配置
在META-INF/spring.factories
文件中注册自动配置类,以便Spring Boot启动时加载:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.demo.config.MyAutoConfiguration
功能测试
编写单元测试和集成测试来验证自定义扩展的功能。
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {@Autowiredprivate MyService myService;@Testpublic void testMyService() {assertTrue(myService instanceof MyServiceImpl);}
}
设计模式与最佳实践
在自定义扩展中,识别和应用设计模式如工厂模式、单例模式等,以及遵循Spring Boot的最佳实践,例如:
-
使用
@Component
注解来标识服务和组件。 -
避免在自动配置类中使用
@Autowired
,以防止循环依赖。 -
利用
@Profile
注解来指定不同环境下的配置。
业务需求驱动的自定义扩展
根据特定业务需求设计自定义扩展,例如:
-
为特定类型的Bean提供装饰者模式的实现。
-
根据配置文件中的开关动态加载或卸载某些组件。
-
集成第三方库或服务,提供额外的功能。
@Configuration
@Profile("feature-x-enabled")
public class FeatureXAutoConfiguration {@Beanpublic FeatureXService featureXService() {return new FeatureXServiceImpl();}
}
通过上述步骤,可以设计并实现满足特定业务需求的Spring Boot自定义扩展,同时确保代码的可读性、可维护性和扩展性。在公众号文章中,可以进一步深入每个步骤的具体实现和示例代码,以帮助读者更好地理解和应用这些概念。
7. 性能优化与监控
7.1 性能调优策略
在Spring Boot应用中,性能调优是一个关键的环节,它直接关系到应用的响应速度和系统资源的利用效率。以下是一些常见的性能调优策略:
-
数据库连接池优化:合理配置数据库连接池参数,比如HikariCP的
maximumPoolSize
和minimumIdle
,可以有效减少连接创建和销毁的开销。 -
缓存策略:使用缓存可以显著提高数据访问速度。Spring Boot支持多种缓存方式,如EhCache、Redis等。合理配置缓存参数,如过期时间、缓存大小等,可以减少对数据库的访问压力。
-
异步处理:Spring Boot支持异步处理,通过
@Async
注解可以简化异步方法的编写。合理使用异步处理可以提高应用的并发处理能力。 -
JVM调优:JVM参数对应用性能有重要影响。通过调整堆大小(
-Xms
和-Xmx
)、选择合适的垃圾回收器(如G1或ZGC)等参数,可以优化内存使用和垃圾回收效率。 -
代码优化:优化代码逻辑,减少不必要的计算和资源消耗。使用合适的数据结构和算法,避免重复的数据库查询等。
-
批处理:对于大量数据的处理,使用批处理可以减少数据库交互次数,提高处理效率。
-
并发模型:根据应用特点选择合适的并发模型,如使用
CompletableFuture
或响应式编程模型等。
7.2 使用Spring Boot Actuator
Spring Boot Actuator提供了应用的监控和管理功能,是性能监控的重要工具。以下是使用Actuator进行性能监控的一些关键点:
-
端点暴露:通过
management.endpoints.web.exposure.include
配置,可以开启需要监控的端点,如health
、metrics
、threaddump
等。 -
健康检查:
/health
端点可以提供应用的健康状态信息。通过实现HealthIndicator
接口,可以自定义健康检查逻辑。 -
度量信息:
/metrics
端点提供了应用的度量信息,如内存使用、线程池状态等。这些信息对于性能分析至关重要。 -
日志文件:
/logfile
端点允许实时查看应用的日志文件,对于问题诊断和性能监控很有帮助。 -
线程转储:
/threaddump
端点可以获取应用的线程转储信息,分析死锁和长时间运行的线程。 -
自定义端点:除了内置端点,还可以通过实现
Endpoint
接口自定义监控端点,以满足特定的监控需求。 -
安全性:Actuator端点可能会暴露敏感信息,因此需要合理配置安全性。可以通过
management.endpoints.web.security
配置端点的安全性。 -
性能指标:使用Micrometer与Actuator集成,可以收集更丰富的性能指标,并通过Prometheus等工具进行监控和分析。
通过上述策略和工具,可以有效地监控和优化Spring Boot应用的性能,确保应用的高效稳定运行。在实际应用中,需要根据具体情况灵活选择和调整策略。
相关文章:

Spring boot框架指南
1. Spring Boot 概述 1.1 定义与起源 Spring Boot是一种基于Spring框架的开源框架,旨在简化Spring应用程序的创建和开发过程。它通过提供一系列默认配置和自动配置功能,减少了开发者在配置上的工作量,使得快速搭建生产级别的Spring应用程序…...

数据结构--树与二叉树
数据结构分类 集合 线性结构(一对一) 树形结构(一对多) 图结构(多对多) 数据结构三要素 1、逻辑结构 2、数据的运算 3、存储结构(物理结构) 树的概念 树的分类 满二叉树和完全二叉树 二叉排序树 平衡二叉树 二叉树分类总结 二叉树的存储结构 …...

C#项目实战经验——计时方法总结
前言 我们在开发C#程序的过程中经常需要计算某段程序执行的时间,比如调用的某个算法的时间,这时候我们就需要利用计时工具,本文就是详细介绍在C#中我们常用哪些计时工具。 1、计时方法—StopWatch 在C#中我们可以利用Stopwatch这个类来实现…...

电子盖章软件哪个好|盖章软件
在选择电子盖章软件时,需要考虑多个因素,包括软件的功能、安全性、易用性、兼容性以及成本等。以下是根据当前市场情况推荐的一些优秀的电子盖章软件: e章宝: 功能丰富:e章宝是国内领先的电子盖章系统,功能…...

ThreejsWebGPU运动残影demo
功能点 实例化SkinnedMesh 修改NodeMaterial着色器 节点材质系统 shader 语言 使用uniform和attribute 中合其他几篇博客中的内容 代码仓库 克隆后需要放到three源码同级别目录下 运行 three源码部分不在git仓库中(太大了) 使用vscode的live-server启动后访问 http://127.0.0.…...

HttpSession常用方法
1.HttpSession常用方法 是在Java Servlet中用来管理会话状态的重要接口,它提供了一种在多个请求或页面之间存储用户特定信息的方式。以下是一些 HttpSession 常用的方法和用法: 获取会话对象: HttpSession session request.getSession();…...

【JavaEE初阶】文件操作和IO
目录 🌴认识文件 🚩树型结构组织和目录 🚩文件路径(Path) 🚩 文件分类 🎍Java 中操作文件 🚩 File 概述: 📌属性 📌构造方法 Ὄ…...

存储器芯片的基本原理
目录 1.存储元 1.1栅极电容 1.2双稳态触发器 2.存储单元 3.存储体 4.存储器 5.容量计算 6.寻址 1.存储元 1.1栅极电容 给MOS管一个阈值电压(5v)就能够导电,若是不给那么就是一个绝缘体不会导电。 读出二进制原理: 通常…...

前端实习手记(7):立秋快乐
这周相比上周感觉挺好的哈哈哈,可能只有自己感觉蛮好的,旁边师父忙的飞起了要,不仅赶工作还要回答我乱七八糟的问题(心疼一秒)。这周也是立秋&七夕咯,立秋快乐哇家人们(虽然还是很热嘛&…...

感恩放下,笑对人生,在人生的长河中,每一天都是独特的篇章,或顺心如意,或充满挑战
在人生的长河中,每一天都是独特的篇章,或顺心如意,或充满挑战。然而,无论今日的经历如何,我们都应怀着感恩与放下的心态,因为人生的旅程远不止这短暂的一天,明天依然充满希望,等待我们继续努力前行。 生活,犹如一场变幻莫测的舞台剧,顺心之时,我们仿佛置身于温暖的…...

URLSession之初窥门径
NSURLSession 于 2013 年随 iOS 7 的发布一起面世,苹果将其定位为 NSURLConnection 的替代者。我们使用最广泛的第三方框架如 AFNetworking 和 SDWebImage 的最新版也都已经全面切换至 NSURLSession。 NSURLSession 不仅仅指代同名类 NSURLSession,它还…...

ios创建控制器的3种方法实现页面跳转
ios遵守mvc设计模式,下面介绍创建控制器viewcontroller的几种方法,来实现页面的跳转 1.纯代码创建 // // AppDelegate.m // study2024 // // Created by zhifei zhu on 2024/8/7. //#import "AppDelegate.h" #import "MyViewContro…...

Android逆向题解-boomshakalaka-3-难度5
这个app 是一个cocos游戏,没有用脚本实现,纯c实现。 题目描述:play the game, get the highest score 题目要求是玩游戏得到最高分就可以得到flag,是写到配置文件的,初始flag值看着是base编码的。 核心代码在so里面的ControlLay…...

Linux(Ubuntu 22.04)系统中固定串口
Linux(Ubuntu 22.04)系统中固定串口 文章目录 前言正文查看linux串口信息修改udev固化串口校验是否修改完成 注意 前言 在Linux系统中固定串口(通常指的是串行通信接口,如/dev/ttyS0或/dev/ttyUSB0)的原因有几个方面&…...

LeetCode - 209 - 长度最小的子数组
力扣209题 题目描述:长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组&…...

探索空间计算与VR中的手势跟踪新纪元:XHand框架详解
在虚拟现实(VR)和扩展现实(XR)技术日新月异的今天,手势跟踪作为实现沉浸式体验的关键技术之一,正逐步从概念走向成熟。今天,我们将深入探索一个创新的框架——XHand,它以其卓越的性能和先进的技术亮点,为空间计算与VR领域的手势跟踪带来了全新的解决方案。 XHand框架…...

leetcode + 项目复习
上午 Leetcode算法 参考文章——代码随想录 1. KMP 概念 主要应用 字符串匹配 主要思想 根据之前匹配的信息,当发现字符串不匹配时,避免从头开始匹配。 什么是前缀表(next数组、prefix) 是用来回退的,当文本串和…...

树莓派4/5:设置apt、pip、conda首选清华镜像源
一、教程简介 在中国大陆地区,使用清华镜像源可以显著缩短资源下载时间。 本教程介绍如何将清华镜像源设置为树莓派的apt、pip、conda下载的首选项(默认项)。其中,apt和pip为树莓派系统自带,conda则需要安装miniforg…...

NoSQL 之Redis集群模式
目录 案例概述 redis工作模式 主从模式 哨兵模式 redis cluster模式 Redis集群介绍 Redis集群的优势 Redis集群的实现方法 Redis-Cluster数据分片 Redis-Cluster的主从复制模型 Redis集群部署 案例部署 安装redis 检查redis的状态 修改配置文件 重启启动redis服…...

oracle rac
1、app连接oracle rac集群 连接到 Oracle RAC(Real Application Clusters)的多种配置方式 1. 使用 JDBC 连接字符串: 使用 JDBC 连接字符串是连接 Oracle RAC 的常见方式。连接字符串的格式如下: jdbc:oracle:thin:(DESCRIPTION…...

计算机毕业设计Python深度学习房价预测 房价可视化 链家爬虫 房源爬虫 房源可视化 卷积神经网络 大数据毕业设计 机器学习 人工智能 AI
Python深度学习房价预测系统开题报告 一、研究背景与意义 随着城市化进程的加速和房地产市场的不断发展,房价成为影响人们生活质量的重要因素之一。准确预测房价不仅有助于政府制定科学的房地产政策,还能为开发商提供市场参考,同时帮助购房…...

【Linux】学习Linux,需要借助具象化的思维
指令与图形化界面 导读一、命令行与图形化界面二、命令行与图形化界面的发展历程1.2.1 打字机的起源1.2.2 肖尔斯和格利登型打字机1.2.3 鼠标的发明1.2.4 图形化界面(GUI)的发展 三、命令行与图形化之间的联系3.1 图形化界面的人机交互3.2 命令行界面的人…...

R语言贝叶斯方法在生态环境领域技术教程
原文链接:R语言贝叶斯方法在生态环境领域技术教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247612056&idx5&snb170122cf5052cc7cb2d858606b9f158&chksmfa82777fcdf5fe69eec092410530e2900c98bcbb84e3d33c823705c948b4db96545bf282747a…...

mojo实现高阶函数(algorithm)
functional 实现高阶函数。 您可以从 algorithm 包导入这些 API。例如: from algorithm import map别名: Static1DTileUnitFunc = fn[Int](Int, /) capturing -> None: Signature of a 1d tiled function that performs some work with a static tile size and an off…...

先进制造aps专题二十四 云平台排产aps的方案设计
云平台排产aps的方案设计 针对对象是有排产需求无需定制的中小型工厂企业 一 网站功能(b/s架构) 1 前端界面 客户登录 排产项目管理 基础数据(产品资料,产品工艺,工作日历,生产资源,工艺能力…...

JavaScript 逆向技巧总结
本节属于知识总结,只是对思路的梳理,不对具体内容进行展开 JS 逆向可以分为三大部分: 寻找入口, 调试分析, 模拟执行 寻找入口: 这是非常关键的一步,逆向在大部分情况下就是找一些加密参数到底…...

linux反向代理原理:帮助用户更好地优化网络架构
Linux反向代理原理详解 反向代理是一种在网络架构中常用的技术,尤其在Linux环境下被广泛应用。它可以帮助实现负载均衡、安全防护和请求缓存等功能。本文将深入探讨Linux反向代理的原理、工作机制以及其应用场景。 1. 什么是反向代理 反向代理是指代理服务器接收客…...

开源DevOps工具链管理:DevStream
DevStream:简化DevOps,加速创新- 精选真开源,释放新价值。 概览 DevStream,一个开源的DevOps工具链管理器(DTM),由merico-dev团队精心打造,现已加入CNCF大家庭,并在devs…...

图数据库框架及其支持的开发语言和应用场景
图数据库框架及其支持的开发语言和应用场景 1. Neo4j 类型:原生图数据库特点:最流行的图数据库之一,使用Cypher查询语言,支持ACID事务,具有丰富的图算法库。支持的开发语言:Java, Python, JavaScript, Go, .NET, Ruby, PHP等。驱动和库:Neo4j Java Driver, Py2neo (Pyt…...

【Linux 18】核心转储
文章目录 🌈 一、什么是核心转储🌈 二、如何启动核心转储🌈 三、为什么有核心转储 🌈 一、什么是核心转储 核心转储 (Core Dump):当一个进程异常终止时,会在触发进程崩溃的目录下生成一个以进程 pid 命名的…...