当前位置: 首页 > news >正文

深入探索Spring Boot:原理与实践

Spring Boot作为一个简化Spring应用开发的框架,近年来在Java开发者中备受推崇。它通过提供默认配置、自动化配置和一系列开箱即用的功能,极大地简化了应用程序的开发和部署过程。在本篇文章中,我们将深入探讨Spring Boot的工作原理,从基本概念到高级特性,帮助你全面了解并掌握Spring Boot的使用和原理。

目录

  1. Spring Boot简介
    • Spring Boot的背景与发展
    • Spring Boot的核心理念
  2. Spring Boot的基本原理
    • 自动配置(Auto-configuration)
    • Spring Boot启动过程
    • 条件注解(Conditional Annotations)
  3. Spring Boot的配置
    • 配置文件(application.properties和application.yml)
    • 外部化配置(Externalized Configuration)
    • 配置属性(Configuration Properties)
  4. Spring Boot的Web开发
    • 内嵌服务器(Embedded Server)
    • Spring MVC与Spring Boot
    • RESTful API开发
  5. 数据访问与持久化
    • Spring Data JPA
    • 数据库连接与配置
    • 事务管理
  6. Spring Boot的安全机制
    • Spring Security集成
    • 常见安全配置
    • OAuth2与JWT
  7. Spring Boot的监控与管理
    • Spring Boot Actuator
    • 健康检查与指标监控
    • 自定义监控端点
  8. Spring Boot的测试
    • 单元测试与集成测试
    • Mock与测试数据
    • Spring Boot Test框架
  9. Spring Boot的微服务架构
    • Spring Cloud与Spring Boot
    • 服务发现与注册
    • 分布式配置与断路器
  10. Spring Boot的部署
    • 打包与构建
    • 部署到云平台
    • 容器化部署(Docker)

1. Spring Boot简介

Spring Boot的背景与发展

Spring Boot是Spring框架的子项目,旨在简化基于Spring框架的应用程序开发。Spring框架自2003年发布以来,以其强大的依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming)功能,成为Java企业级开发的首选框架。然而,Spring的配置相对复杂,尤其是大型应用程序,配置文件可能会变得冗长且难以维护。

为了解决这一问题,Spring团队在2014年推出了Spring Boot。Spring Boot通过“约定优于配置”的理念,提供了一系列默认配置和自动化功能,使开发者可以更加专注于业务逻辑的实现,而无需花费大量时间在框架配置上。

Spring Boot的核心理念

Spring Boot的核心理念可以概括为以下几点:

  1. 自动配置:Spring Boot根据项目中的依赖和环境,自动配置Spring应用程序。开发者只需引入相应的依赖,Spring Boot就能自动配置好相关的Bean和服务。
  2. 起步依赖(Starter Dependencies):Spring Boot提供了一系列起步依赖,如spring-boot-starter-web、spring-boot-starter-data-jpa等,开发者可以通过引入这些依赖快速开始开发特定类型的应用。
  3. 嵌入式服务器:Spring Boot支持嵌入式服务器,如Tomcat、Jetty和Undertow,开发者无需再单独配置和部署应用服务器。
  4. 生产就绪:Spring Boot提供了一系列生产环境下常用的功能,如监控、度量、外部化配置等,帮助开发者快速构建生产级应用。
  5. 简化部署:Spring Boot应用可以打包为可执行的JAR文件或WAR文件,支持以Java应用程序的形式运行,极大地简化了部署过程。

2. Spring Boot的基本原理

自动配置(Auto-configuration)

自动配置是Spring Boot的核心功能之一。它通过分析类路径上的依赖、类和Bean定义,自动配置Spring应用的各个部分。自动配置的关键是@EnableAutoConfiguration注解,它通常被放在主类上。这个注解告诉Spring Boot根据类路径中的依赖来自动配置Spring应用程序。

Spring Boot使用一系列@Configuration类和@Conditional注解来实现自动配置。这些配置类和条件注解决定了在什么条件下应用某个配置。例如,如果类路径中存在H2数据库的依赖,Spring Boot会自动配置一个内存数据库。

