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

Java大师成长计划之第22天:Spring Cloud微服务架构

📢 友情提示:

本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。

随着企业应用的不断扩展,传统的单体架构已经难以满足现代化开发的需求。为了应对高并发、高可用性以及易于扩展的需求,微服务架构应运而生。微服务架构通过将应用拆分为多个独立的服务,每个服务都可以独立开发、部署、扩展,并通过轻量级的通信方式进行协作,提升了系统的灵活性和可维护性。

在微服务架构中,Spring Cloud是一个非常流行的框架,它提供了开发和部署微服务应用所需的一整套工具和服务。本篇博文将详细介绍微服务架构的基本概念,以及如何利用Spring Cloud搭建微服务架构。

一、什么是微服务架构?

1.1 微服务架构的基本概念

微服务架构(Microservices Architecture)是一种将传统单体应用拆分成一组小型、独立服务的架构风格。每个服务围绕特定的业务功能进行设计,独立部署、独立运行,并且通过轻量级的通信机制(通常是HTTP或消息队列)与其他服务进行交互。微服务架构的核心思想是将单一的庞大应用拆分成多个小型的、独立的服务,这些服务可以通过API进行通信,互相协作。

在微服务架构中,每个服务通常都是独立的应用,拥有自己的数据存储和业务逻辑。这些服务可以使用不同的编程语言、不同的技术栈来实现,并且每个服务都可以单独部署和扩展。微服务架构有助于提升系统的灵活性、可扩展性和维护性。

微服务架构与单体架构的区别
  • 单体架构:在传统的单体架构中,整个应用程序通常构建成一个大而复杂的单一代码库。不同的模块和功能紧密耦合在一起,整个应用作为一个单独的单元进行部署和运行。随着业务增长和应用复杂度的增加,单体应用可能变得难以维护、扩展和部署。

  • 微服务架构:在微服务架构中,应用被拆分为多个小的服务,每个服务都拥有独立的代码库和数据库,彼此之间通过轻量级的协议进行通信。每个微服务通常围绕着一个特定的业务功能或领域来设计,因此它们通常能实现较为独立的开发、测试、部署和扩展。

1.2 微服务架构的特点

微服务架构与传统单体架构相比,具有以下显著特点:

1.2.1 服务独立性

每个微服务都是独立运行的单元,可以独立开发、部署、测试和升级。它们通常有自己独立的数据库和业务逻辑,因此不同的服务之间不会相互影响,改变一个服务的实现并不会影响其他服务的运行。这种独立性使得开发、测试和维护变得更加灵活。

1.2.2 业务驱动

微服务架构的设计是围绕着业务功能或业务领域来进行的。每个微服务通常对应着一个具体的业务领域,如用户管理、订单处理、支付处理等。每个微服务都能够专注于自己的业务逻辑,使得整个系统在业务处理上更加清晰和模块化。

1.2.3 去中心化的数据管理

在单体架构中,通常使用一个集中式的数据库来管理所有的数据,而微服务架构则采用去中心化的数据管理模式。每个微服务都有自己独立的数据库或数据存储方式,避免了单一数据库的性能瓶颈和数据一致性问题。每个服务可以根据自身的需求选择合适的存储技术(如关系型数据库、NoSQL等)。

1.2.4 技术异构性

微服务架构允许不同的服务使用不同的技术栈。例如,某些微服务可能使用Java语言和Spring Boot框架,而其他微服务可能使用Node.js、Go、Python等语言。微服务之间的通信通常使用HTTP、RESTful API、消息队列等协议,这使得服务之间的技术栈不再是系统的约束。

1.2.5 弹性和容错性

微服务架构使得每个服务都可以独立扩展,且由于服务间松散耦合,某个服务的失败不会影响到整个系统。为了增强系统的容错性,微服务架构通常会配合熔断器、重试机制等技术,确保服务即使在部分失败的情况下也能继续稳定运行。

1.2.6 自动化部署和持续集成

微服务架构通常与容器化技术(如Docker)和持续集成/持续部署(CI/CD)工具结合使用,使得开发、测试和部署的过程能够自动化。每个微服务都可以单独构建、测试和部署,提升了部署效率和发布的频率。

1.3 微服务架构的优缺点

优点
  1. 灵活性与可扩展性:每个微服务都可以独立扩展,随着流量和业务需求的增加,开发者可以只扩展高负载的服务,而不必扩展整个应用。
  2. 技术多样性:由于每个服务都可以使用不同的编程语言和技术栈,开发团队可以选择最适合的技术来实现特定的服务。
  3. 高可用性:微服务架构通过服务的拆分,能够避免单点故障的问题。即使某个服务出现故障,其他服务依然可以正常运行。
  4. 快速迭代:由于微服务能够独立部署和升级,开发团队可以更频繁地发布新版本,快速响应业务需求的变化。
