nacos 配置管理、 配置热更新、 动态路由
文章目录
- 配置管理
- 引入jar包
- 添加 bootstrap.yaml 文件配置
- 在application.yaml 中添加自定义信息
- nacos 配置信息
- 配置热更新
- 采用第一种配置
- 根据服务名确定配置文件
- 根据后缀确定配置文件
- 动态路由
- DynamicRouteLoader
- NacosConfigManager
- RouteDefinitionWriter
- 路由配置

配置管理
统一配置管理可以解决多服务配置过的问题,同时该服务配置文件移交配置中心 处理信息
引入jar包
配置 pom.xml 添加 config 和 bootstrap 的 jar 包
<!--nacos配置管理-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--读取bootstrap文件-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
添加 bootstrap.yaml 文件配置
配置说明
spring.application.name: 指定微服务的名称(cart-service),Nacos 会根据该名称加载对应的配置。
spring.profiles.active: 指定当前激活的环境(dev),Nacos 会加载 cart-service-dev.yaml 配置。
spring.cloud.nacos.server-addr: 指定 Nacos 服务器的地址(127.0.0.1:8848)。
spring.cloud.nacos.config.file-extension: 指定配置文件的格式为 yaml。
spring.cloud.nacos.config.shared-configs: 定义共享配置,多个微服务可以共用这些配置。
spring:application:name: cart-service # 服务名称profiles:active: devcloud:nacos:server-addr: 127.0.0.1:8848# nacos地址config:file-extension: yaml # 文件后缀名shared-configs: # 共享配置- dataId: shared-jdbc.yaml # 共享mybatis配置- dataId: shared-log.yaml # 共享日志配置- dataId: shared-swagger.yaml # 共享日志配置
在application.yaml 中添加自定义信息
hm:db:batabase: hm-carthost: 127.0.0.1port: 3306username: rootpassword: password
nacos 配置信息
shared-log.yaml
logging:level:com.hmall: debugpattern:dateformat: HH:mm:ss:SSSfile:path: "logs/${spring.application.name}"
shared-jdbc.yaml
spring:datasource:url: jdbc:mysql://${hm.db.host:127.0.0.1}:${hm.db.port:3306}/${hm.db.batabase}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: ${hm.db.username}password: ${hm.db.password}
mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandlerglobal-config:db-config:update-strategy: not_nullid-type: auto
shared-swagger.yaml
knife4j:enable: trueopenapi:title: ${hm.swagger.title:接口文档}description: ${hm.swagger.desc:接口文档信息}email: testconcat: testurl: testversion: v1.0.0group:default:group-name: defaultapi-rule: packageapi-rule-resources:- ${hm.swagger.package}
配置热更新
当修改配置文件时,微服务无需重启即可生效
项目启动时 会去加载 相关配置 文件
Nacos 支持配置的动态更新。当配置文件在 Nacos 中修改后,应用会实时获取最新配置,无需重启。
采用第一种配置
@Data
@Component
@ConfigurationProperties(prefix = "hm.cart")
public class CartProperties {private Integer maxItems;}
nacos 配置 相关信息
根据服务名确定配置文件
在 Spring Cloud 应用中,Nacos 可以根据 spring.application.name 指定的服务名来加载对应的配置文件。例如:
服务名:user-service
Nacos 中的配置文件:user-service.properties 或 user-service.yaml
应用启动时,Nacos 会自动加载与服务名匹配的配置文件。
根据后缀确定配置文件
Nacos 还支持通过后缀来区分不同的配置文件。例如:
服务名:user-service
环境:dev
Nacos 中的配置文件:user-service-dev.properties 或 user-service-dev.yaml
在 Spring Cloud 中,可以通过 spring.profiles.active 指定环境后缀,Nacos 会加载对应环境的配置文件。
动态路由
要实现动态路由首先要将路由配置保存到Nacos,当Nacos中的路由配置变更时,推送最新配置到网关,实时更新网关中的路由信息。
我们需要完成两件事情:
- 监听Nacos配置变更的消息
- 当配置变更时,将最新的路由信息更新到网关路由表
DynamicRouteLoader
DynamicRouteLoader
是一个 Spring Cloud Gateway 的组件,用于从 Nacos 动态加载和更新路由配置。它通过监听 Nacos 配置中心的变化,实时更新网关的路由信息。
- DynamicRouteLoader 类:
- 负责从 Nacos 动态加载路由配置,并在配置发生变化时更新网关的路由表。
- 使用 NacosConfigManager 从 Nacos 获取配置数据,并监听配置变化。
- 依赖注入:
- NacosConfigManager:用于与 Nacos 配置中心交互,获取配置数据。
- RouteDefinitionWriter:用于更新 Spring Cloud Gateway 的路由定义。
- routeIds:用于存储当前已加载的路由 ID,方便后续更新时删除旧路由。
- 初始化方法 initRouteConfig:
- 在项目启动时调用(通过 @PostConstruct 注解)。
- 从 Nacos 获取初始的路由配置(dataId 为 gateway-routes.json,group 为 DEFAULT_GROUP)。
- 添加一个监听器,当 Nacos 中的配置发生变化时,自动调用 updateConfigInfo 方法更新路由。
- 配置更新方法 updateConfigInfo:
- 解析从 Nacos 获取的配置信息(JSON 格式),并将其转换为 RouteDefinition 对象列表。
- 删除旧的路由配置(通过 routeIds 中存储的路由 ID)。
- 清空 routeIds,然后遍历新的路由配置,将其保存到 RouteDefinitionWriter 中,并更新 routeIds。
package com.hmall.gateway.routers;import cn.hutool.json.JSONUtil;
import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.route.RouteDefinition;
import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;import javax.annotation.PostConstruct;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Executor;@Slf4j
@Component
@RequiredArgsConstructor
public class DynamicRouteLoader {private final NacosConfigManager nacosConfigManager;private final RouteDefinitionWriter writer;private final String dataId = "gateway-routes.json";private final String group = "DEFAULT_GROUP";private final Set<String> routeIds = new HashSet<>();@PostConstructpublic void initRouteConfig() throws NacosException {// 项目启动时, 拉取配置信息, 并添加监听器String configInfo = nacosConfigManager.getConfigService().getConfigAndSignListener(dataId, group, 5000, new Listener() {@Overridepublic Executor getExecutor() {return null;}@Overridepublic void receiveConfigInfo(String configInfo) {updateConfigInfo(configInfo);}});// 读取到配置,更新路由表updateConfigInfo(configInfo);}public void updateConfigInfo(String configInfo){log.debug("监听获取路由配置信息:{}", configInfo );// 解析配置信息, 转为RouteDefinitionList<RouteDefinition> routeDefinitions = JSONUtil.toList(configInfo, RouteDefinition.class);// 删除旧的路由表信息routeIds.forEach(e->{writer.delete(Mono.just(e)).subscribe();});// 清空id 表routeIds.clear();// 遍历路由信息for (RouteDefinition routeDefinition: routeDefinitions) {// 更新路由表writer.save(Mono.just(routeDefinition)).subscribe();routeIds.add(routeDefinition.getId());}}
}
NacosConfigManager
NacosConfigManager 是 Spring Cloud Alibaba Nacos 提供的一个核心类,用于管理与 Nacos 配置中心的交互。它封装了 Nacos 配置客户端的操作,简化了从 Nacos 获取配置、监听配置变化等功能的实现。
NacosConfigManager 的作用
- 配置管理:
- 提供从 Nacos 配置中心获取配置的能力。
- 支持动态监听配置变化,实时更新本地配置。
- 简化操作:
- 封装了 Nacos 客户端的底层操作,开发者无需直接操作 Nacos 的原生 API。
- 与 Spring Cloud 集成:
- 作为 Spring Cloud Alibaba 的一部分,与 Spring Cloud 的配置管理机制无缝集成。
NacosConfigManager 的核心方法
获取配置
String getConfig(String dataId, String group, long timeoutMs) throws NacosException;
- 作用:从 Nacos 配置中心获取指定 dataId 和 group 的配置内容。
- 参数:
- dataId:配置的唯一标识符(如 gateway-routes.json)。
- group:配置的分组(如 DEFAULT_GROUP)。
- timeoutMs:获取配置的超时时间(毫秒)。
- 返回值:配置内容的字符串形式。
添加监听器
void addListener(String dataId, String group, Listener listener) throws NacosException;
- 作用:为指定 dataId 和 group 的配置添加监听器,当配置发生变化时触发回调。
- 参数:
- dataId:配置的唯一标识符。
- group:配置的分组。
- listener:监听器接口,实现 receiveConfigInfo 方法以处理配置变化。
获取 ConfigService
ConfigService getConfigService();
- 作用:获取底层的 ConfigService 对象,用于直接操作 Nacos 配置客户端。
- 返回值:ConfigService 实例。
RouteDefinitionWriter
RouteDefinitionWriter 是 Spring Cloud Gateway 提供的一个核心接口,用于动态管理路由定义(RouteDefinition)。它允许在运行时添加、删除或更新路由,从而实现动态路由的功能。
RouteDefinitionWriter 的作用
- 动态路由管理:
- 提供添加、删除和更新路由的能力。
- 支持在运行时修改路由配置,无需重启网关服务。
- 与 Spring Cloud Gateway 集成:
- 作为 Spring Cloud Gateway 的一部分,与网关的路由机制无缝集成。
- 响应式编程支持:
- 基于 Reactor 的响应式编程模型,所有操作返回
Mono<Void>
。
RouteDefinitionWriter 的核心方法
保存路由
Mono<Void> save(Mono<outeDefinition> route);
- 作用:保存一个路由定义。
- 参数:
- route:RouteDefinition 对象,表示一个路由规则。
- 返回值:
Mono<Void>
,表示操作完成后的信号。
删除路由
Mono<Void> delete(Mono<String> routeId);
- 作用:根据路由 ID 删除一个路由定义。
- 参数:
- routeId:路由的唯一标识符。
- 返回值:
Mono<Void>
,表示操作完成后的信号。
路由配置
在 nacos 中添加 gateway-routes.json 配置文件 信息 实现动态路由
id
: 路由的唯一标识符,值为 item。
uri
: 路由的目标服务地址,lb://item-service 表示通过负载均衡访问 item-service。
predicates
: 路由的匹配条件。
name
: 使用 Path 断言,表示根据请求路径匹配。
args
: 路径匹配规则。
_genkey_0
: /items/,匹配以 /items/ 开头的请求。
_genkey_1
: /search/,匹配以 /search/ 开头的请求。
filters
: 路由过滤器列表,当前为空。
[{"id": "item","uri": "lb://item-service","predicates": [{"name": "Path","args": {"_genkey_0": "/items/**","_genkey_1": "/search/**"}}],"filters": []},{"id": "user","uri": "lb://user-service","predicates": [{"name": "Path","args": {"_genkey_0": "/users/**","_genkey_1": "/addresses/**"}}],"filters": []},{"id": "cart","uri": "lb://cart-service","predicates": [{"name": "Path","args": {"_genkey_0": "/carts/**"}}],"filters": []}
]
相关文章:
nacos 配置管理、 配置热更新、 动态路由
文章目录 配置管理引入jar包添加 bootstrap.yaml 文件配置在application.yaml 中添加自定义信息nacos 配置信息 配置热更新采用第一种配置根据服务名确定配置文件根据后缀确定配置文件 动态路由DynamicRouteLoaderNacosConfigManagerRouteDefinitionWriter 路由配置 配置管理 …...
前端知识速记:节流与防抖
前端知识速记:节流与防抖 什么是防抖? 防抖是一种控制事件触发频率的方法,通常用于处理用户频繁触发事件的场景。防抖的核心思想是将多个连续触发事件合并为一个事件,以减少执行次数。它在以下场景中特别有效: 输入…...
2.攻防世界PHP2及知识点
进入题目页面如下 意思是你能访问这个网站吗? ctrlu、F12查看源码,什么都没有发现 用kali中的dirsearch扫描根目录 命令如下,根据题目提示以及需要查看源码,扫描以php、phps、html为后缀的文件 dirsearch -u http://61.147.17…...
【ubuntu】双系统ubuntu下一键切换到Windows
ubuntu下一键切换到Windows 1.4.1 重启脚本1.4.2 快捷方式1.4.3 移动快捷方式到系统目录 按前文所述文档,开机默认启动ubuntu。Windows切换到Ubuntu直接重启就行了,而Ubuntu切换到Windows稍微有点麻烦。可编辑切换重启到Windows的快捷方式。 1.4.1 重启…...
C#属性和字段(访问修饰符)
不同点逻辑性/灵活性存储性访问性使用范围安全性属性(Property)源于字段,对字段的扩展,逻辑字段并不占用实际的内存可以被其他类访问对接收的数据范围做限定,外部使用增加了数据的安全性字段(Field)不经过逻辑处理占用内存的空间及位置大部分字段不能直接被访问内存使用不安全 …...
Androidstdio-真机调试
显示隐藏设备 手机通过数据线插入电脑 Androidstdio设置中下载USB驱动 选择下载的驱动 更新完成后,在编译器查看,此时真机已经显示出来了 调试app可以在日志中查看日志,详细日志查看方法看前面的帖子 如果有这种日志输出,运行到此…...
2025年美赛B题-结合Logistic阻滞增长模型和SIR传染病模型研究旅游可持续性-成品论文
模型设计思路与创新点: 建模的时候应该先确定我们需要建立什么类的模型?优化类还是统计类?这个题需要大量的数据分析,因此我们可以建立一个统计学模型。 统计学建模思路:观察规律,建立模型,参…...
数据结构【链栈】
基于 C 实现链表栈:原理、代码与应用 一、引言 栈就是一个容器,可以当场一个盒子,只能一个一个拿,一个一个放,而且是从上面放入。 有序顺序栈操作比较容易【会了链栈之后顺序栈自然明白】,所以我们这里只…...
MediaPipe与YOLO已训练模型实现可视化人脸和手势关键点检测
项目首页 - ZiTai_YOLOV11:基于前沿的 MediaPipe 技术与先进的 YOLOv11 预测试模型,精心打造一款强大的实时检测应用。该应用无缝连接摄像头,精准捕捉画面,能即时实现人脸检测、手势识别以及骨骼关键点检测,将检测结果实时、直观地…...
使用 SpringBoot+Thymeleaf 模板引擎进行 Web 开发
目录 一、什么是 Thymeleaf 模板引擎 二、Thymeleaf 模板引擎的 Maven 坐标 三、配置 Thymeleaf 四、访问页面 五、访问静态资源 六、Thymeleaf 使用示例 七、Thymeleaf 常用属性 前言 在现代 Web 开发中,模板引擎被广泛用于将动态内容渲染到静态页面中。Thy…...
pytorch深度Q网络
人工智能例子汇总:AI常见的算法和例子-CSDN博客 DQN 引入了深度神经网络来近似Q函数,解决了传统Q-learning在处理高维状态空间时的瓶颈,尤其是在像 Atari 游戏这样的复杂环境中。DQN的核心思想是使用神经网络 Q(s,a;θ)Q(s, a; \theta)Q(s,…...
list的使用,及部分功能的模拟实现(C++)
目录(文章中"节点"和"结点"是同一个意思) 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list…...
makailio-alias_db模块详解
ALIAS_DB 模块 作者 Daniel-Constantin Mierla micondagmail.com Elena-Ramona Modroiu ramonaasipto.com 编辑 Daniel-Constantin Mierla micondagmail.com 版权 © 2005 Voice Sistem SRL © 2008 asipto.com 目录 管理员指南 概述依赖 2.1 Kamailio 模块 2.2 外…...
【AI】DeepSeek 概念/影响/使用/部署
在大年三十那天,不知道你是否留意到,“deepseek”这个词出现在了各大热搜榜单上。这引起了我的关注,出于学习的兴趣,我深入研究了一番,才有了这篇文章的诞生。 概念 那么,什么是DeepSeek?首先百…...
算法随笔_35: 每日温度
上一篇:算法随笔_34: 最后一个单词的长度-CSDN博客 题目描述如下: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升…...
人工智能入门课【手写自注意力机制】
原理 自注意力(Self-Attention)是一种强大的机制,广泛应用于自然语言处理、计算机视觉等领域,尤其是在Transformer架构中发挥了关键作用。它的核心思想是让模型能够动态地关注输入序列中不同位置之间的关系,从而更好地…...
记7(激活函数+多层神经网络+梯度下降法及其优化
目录 1、激活函数1.1、sigmoid函数:2端饱和,下面2个函数都要幂运算,运算速度会比较慢1.2、ReLU函数(Rectified Linear Unit,修正线性单元)1.3、PReLU函数(Parameteric Rectified Linear Unit&am…...
Qt u盘自动升级软件
Qt u盘自动升级软件 Chapter1 Qt u盘自动升级软件u盘自动升级软件思路:step1. 获取U盘 判断U盘名字是否正确, 升级文件是否存在。step2. 升级step3. 升级界面 Chapter2 Qt 嵌入式设备应用程序,通过U盘升级的一种思路Chapter3 在开发板上运行的…...
关于低代码技术架构的思考
我们经常会看到很多低代码系统的技术架构图,而且经常看不懂。是因为技术架构图没有画好,还是因为技术不够先进,有时候往往都不是。 比如下图: 一个开发者,看到的视角往往都是技术层面,你给用户讲React18、M…...
如何使用 ChatBox AI 简化本地模型对话操作
部署模型请看上一篇帖子:本地部署DeepSeek教程(Mac版本)-CSDN博客 使用 ChatBox AI 简化本地模型对话操作: 打开 ChatBox AI 官网:Chatbox AI官网:办公学习的AI好助手,全平台AI客户端…...
缩位求和——蓝桥杯
1.题目描述 在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。 比如:248153720248153720 把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是 1 位数,得 24814>145 156 56 而…...
hexo部署到github page时,hexo d后page里面绑定的个人域名消失的问题
Hexo 部署博客到 GitHub page 后,可以在 setting 中的 page 中绑定自己的域名,但是我发现更新博客后绑定的域名消失,恢复原始的 githubio 的域名。 后面搜索发现需要在 repo 里面添加 CNAME 文件,内容为 page 里面绑定的域名&…...
neo4j入门
文章目录 neo4j版本说明部署安装Mac部署docker部署 neo4j web工具使用数据结构图数据库VS关系数据库 neo4j neo4j官网Neo4j是用ava实现的开源NoSQL图数据库。Neo4作为图数据库中的代表产品,已经在众多的行业项目中进行了应用,如:网络管理&am…...
代码随想录——回溯
文章目录 组合组合总数电话号码的字母组合组合总数组合总数Ⅱ分割回文串复原IP地址子集子集Ⅱ非递减子序列去重的实现方法方法 1:**排序 跳过重复元素**方法 2:**使用哈希表或数组记录已使用的数字** 去重的完整示例总结本题代码 全排列全排列Ⅱ重新安排…...
独立游戏RPG回顾:高成本
刚看了某纪录片, 内容是rpg项目的回顾。也是这个以钱为核心话题的系列的最后一集。 对这期特别有代入感,因为主角是曾经的同事,曾经在某天晚上听过其项目组的争论。 对其这些年的起伏特别的能体会。 主角是制作人,在访谈中透露这…...
SQLModel入门
目录 概述快速开始官方教程简单使用样例 概述 SQLModel 是一个 ORM 框架,其基于 SQLAlchemy 和 Pydantic,其中 SQLALchemy 提供底层 ORM 能力,Pydantic 提供类型校验能力,SQLModel 中,一个 SQLModel model 既是一个 S…...
关于MySQL InnoDB存储引擎的一些认识
文章目录 一、存储引擎1.MySQL中执行一条SQL语句的过程是怎样的?1.1 MySQL的存储引擎有哪些?1.2 MyIsam和InnoDB有什么区别? 2.MySQL表的结构是什么?2.1 行结构是什么样呢?2.1.1 NULL列表?2.1.2 char和varc…...
【学习笔记】深度学习网络-正则化方法
作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程,深度学习领域研究生必读教材),开始深度学习领域学习,深入全面的理解深度学习的理论知识。 在之前的文章中介绍了深度学习中用…...
NVIDIA (英伟达)的 GPU 产品应用领域
游戏娱乐领域 PC 游戏:NVIDIA 的 GeForce 系列 GPU 是 PC 游戏玩家的首选之一。能实现实时光线追踪、高分辨率渲染等,使游戏画面更加逼真,如《赛博朋克 2077》等支持光线追踪的游戏,在 NVIDIA GPU 的加持下,可呈现出真…...
Docker快速部署高效照片管理系统LibrePhotos搭建私有云相册
文章目录 前言1.关于LibrePhotos2.本地部署LibrePhotos3.LibrePhotos简单使用4. 安装内网穿透5.配置LibrePhotos公网地址6. 配置固定公网地址 前言 想象一下这样的场景:你有一大堆珍贵的回忆照片,但又不想使用各种网盘来管理。怎么办?别担心…...
goframe 多语言国际化解决方案
项目背景 本项目采用基于JSON配置的多语言国际化(i18n)解决方案,支持多种语言的无缝切换和本地化。 目录结构 manifest/ └── i18n/├── zh.json # 简体中文├── zh-tw.json # 繁体中文├── en.json # 英语├…...
mysql如何修改密码
在MySQL中修改密码可以通过多种方式完成,具体取决于你的MySQL版本和你是否有足够的权限。以下是一些常用的方法来修改MySQL用户的密码: 方法1: 使用ALTER USER命令 这是最常用的方法,适用于MySQL 5.7及以上版本。 ALTER USER usernameloca…...
17.2 图形绘制8
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 17.2.10 重绘 先看以下例子: 【例 17.28】【项目:code17-028】绘制填充矩形。 private void button1_Clic…...
Java基础知识总结(三十八)--读取数据
使用Reader体系,读取一个文本文件中的数据。返回 -1 ,标志读到结尾。 import java.io.*; class { public static void main(String[] args) throws IOException { /* 创建可以读取文本文件的流对象,让创建好的流对象和指定的文件相关联。…...
【并查集】
并查集(Disjoint Set Union,DSU)是一种用于处理不相交集合的数据结构,主要支持两种操作:查找(Find)和合并(Union)。它在解决连通性问题、图论问题以及动态连通性等问题时…...
SQL NOW() 函数详解
SQL NOW() 函数详解 引言 在SQL数据库中,NOW() 函数是一个常用的日期和时间函数,用于获取当前的时间戳。本文将详细介绍 NOW() 函数的用法、参数、返回值以及在实际应用中的注意事项。 函数概述 NOW() 函数返回当前的日期和时间,格式为 Y…...
[EAI-023] FAST,机器人动作专用的Tokenizer,提高VLA模型的能力和训练效率
Paper Card 论文标题:FAST: Efficient Action Tokenization for Vision-Language-Action Models 论文作者:Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine 论文链接&…...
Rust 条件语句
Rust 条件语句 在编程语言中,条件语句是进行决策和实现分支逻辑的关键。Rust 语言作为一门系统编程语言,其条件语句的使用同样至关重要。本文将详细介绍 Rust 中的条件语句,包括其基本用法、常见场景以及如何避免常见错误。 基本用法 Rust…...
Windows 上安装 PostgreSQL
Windows 上安装 PostgreSQL PostgreSQL 是一款功能强大的开源对象-关系型数据库系统,它具有出色的扩展性和稳定性。本文将详细介绍在 Windows 操作系统上安装 PostgreSQL 的步骤和注意事项。 1. 准备工作 在开始安装 PostgreSQL 之前,请确保您的计算机满足以下要求: 操作…...
UE 5.3 C++ 对垃圾回收的初步认识
一.UObject的创建 UObject 不支持构造参数。 所有的C UObject都会在引擎启动的时候初始化,然后引擎会调用其默认构造器。如果没有默认的构造器,那么 UObject 将不会编译。 有修改父类参数的需求,就使用指定带参构造 // Sets default value…...
解码,蓝桥杯2020G
a2b 解码后:aab #include<iostream> using namespace std; typedef struct Node {char data;int size;Node* next; }Node,*Linklist; char* scan(char str[],int size) {int i 0;Linklist head new Node;Linklist rear head;while (i<size-1) {Lin…...
【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(一)
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:贪心算法篇–CSDN博客 文章目录 一.贪心算法1.什么是贪心算法2.贪心算法的特点 二.例题1.柠…...
Python3 + Qt5:实现AJAX异步更新UI
使用 Python 和 Qt5 开发时异步加载数据的方法 在开发使用 Python 和 Qt5 的应用程序时,为了避免在加载数据时界面卡顿,可以采用异步加载的方式。以下是几种实现异步加载的方法: 1. 使用多线程(QThread) 通过将数据…...
Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher
Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher Windows系统中Docker可视化工具对比分析1. 工具概览2. Docker Desktop官网链接:主要优点:主要缺点:版本更新频率: 3. Portainer官网…...
从ai产品推荐到利用cursor快速掌握一个开源项目再到langchain手搓一个Text2Sql agent
目录 0. 经验分享:产品推荐 1. 经验分享:提示词优化 2. 经验分享:使用cursor 阅读一篇文章 3. 经验分享:使用cursor 阅读一个完全陌生的开源项目 4. 经验分享:手搓一个text2sql agent (使用langchain l…...
curope python安装
目录 curope安装 测试: 报错:libc10.so: cannot open shared object file: No such file or directory 解决方法: curope安装 git clone : GitHub - Junyi42/croco at bd6f4e07d5c4f13ae5388efc052dadf142aff754 cd models/curope/ python setup.py build_ext --inplac…...
低代码产品插件功能一览
下图是统计的目前市面上流行的低代码、零代码产品的插件功能。 产品名称 产品类型 官方插件数量 支持拓展 官方插件功能 宜搭 零代码 3 暂不支持 云打印、CAD看图、打印表单详情 微搭 低代码 1 暂不支持 小程序 明道云 低代码 2 支持 视图、工作流节点 简道…...
流浪 Linux: 外置 USB SSD 安装 ArchLinux
注: ArchLinux 系统为滚动更新, 变化很快, 所以本文中的安装方法可能很快就过时了, 仅供参考. 实际安装时建议去阅读官方文档. 最近, 突然 (也没有那么突然) 有了一大堆 PC: 4 个笔记本, 2 个台式主机 (M-ATX 主板), 1 个小主机 (迷你主机). 嗯, 多到用不过来. 但是, 窝又不能…...
开启 AI 学习之旅:从入门到精通
最近 AI 真的超火,不管是工作还是生活里,到处都能看到它的身影。好多小伙伴都跑来问我,到底该怎么学 AI 呢?今天我就把自己学习 AI 的经验和心得分享出来,希望能帮到想踏入 AI 领域的朋友们! 一、学习内容有哪些 (一)编程语言 Python 绝对是首选!它在 AI 领域的生态…...
笔记:使用ST-LINK烧录STM32程序怎么样最方便?
一般板子在插件上, 8脚 3.3V;9脚 CLK;10脚 DIO;4脚GND ST_Link 19脚 3.3V;9脚 CLK;7脚 DIO;20脚 GND 烧录软件:ST-LINK Utility,Keil_5; ST_Link 接口针脚定义: 按定义连接ST_Link与电路板; 打开STM32 ST-LINK Uti…...