自动配置的实现机制依赖于Spring Factories机制。Spring Boot在META-INF/spring.factories文件中定义了所有需要自动配置的类。启动时,Spring Boot会加载这些类并根据条件进行配置。

Spring Boot启动过程

Spring Boot的启动过程可以分为以下几个步骤:

  1. 创建SpringApplication实例:在SpringApplication.run方法中,首先会创建一个SpringApplication实例。这个实例会解析配置、初始化Spring上下文、注册监听器等。
  2. 准备Environment:Spring Boot会准备一个Environment实例,用于持有应用的配置属性。这个实例会解析application.propertiesapplication.yml文件中的配置,以及系统环境变量和命令行参数。
  3. 创建并刷新ApplicationContext:Spring Boot会根据应用类型(如Web应用或非Web应用)创建相应的ApplicationContext实例,并刷新上下文,加载所有的Bean定义。
  4. 调用Runner:如果应用中定义了CommandLineRunnerApplicationRunner接口的实现类,Spring Boot会在启动完成后调用它们。

条件注解(Conditional Annotations)

Spring Boot的自动配置依赖于一系列条件注解,如@ConditionalOnClass@ConditionalOnMissingBean@ConditionalOnProperty等。这些注解允许开发者在特定条件下才加载某些Bean或配置。例如:

  • @ConditionalOnClass:仅当类路径中存在指定的类时才加载配置。
  • @ConditionalOnMissingBean:仅当上下文中不存在指定的Bean时才加载配置。
  • @ConditionalOnProperty:仅当指定的属性存在且符合条件时才加载配置。

条件注解使得Spring Boot的配置具有很高的灵活性和可扩展性,开发者可以根据实际需求定制应用的配置。

3. Spring Boot的配置

配置文件(application.properties和application.yml)

Spring Boot支持两种格式的配置文件:application.propertiesapplication.yml。这两个文件通常放在src/main/resources目录下。以下是一个application.properties文件的示例:

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=secret

相应的application.yml文件可以这样写:

server:port: 8080spring:datasource:url: jdbc:mysql://localhost:3306/testusername: rootpassword: secret

外部化配置(Externalized Configuration)

Spring Boot允许将配置外部化,以便在不同的环境中使用相同的代码。除了默认的配置文件外,Spring Boot还支持从以下位置加载配置:

  • 命令行参数
  • Java系统属性
  • 操作系统环境变量
  • JNDI属性
  • ServletConfigServletContext初始化参数
  • 自定义配置源

例如,可以通过命令行参数覆盖配置:

java -jar myapp.jar --server.port=9090

配置属性(Configuration Properties)

Spring Boot提供了@ConfigurationProperties注解,用于将配置文件中的属性映射到Java对象中。这种方式使得配置管理更加方便和类型安全。以下是一个示例:

首先定义一个配置类:

@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceProperties {private String url;private String username;private String password;// getters and setters
}

然后在主类或配置类中启用这个配置:

@EnableConfigurationProperties(DataSourceProperties.class)
public class Application {// ...
}

4. Spring Boot的Web开发

内嵌服务器(Embedded Server)

Spring Boot支持内嵌的Tomcat、Jetty和Undertow服务器。默认情况下,Spring Boot使用Tomcat作为内嵌服务器。内嵌服务器的优点是开发和部署更加简单,无需在外部安装和配置服务器。

可以通过application.properties文件配置内嵌服务器的参数,例如:

server.port=8081
server.servlet.context-path=/app

Spring MVC与Spring Boot

Spring Boot默认集成了Spring MVC,开发者可以直接使用Spring MVC的所有特性来构建Web应用。以下是一个简单的控制器示例:

@RestController
public class HelloController {@GetMapping("/hello")public String sayHello() {return "Hello, World!";}
}

Spring Boot中,通常不需要显式配置DispatcherServlet或视图解析器,Spring Boot会自动进行配置。