缺点
  1. 复杂的分布式系统管理:微服务架构涉及到多个独立的服务,它们之间的通信、数据一致性等问题需要特别的设计和处理。分布式系统的管理和维护变得复杂。
  2. 跨服务通信成本:微服务之间通过网络进行通信,网络延迟和数据传输带来的性能开销不可忽视。尤其是频繁的跨服务调用可能影响整体性能。
  3. 数据一致性问题:由于微服务通常采用去中心化的数据库,每个服务的数据一致性问题变得更加复杂。需要采用分布式事务、事件驱动等技术来解决。
  4. 开发和运维复杂度增加:多个微服务的开发、部署、监控等都需要更加细致的管理。随着微服务数量的增加,系统的运维和监控难度也会增加。

1.4 微服务架构的组成

微服务架构通常包含以下几个主要组成部分:

1.4.1 服务注册与发现

在微服务架构中,各个服务是动态变化的。服务注册与发现机制使得服务能够在启动时自动注册到服务注册中心(如Eureka),并且其他服务能够动态地发现它们的位置,进行相互通信。

1.4.2 负载均衡

由于微服务的实例可以有多个,客户端调用某个服务时需要实现负载均衡。常见的负载均衡策略包括轮询、随机选择、权重等方式。Spring Cloud提供了Ribbon等负载均衡工具,能够在客户端实现负载均衡。

1.4.3 API网关

API网关是微服务架构中的一个重要组件,它充当了所有外部请求的入口。API网关负责请求路由、负载均衡、安全验证、流量控制等功能,简化了客户端与微服务之间的交互。Spring Cloud Gateway是一个流行的API网关解决方案。

1.4.4 配置管理

在微服务架构中,配置管理非常重要,因为每个服务都有自己独立的配置文件。Spring Cloud Config提供了集中化的配置管理,能够统一管理所有微服务的配置信息,并支持动态更新。

1.4.5 服务容错与熔断

微服务架构中的服务之间通常依赖于其他服务。如果某个服务出现故障,可能会导致其他服务的连锁反应。为了提高系统的容错能力,微服务架构常用熔断器模式(如Hystrix)来避免服务的故障扩散。

1.5 小结

微服务架构通过将单一的应用拆分成多个小型、独立的服务,能够提供更高的灵活性、可扩展性和可维护性。尽管微服务架构在技术上带来了许多挑战,如分布式事务、跨服务通信等问题,但它也为大规模系统提供了一种更加灵活和高效的解决方案。通过合理的架构设计和技术选型,微服务架构能够帮助企业更好地应对复杂业务需求和高并发的挑战。

二、Spring Cloud概述

Spring Cloud是Spring团队为了解决微服务架构中的各种复杂性而推出的一整套解决方案。它提供了一系列的工具和框架,旨在简化分布式系统的开发、部署和管理。通过Spring Cloud,开发者可以轻松地实现服务注册与发现、负载均衡、分布式配置管理、服务容错、API网关等功能,从而加速微服务的构建和交付。

2.1 Spring Cloud的核心组件

Spring Cloud涵盖多个子项目,每个子项目都关注于解决微服务架构中的不同方面。以下是Spring Cloud的一些核心组件及其功能:

2.1.1 Spring Cloud Eureka:服务注册与发现

Eureka是Spring Cloud Netflix提供的服务注册与发现组件。在微服务架构中,服务实例可能动态地变化,服务的注册与发现机制就显得尤为重要。Eureka Server充当服务注册中心,允许各个微服务在启动时向其注册,并在需要时查询其他服务的位置信息。

  • 服务注册:当微服务启动时,它会将自己注册到Eureka Server,包括服务名、URL、端口等信息。
  • 服务发现:其他微服务可以通过Eureka Server查询已注册的服务实例,以便进行调用。
  • 健康检查:Eureka Server定期检查服务实例的健康状态,确保只有健康的服务可用。
2.1.2 Spring Cloud Ribbon:客户端负载均衡

Ribbon是Spring Cloud Netflix提供的客户端负载均衡工具,可以在客户端实现对服务的自动负载均衡。微服务架构中,客户端通常需要调用多个服务实例,而Ribbon能够根据配置的负载均衡策略自动选择合适的服务实例进行请求。

  • 负载均衡策略:Ribbon支持多种负载均衡策略,包括轮询、随机、加权等,通过配置文件或注解可以轻松切换策略。
  • 与Eureka集成:当与Eureka结合使用时,Ribbon可以自动从Eureka获取可用的服务实例列表。
2.1.3 Spring Cloud Feign:声明式HTTP客户端

