从零开始:Spring Boot核心概念与架构解析

引言

在当今的Java开发领域,Spring Boot已经成为构建企业级应用的首选框架之一。它以其简洁、高效、易于上手的特点,极大地简化了Spring应用的开发过程。本文将从Spring Boot的核心概念入手,深入解析其架构设计和运行原理,帮助读者从零开始全面理解Spring Boot。

一、Spring Boot简介

1.1 什么是Spring Boot?

Spring Boot是由Pivotal团队提供的基于Spring框架的全新开源Java基础框架。它旨在简化Spring应用的初始搭建以及开发过程,让开发者能够更专注于业务逻辑的实现,而不是繁琐的配置。

Spring Boot的核心目标包括:

  • 简化配置:通过自动配置机制,Spring Boot能够根据项目依赖自动配置Spring和相关技术,从而减少开发者需要编写的配置代码。

  • 独立运行:Spring Boot内置了Tomcat、Jetty等嵌入式Servlet容器,无需部署WAR文件,应用可以直接以jar包形式运行。

  • 非侵入式:Spring Boot不会限制你使用特定的类加载器、线程工厂或任何其他特定的系统属性,它完全非侵入式。

  • 生产就绪:Spring Boot提供了生产级功能,如健康检查、指标收集、应用监控等,帮助开发者更好地管理应用。

1.2 Spring Boot的版本与兼容性

Spring Boot自发布以来,经历了多个版本的迭代。截至本文撰写时,Spring Boot 3.x已经广泛应用于生产环境。Spring Boot 3.x基于Spring Framework 6.x开发,支持Java 17及以上版本,并且对Spring Cloud、Spring Data等子项目进行了深度集成和优化。

在选择Spring Boot版本时,建议根据项目需求和团队技术栈选择合适的版本。对于新项目,推荐使用最新的稳定版本,以获得更好的性能和功能支持。

1.3 Spring Boot与Spring框架的关系

Spring Boot是基于Spring框架的扩展,它并非替代Spring,而是简化了Spring应用的开发过程。Spring Boot的核心是Spring框架,它继承了Spring的依赖注入、事务管理、AOP等功能,并在此基础上提供了自动配置、独立运行等特性。

二、Spring Boot的核心概念

2.1 Spring Boot的启动流程

Spring Boot应用的启动流程是理解其核心机制的关键。一个典型的Spring Boot应用从main方法开始,通过SpringApplication类启动。以下是启动流程的简化步骤:

  1. 创建SpringApplication实例SpringApplication是Spring Boot应用的启动入口,它负责初始化Spring应用上下文。

  2. 加载配置:Spring Boot会加载application.propertiesapplication.yml中的配置,并将其注入到Spring应用上下文中。

  3. 自动配置:Spring Boot通过@EnableAutoConfiguration注解自动配置Spring应用,根据项目依赖自动加载相关的配置类。

  4. 初始化应用上下文:Spring Boot会创建一个ApplicationContext,并加载所有的Bean。

  5. 启动嵌入式容器:如果项目中包含嵌入式Servlet容器(如Tomcat),Spring Boot会自动启动容器并监听指定端口。

2.2 @SpringBootApplication注解

@SpringBootApplication是Spring Boot的核心注解,它是一个组合注解,包含了以下三个注解:

  • @SpringBootConfiguration:标识当前类是一个Spring Boot配置类,等同于Spring中的@Configuration注解。

  • @EnableAutoConfiguration:启用Spring Boot的自动配置机制,根据项目依赖自动加载相关的配置类。

  • @ComponentScan:启用组件扫描,扫描当前包及其子包中的Spring组件(如@Controller@Service@Repository等)。

java复制

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

2.3 自动配置原理

自动配置是Spring Boot的核心特性之一。Spring Boot通过@EnableAutoConfiguration注解启用自动配置机制。在启动时,Spring Boot会扫描META-INF/spring.factories文件,加载其中定义的自动配置类。