RESTful API开发

Spring Boot非常适合构建RESTful API。可以使用@RestController和各种注解来定义API端点。例如:

@RestController
@RequestMapping("/api")
public class UserController {@GetMapping("/users")public List<User> getAllUsers() {return userService.findAll();}@PostMapping("/users")public User createUser(@RequestBody User user) {return userService.save(user);}@GetMapping("/users/{id}")public User getUserById(@PathVariable Long id) {return userService.findById(id);}@PutMapping("/users/{id}")public User updateUser(@PathVariable Long id, @RequestBody User userDetails) {return userService.update(id, userDetails);}@DeleteMapping("/users/{id}")public void deleteUser(@PathVariable Long id) {userService.delete(id);}
}

5. 数据访问与持久化

Spring Data JPA

Spring Boot与Spring Data JPA无缝集成,使得数据访问层的开发变得更加简单和高效。以下是一个基本的JPA实体和仓库(Repository)定义:

@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String email;// getters and setters
}public interface UserRepository extends JpaRepository<User, Long> {
}

在服务类中可以直接注入UserRepository并使用:

@Service
public class UserService {@Autowiredprivate UserRepository userRepository;public List<User> findAll() {return userRepository.findAll();}public User save(User user) {return userRepository.save(user);}public User findById(Long id) {return userRepository.findById(id).orElse(null);}public User update(Long id, User userDetails) {User user = userRepository.findById(id).orElseThrow();user.setName(userDetails.getName());user.setEmail(userDetails.getEmail());return userRepository.save(user);}public void delete(Long id) {userRepository.deleteById(id);}
}

数据库连接与配置

Spring Boot通过自动配置简化了数据库连接的配置。在application.propertiesapplication.yml文件中配置数据库连接信息即可:

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=secret
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

事务管理

Spring Boot支持声明式事务管理,可以通过@Transactional注解轻松实现事务控制。例如:

@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Transactionalpublic User updateUser(Long id, User userDetails) {User user = userRepository.findById(id).orElseThrow();user.setName(userDetails.getName());user.setEmail(userDetails.getEmail());return userRepository.save(user);}
}

6. Spring Boot的安全机制

Spring Security集成

Spring Boot与Spring Security紧密集成,为Web应用提供了强大的安全保护。可以通过引入spring-boot-starter-security依赖来启用Spring Security。例如:

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

然后配置一个简单的安全配置类:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("user").password(passwordEncoder().encode("password")).roles("USER");}@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}

常见安全配置

Spring Boot的安全配置非常灵活,可以通过application.properties文件进行一些常见的安全配置。例如:

spring.security.user.name=admin
spring.security.user.password=admin123
spring.security.user.roles=USER,ADMIN

OAuth2与JWT

Spring Boot还支持OAuth2和JWT认证。可以通过引入spring-boot-starter-oauth2-resource-serverspring-boot-starter-oauth2-client依赖来启用OAuth2支持。以下是一个OAuth2资源服务器配置示例:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().oauth2ResourceServer().jwt();}
}

application.properties文件中配置JWT相关参数:

spring.security.oauth2.resourceserver.jwt.jwk-set-uri=https://example.com/.well-known/jwks.json

7. Spring Boot的监控与管理

Spring Boot Actuator

Spring Boot Actuator提供了一系列用于监控和管理Spring Boot应用的端点。这些端点可以用于查看应用的健康状况、环境信息、度量指标等。可以通过引入spring-boot-starter-actuator依赖来启用Actuator功能:

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

application.properties文件中配置Actuator端点的访问权限:

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

健康检查与指标监控

Actuator提供了一个/health端点,用于检查应用的健康状况。可以通过实现HealthIndicator接口来自定义健康检查。例如:

