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

探索 Spring Cloud Gateway:构建微服务架构的关键一环

1. 简介

在当今的分布式系统中,微服务架构已经成为了一种流行的架构模式。在微服务架构中,服务被拆分为小型、可独立部署的服务单元,这些服务单元能够通过网络互相通信,形成一个整体的应用系统。然而,随着微服务数量的增加,管理和保护这些服务之间的通信变得愈发复杂。这就引入了微服务网关的概念。

微服务网关是一个位于客户端和微服务之间的服务,作为所有外部请求的入口,负责路由请求到相应的微服务,并提供一些额外的功能,如认证、安全、监控等。它帮助我们管理和控制微服务架构中的流量,提高了系统的安全性、可靠性和可维护性。

Spring Cloud Gateway 是一个基于Spring Boot的API网关服务,它提供了一种简单而有效的方式来管理微服务之间的通信。与传统的单体应用程序网关不同,Spring Cloud Gateway是一个轻量级的、高度可定制的网关解决方案,可以根据具体需求来扩展和定制。

在本系列教程中,我们将深入探讨如何使用Spring Cloud Gateway构建一个强大的微服务网关。我们将从概念和原理开始,逐步介绍如何配置和使用Spring Cloud Gateway来实现各种功能,如路由、过滤、负载均衡等。通过本系列教程,您将学会如何利用Spring Cloud Gateway来简化微服务架构的管理和维护,并提高系统的性能和安全性。

在接下来的章节中,我们将介绍如何准备工作环境,并开始创建我们的第一个Spring Cloud Gateway应用程序。


2. 准备工作

在开始构建基于Spring Cloud Gateway的微服务网关之前,确保您完成了以下准备工作:

2.1 Java 开发环境

首先,确保您的开发环境中已经安装了Java Development Kit (JDK)。Spring Cloud Gateway是一个基于Java的框架,因此您需要在本地环境中安装JDK。

您可以在Oracle官方网站或者OpenJDK项目网站下载并安装最新的JDK版本。安装完成后,通过在命令行中输入 java -version 来验证JDK是否成功安装。

2.2 Maven 或 Gradle

Spring Boot项目通常使用Maven或Gradle作为构建工具。确保您已经在系统中安装了Maven或Gradle,并且已经配置了相应的环境变量。

您可以在Maven官方网站或Gradle官方网站找到安装说明,并按照指示进行安装。

2.3 Spring Boot 知识

对于使用Spring Cloud Gateway构建微服务网关,对Spring Boot有一定的了解是非常有帮助的。确保您对Spring Boot框架的基本概念、注解和依赖关系有一定的了解。

如果您对Spring Boot还不太熟悉,可以通过阅读Spring Boot的官方文档或者完成一些相关的在线教程来提升您的技能水平。

2.4 IDE(集成开发环境)

选择一个适合您的集成开发环境(IDE),如IntelliJ IDEA、Eclipse或者VS Code等。这些IDE都对Java和Spring Boot提供了很好的支持,并且能够提高您的开发效率。

确保您的IDE已经正确安装和配置,并且您熟悉如何在其中创建和管理项目。

2.5 互联网连接

最后但同样重要的是,确保您的开发环境能够连接到互联网。在构建和配置Spring Cloud Gateway时,您可能需要下载依赖库、文档和示例代码,因此需要一个稳定的互联网连接。

确保您的网络连接稳定,并且可以顺畅地访问必要的资源。

通过完成以上准备工作,您就为开始构建基于Spring Cloud Gateway的微服务网关奠定了基础。接下来,我们将开始创建我们的第一个Spring Cloud Gateway项目。


3. 创建Spring Boot项目

在开始使用Spring Cloud Gateway构建微服务网关之前,首先需要创建一个基于Spring Boot的项目。在本节中,我们将演示如何使用Spring Initializr快速创建一个新的Spring Boot项目。

3.1 使用 Spring Initializr

Spring Initializr是一个官方提供的快速创建Spring Boot项目的工具。您可以访问https://start.spring.io/打开Spring Initializr网站。

3.2 配置项目

