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

探索微服务入口:Spring Cloud Gateway 实战指南

在微服务架构中,网关(Gateway)扮演着“请求入口”的角色。它不仅帮助我们统一入口、路由转发,还可以承担限流、安全认证、权限校验、熔断等功能。

本文将系统介绍 Spring Cloud Gateway 的基础概念、快速上手指南,以及在实战中常见的 JWT 登录校验与自定义过滤器开发。


📑 目录

  1. 认识网关 Gateway

  2. 快速入门:构建你的第一个 Gateway 项目

  3. 网关中的登录校验与鉴权逻辑

  4. JWT 登录校验实战

  5. 深入理解过滤器:GatewayFilter 与 GlobalFilter

  6. 更多实用特性(建议掌握)

  7. 总结与建议

  8. Spring Cloud Gateway 与其他网关组件对比


一、认识网关 Gateway

什么是网关?

网关是系统的统一入口,是客户端与后端微服务之间的中间层。主要功能包括:

  • 统一路由转发:将请求路由到具体微服务

  • 服务聚合:对多个微服务的响应进行整合

  • 权限校验:统一登录鉴权,保护后端服务

  • 请求过滤:如限流、日志记录、请求头统一处理等

为什么选择 Spring Cloud Gateway?

Spring Cloud Gateway 是 Spring 团队官方推出的网关组件,基于 WebFlux + Reactor 的响应式编程模型,具有以下优点:

  • 高性能、轻量级

  • 支持路由、过滤器、断言

  • 支持动态路由配置、服务注册发现(Eureka)

  • 支持自定义过滤器和全局过滤器


二、快速入门:构建你的第一个 Gateway 项目

1. 添加依赖

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

2. 配置 application.yml

server:port: 8888spring:application:name: gateway-servicecloud:gateway:routes:- id: user-serviceuri: http://localhost:8081predicates:- Path=/user/**filters:- AddRequestHeader=From, gateway

三、网关中的登录校验与鉴权逻辑

在实际业务中,网关会做以下判断流程:

Client -> Gateway -> [是否为开放接口?]↓[是否带token?]↓[token是否合法/未过期?]↓请求目标服务

四、JWT 登录校验实战

1. JWT 工具类

public class JwtUtil {private static final String SECRET = "my-secret-key";private static final long EXPIRE_TIME = 3600000;public static String createToken(String userId) {return Jwts.builder().setSubject(userId).setExpiration(new Date(System.currentTimeMillis() + EXPIRE_TIME)).signWith(SignatureAlgorithm.HS256, SECRET).compact();}public static Claims parseToken(String token) {return Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token).getBody();}
}

2. 登录校验过滤器(GlobalFilter)

@Component
public class AuthGlobalFilter implements GlobalFilter, Ordered {private static final List<String> WHITE_LIST = List.of("/login", "/register");@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String path = exchange.getRequest().getURI().getPath();if (WHITE_LIST.stream().anyMatch(path::startsWith)) {return chain.filter(exchange);}String token = exchange.getRequest().getHeaders().getFirst("Authorization");if (StringUtils.isEmpty(token)) {return unauthorized(exchange, "Token 缺失");}try {Claims claims = JwtUtil.parseToken(token);exchange.getRequest().mutate().header("userId", claims.getSubject()).build();} catch (Exception e) {return unauthorized(exchange, "Token 非法或过期");}return chain.filter(exchange);}private Mono<Void> unauthorized(ServerWebExchange exchange, String msg) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(msg.getBytes(StandardCharsets.UTF_8));return exchange.getResponse().writeWith(Mono.just(buffer));}@Overridepublic int getOrder() {return -1;}
}

五、深入理解过滤器:GatewayFilter 与 GlobalFilter

类型描述适用范围
GatewayFilter局部过滤器某个具体路由
GlobalFilter全局过滤器所有路由

自定义 GatewayFilter 示例

