03-Spring Cloud Gateway 深度解析:从核心原理到生产级网关实践
Spring Cloud Gateway 深度解析:从核心原理到生产级网关实践
一、网关技术演进与 Spring Cloud Gateway 定位
1. 微服务网关的核心价值
作为微服务架构的流量入口,网关承担着 路由转发、流量治理、安全防护 三大核心职能:
- 统一接入:对外暴露唯一入口,隐藏内部微服务节点细节(如端口、IP)
- 流量管控:实现负载均衡、限流熔断、灰度发布等高级流量策略
- 安全屏障:集中处理 JWT 认证、请求签名、防 SQL 注入等安全逻辑
- 功能聚合:整合跨服务的通用逻辑(如日志记录、响应压缩、参数校验)
2. 从 Zuul 到 Spring Cloud Gateway 的技术升级
特性 | Zuul 1.x | Zuul 2.x(未广泛落地) | Spring Cloud Gateway |
---|---|---|---|
架构模型 | 同步阻塞(Servlet 2.5) | 异步非阻塞(Netty) | 响应式(Spring WebFlux) |
性能优势 | 单线程模型,高并发下性能瓶颈明显 | 支持异步 IO,性能提升 30%+ | 基于 Reactor 模型,吞吐量更高 |
生态整合 | 依赖 Netflix 自有组件 | 与 Spring 生态兼容较弱 | 深度整合 Spring Boot/Spring Cloud |
扩展性 | 基于 Filter 链,扩展性有限 | 支持插件化开发 | 灵活的 GatewayFilter 工厂与自定义过滤器 |
3. Spring Cloud Gateway 核心优势
- 响应式架构:基于 Reactor 模式实现非阻塞 IO,支持百万级并发连接
- 动态路由:支持从 Nacos/Redis/ 数据库动态加载路由规则,无需重启服务
- 丰富的过滤器生态:内置 30 + 开箱即用的过滤器(如限流、重试、熔断),支持自定义扩展
- 多协议支持:除 HTTP/HTTPS 外,通过 WebClient 支持 WebSocket、gRPC 协议转换
二、核心架构与关键组件解析
1. 架构分层设计
2. 核心组件功能拆解
(1)路由配置(Route)
-
三要素:
id
:路由唯一标识(如user-service-route
)uri
:下游目标地址(支持lb://service-name
服务发现模式)predicate
:路由匹配条件(如 Path、Query、Header 等断言)
-
静态路由(application.yml):
spring: cloud: gateway: routes: - id: order_service uri: lb://order-service predicates: - Path=/api/order/** filters: - StripPrefix=1 # 去除第一个路径前缀
-
动态路由:通过实现
RouteDefinitionLocator
接口从 Nacos 获取路由规则(见实战案例)
(2)断言工厂(Predicate Factory)
常用断言示例:
断言类型 | 配置示例 | 功能描述 |
---|---|---|
Path | - Path=/user/{id} | 匹配以/user/ 开头的 URL 路径 |
Query | - Query=name,^\\w+ | 要求请求包含name 参数且为字母开头 |
Header | - Header=X-Request-ID, \\d+ | 要求请求头包含X-Request-ID 且为数字 |
Cookie | - Cookie=JSESSIONID, [a-z]+ | 要求请求包含指定 Cookie |
Weight | - Weight=group=user, weight=80 | 按权重分流(配合负载均衡使用) |
(3)过滤器链(Filter Chain)
- 生命周期:
- 预处理阶段:修改请求参数(如添加 Header、重写 URL)
- 路由转发:通过
WebClient
调用下游服务 - 后处理阶段:修改响应结果(如响应体加密、添加全局响应头)
- 内置过滤器:
Retry
:失败重试(支持配置重试次数、异常类型)Hystrix
:集成 Hystrix 熔断(需引入spring-cloud-starter-netflix-hystrix
)RequestRateLimiter
:基于 Redis 的请求限流(需实现KeyResolver
)
三、实战案例:构建高性能微服务网关
1. 环境准备
- 技术栈:Spring Boot 3.2.0 + Spring Cloud Gateway 4.0.2 + Nacos 2.3.1
- 目标:实现动态路由(从 Nacos 获取路由规则)+ 自定义限流过滤器 + 全局异常处理
2. 动态路由实现(集成 Nacos)
(1)Nacos 数据模型设计
在 Nacos 配置中心创建gateway-routes.json
,存储路由定义:
[ { "id": "product-service", "uri": "lb://product-service", "predicates": ["Path=/api/product/**"], "filters": ["StripPrefix=1", "RequestRateLimiter=10,20"] }
]
(2)网关动态加载逻辑
// NacosRouteDefinitionLocator.java
@Configuration
public class NacosRouteLocator { @Autowired private NacosConfigManager configManager; @Bean public RouteDefinitionLocator routeDefinitionLocator() { return () -> { String config = configManager.getConfigService().getConfig("gateway-routes", "DEFAULT_GROUP", 5000); return JSON.parseArray(config, RouteDefinition.class); }; }
}
3. 自定义限流过滤器
(1)基于 Redis 的令牌桶算法实现
// RedisRateLimiterFilter.java
public class RedisRateLimiterFilter implements GlobalFilter, Ordered { private final RedisTemplate<String, Long> redisTemplate; private final KeyResolver keyResolver; @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { String key = keyResolver.resolve(exchange).block(); String redisKey = "rate_limit:" + key; Long count = redisTemplate.opsForValue().increment(redisKey, 1); if (count == 1) { redisTemplate.expire(redisKey, 60, TimeUnit.SECONDS); // 令牌桶有效期60秒 } if (count > 10) { // 限制每秒最多10次请求 return exchange.getResponse().setComplete(); } return chain.filter(exchange); } @Override public int getOrder() { return Ordered.HIGHEST_PRECEDENCE; // 保证限流过滤器优先执行 }
}
(2)配置过滤器链
spring: cloud: gateway: default-filters: - name: RedisRateLimiterFilter args: keyResolver: "#{@ipKeyResolver}" # 按客户端IP限流
4. 全局异常处理
// GatewayExceptionHandler.java
@Bean
public GlobalErrorWebExceptionHandler errorWebExceptionHandler() { return new GlobalErrorWebExceptionHandler() { @Override protected Mono<ServerWebExchange> handleException(ServerWebExchange exchange, Throwable ex) { HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR; if (ex instanceof RouteNotFoundException) { status = HttpStatus.NOT_FOUND; } String errorMessage = "Gateway error: " + ex.getMessage(); return exchange.getResponse().writeWith( Mono.just(exchange.getResponse().bufferFactory().wrap(errorMessage.getBytes())) ); } };
}
四、生产环境优化策略
1. 性能优化最佳实践
(1)连接池配置
# 配置WebClient连接池
spring: cloud: gateway: httpclient: pool: max-connections: 2000 # 最大连接数 max-pending-connections: 500 # 等待队列大小 connection-timeout: 1000ms # 连接超时时间
(2)响应式编程优化
-
使用
Mono/Flux
避免阻塞操作,例如:// 非阻塞式获取用户认证信息 Mono<User> userMono = webClient.get() .uri("/auth/me") .retrieve() .bodyToMono(User.class);
2. 安全防护体系设计
(1)JWT 认证流程
-
客户端携带 JWT 令牌在
Authorization
头中 -
网关通过
ReactiveJwtDecoder
解析令牌:// Security配置 http.cors().and().authorizeExchange() .pathMatchers("/public/**").permitAll() .anyExchange().authenticated() .and().oauth2ResourceServer(ReactiveOAuth2ResourceServerConfigurer::jwt);
(2)防恶意请求
-
配置请求体大小限制:
spring: cloud: gateway: default-filters: - RequestSize=5MB # 限制最大请求体为5MB
-
拦截恶意 URL(如包含
../
路径穿越攻击):.predicate(exchange -> !exchange.getRequest().getURI().getPath().contains("../"))
3. 可观测性建设
(1)Metrics 监控
// 自定义指标埋点
MeterRegistry meterRegistry;
Counter requestCounter = Counter.builder("gateway.requests") .description("Total requests processed by gateway") .tag("route", routeId) .register(meterRegistry);
(2)分布式链路追踪
集成 SkyWalking
或 aeger
,在请求头中传递 Trace ID
:
// 自定义过滤器添加Trace ID
String traceId = UUID.randomUUID().toString();
exchange.getRequest().mutate().header("X-Trace-ID", traceId).build();
五、常见问题与解决方案
1. 跨域问题处理
# 全局跨域配置
spring: cloud: gateway: globalcors: cors-configurations: '[/**]': allowed-origins: "*" allowed-methods: "*" allowed-headers: "*" allow-credentials: true
2. 动态路由不生效
- 检查 Nacos 配置是否正确加载(打印
RouteDefinitionLocator
返回值) - 确保路由断言语法正确(使用
Spring Cloud Gateway
提供的测试工具) - 清理网关缓存(默认缓存 30 秒,可通过
spring.cloud.gateway.route.locator.cache.time-to-live
调整)
3. 性能瓶颈定位
- 使用
VisualVM
或Micrometer
监控网关线程池状态 - 通过
WebClient
的exchangeToFlux
追踪下游服务调用延迟 - 压测工具推荐:
JMeter
(模拟万级并发)、Gatling
(响应式压测)
六、与 Kong 网关对比分析
Kong 是一个开源的、轻量级的 API 网关和微服务管理平台,它基于 Nginx 和 OpenResty >构建,使用 Lua 语言进行扩展开发。Kong 具有高度可扩展性,支持多种插件,可用于身份验><证、限流、日志记录等功能。同时,Kong 也提供了企业版,为企业用户提供更高级的功能和支> 持。
1、架构设计
1.1 Spring Cloud Gateway
Spring Cloud Gateway 采用响应式架构,基于 Reactor 模型实现非阻塞 IO,能够处理大量并发请求。其核心组件包括路由(Route)、断言(Predicate)和过滤器(Filter)。路由定义了请求的转发规则,断言用于匹配请求,过滤器则可以在请求处理的前后进行拦截和处理。
1.2 Kong
Kong 的架构分为控制平面和数据平面。控制平面负责管理和配置 Kong 节点,数据平面则负责实际的请求处理和转发。Kong 通过 Nginx 处理请求,利用 OpenResty 的 Lua 模块实现插件机制,插件可以灵活地扩展 Kong 的功能。
1.3 对比总结
- Spring Cloud Gateway 的响应式架构使其在处理高并发请求时具有较好的性能,并且与 Spring Cloud 生态的集成更加紧密,适合基于 Spring Boot 和 Spring Cloud 构建的微服务项目。
- Kong 的架构设计使得它具有较高的灵活性和可扩展性,通过插件机制可以方便地添加各种功能,适用于不同技术栈的微服务架构。
2、功能特性
2.1 路由功能
2.1.1 Spring Cloud Gateway
Spring Cloud Gateway 支持多种路由断言方式,如路径匹配、请求参数匹配、请求头匹配等。可以通过配置文件或 Java 代码来定义路由规则,并且支持动态路由配置,能够从配置中心(如 Nacos、Eureka 等)动态加载路由信息。
以下是一个简单的 Spring Cloud Gateway 路由配置示例:
spring:cloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- Path=/user/**
2.1.2 Kong
Kong 同样支持丰富的路由配置,包括基于路径、主机名、请求方法等的匹配规则。可以通过 RESTful API 或管理控制台来配置和管理路由,并且支持动态路由更新。
以下是一个使用 Kong API 创建路由的示例:
curl -i -X POST http://localhost:8001/services/user-service/routes \--data 'paths[]=/user' \--data 'strip_path=false'
2.1.3 对比总结
两者都提供了强大的路由功能,并且支持动态路由配置。Spring Cloud Gateway 在 Spring Cloud 生态中配置更加便捷,而 Kong 通过 RESTful API 和管理控制台提供了更直观的路由管理方式。
2.2 过滤器功能
2.2.1 Spring Cloud Gateway
Spring Cloud Gateway 内置了许多常用的过滤器,如请求重试、熔断、限流等。同时,也支持自定义过滤器,可以根据业务需求实现特定的过滤逻辑。
以下是一个自定义 Spring Cloud Gateway 过滤器的示例:
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;@Component
public class CustomFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest().mutate().header("X-Custom-Header", "Custom Value").build();return chain.filter(exchange.mutate().request(request).build());}@Overridepublic int getOrder() {return Ordered.HIGHEST_PRECEDENCE;}
}
2.2.2 Kong
Kong 通过插件机制实现过滤器功能,社区提供了大量的插件,涵盖了身份验证、限流、日志记录、缓存等多个方面。同时,也可以根据需求开发自定义插件。
以下是一个使用 Kong 插件进行限流的示例:
curl -X POST http://localhost:8001/services/user-service/plugins \--data "name=rate-limiting" \--data "config.minute=100"
2.2.3 对比总结
Spring Cloud Gateway 的过滤器通过 Java 代码实现,对于熟悉 Spring 框架的开发者来说易于理解和扩展。Kong 的插件机制则提供了更丰富的功能选项,并且可以通过简单的配置来启用和管理插件。
2.3 安全功能
2.3.1 Spring Cloud Gateway
Spring Cloud Gateway 可以与 Spring Security 集成,实现基于 OAuth2、JWT 等的身份验证和授权功能。同时,也可以通过自定义过滤器来实现一些安全防护措施,如防止 SQL 注入、XSS 攻击等。
2.3.2 Kong
Kong 提供了多种安全插件,如 Key Auth、OAuth2、JWT 等,用于实现身份验证和授权。此外,还可以通过 IP 限制、请求体大小限制等方式来增强安全性。
2.3.3 对比总结
两者都能满足常见的安全需求。Spring Cloud Gateway 在与 Spring Security 集成方面具有天然优势,适合 Spring Cloud 项目的安全配置。Kong 则通过丰富的插件提供了更灵活的安全解决方案。
2.4 监控与日志
2.4.1 Spring Cloud Gateway
Spring Cloud Gateway 可以与 Spring Boot Actuator 集成,提供一些基本的监控指标,如请求响应时间、请求吞吐量等。同时,也可以结合 ELK Stack 等日志管理工具进行日志收集和分析。
2.4.2 Kong
Kong 提供了日志插件,支持将请求日志记录到文件、数据库、Elasticsearch 等。此外,Kong Enterprise 还提供了更高级的监控和分析功能,如实时指标监控、可视化报表等。
2.4.3 对比总结
Spring Cloud Gateway 的监控和日志功能主要依赖于 Spring 生态的工具,对于已经使用 Spring Boot 和 Spring Cloud 的项目来说集成较为方便。Kong 则提供了更丰富的日志记录和监控选项,尤其是 Kong Enterprise 版。
3、性能表现
3.1 并发处理能力
Spring Cloud Gateway 的响应式架构使其在处理大量并发请求时具有较好的性能,能够充分利用系统资源。Kong 基于 Nginx 和 OpenResty,同样具有出色的并发处理能力,能够应对高流量的场景。
3.2 响应时间
两者在正常情况下的响应时间都比较短,但具体的响应时间还受到多种因素的影响,如服务器配置、请求复杂度等。
3.3 性能优化
Spring Cloud Gateway 可以通过调整线程池配置、优化过滤器逻辑等方式进行性能优化。Kong 可以通过调整 Nginx 和 OpenResty 的配置参数、合理使用缓存等方式来提高性能。
3.4 对比总结
在性能方面,两者都能够满足大多数微服务项目的需求。Spring Cloud Gateway 在响应式编程方面具有优势,而 Kong 在 Nginx 的基础上进行了优化,性能表现也十分出色。
4、扩展性
4.1 Spring Cloud Gateway
Spring Cloud Gateway 通过自定义过滤器和路由断言工厂来实现扩展,开发者可以使用 Java 代码编写自定义逻辑。同时,由于其基于 Spring 框架,也可以方便地集成其他 Spring Cloud 组件。
4.2 Kong
Kong 的插件机制提供了高度的扩展性,开发者可以使用 Lua 语言编写自定义插件。此外,Kong 还支持与其他系统集成,如数据库、消息队列等。
4.3 对比总结
Spring Cloud Gateway 的扩展性主要依赖于 Java 代码和 Spring 生态,适合 Java 开发者进行扩展。Kong 的插件机制则更加灵活,支持多种编程语言,并且可以方便地集成第三方系统。
5、使用场景
5.1 Spring Cloud Gateway
- 适用于基于 Spring Boot 和 Spring Cloud 构建的微服务项目,能够与 Spring Cloud 生态中的其他组件无缝集成。
- 对于熟悉 Java 和 Spring 框架的开发者来说,使用 Spring Cloud Gateway 可以更方便地进行开发和维护。
5.2 Kong
- 适用于不同技术栈的微服务架构,通过插件机制可以灵活地扩展功能。
- 对于需要快速搭建网关并添加各种功能的项目,Kong 的丰富插件和简单配置方式具有很大优势。
6、总结
Spring Cloud Gateway 和 Kong 都是优秀的网关产品,它们在架构设计、功能特性、性能表现、扩展性和使用场景等方面各有优劣。在选择网关时,需要根据项目的具体需求、技术栈和团队的开发能力等因素进行综合考虑。如果项目基于 Spring Cloud 生态,那么 Spring Cloud Gateway 可能是更好的选择;如果需要更灵活的扩展性和丰富的插件功能,Kong 则更适合。
七、未来趋势:网关与服务网格的融合
1. 服务网格中的网关角色
- 入口网关:处理南北向流量(外部客户端与内部服务通信)
- 边车代理:处理东西向流量(内部服务间通信,如 Istio 的 Envoy Proxy)
2. Kubernetes Gateway API 支持
Spring Cloud Gateway 4.0 + 开始支持 Kubernetes Gateway API 标准,实现与 K8s 原生流量管理的无缝对接:
# Gateway API资源定义示例
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata: name: product-route
spec: parentRefs: - name: gateway rules: - matches: - path: type: PathPrefix value: /api/product forwardTo: - serviceName: product-service port: { number: 8080 }
总结
Spring Cloud Gateway 凭借 响应式架构、动态路由能力 和 强大的扩展性,成为微服务网关的首选方案。在实际落地中,需结合业务场景合理设计路由策略、流量管控与安全机制,同时关注性能优化与可观测性建设。随着云原生技术的发展,网关正从单一的流量转发工具,演进为支撑全链路治理的核心枢纽。理解其设计原理并掌握实战技巧,能帮助开发者高效构建稳定、高性能的微服务入口层。
相关文章:
03-Spring Cloud Gateway 深度解析:从核心原理到生产级网关实践
Spring Cloud Gateway 深度解析:从核心原理到生产级网关实践 一、网关技术演进与 Spring Cloud Gateway 定位 1. 微服务网关的核心价值 作为微服务架构的流量入口,网关承担着 路由转发、流量治理、安全防护 三大核心职能: 统一接入&#…...
Spark-sql编程
创建子模块并添加依赖 在IDEA中创建一个名为Spark-SQL的子模块。 在该子模块的pom.xml文件中添加Spark-SQL的依赖,具体依赖为org.apache.spark:spark-sql_2.12:3.0.0。 编写Spark-SQL测试代码 定义一个User case class,用于表示用户信息…...
K8s 生产落地
深夜收到报警短信,集群突然宕机——这可能是每个运维人最不愿面对的噩梦。生产级Kubernetes集群的部署,远不是几条命令就能搞定的事情。本文将结合真实踩坑经验,从零拆解一个高可用、高安全、可自愈的Kubernetes生产环境该如何落地。 一、架…...
SnailJob:分布式环境设计的任务调度与重试平台!
背景 近日挖掘到一款名为“SnailJob”的分布式重试开源项目,它旨在解决微服务架构中常见的重试问题。在微服务大行其道的今天,我们经常需要对某个数据请求进行多次尝试。然而,当遇到网络不稳定、外部服务更新或下游服务负载过高等情况时,请求…...
通过WebRTC源码入门OpenGL ES
文章目录 基本概念Vertex和Fragment着色器程序 准备工作getUniformLocation/getAttribLocationglVertexAttribPointer 开始绘制Demo实现 OpenGL SE是一套适用于嵌入式设备的图形API,本文主要介绍如何通过OpenGL SE在Android设备上进行图形绘制,同时我会通…...
面试题:请描述一下你在项目中是如何进行性能优化的?针对哪些方面进行了优化,采取了哪些具体的措施?
目录 1.算法和数据结构优化 2.内存管理优化 3.并发编程优化 4.数据库优化 5.网络优化 6.持续优化与监控 7.总结 现在是企业招聘和求职者的金三银四,每每问到这个主观性问题的时候,都不知道怎么回答,下面就我知道的一些总结一下&#x…...
从零实现富文本编辑器#2-基于MVC模式的编辑器架构设计
在先前的规划中我们是需要实现MVC架构的编辑器,将应用程序分为控制器、模型、视图三个核心组件,通过控制器执行命令时会修改当前的数据模型,进而表现到视图的渲染上。简单来说就是构建一个描述文档结构与内容的数据模型,并且使用自…...
SAP S4HANA embedded analytics
SAP S4HANA embedded analytics...
linux多线(进)程编程——(7)消息队列
前言 现在修真界大家的沟通手段已经越来越丰富了,有了匿名管道,命名管道,共享内存等多种方式。但是随着深入使用人们逐渐发现了这些传音术的局限性。 匿名管道:只能在有血缘关系的修真者(进程)间使用&…...
STM32 HAL库 实现485通信
一、引言 在工业自动化、智能家居等众多领域中,RS - 485 通信因其长距离、高抗干扰能力等优点被广泛应用。STM32F407 是一款性能强大的微控制器,其丰富的外设资源为实现 RS - 485 通信提供了良好的硬件基础。本文将详细介绍基于 STM32F407 HAL 库实现 R…...
用 Vue 3 + OpenAI API 实现一个智能对话助手(支持上下文、多角色)
文章目录 一、项目背景与功能介绍二、技术选型与准备工作环境准备 三、智能对话助手的实现第一节:封装 OpenAI 接口请求第二节:构建消息上下文结构第三节:构建对话 UI 组件第四节:滚动自动到底部(可选优化)…...
ollama修改配置使用多GPU,使用EvalScope进行模型压力测试,查看使用负载均衡前后的性能区别
文章目录 省流结论机器配置不同量化模型占用显存1. 创建虚拟环境2. 创建测试jsonl文件3. 新建测试脚本3. 默认加载方式,单卡运行模型3.1 7b模型输出213 tok/s3.1 32b模型输出81 tok/s3.1 70b模型输出43tok/s 4. 使用负载均衡,多卡运行4.1 7b模型输出217t…...
vue3 setup vite 配置跨域了proxy,部署正式环境的替换
在开发环境中使用 Vite 的 proxy 配置来解决跨域问题是一种常见的做法。然而,在部署到正式环境时,通常需要对接口地址进行调整,具体是否需要更改接口名称取决于你的部署环境和后端服务的配置。以下是几种常见的情况和建议: 1. 正…...
目标检测:YOLOv11(Ultralytics)环境配置
1、前言 YOLO11是Ultralytics公司YOLO系列实时目标检测器的最新迭代版本,它以尖端的准确性、速度和效率重新定义了可能实现的性能。在之前YOLO版本取得的显著进步基础上,YOLO11在架构和训练方法上进行了重大改进,使其成为各种计算机视觉任务中…...
如何高效压缩GIF动图?
GIF动图因其兼容性强、易于传播的特点,成为网络交流的热门选择。然而,过大的文件体积常常导致加载缓慢、分享困难等问题。本文将为您详细介绍几种实用的GIF压缩技巧,帮助您在保持画面质量的同时显著减小文件大小。 压缩方法 1. 在线压缩工具…...
视频融合平台EasyCVR可视化AI+视频管理系统,打造轧钢厂智慧安全管理体系
一、背景分析 在轧钢厂,打包机负责线材打包,操作人员需频繁进入内部添加护垫、整理包装、检修调试等。例如,每班产线超过300件,12小时内人员进出打包机区域超过300次。若员工安全意识薄弱、违规操作,未落实安全措施就…...
通过命令行操作把 本地IDE 项目上传到 GitHub(小白快速版)
通过命令行操作把 本地IDE 项目上传到 GitHub(小白版) 你是不是在用 本地IDE 做项目,但不知道怎么把自己的代码上传到 GitHub?今天我们用最简单的命令行方式(不用 SSH、不用复杂配置)教你一步一步把本地项…...
【c语言基础学习】qsort快速排序函数介绍与使用
在C语言中,qsort 函数用于对数组进行快速排序。以下是详细的使用方法及示例: 一、函数原型 #include <stdlib.h>void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) );二、参数说明 参数说明base指向…...
今日github AI科技工具汇总(20250415更新)
以下是2025年4月15日GitHub上值得关注的AI科技工具汇总及趋势分析,结合最新开源动态与开发者社区热点整理: 一、AI编程工具重大更新 GitHub Copilot Agent Mode 全量发布 核心功能:在VS Code中启用后,可自主完成多文件代码重构、测试驱动开发(TDD)及自修复编译错误,支持…...
程序化广告行业(88/89):广告创意审核的法律红线与平台规则
程序化广告行业(88/89):广告创意审核的法律红线与平台规则 在程序化广告的广阔领域中,不断学习和掌握行业规范是我们稳步前行的基石。一直以来,我都期望与大家携手共进,深入探索这个行业的奥秘。今天&…...
前端VUE框架理论与应用(4)
一、计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。例如: <div id="example">{{ message.split().reverse().join() }}</div> 在这个地方,模板不再是简单的声明式逻辑。你…...
【经验分享】基于Calcite+MyBatis实现多数据库SQL自动适配:从原理到生产实践
基于CalciteMyBatis实现多数据库SQL自动适配:从原理到生产实践 一、引言:多数据库适配的行业痛点 在当今企业IT环境中,数据库异构性已成为常态。根据DB-Engines最新调研,超过78%的企业同时使用两种以上数据库系统。这种多样性带…...
通信算法之265: 无人机系统中的C2链路
在无人机系统设计中,我们经常听到C2链路这个名词,到底什么是C2链路呢?为什么说C2链路是无人机系统中非常重要的环节。 转载: 无人机技术是各种科技技术水平综合发展的结果,包括空气动力,机械设计…...
浙江大学:DeepSeek如何引领智慧医疗的革新之路?|48页PPT下载方法
导 读INTRODUCTION 随着人工智能技术的飞速发展,DeepSeek等大模型正在引领医疗行业进入一个全新的智慧医疗时代。这些先进的技术不仅正在改变医疗服务的提供方式,还在提高医疗质量和效率方面展现出巨大潜力。 想象一下,当你走进医院ÿ…...
Codeforces Round 1017 (Div. 4)
Codeforces Round 1017 (Div. 4) A. Trippi Troppi AC code: void solve() { string a, b, c; cin >> a >> b >> c;cout << a[0] << b[0] << c[0] << endl; } B. Bobritto Bandito 思路: 倒推模拟即可,…...
bash的特性-bash中的引号
在Linux或Unix系统中,Bash(Bourne Again SHell)作为最常用的命令行解释器之一,提供了强大的功能来处理各种任务。正确使用引号是掌握Bash脚本编写的基础技能之一,它决定了如何解析字符串、变量替换以及特殊字符的行为。…...
ubuntu上SSH防止暴力破解帐号密码
在知道设备ip的情况下,使用 Fail2Ban防止暴力破解 sudo apt install fail2ban 配置 SSH 防护规则 sudo gedit /etc/fail2ban/jail.local jail.local内容如下: [sshd] enabled true port ssh logpath /var/log/auth.log # Ubuntu/Debian maxret…...
【Bluedroid】A2DP Sink播放流程源码分析(二)
接上一篇继续分析:【Bluedroid】A2DP Sink播放流程源码分析(一)_安卓a2dp sink播放流程-CSDN博客 AVDTP接收端(Sink)流事件处理 bta_av_sink_data_cback 是 Bluedroid 中 A2DP Sink 角色的 AVDTP 数据回调函数,负责处理接收端的…...
【Code】《代码整洁之道》笔记-Chapter16-重构SerialDate
第16章 重构SerialDate 如果你找到JCommon类库,深入该类库,其中有个名为org.jfree.date的程序包。在该程序包中,有个名为SerialDate的类,我们即将剖析这个类。 SerialDate的作者是David Gilbert。David显然是一位经验丰富、能力…...
redis 内存中放哪些数据?
在 Java 开发中,Redis 作为高性能内存数据库,通常用于存储高频访问、低延迟要求、短期有效或需要原子操作的数据。以下是 Redis 内存中常见的数据类型及对应的使用场景,适合面试回答: 1. 缓存数据(高频访问,降低数据库压力) 用户会话(Session):存储用户登录状态、临时…...
【Python使用】嘿马云课堂web完整实战项目第4篇:封装异常处理,封装JSON返回值【附代码文档】
教程总体简介:项目概述 项目背景 项目的功能构架 项目的技术架构 CMS 什么是CMS CMS需求分析与工程搭建 静态门户工程搭建 SSI服务端包含技术 页面预览开发 4 添加“页面预览”链接 页面发布 需求分析 技术方案 测试 环境搭建 数据字典 服务端 前端 数据模型 页面原…...
「数据可视化 D3系列」入门第三章:深入理解 Update-Enter-Exit 模式
深入理解 Update-Enter-Exit 模式 一、数据绑定三态:Update、Enter、Exit三种状态的直观理解 二、基础概念1. Update 选区 - 处理已有元素2. Enter 选区 - 处理新增数据3. Exit 选区 - 处理多余元素 三、完整工作流程四、三种状态的底层原理数据绑定过程解析键函数&…...
中间件--ClickHouse-5--架构设计(分布式架构,列式压缩存储、并行计算)
1、整体架构设计 ClickHouse 采用MPP(大规模并行处理)架构,支持分布式计算和存储,其核心设计目标是高性能列式分析。 (1)、存储层 列式存储: 数据按列存储(而非传统行式存储&#…...
AgentGPT 在浏览器中组装、配置和部署自主 AI 代理 入门介绍
AI MCP 系列 AgentGPT-01-入门介绍 Browser-use 是连接你的AI代理与浏览器的最简单方式 AI MCP(大模型上下文)-01-入门介绍 AI MCP(大模型上下文)-02-awesome-mcp-servers 精选的 MCP 服务器 AI MCP(大模型上下文)-03-open webui 介绍 是一个可扩展、功能丰富且用户友好的…...
【开源项目】Excel手撕AI算法深入理解(三):Backpropagation、mamba、RNN
项目源码地址:https://github.com/ImagineAILab/ai-by-hand-excel.git 一、Backpropagation 1. 反向传播的本质 反向传播是通过链式法则计算损失函数对网络参数的梯度的高效算法,目的是用梯度下降优化参数。其核心思想是: 前向传播…...
uniapp的通用页面及组件基本封装
1.基本布局页面 适用于自定义Navbar头部 <template><view class"bar" :style"{height : systemInfo.statusBarHeight px, background: param.barBgColor }"></view><view class"headBox" :style"{ height: param.h…...
Ubuntu和Debian 操作系统的同与异
首先需要说明:Ubuntu 是基于 Debian 操作系统开发的。它们之间的关系如下 起源与发展:Debian 是一个社区驱动的开源 Linux 发行版,始于 1993 年,是最早的 Linux 发行版之一,以其稳定性和自由软件政策著称。Ubuntu 是基…...
【android bluetooth 协议分析 21】【ble 介绍 1】【什么是RPA】
通俗易懂地讲解一下 BLE(低功耗蓝牙)中的 Resolvable Private Address(RPA,可解析私有地址)。 1. 一句话理解 RPA 是一种“临时的、隐私保护的蓝牙设备地址”,别人无法随便追踪你,但“授权的设…...
狂神SQL学习笔记九:MyISAM 和 lnnoDB 区别
show create database school –查看创建数据库的语句 show create table student – 查看student数据表的定义语句 desc student –显示表的结构 MYISAMINNODB事务支持不支持支持数据行锁定不支持支持行锁定外键不支持支持全文索引支持不支持表空间的大小较小较大&#x…...
深度学习--神经网络的构造
在当今数字化时代,深度学习已然成为人工智能领域中最为耀眼的明星。而神经网络作为深度学习的核心架构,其构造方式决定了模型的性能与应用效果。本文将深入探讨深度学习神经网络的构造,带您领略这一前沿技术的奥秘。 一、神经网络基础概念…...
Jenkins 代理自动化-dotnet程序
两种方式 容器部署 本地部署 容器部署 可自动实现,服务器重启,容器自动运行 主要将dockerfile 写好 本地部署 1.服务器重启自动运行代理 参考下面的链接,只是把程序换成 java程序,提前确认好需要的jdk版本 Ubuntu20.04 设置开机…...
【区块链+ 人才服务】“CERX Network”——基于 FISCO BCOS 的研学资源交换网络 | FISCO BCOS 应用案例
CERX Network (Consortium-based Education Resource Exchanging Network) 是定位于面向高校科学研究与教学 的分布式研学资产交换网络, 构建一个用于数据、 算法模型、 论文和课程的研学资源价值流转平台。项目以 FISCO BCOS 联盟链为底层平…...
中间件--ClickHouse-6--SQL基础(类似Mysql,存在差异)
ClickHouse语言类似Mysql,如果熟悉Mysql,那么学习ClickHouse的语言还是比较容易上手的。 1、建表语法(CREATE TABLE) (1)、表引擎(Engine) MySQL: 默认使用 InnoDB 引…...
[MSPM0开发]MSPM0G3507番外一:关于使用外部高速晶振HFXT后程序可能不运行的问题
一、问题描述 如下图所示,MSPM0G3507时钟树配置为使用外部HFXT(外部高速晶振)作为HSCLK时钟源。 配置结果MCLK 40MHz。 另外配置PB22为输出模式,控制外部LED亮灭。 在main.c中主要代码如下: 主要完成延时并翻转LED控…...
2025年计算机领域重大技术突破与行业动态综述
——前沿技术重塑未来,开发者如何把握机遇? 2025年第一季度,全球计算机领域迎来多项里程碑式进展,从量子计算到人工智能,从芯片设计到网络安全,技术革新与产业融合持续加速。本文梳理近三个月内最具影响力…...
我的机器学习之路(初稿)
文章目录 一、机器学习定义二、核心三要素三、算法类型详解1. 监督学习(带标签数据)2. 无监督学习(无标签数据)3. 强化学习(决策优化)(我之后主攻的方向) 四、典型应用场景五、学习路线图六、常见误区警示七…...
交易模式革新:Eagle Trader APP上线,助力自营交易考试效率提升
近年来,金融行业随着投资者需求的日益多样化,衍生出了众多不同的交易方式。例如,为了帮助新手小白建立交易基础,诞生了各类跟单社区;而与此同时,一种备受瞩目的交易方式 —— 自营交易模式,正吸…...
emotn ui桌面tv版官网-emotn ui桌面使用教程
在智能电视和盒子的使用中,出色的桌面系统能大幅提升体验,Emotn UI桌面TV版便是其中的佼佼者。 访问Emotn UI桌面TV版官网,首页简洁清晰,“产品介绍”“下载中心”等板块一目了然。官网对其功能优势详细阐述,在“下载中…...
Django之modelform使用
Django新增修改数据功能优化 目录 1.新增数据功能优化 2.修改数据功能优化 在我们做数据优化处理之前, 我们先回顾下传统的写法, 是如何实现增加修改的。 我们需要在templates里面新建前端的页面, 需要有新增还要删除, 比如说员工数据的新增, 那需要有很多个输入框, 那html…...
Hadoop:大数据时代的基石
在当今数字化浪潮中,数据量呈爆炸式增长,企业和组织面临着前所未有的数据处理挑战。从社交媒体的海量信息到物联网设备的实时数据,如何高效地存储、管理和分析这些数据成为了一个关键问题。Apache Hadoop 作为大数据处理领域的核心框架&#…...