在Spring Initializr网站上,您需要提供一些基本信息来配置您的项目:

  • Project: 选择“Maven Project”或“Gradle Project”作为项目管理工具。
  • Language: 选择“Java”作为项目的开发语言。
  • Spring Boot: 选择最新的稳定版本。
  • Project Metadata: 输入您的项目的Group、Artifact、Name等信息。
  • Dependencies: 在这里选择要包含在项目中的依赖项。对于Spring Cloud Gateway项目,您至少需要选择“Spring Web”和“Spring Cloud Gateway”。

3.3 生成项目

在完成项目配置后,点击“Generate”按钮生成项目。Spring Initializr将会生成一个包含所选依赖项的项目压缩包,并提供下载链接。

3.4 导入项目

下载生成的项目压缩包并解压缩。然后,使用您选择的集成开发环境(IDE)导入项目。例如,在IntelliJ IDEA中,选择“File” -> “Open”并选择项目的根目录。

3.5 验证项目

导入项目后,确保项目能够成功构建并运行。您可以执行一些简单的测试,例如启动Spring Boot应用程序并访问默认端口(通常为8080)上的首页。

./mvnw spring-boot:run

在浏览器中访问 http://localhost:8080,如果看到Spring Boot的欢迎页面,则表示项目已成功运行。

3.6 创建控制器

为了进一步验证项目的正常运行,您可以创建一个简单的控制器类,并添加一些端点来处理HTTP请求。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello, Spring Boot!";}
}

3.7 测试控制器

重新运行应用程序,并访问 /hello 端点,您应该能够看到返回的 “Hello, Spring Boot!” 消息。

通过完成上述步骤,您已经成功创建了一个基于Spring Boot的项目,并验证了项目的正常运行。接下来,我们将开始配置Spring Cloud Gateway来构建微服务网关。


4. 配置Spring Cloud Gateway

在本节中,我们将详细介绍如何配置Spring Cloud Gateway来构建微服务网关。

4.1 添加依赖项

首先,在您的Spring Boot项目中的 pom.xml 文件(如果使用Maven)或 build.gradle 文件(如果使用Gradle)中添加Spring Cloud Gateway依赖项。您可以通过在这些文件中添加以下依赖项来引入Spring Cloud Gateway:

Maven:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
Gradle:
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'

4.2 创建网关配置类

接下来,您需要创建一个配置类来配置Spring Cloud Gateway。您可以创建一个Java类,并使用 @Configuration 注解标记它,以便Spring能够扫描并加载该类。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;@Configuration
public class GatewayConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes()// Add your routes here.build();}
}

在上面的示例中,我们创建了一个名为 GatewayConfig 的配置类,并定义了一个名为 customRouteLocator 的Bean。您可以在这个方法中使用 RouteLocatorBuilder 来定义路由规则。

4.3 配置路由规则

通过 RouteLocatorBuilder,您可以使用各种方法来定义路由规则。例如,您可以根据请求路径、HTTP方法、请求参数等条件来路由请求到不同的目标服务。

下面是一个简单的示例,将请求 /example 路径转发到 http://example.com 目标服务:

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("example_route", r -> r.path("/example").uri("http://example.com")).build();
}

4.4 其他配置选项

除了路由规则外,您还可以配置其他选项,如过滤器、重试机制、负载均衡等。Spring Cloud Gateway提供了丰富的配置选项,以满足不同场景下的需求。

您可以通过查阅官方文档或者参考示例代码来了解更多的配置选项。

4.5 高级配置

对于更复杂的配置需求,您可以创建多个配置类,并使用 @Primary 注解来指定主要的路由规则配置。您还可以使用外部配置文件(如 application.ymlapplication.properties)来配置网关的行为。

4.6 验证配置

完成配置后,重新启动您的Spring Boot应用程序,并使用定义的路由规则来测试Spring Cloud Gateway是否按预期工作。


5. 路由配置

在Spring Cloud Gateway中,路由配置是非常重要的,它定义了如何将传入的请求映射到相应的目标服务。在本节中,我们将详细介绍如何进行路由配置。

5.1 基本路由配置

您可以使用 RouteLocatorBuilder 来定义路由规则。最简单的路由规则是将请求的路径映射到目标服务的URL。

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("example_route", r -> r.path("/example").uri("http://example.com")).build();
}