@Component
public class CustomGatewayFilterFactory extends AbstractGatewayFilterFactory<CustomGatewayFilterFactory.Config> {public CustomGatewayFilterFactory() {super(Config.class);}public static class Config {private String value;// getter/setter}@Overridepublic GatewayFilter apply(Config config) {return (exchange, chain) -> {exchange.getRequest().mutate().header("X-Custom-Header", config.getValue()).build();return chain.filter(exchange);};}
}

六、更多实用特性(建议掌握)

  • ✅ 动态路由加载(Nacos、数据库)

  • ✅ 熔断与降级(Resilience4j)

  • ✅ 限流功能(RedisRateLimiter)

  • ✅ CORS 跨域配置

  • ✅ 统一异常处理

  • ✅ 日志追踪(链路追踪 Zipkin)


七、总结与建议

Spring Cloud Gateway 是现代微服务架构中非常关键的一环,不仅用于请求路由,更是安全、稳定、高可用架构的第一道防线。

建议:

  • 提前规划路由结构

  • 使用 JWT 做轻量级认证

  • 用过滤器做灵活的扩展(如添加请求头、参数校验、限流等)

  • 对白名单、黑名单接口单独设计

  • 接入链路追踪和监控组件


八、Spring Cloud Gateway 与其他网关组件对比

网关组件技术架构性能动态路由插件扩展性适合场景
Spring Cloud GatewayJava + WebFlux⭐⭐⭐⭐Spring 微服务体系
Zuul 1.xJava + Servlet⭐⭐老项目兼容
Zuul 2.xNetty⭐⭐⭐⭐Netflix 内部使用
NginxC语言⭐⭐⭐⭐⭐低(Lua)静态资源、边缘代理
KongNginx + Lua⭐⭐⭐⭐API 网关平台
TraefikGo⭐⭐⭐⭐云原生、K8s 场景

✅ Spring Cloud Gateway 优势

  • Spring Cloud 深度集成

  • WebFlux 高性能

  • 支持自定义过滤器与动态路由

❌ 不足

  • JVM 性能劣于 Nginx

  • 插件生态弱于 Kong