这些自动配置类通常以*AutoConfiguration结尾,例如DataSourceAutoConfigurationJpaAutoConfiguration等。每个自动配置类都通过条件注解(如@ConditionalOnClass@ConditionalOnMissingBean等)判断是否需要加载某个配置。

例如,当项目中包含spring-boot-starter-web依赖时,Spring Boot会自动加载WebMvcAutoConfiguration,从而配置Spring MVC相关的Bean。

2.4 配置文件

Spring Boot支持多种配置文件格式,包括application.propertiesapplication.yml。配置文件用于定义应用的运行参数,如数据库连接信息、服务器端口、日志配置等。

application.properties文件是一个简单的键值对文件,例如:

properties复制

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

application.yml文件支持嵌套结构,更适合复杂的配置需求,例如:

yaml复制

server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: 123456

Spring Boot会优先加载application.properties文件,如果同时存在application.yml文件,则application.yml中的配置会覆盖application.properties中的同名配置。

2.5 Profile配置

Profile是Spring Boot用于管理不同环境配置的功能。通过Profile,开发者可以为开发、测试和生产环境定义不同的配置文件,例如application-dev.propertiesapplication-test.propertiesapplication-prod.properties

在启动应用时,可以通过spring.profiles.active参数指定当前激活的Profile。例如:

properties复制

# application.properties
spring.profiles.active=dev

或者通过命令行参数指定:

bash复制

java -jar myapp.jar --spring.profiles.active=prod

2.6 Starter模块

Starter模块是Spring Boot的核心组件之一,它提供了一种“一站式”的依赖管理方式。通过引入Starter模块,开发者可以快速集成Spring Boot提供的各种功能,而无需手动管理复杂的依赖。

例如,spring-boot-starter-web模块提供了Spring MVC和嵌入式Servlet容器的依赖,开发者只需在pom.xml中添加以下依赖即可:

xml复制

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

Spring Boot提供了多种Starter模块,涵盖了Web开发、数据访问、消息队列、安全等多个领域。开发者可以根据项目需求选择合适的Starter模块。

2.7 嵌入式Servlet容器

Spring Boot内置了Tomcat、Jetty和Undertow等嵌入式Servlet容器,开发者无需单独部署WAR文件,应用可以直接以jar包形式运行。默认情况下,Spring Boot使用Tomcat作为嵌入式容器。

嵌入式容器的配置可以通过application.properties文件进行自定义,例如:

properties复制

server.port=8080
server.servlet.context-path=/myapp

如果需要切换到其他嵌入式容器,可以通过排除默认的Tomcat依赖并引入其他容器的依赖来实现。例如,切换到Jetty:

xml复制

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

三、Spring Boot的架构设计

3.1 Spring Boot的分层架构

Spring Boot的架构设计遵循了经典的分层架构模式,主要包括以下几个层次:

  • 控制层(Controller):负责处理HTTP请求,返回响应。通常使用@Controller@RestController注解定义。

  • 服务层(Service):负责业务逻辑的实现,通常使用@Service注解定义。

  • 持久层(Repository):负责数据访问,通常使用@Repository注解定义。

  • 实体层(Entity):定义业务对象的模型,通常使用JPA注解定义。

  • 配置层(Configuration):负责定义Spring应用的配置,通常使用@Configuration注解定义。

这种分层架构模式使得Spring Boot应用具有良好的可扩展性和可维护性。

3.2 Spring Boot的依赖管理

Spring Boot的依赖管理是通过Maven或Gradle实现的。Spring Boot提供了一个统一的依赖管理模块spring-boot-dependencies,它定义了Spring Boot及其相关项目的核心依赖版本。

pom.xml文件中,开发者可以通过引入spring-boot-starter-parent父项目来继承这些依赖管理配置:

xml复制

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.0</version>
</parent>

通过这种方式,开发者可以避免手动管理复杂的依赖版本,同时确保项目依赖的一致性。

3.3 Spring Boot的插件机制

Spring Boot提供了强大的插件机制,通过spring-boot-maven-pluginspring-boot-gradle-plugin,开发者可以方便地将Spring Boot应用打包为可执行jar文件。