在上面的示例中,我们创建了一个名为 example_route 的路由规则,将请求路径 /example 映射到目标服务 http://example.com

5.2 路径匹配

除了精确匹配路径之外,Spring Cloud Gateway还支持通配符和Ant风格的路径模式。您可以使用 * 来匹配任意路径片段,** 来匹配任意路径。

.route("example_route", r -> r.path("/example/**").uri("http://example.com"))

在上面的示例中,我们使用 ** 来匹配 /example 路径下的任意子路径。

5.3 请求方法匹配

您还可以根据HTTP请求的方法来进行路由配置。例如,您可以将GET请求路由到一个目标服务,将POST请求路由到另一个目标服务。

.route("get_route", r -> r.method(HttpMethod.GET).uri("http://example.com/get"))
.route("post_route", r -> r.method(HttpMethod.POST).uri("http://example.com/post"))

5.4 请求参数匹配

除了路径和请求方法之外,您还可以根据请求的参数来进行路由配置。例如,您可以根据请求参数的值来将请求路由到不同的目标服务。

.route("param_route", r -> r.queryParam("param", "value").uri("http://example.com"))

在上面的示例中,我们将带有参数 param=value 的请求路由到 http://example.com 目标服务。

5.5 组合路由规则

Spring Cloud Gateway允许您组合多个路由规则,并对它们进行优先级排序。您可以使用 and()or() 方法来组合不同的条件。

.route("combined_route", r -> r.path("/example").and().method(HttpMethod.GET).uri("http://example.com"))

在上面的示例中,我们组合了路径和请求方法的条件,只有当请求路径为 /example 且请求方法为GET时,才会将请求路由到目标服务。

5.6 动态路由配置

除了静态配置外,Spring Cloud Gateway还支持动态路由配置。您可以将路由规则配置存储在外部配置中心(如Spring Cloud Config)或数据库中,并在运行时动态加载和更新。

5.7 验证路由配置

完成路由配置后,重新启动您的Spring Boot应用程序,并使用定义的路由规则来测试Spring Cloud Gateway是否按预期工作。您可以使用curl或者Postman等工具发送各种类型的请求,并确保它们被正确地路由到相应的目标服务。


6. 过滤器配置

Spring Cloud Gateway的一个重要功能是允许您通过过滤器来处理传入和传出的请求。在本节中,我们将详细介绍如何配置和使用过滤器来实现各种功能,如身份验证、请求转发、日志记录等。

6.1 创建过滤器