  • 学习曲线相对偏高

场景选型建议

场景推荐网关
Java 微服务系统✅ Spring Cloud Gateway
高性能边缘代理✅ Nginx
企业级 API 管理✅ Kong
云原生微服务治理✅ Traefik
老项目兼容迁移✅ Zuul(不推荐新项目)

希望本文能帮助你全面理解 Spring Cloud Gateway 的能力和应用场景,如果你需要更多高级实践如自定义限流、动态路由注册、网关聚合文档等,欢迎留言获取进阶篇!

相关文章:

探索微服务入口:Spring Cloud Gateway 实战指南

在微服务架构中&#xff0c;网关&#xff08;Gateway&#xff09;扮演着“请求入口”的角色。它不仅帮助我们统一入口、路由转发&#xff0c;还可以承担限流、安全认证、权限校验、熔断等功能。 本文将系统介绍 Spring Cloud Gateway 的基础概念、快速上手指南&#xff0c;以及…...

python的turtle库实现四叶草

实现代码&#xff1a; import turtle turtle.pencolor(‘green’) turtle.fillcolor(‘green’) turtle.begin_fill() turtle.circle(100,90) turtle.left(90) turtle.circle(100,90) turtle.right(180) turtle.circle(100, 90) turtle.left(90) turtle.circle(100,90) tu…...

医疗生态全域智能化:从技术革新到价值重塑的深度探析

引言 医疗人工智能正在经历从单一技术应用向全域生态系统演进的关键转折点。随着深度学习、自然语言处理和计算机视觉等技术的成熟,AI不再局限于辅助诊断等单一功能,而是逐渐渗透到医疗健康服务的全生命周期。从传统设备制造商向智慧医疗转型的东软医疗,正在构建"AI大…...

Rust 的 Web 世界:actix_web 轻松接收 JSON 请求体

前言 在现代 Web 世界,数据传输早已从“你问我答”的问卷时代,迈入“你扔我接”的快节奏赛道。其中最火的“传球”方式,非 JSON 请求体莫属。Rust 这门以高性能和强类型著称的语言,也不甘人后,推出 actix_web 框架,力求在 Web 世界中杀出一条血路。 今天我们不讲玄学,…...

1.3 点云数据获取方式——ToF相机

图1-3-1TOF相机 ToF 相机作为新兴的 3D 感知设备,凭借独特的技术优势崭露头角。其工作原理基于光飞行时间(Time of Flight)技术,通过测量光信号从发射到被物体反射后返回传感器的时间差,直接且快速地获取物体的深度信息。这种直接测量深度的方式使得 ToF 相机具备…...

数据结构每日一题day13(链表)★★★★★

题目描述&#xff1a;采用尾插法在头指针L处建立一个带头结点的单链表,输入-1表示结束结果返回建立的单链表。 算法思想&#xff1a; 1.初始化链表&#xff1a;创建一个头结点&#xff08;不存储实际数据&#xff09;&#xff0c;头指针 L 指向该头结点。初始时&#xff0c;头…...

【网络编程】UDP协议 和 Socket编程

1. UDP的特点 UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是互联网协议套件中的一种传输层协议&#xff0c;与广泛使用的TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;相比&#xff0c;它是一种无连接…...

【探寻C++之旅】第十二章:异常

请君浏览 前言1.异常的概念2.异常的使用2.1 抛出与捕获2.2 栈展开2.3 查找匹配的处理代码2.4 简单的异常使用2.5 异常重新抛出 2. 异常的安全问题3. 异常的规范4. 标准库的异常5. 异常处理建议尾声 前言 今天&#xff0c;我们继续踏入追寻C的冒险历程。今天我们让我们来讲讲C中…...

CSS的三大特性:层叠、继承与优先级

CSS作为网页设计的核心语言&#xff0c;其三大核心特性——层叠性、继承性和优先级共同构成了样式表现的底层逻辑。理解这些特性将帮助开发者写出更优雅、更易维护的样式代码。 一、层叠性&#xff08;Cascading&#xff09; 1.1 核心概念 "层叠"指多个样式规则同…...

Spring Cloud 项目中优雅地传递用户信息:基于 Gateway + ThreadLocal 的用户上下文方案

在 Spring Cloud 微服务架构中&#xff0c;我们通常使用 API 网关&#xff08;如 Spring Cloud Gateway&#xff09;作为流量入口&#xff0c;负责统一的用户身份校验和请求路由。本文将介绍一种通用的用户信息传递方案&#xff1a;网关完成认证后通过请求头传递用户信息&#…...

node.js 实战——mongoDB 续一

mongoDB的基本指令 进入mongodb mongo显示当前的所有数据库 show dbs # 或者 show databases切换数据库/进入指定数据库 使用这个命令的时候&#xff0c;是不要求这个数据库是否创建 use 数据库名显示当前数据库 db显示数据库中所有集合 show collections数据库的CRUD的…...

鸟笼效应——AI与思维模型【84】

一、定义 鸟笼效应思维模型指的是人们在偶然获得一件原本不需要的物品后,会为了这件物品的配套或使用需求,进而继续添加更多与之相关但自己原本可能并不需要的东西,仿佛被这个“鸟笼”牵着走,最终陷入一种惯性消费或行为模式的现象。简单来说,就是人们在心理上会有一种自…...

豪越科技消防立库方案:实现应急物资高效管理

在消防救援工作中&#xff0c;应急物资管理是至关重要的一环。然而&#xff0c;当前应急物资管理的现状却令人担忧。传统的应急物资管理方式存在诸多弊端&#xff0c;严重影响了消防救援的效率和效果。 走进一些传统的消防仓库&#xff0c;映入眼帘的往往是杂乱无章的存储场景。…...

简化excel校验提高开发效率

业务背景&#xff1a;上传excel文件进行基础数据校验&#xff0c;然而东西太多写着写着就...自然成了测试的KPI了 解决思路&#xff1a;使用现有的注解处理&#xff0c;原理使用validate注解原理 直接上干货&#xff0c;一行代码搞定校验&#xff1a; ValidateUtils.validat…...

ElasticSearch深入解析(六):集群核心配置

1.开发模式和生产模式 Elasticsearch默认运行在开发模式下&#xff0c;此模式允许节点在配置存在错误时照常启动&#xff0c;仅将警告信息写入日志文件。而生产模式则更为严格&#xff0c;一旦检测到配置错误&#xff0c;节点将无法启动&#xff0c;这是一种保障系统稳定性的安…...

Python 重构“策略”模式:用函数简化设计模式的实践

在软件设计中&#xff0c;设计模式是解决问题的通用模板。但随着编程语言特性的发展&#xff0c;某些经典模式可以通过更简洁的方式实现。本文以电商促销折扣场景为例&#xff0c;演示如何通过函数重构“策略”模式&#xff0c;减少代码量并提升可维护性。 经典策略模式实现 …...

​MCP协议深度解析:原理、应用与物联网时代的机遇-优雅草卓伊凡

MCP协议深度解析&#xff1a;原理、应用与物联网时代的机遇-优雅草卓伊凡 一、MCP协议技术详解 1.1 MCP协议的定义与起源 MCP&#xff08;Modbus Communication Protocol&#xff09;是一种基于主从架构的串行通信协议&#xff0c;最初由Modicon公司&#xff08;现为施耐德电…...

IOS 国际化词条 Python3 脚本

一、词条处理脚本---使用教程 (1)环境篇 1: 该脚本基于python3 环境&#xff0c;请确保你的mac 安装了python3 2: 包依赖&#xff0c;请在python3环境下安装 xlrd; pip3 install xlrd(2)使用篇 1: 桌面创建一个文件夹, 例如 wordEntry,将该脚本文件与下载的最新的 ’词条.xlsx‘…...

uniapp 支付宝小程序自定义 navbar 无效解决方案

如图&#xff1a; uniapp编译到支付宝小程序隐藏默认的导航栏失效了 解决方案&#xff1a; 在 pages.json 文件中找到 globalStyle 中加入以下代码&#xff1a; "mp-alipay": {"transparentTitle": "always","titlePenetrate":…...

uni-app - 微信小程序中,使用 navigateTo 传递非常大的数字传参精度丢失的问题

文章目录 🍉原因分析:JavaScript 数值精度限制🍉常用解决方法🍉代码示例🍉官方推荐与最佳实践🍉微信小程序环境注意事项🍉原因分析:JavaScript 数值精度限制 微信小程序(uni-app)中,参数是通过 URL 查询字符串传递的,其本质上仍由 JavaScript 进行处理。Jav…...

通信施工安全员B证适合哪些人考

通信施工安全员B证适合人群分析 一、适用岗位范围 通信工程施工人员 从事基站建设、光缆布放、管道施工等现场作业的技术工人 5G网络建设、室内分布系统安装等新型基础设施建设人员 项目管理岗位 通信工程项目经理、技术负责人 施工队长、班组长等现场管理人员 专职安全…...

vue3使用<el-date-picker分别设置开始时间和结束时间时,设置开始时间晚于当前时间,开始时间早于结束时间,结束时间晚于开始时间

vue3使用<el-date-picker分别设置开始时间和结束时间时&#xff0c;设置开始时间晚于当前时间&#xff0c;开始时间早于结束时间&#xff0c;结束时间晚于开始时间 为避免出现填写结束事件后再次修改开始时间&#xff0c;导致开始时间晚于结束时间&#xff0c;添加 change“…...

移远通信LG69T赋能零跑B10:高精度定位护航,共赴汽车智联未来

当前&#xff0c;汽车行业正以前所未有的速度迈向智能化时代&#xff0c;组合辅助驾驶技术已然成为车厂突出重围的关键所在。高精度定位技术作为实现车辆精准感知与高效协同的基石&#xff0c;其重要性日益凸显。 作为全球领先的物联网及车联网整体解决方案供应商&#xff0c;移…...

HTML应用指南:利用POST请求获取全国达美乐门店位置信息

达美乐比萨作为全球知名的披萨连锁品牌&#xff0c;自1960年创立以来&#xff0c;始终致力于为消费者提供高品质、快速配送的披萨体验。在中国市场&#xff0c;达美乐凭借其“30分钟必达”的承诺和经典美式风味&#xff0c;逐渐赢得了广大消费者的青睐。品牌通过不断拓展门店网…...

进程优先级以及切换调度

目录 进程优先级 基本概念 实操理解 优先级操作 竞争&#xff0c;独立&#xff0c;并行&#xff0c;并发 进程切换 寄存器 讲切换 linux进程调度算法 进程优先级 基本概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。优…...

揭开应用程序的神秘面纱:深入了解 AWS X-Ray

1.AWS X-Ray 概述&#xff1a; AWS X-Ray 是一项服务&#xff0c;它收集应用程序所处理请求的数据&#xff0c;并提供一些工具供您查看、筛选和深入了解这些数据&#xff0c;从而发现问题和优化机会。您不仅可以查看请求和响应的详细信息&#xff0c;还可以查看应用程序对下游…...

元宇宙2.0:当区块链成为数字世界的宪法

引言&#xff1a;当虚拟世界成为“新大陆” 清晨&#xff0c;你戴上VR设备进入一个由数字建筑构成的城市&#xff0c;这里的地皮属于全球玩家&#xff0c;街边的艺术品标着NFT认证码&#xff0c;咖啡馆里的人们用加密货币支付咖啡&#xff0c;而社区规则由持有代币的居民投票决…...

JVM调优实战(JVM Tuning Pactice)

JVM调优实战 JVM调优 JVM调优是指对Java虚拟机进行性能优化的实际应用。 JVM调优实战主要是通过优化JVM的内存管理、垃圾回收、线程管理、类加载、编译器等方面来提高Java应用程序的性能和稳定性。 JVM调优步骤 JVM调优实战通常需要经过以下步骤&#xff1a; 1.监控GC的状…...

网络原理 - 11(HTTP/HTTPS - 2 - 请求)

目录 HTTP 请求&#xff08;Request&#xff09; 认识 URL URL 基本格式 关于 URL encode 认识方法&#xff08;method&#xff09; 1. GET 方法 2. POST 方法 认识请求“报头”&#xff08;header&#xff09; Host Content-Length Content-Type User-Agent&…...

百度CarLife实现手机车机无缝互联

百度CarLife是百度推出的智能车联网解决方案&#xff0c;通过手机与车机互联技术&#xff0c;为用户提供安全便捷的车载互联网服务体验。 CarLife 实现手机与车机屏幕的无缝互联&#xff0c;让应用内容同步至车载系统&#xff0c;减少驾驶过程中操作手机的频率&#xff0c;提升…...

初识Redis · 缓存

目录 前言&#xff1a; 引入缓存 缓存更新策略 定期生成 实时生成 缓存注意事项 缓存预热 缓存穿透 缓存雪崩 缓存击穿 前言&#xff1a; 我们在Redis的学习中&#xff0c;逐渐了解到了Redis的用途是可以用来当作内存数据库&#xff0c;缓存&#xff0c;消息队列等&…...

Redis性能优化终极指南:从原理到实战的深度调优策略

一、内存优化&#xff1a;构建高效存储体系 1.1 三级过期键管理机制 Redis通过组合策略实现精准的内存回收&#xff1a; 定时删除&#xff08;主动淘汰&#xff09; 创建定时器在键到期时立即删除 优点&#xff1a;及时释放内存 缺点&#xff1a;高CPU消耗&#xff08;每个…...

哈希表笔记(一 )

设计思路 核心功能和 API 设计 (Core Functionality & API Design): 基本操作: 必须提供核心的 put(key, value)&#xff08;添加或更新键值对&#xff09;、get(key)&#xff08;根据键获取值&#xff09;、remove(key)&#xff08;根据键删除键值对&#xff09;、contain…...

c网络库libevent的http常用函数的使用(附带源码)

Libevent HTTP 核心函数详解与实战 核心概念HTTP 服务器端常用函数1. 初始化与绑定2. 设置请求处理回调3. 在回调函数中处理请求4. 发送响应5. 启动与停止6. 清理资源 HTTP 客户端常用函数1. 初始化2. 创建连接3. 创建并发送请求4. 在回调函数中处理响应5. 启动事件循环与清理 …...

java练习3

随机生成20个数字&#xff08;随机种子&#xff09; 分别使用冒泡排序、二叉树排序、插入排序进行排序 并输出最终结果以及三种排序使用的时间 package a01_第一次练习.a03_排序;import java.time.Duration; import java.time.LocalDateTime; import java.util.TreeSet;publi…...

当 AI 成为 “数字新物种”:人类职业的重构与进化

一、AI 的 “替代清单”&#xff1a;从流水线到办公室的全面侵袭 在深圳某智能工厂&#xff0c;机械臂正以 0.01 毫米的精度完成手机组装&#xff0c;100 台机器人 24 小时运转&#xff0c;替代了 3000 名工人。这种场景正在全球制造业蔓延 —— 麦肯锡预测&#xff0c;到 203…...

HarmonyOS ArkUI交互事件与手势处理全解析:从基础到高级实践

文章目录 一、交互事件1.1 通用事件1.1.1 事件分发1.1.1.1 触摸测试1. 触摸测试基本流程2. 触摸测试控制3. 自定义事件拦截4. 禁用控制5. 触摸热区设置6. 安全组件 1.1.1.2 事件响应链收集 1.1.2 触屏事件1.1.3 键鼠事件1.1.3.1 鼠标事件1.1.3.2 按键事件 1.1.4 焦点事件1.1.5 …...

【计算机网络】面试常考——GET 和 POST 的区别

GET 和 POST 的区别 GET 和 POST 是 HTTP 协议中最常用的两种请求方法&#xff0c;它们的主要区别体现在 用途、数据传输方式、安全性、缓存机制 等方面。以下是详细对比&#xff1a; 1. 用途 GET POST 主要用于 获取数据&#xff08;如查询、搜索&#xff09;。 主要用于 提…...

AI编程工具“幻觉”风险与飞算JavaAl的破局之道

近年来&#xff0c;AI编程辅助工具迅速崛起&#xff0c;极大地提升了开发者的工作效率。然而&#xff0c;这些工具普遍存在一个被称为“幻觉”(hallucination)的风险——AI可能会生成看似合理但实际错误、不安全或低效的代码。这种现象在复杂业务逻辑和特定领域开发中尤为明显&…...

【Python零基础入门系列】第1篇:Python 是什么?怎么装环境?推荐哪些 IDE?

各位网友们,欢迎来到我的 Python 学习专栏! 前两天看到新闻英伟达为 CUDA 添加原生 Python 支持,意味着开发者可直接用 Python 操作 GPU,加速 AI 和高性能计算,降低门槛,让 Python 的应用范围更广、能力更强。 一直想写一系列文章教知友们从零开始学会 Python 编程,目…...

VPN访问SAP组服务器报登陆负载均衡错误88:无法连接到消息服务器(RC=9)

用户反馈用SAPGUI接入SAP时报错&#xff1a;登陆负载均衡错误88&#xff1a;无法连接到消息服务器(RC9) 经了解是通过VPN访问&#xff0c;但VPN没有放行ICMP访问&#xff0c;导致不能PING通&#xff0c;不能确认是网络问题还是什么问题。 解决方案&#xff1a; 1、VPN由原&am…...

Linux查看程序端口占用情况

大家好&#xff0c;欢迎来到程序视点&#xff01;我是你们的老朋友.小二&#xff01; 核心问题&#xff1a; Tomcat 8080端口启动失败&#xff0c;提示端口被占用&#xff0c;但常规检查未发现Tomcat进程占用该端口。 关键排查步骤&#xff1a; 初步检查 使用 ps -aux | gre…...

[C]基础14.字符函数和字符串函数

博客主页&#xff1a;向不悔本篇专栏&#xff1a;[C]您的支持&#xff0c;是我的创作动力。 文章目录 0、总结1、字符分类、转换函数2、strlen的使用和模拟实现2.1 strlen的使用2.2 strlen的模拟实现 3、strcpy的使用和模拟实现3.1 strcpy的使用3.2 strcpy的模拟实现 4、strcat…...

三种机器学习类型

本文讲介绍三种机器学习类型&#xff1a;①监督学习&#xff0c;②无监督学习&#xff0c;③强化学习。我们主要了解监督学习和无监督学习即可。 下图介绍这三种机器学习类型的区别&#xff1a; 1 用来预测未来的监督学习 从有标签的训练数据中学习一个模型&#xff0c;用来…...

UE5 Set actor Location和 Set World Location 和 Set Relative Location 的区别

在 Unreal Engine 的蓝图里&#xff0c;SetRelativeLocation、SetWorldLocation 和 SetActorLocation 三个节点虽然都能改变物体位置&#xff0c;但作用对象和坐标空间&#xff08;Coordinate Space&#xff09;不同&#xff1a; 1. SetActorLocation 作用对象&#xff1a;整个…...

Glide 如何加载远程 Base64 图片

最近有个需求&#xff0c;后端给出的图片地址并不是正常的 URL&#xff0c;而且需要一个接口去请求&#xff0c;但是返回的是 base64 数据流。这里不关心为啥要这么多&#xff0c;原因有很多&#xff0c;可能是系统的问题&#xff0c;也可能是能力问题。当然作为我们 Android 程…...

JVM对象存储格式

引言 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;对象的内存布局是一个重要的底层概念&#xff0c;它直接影响对象在内存中的存储方式和占用空间。了解对象存储格式不仅有助于优化程序性能&#xff0c;还能帮助我们更好地理解JVM的工作原理。本文将详细探讨对象存…...

3D Gaussian Splatting部分原理介绍和CUDA代码解读

本系列旨在帮助无CUDA代码经验的读者、以及3DGS的初学者理解代码逻辑。 3D GS论文原文链接&#xff1a;https://arxiv.org/abs/2308.04079 论文笔记链接&#xff1a;【论文笔记】3D Gaussian Splatting for Real-Time Radiance Field Rendering 【论文笔记】A Survey on 3D Ga…...

日本IT行业|salesforce开发语言占据的地位

在日本的IT行业中&#xff0c;Salesforce 开发语言处于一个较为专业但稳步增长的细分领域&#xff0c;并不是主流开发语言&#xff08;如 Java、Python、PHP&#xff09;&#xff0c;但其在某些行业和场景中地位越来越重要。 本篇以下是详细分析&#xff1a; Salesforce开发语言…...

1.1 点云数据获取方式——引言

图1-1-1点云建筑场景图 点云数据是指能够描述外部场景、对象表面的三维空间位置&#xff0c;并具有相关属性的点集&#xff0c;其每个离散点通常包括三维空间位置&#xff08;x,y,z&#xff09;以及强度、颜色等属性信息。大量分布的离散点集能够清晰而直接地描绘场景、对象的3…...