Spring boot框架指南

news2024/11/24 5:40:17

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 {

    @Bean
    public MyService myService() {
        return new MyService();
    }
}

这个配置只有在application.propertiesapplication.yml中设置了my.config.enabled=true时才会生效。

自定义FactoryBean

FactoryBean是一个允许开发者自定义Bean创建逻辑的接口。以下是实现自定义FactoryBean的示例:

public class MyFactoryBean implements FactoryBean<MyBean> {

    @Override
    public MyBean getObject() throws Exception {
        return new MyBean();
    }

    @Override
    public 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 {

    @Bean
    public 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 功能实现与测试

自动配置类实现

自定义自动配置通常需要以下几个步骤:

  1. 创建配置类,并使用@Configuration注解。

  2. 使用@Bean注解声明需要创建的Bean。

  3. 使用@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 {

    @Autowired
    private MyService myService;

    @Test
    public void testMyService() {
        assertTrue(myService instanceof MyServiceImpl);
    }
}

设计模式与最佳实践

在自定义扩展中,识别和应用设计模式如工厂模式、单例模式等,以及遵循Spring Boot的最佳实践,例如:

  • 使用@Component注解来标识服务和组件。

  • 避免在自动配置类中使用@Autowired,以防止循环依赖。

  • 利用@Profile注解来指定不同环境下的配置。

业务需求驱动的自定义扩展

根据特定业务需求设计自定义扩展,例如:

  • 为特定类型的Bean提供装饰者模式的实现。

  • 根据配置文件中的开关动态加载或卸载某些组件。

  • 集成第三方库或服务,提供额外的功能。

@Configuration
@Profile("feature-x-enabled")
public class FeatureXAutoConfiguration {

    @Bean
    public FeatureXService featureXService() {
        return new FeatureXServiceImpl();
    }
}

通过上述步骤,可以设计并实现满足特定业务需求的Spring Boot自定义扩展,同时确保代码的可读性、可维护性和扩展性。在公众号文章中,可以进一步深入每个步骤的具体实现和示例代码,以帮助读者更好地理解和应用这些概念。

7. 性能优化与监控

7.1 性能调优策略

在Spring Boot应用中,性能调优是一个关键的环节,它直接关系到应用的响应速度和系统资源的利用效率。以下是一些常见的性能调优策略:

  • 数据库连接池优化:合理配置数据库连接池参数,比如HikariCP的maximumPoolSizeminimumIdle,可以有效减少连接创建和销毁的开销。

  • 缓存策略:使用缓存可以显著提高数据访问速度。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配置,可以开启需要监控的端点,如healthmetricsthreaddump等。

  • 健康检查/health端点可以提供应用的健康状态信息。通过实现HealthIndicator接口,可以自定义健康检查逻辑。

  • 度量信息/metrics端点提供了应用的度量信息,如内存使用、线程池状态等。这些信息对于性能分析至关重要。

  • 日志文件/logfile端点允许实时查看应用的日志文件,对于问题诊断和性能监控很有帮助。

  • 线程转储/threaddump端点可以获取应用的线程转储信息,分析死锁和长时间运行的线程。

  • 自定义端点:除了内置端点,还可以通过实现Endpoint接口自定义监控端点,以满足特定的监控需求。

  • 安全性:Actuator端点可能会暴露敏感信息,因此需要合理配置安全性。可以通过management.endpoints.web.security配置端点的安全性。

  • 性能指标:使用Micrometer与Actuator集成,可以收集更丰富的性能指标,并通过Prometheus等工具进行监控和分析。

通过上述策略和工具,可以有效地监控和优化Spring Boot应用的性能,确保应用的高效稳定运行。在实际应用中,需要根据具体情况灵活选择和调整策略。

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

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

相关文章

OV SSL证书优势及获取渠道

OV证书&#xff0c;即组织验证型SSL证书&#xff0c;通过严格的组织审查流程&#xff0c;为网站提供数据传输加密、身份验证和信息完整性保护。 OV证书优势 1 高信任度 OV证书通过证书颁发机构&#xff08;CA&#xff09;对企业实名认证&#xff0c;包括企业名称、注册地址、…

万能门店小程序开发平台功能源码系统 带完整的安装代码包以及安装搭建教程

互联网技术的迅猛发展和用户对于便捷性需求的不断提高&#xff0c;小程序以其轻量、快捷、无需安装的特点&#xff0c;成为了众多商家和开发者关注的焦点。为满足广大商家对于门店线上化、智能化管理的需求&#xff0c;小编给大家分享一款“万能门店小程序开发平台功能源码系统…

kernel32.dll丢失?那么kernel32.dll如何修复?教你几种修复丢失kernel32.dll错误的方法

在使用电脑时你是否遇到过kernel32.dll丢失的情况&#xff0c;那么遇到这种情况应该如何解决呢&#xff1f;遇到kernel32.dll丢失就会导致电脑无法正常运行&#xff0c;应用程序也会无法正常使用&#xff0c;今天就教大家kernel32.dll丢失的解决办法。 几种解决kernel32.dll丢失…

破解USB设备通讯协议实现自定义软件控制的步骤与方法

在设备和计算机之间通过USB进行通讯的情况下&#xff0c;厂家提供的软件可以控制设备&#xff0c;但没有提供任何其他资料和支持&#xff0c;这种情况下&#xff0c;若希望自行开发软件来实现同样的功能&#xff0c;可以通过以下步骤破解通讯协议并开发自定义程序。 1. 捕获US…

干货!如何选择Ai大模型(LLMs)?

过去一年里&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在人工智能界风起云涌&#xff0c;纷纷以突破性的进步拓展生成式人工智能的可能性。新模型层出不穷&#xff0c;令人目不暇接。 这些模型依靠日益增长的参数数量和庞大的数据集进行训练&#xff0c;显著提升了…

CentOS版本的Linux系统误删了自带的python和yum,恢复过程

文章借鉴于&#xff1a;Centos误删自带python2.7恢复方法_centos默认的被卸载了-CSDN博客 在进行别的操作的时候&#xff0c;一不小心将我的系统自带的Python2.7.5和yum删除掉了。 后来我尝试重新安装yum&#xff0c;但是安装yum必须要有python。 我又去重新安装了python&am…

前端面试:项目细节重难点问题分享(16)

&#x1f481;&#x1f481;更多详情&#xff1a;爱米的前端小笔记&#xff08;csdn~xitujuejin~zhiHu~Baidu~小红shu&#xff09;同步更新&#xff0c;等你来看&#xff01;都是利用下班时间整理的&#xff0c;整理不易&#xff0c;大家多多&#x1f44d;&#x1f49b;➕&…

数据库|SQLServer数据库:数据的基本查询

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 其实对于数据库的查询以前也应用过&#xff0c;只是使用时一般也是根据要实现的要求从网上搜索&#xff0c;能实现应用要求即可&#xff0c;现在根据视频学习&#xff0c;正好有这么一节&#xff0c;就听一遍&#xff…

ROS 2 话题:使用C++进行发布与订阅

ROS 2 话题&#xff1a;使用C进行发布与订阅 ROS 2提供了一种强大而灵活的通信机制&#xff0c;称为话题&#xff08;Topics&#xff09;。话题允许节点之间进行异步消息传递&#xff0c;从而实现松耦合的通信模式。在本文中&#xff0c;我们将介绍如何使用C编程语言在ROS 2中…

常见中间件漏洞大全及其修复方法(未完成)

一.Tomcat tomcat 是一个开源而且免费的 jsp 服务器&#xff0c;默认端口 : 8080 &#xff0c;属于轻量级应用服务器。它可以实现 JavaWeb程序的装载&#xff0c;是配置 JSP &#xff08; Java Server Page &#xff09;和 JAVA 系统必备的一款环境。 1.1 CVE-2017-12615 Tomc…

Transformers 中的Softmax 和 Layer Norm 如何并行?

1.Softmax 如何并行&#xff1f; Softmax 计算公式&#xff1a; 安全的 Softmax 运算&#xff1a; softmax 有个问题&#xff0c;那就是很容易溢出。比如采用半精度&#xff0c;由于float16的最大值为65504&#xff0c;所以只要x>11&#xff0c;那么softmax就溢出了。即使是…

C语言新手小白详细教程(6)函数

希望文章能够给到初学的你一些启发&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏支持一下笔者吧&#xff5e; 阅读指南&#xff1a; 开篇说明为什么要使用函数&#xff1f;1.定义一个函数2.调用函数3.定义函数详解 开篇说明 截止目前&#xff0c;我们已…

华清IOday7 24-8-5

文章目录 使用有名管道实现&#xff0c;一个进程用于给另一个进程发消息&#xff0c;另一个进程收到消息后&#xff0c;展示到终端上&#xff0c;并且将消息保存到文件上一份使用有名管道实现两个进程间相互通信 使用有名管道实现&#xff0c;一个进程用于给另一个进程发消息&a…

服务器数据恢复—raid5阵列上层Oracle数据库数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台服务器上有8块SAS硬盘&#xff0c;其中的7块硬盘组建了一组RAID5阵列&#xff0c;另外1块硬盘作为热备盘使用。划分了6个LUN&#xff0c;服务器上部署有oracle数据库。 RAID5磁盘阵列中有2块硬盘出现故障并离线&#xff0c;RAID5阵…

浮点数在计算机中的编码方式

一、前言 我们常能听到&#xff0c;直接用浮点数做运算得出的结果是不准确的了&#xff1b;或者也能看到涉及到浮点数时&#xff0c;会出现一些奇奇怪怪的问题&#xff0c;比如&#xff1a; public class DecimalTest {public static void main(String[] args) {float f1 1.…

STK12.2+Python开发(二):添加访问约束,新建场景、卫星、地面站等,获取当前场景的信息

新建场景 1.获取当前打开的场景 #获取当前打开的场景 scenario root.CurrentScenario2.设置当前场景的时间 scenario.SetTimePeriod(Today,24hr)3.添加一个地面目标到当前的场景 scenario.SetTimePeriod(Today,24hr)4.添加一个地面目标到当前的场景&#xff0c;括号内是三…

空气质量传感器 - 从零开始认识各种传感器【二十八期】

空气质量传感器|从零开始认识各种传感器 1、什么是空气质量传感器&#xff1f; 空气质量传感器是一种检测空气中污染物浓度的设备&#xff0c;广泛应用于环境监测、智能家居、工业控制和健康管理等领域。 2、空气质量传感器是如何工作的&#xff1f; 对于每个人都关心的空气质…

效率何止10倍!利用输入法瞬间调用提示词

我们在日常工作/学习/生活有很多场景需要使用提示词&#xff0c;比如说&#xff1a; 快速总结文章快速排版解释概念翻译其它经常面对的任务 但是使用提示词有几个痛点&#xff1a; 你很难临时写一个非常完整的提示词你凑合写的提示词&#xff0c;又担心结果不满意如果已经保…

前端使用css动画绘制简易的进度条,数据多条的时候可以切换

文章目录 一、效果图二、使用步骤1.公共的进度条组件2.使用 总结 一、效果图 二、使用步骤 1.公共的进度条组件 我这里命名的progressBar.vue&#xff0c; 你们使用的时候直接复制粘贴到自己的项目里面即可。 文件中代码如下&#xff08;示例&#xff09;&#xff1a; <t…

EasyX 碰撞检测

代码&#xff1a; #define _UNICODE #define UNICODE#include <array> #include <cmath> #include <ctime> #include <format> #include <graphics.h> #include <vector>typedef struct tagRECTF {double left;double top;double right;d…