要创建一个自定义过滤器,您需要实现 GatewayFilter 接口,并在其中编写过滤器的逻辑。下面是一个简单的例子,创建一个用于记录请求日志的过滤器:

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.GatewayFilterFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;@Component
public class LoggingFilter implements GatewayFilterFactory<Object> {@Overridepublic GatewayFilter apply(Object config) {return (exchange, chain) -> {// 执行前置过滤逻辑System.out.println("Request logged: " + exchange.getRequest().getURI());// 执行后置过滤逻辑return chain.filter(exchange);};}
}

在上面的示例中,我们实现了 GatewayFilterFactory 接口,并覆写了 apply() 方法来创建一个记录请求日志的过滤器。

6.2 注册过滤器

要使Spring Cloud Gateway识别和使用您的自定义过滤器,您需要将其注册为Spring Bean。您可以使用 @Component@Bean 注解来注册过滤器。

@Bean
public LoggingFilter loggingFilter() {return new LoggingFilter();
}

6.3 过滤器顺序

默认情况下,Spring Cloud Gateway会按照过滤器注册的顺序依次执行过滤器。您可以使用 @Order 注解来指定过滤器的执行顺序,数字越小,优先级越高。

import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;@Component
@Order(1)
public class FirstFilter implements GatewayFilterFactory<Object>, Ordered {// 过滤器逻辑...
}

6.4 过滤器链

Spring Cloud Gateway允许您创建一个过滤器链,将多个过滤器组合在一起,以便依次处理请求。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;@Component
public class GlobalLoggingFilter implements GlobalFilter {@Autowiredprivate LoggingFilter loggingFilter;@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 执行前置全局过滤逻辑System.out.println("Global filter executed.");// 调用下一个过滤器return loggingFilter.filter(exchange, chain);}
}

在上面的示例中,我们创建了一个全局过滤器,并注入了前面定义的 LoggingFilter 过滤器。然后在过滤器链中依次执行全局过滤器和自定义过滤器。

6.5 内置过滤器

除了自定义过滤器外,Spring Cloud Gateway还提供了许多内置过滤器,用于处理常见的场景,如请求重试、负载均衡、熔断、限流等。您可以在配置文件中使用内置过滤器来实现这些功能。

spring:cloud:gateway:routes:- id: retry_routeuri: http://example.compredicates:- Path=/example/**filters:- Retry=3,5,500

在上面的示例中,我们使用 Retry 过滤器来定义一个重试策略,最多重试3次,重试间隔为5秒,重试状态码为500。

6.6 验证过滤器配置

完成过滤器配置后,重新启动您的Spring Boot应用程序,并使用定义的过滤器来测试Spring Cloud Gateway是否按预期工作。您可以使用curl或者Postman等工具发送请求,并观察过滤器的输出以及请求的处理结果。


7. 启动网关服务

在完成了Spring Cloud Gateway的配置后,现在是时候启动网关服务并开始处理请求了。在本节中,我们将详细介绍如何启动Spring Boot应用程序以运行我们的网关服务。

7.1 启动应用程序

要启动Spring Boot应用程序,您只需在命令行中进入项目根目录,并执行以下命令:

./mvnw spring-boot:run

或者如果您使用的是Gradle:

./gradlew bootRun

这将启动应用程序,并开始监听默认端口(通常为8080)以接收传入的HTTP请求。

7.2 确认服务启动

当应用程序启动后,您应该能够在控制台看到类似以下的输出:

2024-05-15 14:30:15.572  INFO 12345 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2024-05-15 14:30:15.579  INFO 12345 --- [           main] c.e.s.SpringCloudGatewayApplication      : Started SpringCloudGatewayApplication in 3.212 seconds (JVM running for 3.559)

这表示应用程序已成功启动,并且Tomcat服务器正在监听8080端口。

7.3 访问网关服务

现在,您可以使用curl、Postman或您喜欢的任何HTTP客户端来发送请求,并验证Spring Cloud Gateway是否按预期工作。您可以将请求发送到网关服务的默认端口(通常为8080),并观察请求是否被正确地路由到相应的目标服务。

例如,如果您的路由配置将 /example 路径映射到了 http://example.com 目标服务,您可以通过访问 http://localhost:8080/example 来验证是否成功路由。

7.4 监控应用程序

除了验证请求路由之外,您还可以使用Actuator端点来监控和管理应用程序的运行状况。Spring Boot Actuator提供了许多内置的端点,用于查看应用程序的各种指标和状态。

您可以通过访问 http://localhost:8080/actuator 来查看所有可用的Actuator端点,并根据需要进行配置和使用。

7.5 管理应用程序

最后但同样重要的是,您可以使用Spring Boot Admin等管理工具来监控和管理您的应用程序。Spring Boot Admin提供了一个用户友好的Web界面,可以方便地查看和管理多个Spring Boot应用程序的状态和指标。

您可以通过在项目中集成Spring Boot Admin客户端,并在Spring Boot Admin服务器上注册您的应用程序来开始使用它。

7.6 日志记录和错误处理

在运行时,确保在控制台或日志文件中监控应用程序的日志输出。如果应用程序遇到任何错误或异常,及时处理并修复问题。


8. 测试网关服务

在构建和配置Spring Cloud Gateway后,测试是确保网关服务按预期工作的关键步骤之一。在本节中,我们将介绍如何使用curl和Postman等工具来测试网关服务,并验证其功能是否正确。

8.1 使用curl测试

curl是一个强大的命令行工具,用于发送各种类型的HTTP请求。您可以使用curl来模拟不同类型的请求,并验证网关服务的行为。

GET 请求
curl http://localhost:8080/example
POST 请求
curl -X POST http://localhost:8080/example -d "data=example"
携带请求头
curl -H "Content-Type: application/json" http://localhost:8080/example
携带请求参数
curl http://localhost:8080/example?param=value
其他HTTP方法

您可以使用 -X 参数来指定其他的HTTP方法,如PUT、DELETE等。

8.2 使用Postman测试

Postman是一个功能强大的图形化HTTP客户端,可以让您更轻松地创建和发送各种类型的HTTP请求,并查看请求和响应的详细信息。

发送GET请求

在Postman中创建一个新的请求,选择HTTP方法为GET,并指定URL为 http://localhost:8080/example,然后点击“发送”按钮来发送请求。

发送POST请求

在Postman中创建一个新的请求,选择HTTP方法为POST,并指定URL为 http://localhost:8080/example,然后在“Body”选项中输入请求体数据,并点击“发送”按钮来发送请求。

设置请求头和参数

在Postman中,您可以轻松地设置请求头和参数,并发送带有自定义头部和参数的请求。

8.3 验证响应

无论是使用curl还是Postman发送请求,都要确保正确地接收到了来自网关服务的响应,并且响应的内容和状态码符合预期。

8.4 监控日志

在进行测试时,还要密切关注网关服务的日志输出。通过查看日志,可以了解请求是如何被路由和处理的,并及时发现和解决潜在的问题。

8.5 测试不同场景

确保测试网关服务的不同路由规则和过滤器配置,以确保它们在各种场景下都能正确地工作。


结语

Spring Cloud Gateway是一个基于Spring Boot的API网关服务,它提供了一种简单而有效的方式来管理微服务架构中的通信。作为微服务架构的重要组成部分,网关服务扮演着连接客户端和微服务的关键角色。通过Spring Cloud Gateway,开发人员可以轻松地实现请求路由、过滤、负载均衡、熔断、重试等功能,从而提高了系统的性能、安全性和可维护性。Spring Cloud Gateway的灵活性和可扩展性使得它成为了许多企业和开发团队首选的微服务网关解决方案。随着微服务架构的不断发展和普及,Spring Cloud Gateway将继续扮演着重要的角色,为微服务架构的成功实施提供支持和保障。

相关文章:

探索 Spring Cloud Gateway:构建微服务架构的关键一环

1. 简介 在当今的分布式系统中&#xff0c;微服务架构已经成为了一种流行的架构模式。在微服务架构中&#xff0c;服务被拆分为小型、可独立部署的服务单元&#xff0c;这些服务单元能够通过网络互相通信&#xff0c;形成一个整体的应用系统。然而&#xff0c;随着微服务数量的…...

P1114 “非常男女”计划最优解

原题地址 P1114 “非常男女”计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码题解 AC代码&#xff08;1&#xff09; 因为用的是级的算法&#xff0c;所以最后一个 了&#xff0c;这里使用特判来得到的&#xff0c;给你们放一下代码&#xff1a; #include <bi…...

C++ | Leetcode C++题解之第187题重复的DNA序列

题目&#xff1a; 题解&#xff1a; class Solution {const int L 10;unordered_map<char, int> bin {{A, 0}, {C, 1}, {G, 2}, {T, 3}}; public:vector<string> findRepeatedDnaSequences(string s) {vector<string> ans;int n s.length();if (n < L…...

构建、标记和发布镜像

构建、标记和发布镜像 目录 构建镜像标记镜像发布镜像实践 设置构建镜像推送镜像 在本指南中&#xff0c;您将学习以下内容&#xff1a; 构建镜像&#xff1a;基于Dockerfile构建镜像的过程。标记镜像&#xff1a;为镜像命名的过程&#xff0c;这也决定了镜像的分发位置。发…...

[Go Web] Kratos 使用的简单总结

文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施&#xff0c;不限定于某种注册中心&#xff0c;或数据库ORM等&#xff0c;所以您可以十分轻松地将任意库集成进项目里&#xff0c;与Kratos共同运作。 API -&…...

首个实时 AI 视频生成技术发布;科大讯飞发布星火大模型 4.0 丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…...

什么是容器镜像

什么是容器镜像&#xff1f; 1. 容器镜像的两个重要原则 容器镜像是容器化应用程序的基础&#xff0c;它包含了运行应用程序所需的一切——代码、运行时、库和依赖项。理解容器镜像的两个重要原则非常重要&#xff1a; 不可变性&#xff1a;容器镜像一旦构建&#xff0c;就不…...

ElasticSearch-Windows系统ElasticSearch(ES)的下载及安装

前言 下载ElasticSearch 可以进入ElasticSearch官方下载地址&#xff0c;选择与电脑系统相对应的版本&#xff1b;博主已经上传资源&#xff0c;或者点此直接免费下载&#xff0c;本次演示版本为8.14.1。 注意&#xff1a; Elasticsearch 5 需要 Java 8 以上版本&#xff1b;…...

【应用开发二】GPIO操控(输出、输入、中断)

1 操控GPIO方式 控制目录&#xff1a;/sys/class/gpio /sys/class/gpio目录下文件如下图所示&#xff1a; 1.1 gpiochipX目录 功能&#xff1a;当前SoC所包含的所有GPIO控制器 i.mx6ull一共包含5个GPIO控制器&#xff0c;分别为GPIO1~5分别对应gpiochip0、gpiochip32、gpi…...

单点登录方法

一、父域cookie:两个有相同父域名的二级域名之间可以跨域传递cookie //注意该接口的地址也是baidu.com下属的二级域名:a.baidu.com //全部接口地址为:a.baidu.com/dev-api/system/ecdWeb/login。如果不是a.baidu.com那么根本带不过去 //其实可以理解为通过该方法将cookie传给…...

springboot集成JPA并配置hikariCP连接池问题解决

一、引入需要的依赖 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-parent</artifactId><version>2.3.2.RELEASE</version><relativePath/></parent> jpa依赖 <!--…...

vue2的双向绑定

vue是一个mvvm框架&#xff0c;即数据双向绑定&#xff0c;即当数据发生变化的时候&#xff0c;视图也就发生变化&#xff0c;当视图发生变化的时候&#xff0c;数据也会跟着同步变化。 Vue.js 2 中的双向绑定是通过 v-model 指令实现的。v-model 指令可以在表单输入元素上创建…...

Vue3 国际化i18n

国际化i18n方案 1. 什么是i18n2. i18n安装、配置及使用2.1 安装2.2 配置2.3 挂载到实例2.4 组件中使用2.5 语言切换 1. 什么是i18n i18n 是“国际化”的简称。在资讯领域&#xff0c;国际化(i18n)指让产品&#xff08;出版物&#xff0c;软件&#xff0c;硬件等&#xff09;无…...

算法金 | 使用随机森林获取特征重要性

大侠幸会幸会&#xff0c;我是日更万日 算法金&#xff1b;0 基础跨行转算法&#xff0c;国内外多个算法比赛 Top&#xff1b;放弃 BAT Offer&#xff0c;成功上岸 AI 研究院 Leader&#xff1b; <随机森林及其应用领域> 随机森林是一种强大的机器学习算法&#xff0c;其…...

网络安全的重要性

网络安全的重要性 网络安全是指保护网络系统免受未授权的访问、攻击、破坏或未经授权的数据泄露的能力。随着互联网的普及和数字化进程的加速&#xff0c;网络安全问题日益凸显&#xff0c;成为个人、企业和国家必须面对的重要挑战。 网络安全的威胁 网络安全威胁包括黑客攻…...

Leetcode40 无重复组合之和

题目描述&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 思路分析 这个题是…...

详解MATLAB中处理日期和时间的函数

在MATLAB中处理日期和时间时&#xff0c;可以使用多种函数来进行计时和时间差计算。以下是对一些常用函数的详细解释&#xff1a; 1. tic 和 toc 用途&#xff1a;用来测量一段代码执行的时间。用法&#xff1a;tic; % 启动秒表 % 你的代码 elapsedTime toc; % 停止秒表&…...

Java养老护理助浴陪诊小程序APP源码

&#x1f496;护理助浴陪诊小程序&#x1f496; 一、引言&#xff1a;养老新趋势&#x1f331; 在快节奏的现代生活中&#xff0c;养老问题逐渐成为了社会关注的焦点。如何为老年人提供便捷、贴心的服务&#xff0c;让他们晚年生活更加安心、舒适&#xff0c;是我们每个人都需…...

go的singleFlight学习

Package singleflight provides a duplicate function call suppression mechanism “golang.org/x/sync/singleflight” 原来底层是 waitGroup&#xff0c;我还以为等待的协程主动让出 cpu 了&#xff0c;没想到 waitGroup.Wait() 阻塞了 doCall 不但返回值是 func 的 val 和…...

高电压技术-冲击高压发生器MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 冲击电压发生器是产生冲击电压波的装置&#xff0c;用于检验电力设备耐受大气过电压和操作过电压的绝缘性能&#xff0c;冲击电压发生器能产生标准雷电冲击电压波形&#xff0c;雷电冲击电压截波,标准操作冲击…...

【STM32】SysTick系统滴答定时器

1.SysTick简介 CM4内核的处理和CM3一样&#xff0c;内部都包含了一个SysTick定时器&#xff0c;SysTick 是一个24 位的倒计数定时器&#xff0c;当计到0 时 &#xff0c;将 从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除&#xf…...

编码遵循五大设计原则创建出更加健壮、可维护和可扩展的软件系统

一、单一职责原则&#xff08;SRP&#xff09; * 定义&#xff1a;一个类应该只有一个引起它变化的原因。 * 解释&#xff1a;意味着一个类应该专注于做一件事情&#xff0c;当需求发生变化时&#xff0c;只影响到一个类。这有助于降低类间的耦合&#xff0c;使得代码更易于理…...

记录一个问题

问题描述 如果一个物料既在A总成零件号下计算为托盘库&#xff0c;在B总成零件号下计算为箱库&#xff0c;则放于箱库。 A中选择排名第21的递补进托盘库。&#xff08;也需要判断递补的是否在其他总成零件中为箱库&#xff0c;是的话继续递补判断&#xff09; 解决思路 为了…...

ONLYOFFICE 8.1版本桌面编辑器测评:重塑办公效率的巅峰之作

在数字化办公日益普及的今天&#xff0c;一款高效、便捷且功能强大的桌面编辑器成为了职场人士不可或缺的工具。ONLYOFFICE 8.1版本桌面编辑器凭借其卓越的性能和丰富的功能&#xff0c;成功吸引了众多用户的目光。今天&#xff0c;我们将对ONLYOFFICE 8.1版本桌面编辑器进行全…...

【shell脚本速成】python安装脚本

文章目录 案例需求应用场景解决问题脚本思路案例代码 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻&#xff0c;都沐…...

Redis报错:MISCONF Redis is configured to save RDB snapshots

错误提示内容&#xff1a; 2024-06-25 16:30:49 : Connection: Redis_Server > [runCommand] PING 2024-06-25 16:30:49 : Connection: Redis_Server > Response received : -MISCONF Redis is configured to save RDB snapshots, but it is currently not able to pers…...

关于使用绿联 USB-A转RJ45 2.5G网卡提速的解决问题

问题 网络下载速率低 网线是七类网线&#xff0c;外接的USB网卡驱动 我的自带网卡是 I219v 在嵌入了2.5G网络后一直无法到达1.5G以上。 平均测速300~500M 解决方案 更新了USB的网卡驱动 禁用了 I219-V的驱动。测速即可 USB驱动下载地址 https://download.csdn.net/downlo…...

Qt: QPushButton 按钮实现 上图标下文字

效果如下&#xff1a; 实现有如下几种方式&#xff1a; 1. 使用 QPushButton 设置 setStyleSheet 例&#xff1a; ui->recorder->setStyleSheet("QPushButton{"\"border: 1px solid #00d2ff; "\"min-height: 60px; "\"col…...

使用阿里云效API操作流水线

使用阿里云效&#xff08;Alibaba Cloud DevOps&#xff09;API操作流水线时&#xff0c;需要注意以下几个方面&#xff1a; 认证与授权 确保你已经获取了正确的访问凭证&#xff08;AccessKey ID 和 AccessKey Secret&#xff09;&#xff0c;并且这些凭证具有足够的权限来执行…...

使用命令行创建uniapp+TS项目,使用vscode编辑器

一:如果没有pnpm,先安装pnpm 二:使用npx工具和degit工具从 GitHub 上的 dcloudio/uni-preset-vue 仓库克隆一个名为 vite-ts 的分支,到项目中. 执行完上面命令后,去manifest.json添加appid(自己微信小程序的Id),也可不执行直接下一步,执行pnpm install ,再执行pnpm:dev:mp-weix…...