Feign是一个声明式的HTTP客户端,它使得编写HTTP请求变得更加简单。通过使用Feign,开发者可以定义一个接口,并使用注解指定请求的URL和请求方法,Feign会自动实现这个接口并发起HTTP请求。

  • 简化HTTP调用:Feign使得微服务之间的HTTP调用变得更加简洁,开发者无需编写底层的HTTP客户端代码。
  • 与Eureka集成:Feign可以与Eureka结合使用,通过服务名直接调用其他服务,而无需知道服务的具体地址。
@FeignClient(name = "service-provider")
public interface ServiceProviderClient {@GetMapping("/hello")String sayHello();
}

2.1.4 Spring Cloud Hystrix:熔断器

Hystrix是Spring Cloud Netflix提供的熔断器组件,用于处理微服务之间的失败,避免故障蔓延。Hystrix通过监控服务的健康状态,能够在服务调用失败时及时切断调用,提供降级服务,并防止系统崩溃。

  • 断路器模式:当一个服务的响应时间超过预设阈值或者失败率超过一定比例时,Hystrix会短路这个服务,从而避免继续调用,从而保护其他服务的正常运行。
  • 降级处理:Hystrix允许配置降级服务,当调用失败时,可以返回一个默认值或调用备用服务,提升系统的可用性。
@HystrixCommand(fallbackMethod = "fallback")
public String sayHello() {return restTemplate.getForObject("http://service-provider/hello", String.class);
}public String fallback() {return "服务暂时不可用,请稍后再试";
}

2.1.5 Spring Cloud Config:集中化配置管理

Spring Cloud Config提供了集中管理微服务配置的能力。微服务通常有多个配置文件,分散在不同的服务中,使用Spring Cloud Config可以将所有服务的配置集中管理,并支持动态更新。

  • 配置服务器:Spring Cloud Config Server负责提供配置文件,可以从本地文件系统、Git、SVN等多种源中读取配置。
  • 客户端集成:微服务可以通过Spring Cloud Config Client从配置服务器获取配置,实现动态更新,避免重启服务。
spring:cloud:config:uri: http://localhost:8888

2.1.6 Spring Cloud Gateway:API网关

Spring Cloud Gateway是一个用于构建API网关的框架,它提供了路由、负载均衡、安全、监控等功能。API网关充当微服务架构的入口点,负责处理所有外部请求。

  • 路由:Spring Cloud Gateway能够根据请求的URI、请求方法等信息,将请求路由到对应的微服务。
  • 过滤器:可以使用过滤器对请求和响应进行处理,如请求验证、日志记录、限流等。
  • 与Spring WebFlux集成:基于非阻塞的Spring WebFlux,Spring Cloud Gateway能够支持高并发的请求处理。
2.1.7 Spring Cloud Bus:消息总线

Spring Cloud Bus是一个轻量级的消息总线,用于在微服务之间传递消息和事件。它能够实现服务间的广播、配置更新等功能,简化了微服务之间的通信。

  • 事件传播:Spring Cloud Bus允许将事件传播到所有注册的微服务,触发相应的操作。
  • 集成消息中间件:支持RabbitMQ、Kafka等消息中间件,能够实现跨服务的消息传递。

2.2 Spring Cloud的使用场景

Spring Cloud适用于多种场景,尤其是在需要构建大规模、复杂业务系统时,Spring Cloud能够发挥其优势。以下是一些常见的使用场景:

  1. 微服务架构:当应用需要拆分成多个独立的服务时,Spring Cloud提供了完整的解决方案,帮助开发者实现服务注册、负载均衡和熔断等功能。

  2. 分布式系统:在分布式环境中,服务之间需要进行远程调用和数据共享,Spring Cloud能够提供服务发现和远程调用的支持。

  3. 动态配置管理:在需要频繁更新配置的场景中,Spring Cloud Config能够帮助开发者实现集中化的配置管理。

  4. API网关:当需要统一管理外部API的入口时,Spring Cloud Gateway可以提供路由、负载均衡和安全等功能。

2.3 小结

Spring Cloud是构建微服务架构的重要工具,它为开发者提供了一系列的组件,简化了分布式系统的开发和管理。通过使用Spring Cloud,开发者能够轻松实现服务注册与发现、负载均衡、熔断器、API网关等功能,提升系统的可用性和灵活性。在构建现代化的微服务应用时,Spring Cloud无疑是一个强大的助手,能够帮助团队快速响应业务需求的变化,提升开发和运维的效率。

三、Spring Cloud微服务架构示例

本章节将通过一个实际项目示例,带你一步一步构建一个基于 Spring Cloud 的微服务系统。该系统由多个服务组成,演示了服务注册与发现、服务通信、负载均衡、熔断降级、集中配置等核心功能的实现方式。