@Component
public class CustomHealthIndicator implements HealthIndicator {@Overridepublic Health health() {boolean healthy = checkSomeService();if (healthy) {return Health.up().withDetail("service", "available").build();} else {return Health.down().withDetail("service", "unavailable").build();}}private boolean checkSomeService() {// 自定义健康检查逻辑return true;}
}

自定义监控端点

可以通过实现@Endpoint注解来自定义Actuator端点。例如:

@Endpoint(id = "custom")
@Component
public class CustomEndpoint {@ReadOperationpublic Map<String, Object> customEndpoint() {Map<String, Object> details = new HashMap<>();details.put("custom", "This is a custom endpoint");return details;}
}

8. Spring Boot的测试

单元测试与集成测试

Spring Boot提供了强大的测试支持,可以通过引入spring-boot-starter-test依赖来启用测试功能。以下是一个简单的单元测试示例:

@SpringBootTest
public class UserServiceTests {@Autowiredprivate UserService userService;@Testpublic void testFindAll() {List<User> users = userService.findAll();assertNotNull(users);}
}

Mock与测试数据

可以使用@MockBean注解来创建Mock对象,并注入到测试上下文中。例如:

@SpringBootTest
public class UserServiceTests {@MockBeanprivate UserRepository userRepository;@Autowiredprivate UserService userService;@Testpublic void testFindAll() {when(userRepository.findAll()).thenReturn(Collections.emptyList());List<User> users = userService.findAll();assertTrue(users.isEmpty());}
}

Spring Boot Test框架

Spring Boot提供了@SpringBootTest注解,用于在测试中启动整个Spring应用上下文。还提供了其他一些注解,如@WebMvcTest@DataJpaTest等,用于特定场景的测试。例如:

@WebMvcTest
public class UserControllerTests {@Autowiredprivate MockMvc mockMvc;@Testpublic void testGetAllUsers() throws Exception {mockMvc.perform(get("/api/users")).andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON));}
}

9. Spring Boot的微服务架构

Spring Cloud与Spring Boot

Spring Cloud与Spring Boot紧密集成,为构建微服务架构提供了一系列解决方案,如服务发现、分布式配置、断路器等。可以通过引

入Spring Cloud相关依赖来启用这些功能。

例如,使用Eureka进行服务发现:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

在应用主类上添加@EnableEurekaClient注解:

@SpringBootApplication
@EnableEurekaClient
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

服务发现与注册

application.properties文件中配置Eureka客户端:

eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
spring.application.name=my-service

分布式配置与断路器

使用Spring Cloud Config进行分布式配置管理:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-client</artifactId>
</dependency>

application.properties文件中配置Config客户端:

spring.cloud.config.uri=http://localhost:8888

使用Hystrix实现断路器:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

在应用主类上添加@EnableHystrix注解:

@SpringBootApplication
@EnableHystrix
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

定义一个使用断路器的服务方法:

@Service
public class UserService {@HystrixCommand(fallbackMethod = "fallbackMethod")public String getUserById(String id) {// 调用远程服务}public String fallbackMethod(String id) {return "Fallback response";}
}

10. Spring Boot的部署

打包与构建

Spring Boot应用可以打包为可执行的JAR文件或WAR文件。可以使用Maven或Gradle进行构建。例如,使用Maven打包:

mvn clean package

生成的JAR文件可以直接运行:

java -jar target/myapp.jar

部署到云平台

Spring Boot应用可以部署到各种云平台,如AWS、Google Cloud、Azure等。例如,部署到AWS Elastic Beanstalk:

  1. 安装Elastic Beanstalk CLI。

  2. 初始化Elastic Beanstalk应用:

    eb init
    
  3. 创建并部署应用:

    eb create
    eb deploy
    

容器化部署(Docker)

Spring Boot应用可以轻松容器化并部署到Docker。以下是一个简单的Dockerfile示例:

FROM openjdk:11-jre-slim
VOLUME /tmp
COPY target/myapp.jar myapp.jar
ENTRYPOINT ["java","-jar","/myapp.jar"]

构建Docker镜像:

docker build -t myapp .

运行Docker容器:

docker run -p 8080:8080 myapp

结论

Spring Boot通过简化配置、自动化配置和提供开箱即用的功能,使得构建Spring应用变得更加简单和高效。通过深入理解Spring Boot的工作原理和实践,开发者可以更加灵活地使用Spring Boot构建高性能、可维护的企业级应用。本篇文章详细介绍了Spring Boot的各个方面,希望能够帮助你更好地掌握和应用Spring Boot。

相关文章:

深入探索Spring Boot:原理与实践

Spring Boot作为一个简化Spring应用开发的框架&#xff0c;近年来在Java开发者中备受推崇。它通过提供默认配置、自动化配置和一系列开箱即用的功能&#xff0c;极大地简化了应用程序的开发和部署过程。在本篇文章中&#xff0c;我们将深入探讨Spring Boot的工作原理&#xff0…...

基于SSM框架的电影院售票网站

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果您对我们的电影院售票网站感兴趣或者有相关需求&#xff0c;欢迎通过文末的联系方式与我联系。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM框架 工具&#xff1a;ID…...

oracle发送http请求

UTL_HTTP包让SQL和PLSQL能够调用超文本传输协议&#xff08;HTTP&#xff09;&#xff0c;也就是说可以使用它在Internet上访问数据。 当包用HTTPS从Web site获取数据时&#xff0c;要使用Oracle Wallet&#xff0c;它是由Oracle Wallet Manager或者orapki utility创建。非HTT…...

软件回归测试:策略及案例分析

软件回归测试&#xff1a;策略及案例分析 回归测试的定义回归测试的执行阶段回归测试的种类回归测试的策略结论 回归测试的定义 回归测试是一种质量保障措施&#xff0c;其主要目的是验证在进行修改、增加新功能或修复错误后&#xff0c;系统的原有功能仍然能够正常工作&#…...

openstack搭建

openstack搭建 1、虚拟机部署规划 主机主机名IP规划实例通讯内部通讯控制节点controller192.168.10.144192.168.1.144实例节点compute192.168.10.145192.168.1.145 2、硬件配置 主机名内存逻辑CPU数量硬盘容量controller4G480Gcompute4G480G20G 3、安装centos7&#xff0c…...

HIVE及SparkSQL优化经验

简介 针对高耗跑批时间长的作业&#xff0c;在公司近3个月做过一个优化专项&#xff1b;优化成效&#xff1a;综合cpu、内存、跑批耗时减少均在65%以上&#xff1b; cpu和内存消耗指的是&#xff1a;vcoreseconds和memoryseconds 这里简单说下优化的一些思路&#xff0c;至于…...

Django 5 Web应用开发实战

文章目录 一、内容简介二、目录内容三、值得一读四、适读人群 一、内容简介 《Django 5 Web应用开发实战》集Django架站基础、项目实践、开发经验于一体&#xff0c;是一本从零基础到精通Django Web企业级开发技术的实战指南。《Django 5 Web应用开发实战》内容以Python 3.x和…...

互联网摸鱼日报(2024-06-17)

互联网摸鱼日报(2024-06-17) 36氪新闻 本周双碳大事&#xff1a;历年最大规模SNEC人气火热&#xff1b;首批CCER审定与核查机构名单出炉&#xff1b;特斯拉储能业务年增长率将达200%至300% 烧光百亿&#xff0c;离奇破产&#xff01;顶级天才&#xff0c;让广东损失惨重 奥特…...

Docker Desktop Installer For Windows 国内下载地址

官网&#xff1a; Docker Desktop For Windows: https://download.docker.com/win/stable/Docker%20Desktop%20Installer.exe 通过Docker官网下载Docker Desktop安装包非常慢&#xff0c;而且还会下载失败。 解决方案 网盘下载&#xff1a; 链接&#xff1a;https://pan.qu…...

做好程序前设计

不要小看任何一道编程题目&#xff01;一定一定一定要想好之后再动手&#xff01;&#xff01;&#xff01; 带上你的草稿本&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xf…...

SpringCloud:Feign远程调用

程序员老茶 &#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; P   S : 点赞是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#…...

leetcode-05-[242]有效的字母异位词[349]两个数组的交集[202]快乐数[1]两数之和

重点&#xff1a; 哈希表&#xff1a;当我们遇到了要快速判断一个元素是否出现集合里的时候&#xff0c;就要考虑哈希法。 常用数据结构&#xff1a; List 数组 固定大小 如26个字母&#xff0c;10个数字 空间换时间 Set hashset 去重 Map hashmap <K,V>形式 …...

C语言实现动态栈

#include<stdio.h> #include<stdlib.h> #include<stdbool.h>// 每一个节点的数据类型 typedef struct Node {int data;struct Node * pNext; }NODE, * PNODE; // NODE等价 struct Node PNODE等价于 struct Node *// 栈 typedef struct Stack {PNODE pTop;P…...

进程间的通信

管道 匿名管道 匿名管道的⽣命周期&#xff0c;是随进程的创建⽽建⽴&#xff0c;随进程的结束⽽销毁 匿名管道的创建&#xff0c;需要通过下⾯这个系统调⽤&#xff1a; int pipe(int fd[2]) 这⾥表示创建⼀个匿名管道&#xff0c;并返回了两个描述符&#xff0c;⼀个是…...

hadoop/hive/DBeaver启动流程

hadoop 启动 cd到指定目录下 cd /opt/module/hadoop-3.3.0/sbin/启动文件 ./start-all.shjps一下&#xff0c;查看显示的内容 应该显示以下内容 NameNode SecondaryNameNode DataNode ResourceManager NodeManager如果缺少namenode&#xff0c;那么执行 rm -rf /tmp/hadoo…...

1节18650锂电池的容量是多大,电流,电压是多大

1节标准的18650锂电池的规格通常如下&#xff1a; 容量&#xff1a; 18650锂电池的容量通常在1800mAh&#xff08;毫安时&#xff09;到3000mAh之间&#xff0c;这取决于电池的化学成分和制造商的设计。例如&#xff0c;许多常见的18650电池标称容量为2200mAh或2600mAh。 电流…...

基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真。仿真输出GDOP优化结果&#xff0c;遗传算法的优化收敛曲线以及三维空间坐标点。 2.测试软件版本以及运行…...

Linux C语言:多级指针(void指针和const)

一、多级指针 把一个指向指针变量的指针变量&#xff0c;称为多级指针变量对于指向处理数据的指针变量称为一级指针变量指向一级指针变量的指针变量称为二级指针变量 1、二级指针变量的说明形式 <数据类型> ** <指针名> &#xff1b; 一张图理解二级指针 2、多…...

MicroPython+ESP32 C3开发上云

传感器PinI/O状态D412输出1开0关D513输出1开0关 概述 MicroPython是python3编程语言的精简实现&#xff0c;能够在资源非常有限的硬件上运行&#xff0c;如MCU微控制器Micropython的网络功能和计算功能很强大&#xff0c;有非常多的库可以使用&#xff0c;它为嵌入式开发带来了…...

动态 SQL

动态 SQL 是 MyBatis 的强大特性之一&#xff0c;能够完成不同条件下不同的 sql 拼接。也就是说执行的 SQL 语句并不是固定的&#xff0c;而是不同人的不同操作执行的语句会有所差异。MyBatis 通过使用 标签 的方式来实现这种灵活性的。 <if>标签 例如在有一些网站进行…...

告别乱码!手把手教你用阿里妈妈数黑体+LVGL 8.3打造炫酷中文界面(附图标字体生成全流程)

告别乱码&#xff01;手把手教你用阿里妈妈数黑体LVGL 8.3打造炫酷中文界面&#xff08;附图标字体生成全流程&#xff09; 在智能家居控制面板、工业HMI等嵌入式设备开发中&#xff0c;中文显示一直是工程师的痛点。传统解决方案要么占用过多Flash空间&#xff0c;要么显示效…...

SenseVoice语音识别在客服场景的应用:自动转写通话录音实战

SenseVoice语音识别在客服场景的应用&#xff1a;自动转写通话录音实战 1. 引言&#xff1a;客服录音转写的痛点与机遇 想象一下这样的场景&#xff1a;每天有成千上万的客服通话录音堆积在服务器上&#xff0c;里面包含了客户反馈、产品问题和市场洞察的宝贵信息。但现实是&…...

终极指南:如何使用爱享素材下载器轻松获取多平台资源

终极指南&#xff1a;如何使用爱享素材下载器轻松获取多平台资源 【免费下载链接】res-downloader 资源下载器、网络资源嗅探&#xff0c;支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gitcode.com/…...

Pixel Mind Decoder 创意写作助手:分析经典文学中的情绪节奏与模仿生成

Pixel Mind Decoder 创意写作助手&#xff1a;分析经典文学中的情绪节奏与模仿生成 1. 当AI遇见文学创作 写作最难把握的是什么&#xff1f;很多作家会告诉你&#xff1a;是情绪的节奏。就像音乐需要起伏的旋律&#xff0c;一部好作品也需要精心设计的情感曲线。但传统创作中…...

Mamba模型实战:如何用S6替代Transformer处理长文本(附代码示例)

Mamba模型实战&#xff1a;如何用S6替代Transformer处理长文本&#xff08;附代码示例&#xff09; 在自然语言处理领域&#xff0c;Transformer架构因其强大的注意力机制而长期占据主导地位。然而&#xff0c;当面对长文本处理任务时&#xff0c;Transformer的二次方计算复杂度…...

7.系统配置与性能评价

一、系统配置与性能评价 &#xfeff;00:00 1. 考情分析 &#xfeff;00:12 考查频率&#xff1a;本章节在历年真题中偶尔出现&#xff0c;非每年必考分值占比&#xff1a;若考查则占1-2分&#xff0c;分值较低内容稳定性&#xff1a;与旧版教材内容基本一致&#xff0c;无实质…...

微信H5页面如何通过wx-open-launch-weapp标签跳转小程序?完整配置指南

微信H5跳转小程序全链路实战&#xff1a;从零配置wx-open-launch-weapp标签 在移动互联网生态中&#xff0c;微信H5与小程序的无缝跳转已成为提升用户体验的关键技术节点。许多开发者首次接触wx-open-launch-weapp标签时&#xff0c;往往会在业务域名验证、HTTPS部署等环节遭遇…...

【Polars 2.0数据清洗成本控制白皮书】:20年ETL专家亲授5大降本增效实战模式,92%企业忽略的内存泄漏陷阱

第一章&#xff1a;Polars 2.0数据清洗成本控制全景认知在现代数据工程实践中&#xff0c;数据清洗不再仅关乎逻辑正确性&#xff0c;更深度绑定计算资源消耗、内存占用与执行延迟。Polars 2.0 通过零拷贝语义、惰性执行引擎重构与 Arrow-native 内存布局优化&#xff0c;将清洗…...

【Python内存管理2026权威白皮书】:GIL演进、引用计数重构与GC智能调度三大突破性策略首次公开

第一章&#xff1a;Python智能体内存管理策略2026最新趋势全景概览随着大语言模型驱动的Python智能体&#xff08;Agent&#xff09;在生产环境中的深度部署&#xff0c;传统CPython内存管理机制正面临前所未有的挑战&#xff1a;动态工具调用、多轮推理缓存、跨Agent状态共享及…...

LoRA训练助手实际作品集:50+真实图片描述→高质量英文Tag转化示例

LoRA训练助手实际作品集&#xff1a;50真实图片描述→高质量英文Tag转化示例 1. 工具简介与核心价值 LoRA训练助手是一个专门为AI绘画爱好者设计的智能标签生成工具。无论你是想要训练自己的Stable Diffusion模型&#xff0c;还是需要为FLUX模型准备训练数据&#xff0c;这个…...