例如,在Maven项目中,可以通过以下配置将应用打包为可执行jar文件:

xml复制

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

在Gradle项目中,可以通过以下配置实现相同的功能:

groovy复制

plugins {id 'org.springframework.boot' version '3.0.0'id 'io.spring.dependency-management' version '1.0.11.RELEASE'id 'java'
}

通过插件机制,Spring Boot简化了应用的打包和部署过程,使得开发者可以更加专注于业务逻辑的实现。

3.4 Spring Boot的健康检查与监控

Spring Boot提供了丰富的健康检查和监控功能,通过spring-boot-actuator模块,开发者可以轻松地监控应用的运行状态。

spring-boot-actuator模块提供了多种端点(Endpoint),用于暴露应用的健康信息、指标数据、配置信息等。例如,/actuator/health端点可以返回应用的健康状态,/actuator/metrics端点可以返回应用的性能指标。

开发者可以通过application.properties文件自定义端点的访问路径和安全性,例如:

properties复制

management.endpoints.web.base-path=/manage
management.endpoint.health.probes.enabled=true
management.health.livenessState.enabled=true

通过健康检查和监控功能,开发者可以更好地管理Spring Boot应用的运行状态,及时发现和解决问题。

四、Spring Boot的高级特性

4.1 数据访问与JPA

Spring Boot提供了对多种数据访问技术的支持,包括JPA、MyBatis、JDBC等。其中,JPA(Java Persistence API)是最常用的ORM框架之一。

Spring Boot通过spring-boot-starter-data-jpa模块提供了对JPA的支持。开发者可以通过定义实体类和仓库接口(Repository)来实现数据访问功能。

例如,定义一个用户实体类:

java复制

@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String email;// 省略getter和setter方法
}

定义一个用户仓库接口:

java复制

public interface UserRepository extends JpaRepository<User, Long> {List<User> findByName(String name);
}

通过这种方式,Spring Boot会自动实现UserRepository接口,并提供基本的CRUD操作以及自定义查询方法。

4.2 安全与Spring Security

Spring Boot通过spring-boot-starter-security模块提供了对Spring Security的支持。Spring Security是一个功能强大的安全框架,用于保护Spring应用免受各种安全威胁。

开发者可以通过定义安全配置类来实现用户认证、授权、密码加密等功能。例如:

java复制

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/admin/**").hasRole("ADMIN").antMatchers("/user/**").hasRole("USER").anyRequest().authenticated().and().formLogin().and().httpBasic();}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("user").password("{noop}password").roles("USER").and().withUser("admin").password("{noop}password").roles("ADMIN");}
}

通过Spring Security,开发者可以轻松地实现用户登录、角色授权、密码加密等功能,从而保护Spring Boot应用的安全性。

4.3 微服务与Spring Cloud

Spring Boot与Spring Cloud结合,可以构建强大的微服务架构。Spring Cloud提供了一系列的微服务开发工具,包括服务注册与发现、配置中心、API网关、断路器等。

例如,通过spring-cloud-starter-netflix-eureka-client模块,开发者可以将Spring Boot应用注册到Eureka服务注册中心:

xml复制

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

application.properties文件中配置Eureka服务地址:

properties复制

eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

通过这种方式,Spring Boot应用可以轻松地实现服务注册与发现,从而构建微服务架构。

4.4 异步编程与WebFlux

Spring Boot 2.x引入了WebFlux模块,支持响应式编程模型。WebFlux基于Reactor框架,提供了异步、非阻塞的编程方式,适用于高并发场景。

开发者可以通过定义响应式控制器来实现异步请求处理:

java复制

@RestController
public class ReactiveController {@GetMapping("/reactive")public Mono<String> reactive() {return Mono.just("Hello, WebFlux!");}
}

通过WebFlux,开发者可以实现高性能的异步应用,提升系统的吞吐量和响应速度。

4.5 定时任务与@Scheduled

Spring Boot支持定时任务的开发,通过@Scheduled注解,开发者可以定义定时执行的任务。例如:

java复制

@Configuration
@EnableScheduling
public class ScheduledTasks {@Scheduled(fixedRate = 5000)public void fixedRateJob() {System.out.println("Fixed rate job executed at: " + new Date());}@Scheduled(cron = "0 0/30 * * * ?")public void cronJob() {System.out.println("Cron job executed at: " + new Date());}
}

通过@Scheduled注解,开发者可以轻松地实现定时任务,满足业务需求。

五、Spring Boot的性能优化

5.1 启动性能优化

Spring Boot应用的启动速度是影响开发效率的重要因素之一。以下是一些优化启动性能的建议:

  • 减少依赖:避免引入不必要的依赖,减少Spring应用上下文的初始化时间。

  • 延迟加载Bean:通过@Lazy注解延迟加载Bean,减少应用启动时的内存占用。

  • 优化自动配置:通过@Conditional注解优化自动配置类的加载条件,避免不必要的配置加载。

  • 使用JVM参数优化启动:通过设置JVM参数(如-XX:TieredStopAtLevel=1)优化JVM的启动性能。

5.2 运行性能优化

Spring Boot应用的运行性能直接影响用户体验。以下是一些优化运行性能的建议:

  • 使用缓存:通过@Cacheable注解缓存重复计算的结果,减少数据库访问次数。

  • 优化数据库访问:使用连接池(如HikariCP)优化数据库连接管理,减少数据库访问延迟。

  • 异步处理:通过@Async注解实现异步任务处理,提升应用的响应速度。

  • 使用响应式编程:通过WebFlux实现异步、非阻塞的请求处理,提升系统的吞吐量。

5.3 部署性能优化

Spring Boot应用的部署方式也会影响性能。以下是一些优化部署性能的建议:

  • 使用嵌入式容器:使用嵌入式Servlet容器(如Tomcat)部署应用,减少部署复杂度。

  • 优化打包配置:通过spring-boot-maven-pluginspring-boot-gradle-plugin优化应用的打包配置,减少打包时间。

  • 使用容器化部署:通过Docker容器化部署应用,实现环境一致性,减少部署问题。

六、Spring Boot的常见问题与解决方案

6.1 自动配置冲突

当项目中存在多个自动配置类时,可能会导致配置冲突。解决方法是通过@Conditional注解定义配置类的加载条件,避免不必要的配置加载。

6.2 性能问题

如果Spring Boot应用出现性能问题,可以通过以下方式排查和解决:

  • 使用监控工具:通过Spring Boot Actuator监控应用的运行状态,查找性能瓶颈。

  • 优化代码:通过代码分析工具(如JProfiler)优化应用的代码逻辑,减少不必要的计算。

  • 优化配置:通过优化数据库配置、缓存配置等提升应用的性能。

6.3 安全问题

如果Spring Boot应用存在安全漏洞,可以通过以下方式解决:

  • 使用Spring Security:通过Spring Security实现用户认证、授权等功能,保护应用的安全性。

  • 使用HTTPS:通过HTTPS加密通信数据,防止数据泄露。

  • 定期更新依赖:定期更新Spring Boot及其相关依赖,修复已知的安全漏洞。

七、Spring Boot的未来发展方向

7.1 云原生支持

随着云原生技术的发展,Spring Boot也在不断加强与云原生技术的结合。例如,Spring Boot 3.x已经对Kubernetes提供了更好的支持,包括自动配置、健康检查、服务发现等功能。

7.2 响应式编程

响应式编程是Spring Boot未来的重要发展方向之一。通过WebFlux模块,Spring Boot支持异步、非阻塞的编程方式,适用于高并发场景。

7.3 微服务架构

微服务架构是现代应用开发的重要趋势之一。Spring Boot与Spring Cloud结合,可以构建强大的微服务架构,满足企业级应用的需求。

八、总结

Spring Boot作为Spring框架的扩展,极大地简化了Spring应用的开发过程。通过自动配置、独立运行、非侵入式等特性,Spring Boot让开发者能够更加专注于业务逻辑的实现。本文从Spring Boot的核心概念入手,深入解析了其架构设计和运行原理,希望对读者有所帮助。

在实际开发中,开发者可以根据项目需求选择合适的Spring Boot版本和功能模块,通过优化配置和代码实现高性能、高可用的Spring Boot应用。同时,随着云原生技术、响应式编程和微服务架构的发展,Spring Boot也在不断演进,为开发者提供了更强大的功能和更好的开发体验。

 

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

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

相关文章

【EdgeAI实战】(1)STM32 边缘 AI 生态系统

【EdgeAI实战】&#xff08;1&#xff09;STM32 边缘 AI 生态系统 【EdgeAI实战】&#xff08;1&#xff09;STM32 边缘 AI 生态系统 1. STM32 边缘人工智能1.1 X-CUBE-AI 扩展包1.2 STM32 AI Model Zoo1.3 ST AIoT Craft 2. STM32N6 AI 生态系统 (STM32N6-AI)2.1 STM32N6 AI 产…

SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输

前言 大家好&#xff0c;我是雪荷。最近我在灵犀 BI 项目中引入了 SSE 技术&#xff0c;以保证图表的实时渲染&#xff0c;当图表渲染完毕服务端推送消息至浏览器端触发重新渲染。 什么是 SSE&#xff1f; SSE 全称为 Server-Send Events 意思是服务端推送事件。 SSE 相比于 …

关于机器学习的一份总结

在之前的文章中分别有详细的关于机器学习中某一学习算法的介绍&#xff0c;但缺少一个总体关于机器学习的总结&#xff0c;所以在这篇文中就是关于机器学习的一份总结。 在最近的日子中&#xff0c;人工智能日益火热起来&#xff0c;而机器学习是其中举足轻重的一部分&#xf…

浅谈计算机网络03 | 现代网络组成

现代网络组成 一 、网络生态体系1.1网络生态系统的多元主体1.2 网络接入设施的多样类型 二、现代网络的典型体系结构解析三、高速网络技术3.1 以太网技术3.2 Wi-Fi技术的深度剖析3.2.1 应用场景的多元覆盖3.2.2 标准升级与性能提升 3.3 4G/5G蜂窝网的技术演进3.3.1 蜂窝技术的代…

数据结构漫游记:队列的动态模拟实现(C语言)

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…

Ubuntu22.04安装paddle GPU版本

文章目录 确立版本安装CUDA与CUDNN安装paddle 确立版本 查看官网信息&#xff0c;确立服务版本&#xff1a;https://www.paddlepaddle.org.cn/documentation/docs/zh/2.6/install/pip/linux-pip.html 安装CUDA与CUDNN 通过nvidia-smi查看当前显卡驱动版本&#xff1a; 通过…

2024年度总结:从后端Java到全栈成长的蜕变

目录 前言1. 用数据与实践书写成长篇章2. 技术与生活的双重蜕变3. 技术的进阶与生活的绽放 前言 今年是我入行的第十年&#xff0c;也是记录在CSDN平台上的第五年。这五年来&#xff0c;我始终坚持记录成长的点滴&#xff0c;将个人事业与博客创作紧密相连。一路走来&#xff0…

麦田物语学习笔记:创建TransitionManager控制人物场景切换

基本流程 制作场景之间的切换 1.代码思路 (1)为了实现不同场景切换,并且保持当前的persistentScene一直存在,则需要一个Manager去控制场景的加载和卸载,并且在加载每一个场景之后,都要将当前的场景Set Active Scene,保证其为激活的场景,在卸载的时候也可以方便调用当前激活的场…

无人机高速无刷动力电机核心设计技术

一、技术概述 无刷电机优势&#xff1a; 高效率&#xff1a;无刷电机由于去除了电刷和换向器&#xff0c;减少了能量损失&#xff0c;因此具有更高的效率。 长寿命&#xff1a;电刷和换向器的磨损是导致传统有刷电机寿命较短的主要原因&#xff0c;而无刷电机则避免了这一问…

Linux C\C++方式下的文件I/O编程

【图书推荐】《Linux C与C一线开发实践&#xff08;第2版&#xff09;》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践&#xff08;第2版&#xff09;&#xff08;Linux技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 Lin…

python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)角点检测

角点检测&#xff08;Corner Detection&#xff09;是计算机视觉和图像处理中重要的步骤&#xff0c;主要用于提取图像中的关键特征&#xff0c;以便进行后续的任务&#xff0c;比如图像匹配、物体识别、运动跟踪等。下面介绍几种常用的角点检测方法及其应用。 1. Harris角点检…

QT开发-T113 Linux 主板QC配置套件

此篇文章用于记录在Linux主板上使用QT开发项目的套件配置步骤 进入QC软件&#xff0c;点击 Manage Kits… 选择项目对应的QT Version : 一般有一个项目对应的qmake 文件&#xff0c;选择导入即可 如果首次导入提示 qmake could not be added 需要先对项目进行命令行编译(具体命…

【云岚到家】-day03-门户缓存实现实战

【云岚到家】-day03-门户缓存实现实战 1.定时任务更新缓存 1.1 搭建XXL-JOB环境 1.1.1 分布式调度平台XXL-JOB介绍 对于开通区域列表的缓存数据需要由定时任务每天凌晨更新缓存&#xff0c;如何实现定时任务呢&#xff1f; 1.使用jdk提供的Timer定时器 示例代码如下&#xf…

SuperdEye:一款基于纯Go实现的间接系统调用执行工具

关于SuperdEye SuperdEye是一款基于纯Go实现的间接系统调用执行工具&#xff0c;该工具是TartarusGate 的修订版&#xff0c;可以利用Go来实现TartarusGate 方法进行间接系统调用。 该工具的目标是为了扫描挂钩的NTDLL并检索Syscall编号&#xff0c;然后使用它来执行间接系统调…

Python+ tkinter实现小学整数乘法和除法竖式演算式

Python tkinter实现小学整数乘法和除法竖式演算式 整数的乘法与除法是小学数学中的重要内容&#xff0c;它们是数学运算中的基础部分。 本文将使用python 和Python 的标准 GUI&#xff08;图形用户界面&#xff09;包tkinter&#xff0c;实现整数乘法与除法的竖式演示。供有兴趣…

线程池遇到未处理的异常会崩溃吗?

线程池中的 execute 和 submit 方法详解 目录 引言execute 方法 使用示例代码 submit 方法 2.1 提交 Callable 任务2.2 提交 Runnable 任务 遇到未处理异常 3.1 execute 方法遇到未处理异常3.2 submit 方法遇到未处理异常 小结 引言 在多线程编程中&#xff0c;线程池是提高性…

MongoDB基本操作

一、实验目的 1. 熟悉MongoDB的基本操作&#xff0c;包括CRUD&#xff08;增加、读取、更新、删除&#xff09;。 2. 理解MongoDB的文档型数据库特性和Shell的使用。 3. 培养学生通过命令行操作数据库的能力。 4. 强化数据库操作的实际应用能力。 二、实验环境准备 1.…

【银河麒麟高级服务器操作系统】业务访问慢网卡丢包现象分析及处理过程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;product.kylinos.cn 开发者专区&#xff1a;developer.kylinos.cn 文档中心&#xff1a;document.kylinos.cn 交流论坛&#xff1a;forum.kylinos.cn 服务器环境以及配置 【内核版本…

Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正

Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正 1 添加依赖2 测试代码3 测试结果 在OpenCV中&#xff0c;仿射变换&#xff08;Affine Transformation&#xff09;和透视变换&#xff08;Perspective Transformation&#xff09;是两种常用的图像几何变换方法。 变换方…

【LeetCode100】--- 寻找重复数

题目传送门 方法一&#xff1a;暴力解法&#xff08;超时&#xff09; 算法原理 双重循环&#xff0c;每次固定一个数&#xff0c;再遍历别的数。比较这两个数是否相等&#xff0c; 若相等则返回这个数。就是重复数。 复杂度分析 时间复杂度&#xff1a;O&#xff08;N方&…