我们将以一个简单的“用户-订单”业务为背景,构建如下结构:

  • Eureka Server:服务注册中心
  • User Service:用户服务,提供用户信息
  • Order Service:订单服务,调用用户服务获取下单用户信息
  • Gateway:API 网关,统一对外接口入口
  • Config Server(可选):集中配置管理服务

3.1 技术选型与环境准备

  • JDK 11+
  • Spring Boot 2.7.x
  • Spring Cloud 2021.x
  • Maven 3.x
  • IDE:IntelliJ IDEA 或 VSCode
  • 工具:Postman、curl、或浏览器测试接口

3.2 项目结构说明

springcloud-demo/
├── eureka-server/        # 注册中心
├── user-service/         # 用户服务
├── order-service/        # 订单服务
├── api-gateway/          # 网关
└── config-server/        # 配置中心(可选)


3.3 创建服务注册中心(Eureka Server)

添加依赖(pom.xml
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

主类添加注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}

配置文件 application.yml
server:port: 8761spring:application:name: eureka-servereureka:client:register-with-eureka: falsefetch-registry: false

访问:http://localhost:8761 可看到 Eureka 控制台。


3.4 创建用户服务(User Service)

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

启动类
@SpringBootApplication
@EnableEurekaClient
@RestController
public class UserServiceApplication {@GetMapping("/user/{id}")public User getUser(@PathVariable Long id) {return new User(id, "用户" + id);}public static void main(String[] args) {SpringApplication.run(UserServiceApplication.class, args);}
}

配置文件
server:port: 8081spring:application:name: user-serviceeureka:client:service-url:defaultZone: http://localhost:8761/eureka


3.5 创建订单服务(Order Service)

订单服务通过 RestTemplate + RibbonFeign 远程调用用户服务。

添加依赖
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
</dependencies>

定义 Feign 客户端接口
@FeignClient("user-service")
public interface UserClient {@GetMapping("/user/{id}")User getUserById(@PathVariable("id") Long id);
}

Controller 示例
@RestController
@RequestMapping("/order")
public class OrderController {@Autowiredprivate UserClient userClient;@GetMapping("/{userId}")public Order createOrder(@PathVariable Long userId) {User user = userClient.getUserById(userId);return new Order(UUID.randomUUID().toString(), user, "商品A");}
}

配置文件
server:port: 8082spring:application:name: order-serviceeureka:client:service-url:defaultZone: http://localhost:8761/eurekafeign:client:config:default:connectTimeout: 2000readTimeout: 5000


3.6 创建API网关(Spring Cloud Gateway)

网关作为统一入口负责请求转发和权限验证。

添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

配置文件示例
server:port: 8888spring:application:name: api-gatewaycloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- Path=/user/**- id: order-serviceuri: lb://order-servicepredicates:- Path=/order/**eureka:client:service-url:defaultZone: http://localhost:8761/eureka


3.7 (可选)配置中心(Spring Cloud Config)

为多个服务集中管理配置。

启动 Config Server
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId>
</dependency>
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
配置文件
server:port: 8889spring:application:name: config-servercloud:config:server:git:uri: https://your-config-repo.git

各微服务通过以下配置从 Config Server 获取配置:

 
spring:cloud:config:uri: http://localhost:8889


3.8 启动顺序与测试流程

  1. 启动 eureka-server
  2. 启动 user-service
  3. 启动 order-service
  4. 启动 api-gateway
接口调用示例
  • 访问:http://localhost:8888/order/1
  • 网关会将请求转发至 order-service → order-service 调用 user-service → 返回完整订单数据。

3.9 小结

本章通过一个完整示例,展示了如何使用Spring Cloud构建微服务架构。从服务注册中心到服务通信,从网关统一入口到配置中心集中管理,每一部分都展示了Spring Cloud在微服务场景中的关键角色。通过这个结构清晰、职责分明的系统架构,我们可以轻松应对服务拆分、部署、扩展等挑战。

四、总结

在本篇博文中,我们详细介绍了微服务架构的基本概念和Spring Cloud组件。通过微服务架构,开发者能够将应用拆分成独立的服务,提升系统的灵活性、可扩展性和可维护性。Spring Cloud为开发者提供了全面的解决方案,包括服务发现、负载均衡、熔断器、配置管理等,让开发微服务变得更加简便。

随着微服务架构的不断发展,Spring Cloud也在不断演进,新的功能和工具将进一步简化微服务的开发和部署。希望通过本篇博文,能够帮助你深入理解Spring Cloud及其核心组件,提升在微服务领域的技术水平。

相关文章:

Java大师成长计划之第22天:Spring Cloud微服务架构

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 随着企业应用的不断扩展&#xff0c…...

为什么go语言中返回的指针类型,不需要用*取值(解引用),就可以直接赋值呢?

Go 中返回的是指针&#xff0c;但你却能直接用“.”访问字段&#xff0c;看起来像是“没有解引用”&#xff0c;其实是 Go 帮你自动处理了“指针解引用”的语法糖。 在 Go 中&#xff0c;如果你有一个结构体指针&#xff08;例如 *FileMeta&#xff09;&#xff0c;你可以直接…...

Java生成可控的Word表格功能开发

在日常办公自动化与系统集成场景中,生成结构化的Word文档已成为一种刚性需求,尤其是带有格式规范、内容动态填充的Word表格(Table)。本文将围绕如何利用Java开发一个可控的Word表格生成功能模块展开,涵盖技术选型、代码实现、边界控制与常见问题处理等方面,帮助开发者快速…...

OpenCV CUDA 模块中用于在 GPU 上计算矩阵中每个元素的绝对值或复数的模函数abs()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 void cv::cuda::abs(InputArray src, OutputArray dst, Stream &stream Stream::Null()) 是 OpenCV 的 CUDA 模块中的一个函数&#xff0c;…...

hadoop知识点

&#xff08;一&#xff09;复制和移动 1.复制文件 格式&#xff1a;cp源文件 目标文件 示例&#xff1a;把filel.txt复制一份得到file2.txt 2.复制目录 格式&#xff1a;cp-r源文件夹 目标文件夹 示例&#xff1a;把目标dir1复制一份得到dir2 3.重命名和移动 格式&#xff1a;…...

最短路与拓扑(2)

1、信使 #include<bits/stdc.h> using namespace std; const int N105; int n,m; int g[N][N]; int dist[N]; bool st[N]; const int INF0x3f3f3f3f;int dij(){memset(dist,0x3f,sizeof dist);dist[1]0;for(int i1;i<n;i){int t0;for(int j1;j<n;j){if(!st[j]&…...

LLaMA-Factory 微调 Qwen2-7B-Instruct

一、系统环境 使用的 autoDL 算力平台 1、下载基座模型 pip install -U huggingface_hub export HF_ENDPOINThttps://hf-mirror.com # &#xff08;可选&#xff09;配置 hf 国内镜像站huggingface-cli download --resume-download shenzhi-wang/Llama3-8B-Chinese-Chat -…...

濒危仙草的重生叙事:九仙尊米斛花节如何以雅集重构中医药文化IP

五月的霍山深处,层峦叠翠之间,中华仙草霍山米斛迎来一年一度的花期。九仙尊以“斛韵雅集,春野茶会”为主题,举办为期半月的米斛花文化节,融合中医药文化、东方美学与自然体验,打造一场跨越古今的沉浸式文化盛宴。活动涵盖古琴雅集、书法创作、茶道冥想、诗歌吟诵、民族歌舞等多…...

Pomelo知识框架

一、Pomelo 基础概念 Pomelo 简介 定位&#xff1a;分布式游戏服务器框架&#xff08;网易开源&#xff09;。 特点&#xff1a;高并发、可扩展、多进程架构、支持多种通信协议&#xff08;WebSocket、TCP等&#xff09;。 适用场景&#xff1a;MMO RPG、实时对战、社交游戏等…...

歌词滚动效果

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 设置标签页图标 --><link rel"shortcut icon&…...

python如何合并excel单元格

在Python中合并Excel单元格&#xff0c;常用openpyxl库实现。以下是详细步骤和示例代码&#xff1a; 方法一&#xff1a;使用 openpyxl 库 步骤说明&#xff1a; 安装库&#xff1a; pip install openpyxl导入库并加载文件&#xff1a; from openpyxl import load_workbook# …...

嵌入式学习笔记 D20 :单向链表的基本操作

单向链表的创建单向链表的插入单向链表的删除及清空单向链表的修改单向链表的查找单向链表的逆序 一、单向链表的创建 LinkList *CreateLinkList() {LinkList *ll malloc(sizeof(LinkList));if (NULL ll) {fprintf(stderr, "CreateLink malloc");return NULL;}ll…...

瀑布模型VS敏捷模型VS喷泉模型

​目录 ​​1. 瀑布模型(Waterfall Model)​​ ​​2. 敏捷模型(Agile Model)​​ ​​3. 喷泉模型(Fountain Model)​​...

Android usb网络共享详解

Android usb网络共享详解 文章目录 Android usb网络共享详解一、前言二、USB网络共享使用的前提1、Android设备支持adb 并且打开usb开关2、原生Settings能看到USB网络共享开关3、代码中检测USB网络共享是否支持 三、Settings 中USB网络共享代码的部分代码1、Settings\res\xml\t…...

在线黑白图像转换:简单却强大的视觉表达工具

为什么选择黑白图像&#xff1f; 在这个色彩缤纷的数字世界中&#xff0c;黑白摄影却始终保持着其独特的魅力。黑白图像消除了色彩的干扰&#xff0c;让我们更专注于构图、纹理和形式的表达。这种经典的转换技术能够创造出富有情感和强烈对比的视觉作品&#xff0c;呈现出彩色…...

python 异步执行测试

1. 并行执行机制 子进程级并行&#xff1a;通过 asyncio.create_subprocess_exec 启动的每个外部命令&#xff08;如 python run_spider.py&#xff09;会创建一个独立的系统进程&#xff0c;由操作系统直接调度&#xff0c;实现真正的并行执行。 协程级并发&#xff1a;主程序…...

《Python星球日记》 第69天:生成式模型(GPT 系列)

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、GPT简介&#xff1a;从架构到原理1. GPT的架构与工作原理2. Decoder-only结…...

STM32 之网口资源

1 网口资源介绍 STM32F407 是 STMicroelectronics 推出的高性能 ARM Cortex-M4 微控制器&#xff0c;具备多种外设接口&#xff0c;其中包括一个 Ethernet MAC 控制器&#xff08;带 IEEE 1588 支持&#xff09;。这意味着你可以使用 STM32F407 实现网络通信功能&#xff08;通…...

一分钟在Cherry Studio和VSCode集成火山引擎veimagex-mcp

MCP的出现打通了AI模型和外部数据库、网页API等资源&#xff0c;成倍提升工作效率。近期火山引擎团队推出了 MCP Server SDK&#xff1a; veimagex-mcp。本文介绍如何在Cherry Studio 和VSCode平台集成 veimagex-mcp。 什么是MCP MCP&#xff08;Model Context Protocol&…...

业务中台-典型技术栈选型(微服务、容器编排、分布式数据库、消息队列、服务监控、低代码等)

在企业数字化中台建设中&#xff0c;业务中台是核心支撑平台&#xff0c;旨在通过技术手段将企业核心业务能力抽象、标准化和复用&#xff0c;以快速响应前端业务需求。其核心技术流涉及从业务抽象到服务化、治理和持续优化的全流程。以下是业务中台建设中的核心技术体系及关键…...

图像颜色理论与数据挖掘应用的全景解析

文章目录 一、图像颜色系统的理论基础1.1 图像数字化的本质逻辑1.2 颜色空间的数学框架1.3 量化过程的技术原理 二、主要颜色空间的深度解析2.1 RGB颜色空间的加法原理2.2 HSV颜色空间的感知模型2.3 CMYK颜色空间的减色原理 三、图像几何属性与高级特征3.1 分辨率与像素密度的关…...

从规则驱动到深度学习:自然语言生成的进化之路

自然语言生成技术正经历着人类文明史上最剧烈的认知革命。这项起源于图灵测试的技术&#xff0c;已经从简单的符号操作演变为具备语义理解能力的智能系统。当我们回溯其发展历程&#xff0c;看到的不仅是算法模型的迭代更新&#xff0c;更是一部人类认知自我突破的史诗。这场革…...

影刀RPA网页自动化总结

1. 影刀RPA网页自动化概述 1.1 定义与核心功能 影刀RPA网页自动化是一种通过软件机器人模拟人类操作网页行为的技术&#xff0c;旨在提高网页操作效率、减少人工干预。其核心功能包括&#xff1a; 网页数据抓取&#xff1a;能够高效抓取网页上的数据&#xff0c;如电商数据、…...

[:, :, 1]和[:, :, 0] 的区别; `prompt_vector` 和 `embedding_matrix`的作用

prompt_vector = torch.sum(prompt_embedding * attention_weights.unsqueeze(-1), dim=1) # [1, hidden_dim] prompt_vector = torch.sum(prompt_embedding * attention_weights.unsqueeze(-1), dim=1) 主要作用是通过将 prompt_embedding 与 attention_weights 相乘后再按指…...

LeetCode 题解 41. 缺失的第一个正数

41. 缺失的第一个正数 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff1a;范围 [1,…...

3337. 字符串转换后的长度 II

3337. 字符串转换后的长度 II # 定义了一个大质数 MOD&#xff0c;用于取模运算&#xff0c;防止数值溢出。 MOD 1_000_000_007# 矩阵乘法 mul def mul(a:List[List[int]], b:List[List[int]]) -> List[List[int]]:# 输入两个矩阵 a 和 b&#xff0c;返回它们的矩阵乘积 a…...

基于 TensorFlow 框架的联邦学习可穿戴设备健康数据个性化健康管理平台研究

基于 TensorFlow 框架的联邦学习可穿戴设备健康数据个性化健康管理平台研究 摘要: 随着可穿戴设备的普及,人们对于自身健康管理的需求日益增长。然而,可穿戴设备所收集的健康数据往往分散在不同用户的设备中,且涉及用户隐私敏感信息。本研究旨在构建一个基于 TensorFlow 框…...

查看字节真实二进制形式示例解析1

查看字节的真实二进制形式&#xff1f; 若需要显式查看二进制0/1&#xff0c;可以通过以下方法转换&#xff1a; 方法1&#xff1a;逐字节转换为二进制字符串 def bytes_to_binary(data: bytes) -> str:return .join([bin(byte)[2:].zfill(8) for byte in data])# 示例 …...

hadoop中spark基本介绍

Spark是一个基于内存计算的快速、通用、可扩展的大数据处理引擎&#xff0c;可与Hadoop集成并在其生态系统中发挥重要作用。以下是其基本介绍&#xff1a; 特点 - 快速&#xff1a;基于内存计算&#xff0c;能将中间结果缓存在内存中&#xff0c;避免频繁读写磁盘&#xff0c;大…...

Apollo学习——键盘控制速度

# keyboard_control.py import time import keyboard # 键盘输入模块 pip install keyboard from getkey import getkey, keys from cyber.python.cyber_py3 import cyber_time from cyber.python.cyber_py3 import cyber from modules.common_msgs.control_msgs import contro…...

无人机数据处理与特征提取技术分析!

一、运行逻辑 1. 数据采集与预处理 多传感器融合&#xff1a;集成摄像头、LiDAR、IMU、GPS等传感器&#xff0c;通过硬件时间戳或PPS信号实现数据同步&#xff0c;确保时空一致性。 边缘预处理&#xff1a;在无人机端进行数据压缩&#xff08;如JPEG、H.265&#xff09;…...

Java内存马的检测与发现

【网络安全】Java内存马的检测与发现 一、Java内存马的现象二、检测思路三、重点关注类四、检测方法1. 检查方法&#xff08;FindShell&#xff09;2. 检查方法&#xff08;sa-jdi&#xff09;3. 检查方法&#xff08;arthas-boot&#xff09;4. 检查方法&#xff08;cop.jar&a…...

基于策略的强化学习方法之策略梯度(Policy Gradient)详解

在前文中&#xff0c;我们已经深入探讨了Q-Learning、SARSA、DQN这三种基于值函数的强化学习方法。这些方法通过学习状态值函数或动作值函数来做出决策&#xff0c;从而实现智能体与环境的交互。 策略梯度是一种强化学习算法&#xff0c;它直接对策略进行建模和优化&#xff0c…...

未来软件开发趋势与挑战

未来软件开发的方向将受到技术进步、市场需求和社会变革的多重影响。以下是可能主导行业发展的关键趋势&#xff1a; 1. AI与自动化深度整合 AI代码生成&#xff1a;GitHub Copilot等工具将进化成"AI开发伙伴"&#xff0c;能理解业务逻辑并自动生成完整模块。自修复…...

【vue】生命周期钩子使用

一、详解 created&#xff1a;实例化完成还没有渲染 mounted&#xff1a;渲染完成 二、应用 在created之后获取网络请求&#xff0c;封装成函数&#xff0c;在需要的地方直接调用函数...

【CTFShow】Web入门-信息搜集

Web1 好长时间没刷题了&#xff0c;第一眼看到的时候有点儿手足无措 在信息搜集中最常用的手段就是直接查看源代码&#xff0c;所以直接F12大法吧&#xff0c;果不其然拿到了flag Web2 题目给了提示js前台拦截 无效操作 打开题看到界面还是一脸茫然 坏了&#xff0c;这波貌似…...

Go 语言 net/http 包使用:HTTP 服务器、客户端与中间件

Go 语言标准库中的net/http包十分的优秀&#xff0c;提供了非常完善的 HTTP 客户端与服务端的实现&#xff0c;仅通过几行代码就可以搭建一个非常简单的 HTTP 服务器。几乎所有的 go 语言中的 web 框架&#xff0c;都是对已有的 http 包做的封装与修改&#xff0c;因此&#xf…...

YOLO v2:目标检测领域的全面性进化

引言 在YOLO v1取得巨大成功之后&#xff0c;Joseph Redmon等人在2016年提出了YOLO v2&#xff08;也称为YOLO9000&#xff09;&#xff0c;这是一个在准确率和速度上都取得显著提升的版本。YOLO v2不仅保持了v1的高速特性&#xff0c;还通过一系列创新技术大幅提高了检测精度…...

卓力达红外热成像靶标:革新军事训练与航空检测的关键技术

引言 红外热成像技术凭借其非接触、无辐射、全天候工作的特性&#xff0c;已成为现代军事和航空领域的重要工具。南通卓力达研发的**自发热红外热成像靶标**&#xff0c;通过创新设计与制造工艺&#xff0c;解决了传统训练器材的痛点&#xff0c;并在军事和航空应用中展现出显…...

【生产实践】Dolphinscheduler集群部署后Web控制台不能登录问题解决

太长不看版 问题描述&#xff1a; Dolphinscheduler按生产手册使用一键脚本集群部署后&#xff0c;控制台登录页面可以打开&#xff0c;但使用默认账户怎么都登录不进去&#xff0c;尝试在数据库中清理登录用户字段&#xff0c;发现数据库中并没有相关用户字段&#xff0c;而后…...

Shell和Bash介绍

Shell是硬件和软件之间的交互界面。Bash是一种shell&#xff0c;在Linux系统中比较常见。我目前使用的Mac用的Z shell(zsh). 可以在terminal里面通过zsh命令对系统进行操作。这是与Windows所见所得&#xff0c;用鼠标点相比&#xff0c;Mac和Linux都可以完全用命令操作。常用的…...

数据 分析

应用统计和计算方法,识别数据特征与规律. 1 分析方法 1.1 描述性分析 总结和呈现数据的基本特征;特点是简单直观. 1.1.1 集中趋势分析 ①均值:数据总和除以数据个数,反映数据的平均水平;特点是易受极端值影响;用于了解整体平均情况,例如计算班级学生平均成绩. ②中位数:将数…...

纯css实现蜂窝效果

<!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>蜂窝效果</title><style>body {margin: 0…...

用PyTorch在超大规模下训练深度学习模型:并行策略全解析

我猜咱们每个人肯定都累坏了&#xff0c;天天追着 LLM 研究社区跑&#xff0c;感觉每天都冒出个新的最牛模型&#xff0c;把之前的基准都给打破了呢。要是你好奇为啥创新速度能这么快&#xff0c;那主要就是研究人员能够在超大规模下训练和验证模型啦&#xff0c;这全靠并行计算…...

linux-进程信号捕捉

1. 信号捕捉流程 操作系统会在合适的时候处理信号&#xff0c;那这个合适的时候是什么时候呢&#xff1f;进程从内核态返回到用户态的时候。 假如用户程序注册了 SIGQUIT 信号的处理函数 sighandler。当程序正在执行 main 函数时&#xff0c;如果发生中断、异常或系统调用&…...

【免杀】C2免杀技术(三)shellcode加密

前言 shellcode加密是shellcode混淆的一种手段。shellcode混淆手段有多种&#xff1a;加密&#xff08;编码&#xff09;、偏移量混淆、UUID混淆、IPv4混淆、MAC混淆等。 随着杀毒软件的不断进化&#xff0c;其检测方式早已超越传统的静态特征分析。现代杀软往往会在受控的虚…...

人工智能驱动的临床路径体系化解决方案与实施路径

引言 临床路径管理作为现代医疗质量管理的重要工具,其核心在于通过标准化诊疗流程来提升医疗服务的规范性、一致性和效率。然而,传统临床路径管理面临路径设计僵化、执行依从性低、变异管理滞后等诸多挑战,亟需借助人工智能技术实现转型升级。本研究旨在探讨如何通过构建系…...

旋变信号数据转换卡 旋变解码模块 汽车永磁同步电机维修工具

旋变信号数据转换卡&#xff0c;是一款专门针对与永磁同步电机的旋变编码器和 BRX 型旋转变压器编码器进行旋变信号解码转换串行总线协议的专用转换卡。此款转换卡结合了专用的旋变信号解码芯片解码逻辑处理&#xff0c;解码信号分辨率高、线性度高、响应速度快。板卡采用工业级…...

RPM 包制作备查 SRPM 包编译

&#x1f308; 个人主页&#xff1a;Zfox_ 目录 &#x1f525; 前言 一&#xff1a;&#x1f525; 准备 二&#xff1a;&#x1f525; 制作 rpm 1.设置目录结构&#xff08;制作车间&#xff09;2. 源码放置到规划好的目录当中3. 创建一个spec文件&#xff0c;指挥如何使用这些…...

[学习] RTKLib详解:rtcm2.c、rtcm3.c、rtcm3e与rtcmn.c

RTKLib详解&#xff1a;rtcm2.c、rtcm3.c、rtcm3e与rtcmn.c 本文是 RTKLlib详解 系列文章的一篇&#xff0c;目前该系列文章还在持续总结写作中&#xff0c;以发表的如下&#xff0c;有兴趣的可以翻阅。 [学习] RTKlib详解&#xff1a;功能、工具与源码结构解析 [学习]RTKLib详…...