微服务のGeteWay
目录
概念:
三大核心:
工作流程:
9527网关如何做路由映射:
GetWay高级特性:
按服务名动态路由服务:
断言Route Predicate Factories :
获取当前时区时间:
After Route :
例:
Before,Between 同理:
Cookie Route :
Header Route :
自定义断言 :
Filter过滤器:
1. Filter的作用
2. Filter的分类
1. Pre Filter(前置过滤器)
2. Post Filter(后置过滤器)
3. Error Filter(错误过滤器)
例
请求头AddRequestHeader :
请求参数 RemoveRequestParameter和AddRequestParameter
请求回应ResponseHeader:
前缀和路径相关组:
全局过滤器:
自定义条件Filter:
概念:
微服务中网关在哪里?
三大核心:
Route路由 ,Predicate断言,Filter过滤器
工作流程:
核心逻辑:路由转发,断言判断,执行过滤器链
9527网关如何做路由映射:
前提:
我们需要提前把GeteWay服务注册到consul当中
核心:配置yml
server:port: 9527spring:application:name: cloud-gateway #以微服务注册进consul或nacos服务列表内cloud:consul: #配置consul地址host: localhostport: 8500discovery:prefer-ip-address: trueservice-name: ${spring.application.name}gateway:routes:- id: pay_routh1 #pay_routh1 #路由的ID(类似mysql主键ID),没有固定规则但要求唯一,建议配合服务名uri: http://localhost:8001 #匹配后提供服务的路由地址predicates:- Path=/pay/gateway/get/** # 断言,路径相匹配的进行路由- id: pay_routh2 #pay_routh2 #路由的ID(类似mysql主键ID),没有固定规则但要求唯一,建议配合服务名uri: http://localhost:8001 #匹配后提供服务的路由地址predicates:- Path=/pay/gateway/info/** # 断言,路径相匹配的进行路由
隐真示假 ,让用户不知道我们真正的地址:
没有使用GeteWay之前访问的路径是 http://localhost:8001/pay/gateway/get/1
使用了GeteWay之后可以使用http://localhost:9527/pay/gateway/get/1
将feignclient请求的微服务更改为注册中心的geteway:
先启动 8001微服务和feign80,可以看到请求失败:
启动9527网关后,请求成功,说明现在请求微服务必须通过geteway,配置成功:
GetWay高级特性:
按服务名动态路由服务:
格式:
uri:lb://service
微服务名为cloud-payment-service,通过使用注册中心的微服务名称,就可以动态的配置路由地址,配置如下:
断言Route Predicate Factories :
官网地址:点击跳转
通过断言判断请求是否路由到微服务。
获取当前时区时间:
在讲解之前,我们需要先知道如何获取默认时区时间
public static void main(String[] args) {ZonedDateTime zbj = ZonedDateTime.now(); // 默认时区System.out.println(zbj); }
After Route :
官网描述如下:
表示只有在当前时间之后,该路由才会被匹配。
例:
yml配置格式 ,我配置的时间是大于当前时间的,但我们必须要在该时间后才能访问到:
spring:
cloud:
gateway:
routes:
- id: route1
uri: http://localhost:8081
predicates:
- Path=/api/**
- After=2024-12-26T17:31:14.523838700+08:00[Asia/Shanghai]
访问结果如下:
Before,Between 同理:
Cookie Route :
官方描述如下:
通过键值对的方式配置Cookie,访问时必须带上Cookie,否则访问不到服务。
Header Route :
请求头要有X-Request-Id属性并且值为整数的正则表达式
其他的断言用到了请查阅官方文档,写得很详细
自定义断言 :
@Component
public class MyRoutePredicateFactory extends AbstractRoutePredicateFactory<MyRoutePredicateFactory.Config>
{public MyRoutePredicateFactory(){super(MyRoutePredicateFactory.Config.class);}@Validatedpublic static class Config{@Setter@Getter@NotEmptyprivate String userType; //钻、金、银等用户等级}@Overridepublic Predicate<ServerWebExchange> apply(MyRoutePredicateFactory.Config config){return new Predicate<ServerWebExchange>(){@Overridepublic boolean test(ServerWebExchange serverWebExchange){//检查request的参数里面,userType是否为指定的值,符合配置就通过String userType = serverWebExchange.getRequest().getQueryParams().getFirst("userType");if (userType == null) return false;//如果说参数存在,就和config的数据进行比较if(userType.equals(config.getUserType())) {return true;}return false;}};}//开启shortcut支持@Overridepublic List<String> shortcutFieldOrder() {return Collections.singletonList("userType");}
}
YML配置:
必须加上usertype=diamond才能访问的服务
Filter过滤器:
官方文档:点击跳转
1. Filter的作用
Filters 通常用于以下几种场景:
- 请求预处理:对请求进行检查、修改、验证或转换,如请求数据格式化、认证、限流、日志记录等。
- 响应后处理:在响应数据返回客户端之前进行处理,如数据加密、响应格式化、缓存处理等。
- 路由转发:基于请求中的一些特定信息(如URL路径、请求头、请求参数等)决定如何路由请求。
2. Filter的分类
在不同的网关架构中,Filter的分类有所不同。以 Spring Cloud Gateway 和 API Gateway 为例,它们通常将 Filter 分为以下几种类型:
1. Pre Filter(前置过滤器)
前置过滤器在请求到达服务之前执行。它们可以用来进行:
- 身份验证:如检查JWT令牌是否合法。
- 日志记录:记录请求的信息。
- 限流:检查请求是否超过某些限制。
2. Post Filter(后置过滤器)
后置过滤器在服务响应后,客户端接收到响应之前执行。它们可以用来:
- 修改响应:比如修改响应体或响应头。
- 性能监控:计算请求处理时间,进行性能分析。
- 缓存处理:根据某些条件返回缓存的响应。
3. Error Filter(错误过滤器)
错误过滤器用于处理请求过程中发生的错误。例如:
- 统一错误处理:当发生异常时,返回特定的错误响应。
- 日志记录:记录错误信息以便后续分析。
例
请求头AddRequestHeader :
是 Spring Cloud Gateway 中的一个 GatewayFilter 工厂,用于在请求转发之前,向请求中添加自定义的 HTTP 请求头。
向服务端新增方法:
@GetMapping(value = "/pay/gateway/filter")public ResultData<String> getGatewayFilter(HttpServletRequest request){String result = "";Enumeration<String> headers = request.getHeaderNames();while(headers.hasMoreElements()){String headName = headers.nextElement();String headValue = request.getHeader(headName);System.out.println("请求头名: " + headName +"\t\t\t"+"请求头值: " + headValue);if(headName.equalsIgnoreCase("X-Request-atguigu1")|| headName.equalsIgnoreCase("X-Request-atguigu2")) {result = result+headName + "\t " + headValue +" ";}}return ResultData.success("getGatewayFilter 过滤器 test: "+result+" \t "+ DateUtil.now());}
yml配置:
- id: pay_routh3 #pay_routh3uri: lb://cloud-payment-service #匹配后提供服务的路由地址predicates:- Path=/pay/gateway/filter/** # 断言,路径相匹配的进行路由filters:- AddRequestHeader=X-Request-atguigu1,atguiguValue1 # 请求头kv,若一头含有多参则重写一行设置- AddRequestHeader=X-Request-atguigu2,atguiguValue2
运行结果:
请求参数 RemoveRequestParameter和
AddRequestParameter
打印输入的参数
System.out.println("=============================================");String customerId = request.getParameter("customerId");System.out.println("request Parameter customerId: "+customerId);String customerName = request.getParameter("customerName");System.out.println("request Parameter customerName: "+customerName);System.out.println("=============================================");
yml添加:
- AddRequestParameter=customerId,9527001 # 新增请求参数Parameter:k ,v - RemoveRequestParameter=customerName # 删除url请求参数customerName,你传递过来也是null
测试请求的路径;
http://localhost:9527/pay/gateway/filter?customerId=9999&customerName=z3
打印结果:
可以发现添加到参数会覆盖原有的值,移除的参数就算是传值也会被置为null
请求回应ResponseHeader:
修改之前的响应头:
配置yml:
- AddResponseHeader=X-Response-atguigu, BlueResponse # 新增请求参数X-Response-atguigu并设值为BlueResponse - SetResponseHeader=Date,2099-11-11 # 设置回应头Date值为2099-11-11 - RemoveResponseHeader=Content-Type # 将默认自带Content-Type回应属性删除
修改后响应头:
前缀和路径相关组:
The PrefixPath GatewayFilter Factory
The SetPath GatewayFilter Factory
The RedirectTo GatewayFilter Factory
全局过滤器:
官方文档:点击跳转
新建global类:
package com.atguigu.cloud.mygateway;import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;import java.util.Map;@Component
@Slf4j
public class MyGlobalFilter implements GlobalFilter, Ordered {public final static String BEGIN_VISIT_TIME = "beginVisitTime";@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//记录访问接口开始时间exchange.getAttributes().put(BEGIN_VISIT_TIME, System.currentTimeMillis());//返回统计的各个结果给后台return chain.filter(exchange).then(Mono.fromRunnable(()->{Long beginVisitTime = exchange.getAttribute(BEGIN_VISIT_TIME);if(beginVisitTime != null){log.info("访问接口主机:"+exchange.getRequest().getURI().getHost());log.info("访问接口端口:"+exchange.getRequest().getURI().getPort());log.info("访问接口URL:"+exchange.getRequest().getURI().getPath());log.info("访问接口URL后面的参数:"+exchange.getRequest().getURI().getRawQuery());log.info("访问接口时长:"+(System.currentTimeMillis()-beginVisitTime)+"毫秒");log.info("=================分割线======================");System.out.println();}}));}@Overridepublic int getOrder() {return 0;}
}
yml:
测试结果:
自定义条件Filter:
过滤条件是 必须带有 ’yuanshen‘的请求参数
package com.atguigu.cloud.mygateway;import lombok.Getter;
import lombok.Setter;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.cloud.gateway.filter.factory.SetPathGatewayFilterFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;import java.util.Arrays;
import java.util.List;@Component
public class MyGatewayFilterFactory extends AbstractGatewayFilterFactory<MyGatewayFilterFactory.Config>
{public MyGatewayFilterFactory(){super(MyGatewayFilterFactory.Config.class);}@Overridepublic GatewayFilter apply(MyGatewayFilterFactory.Config config){return new GatewayFilter(){@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain){ServerHttpRequest request = exchange.getRequest();System.out.println("进入了自定义网关过滤器MyGatewayFilterFactory,status:"+config.getStatus());if(request.getQueryParams().containsKey("atguigu")){return chain.filter(exchange);}else{exchange.getResponse().setStatusCode(HttpStatus.BAD_REQUEST);return exchange.getResponse().setComplete();}}};}@Overridepublic List<String> shortcutFieldOrder() {return Arrays.asList("status");}public static class Config{@Getter@Setterprivate String status;//设定一个状态值/标志位,它等于多少,匹配和才可以访问}
}
//单一内置过滤器GatewayFilter
yml:
补充:
对应关系:
相关文章:
微服务のGeteWay
目录 概念: 三大核心: 工作流程: 9527网关如何做路由映射: GetWay高级特性: 按服务名动态路由服务: 断言Route Predicate Factories : 获取当前时区时间: After Route &…...
Golang 中 Goroutine 的调度
Golang 中 Goroutine 的调度 Golang 中的 Goroutine 是一种轻量级的线程,由 Go 运行时(runtime)自动管理。Goroutine 的调度基于 M:N 模型,即多个 Goroutine 可以映射到多个操作系统线程上执行。以下是详细的调度过程和策略&…...
MyBatis使用的设计模式
目录 1. 工厂模式(Factory Pattern) 2. 单例模式(Singleton Pattern) 3. 代理模式(Proxy Pattern) 4. 装饰器模式(Decorator Pattern) 5. 观察者模式(Observer Patt…...
淺談Cocos2djs逆向
前言 簡單聊一下cocos2djs手遊的逆向,有任何相關想法歡迎和我討論^^ 一些概念 列出一些個人認為比較有用的概念: Cocos遊戲的兩大開發工具分別是CocosCreator和CocosStudio,區別是前者是cocos2djs專用的開發工具,後者則是coco…...
选择器(结构伪类选择器,伪元素选择器),PxCook软件,盒子模型
结构为类选择器 伪元素选择器 PxCook 盒子模型 (内外边距,边框) 内外边距合并,塌陷问题 元素溢出 圆角 阴影: 模糊半径:越大越模糊,也就是越柔和 案例一:产品卡片 <!DOCTYPE html> <html lang&q…...
CentOS 7系统 OpenSSH和OpenSSL版本升级指南
文章目录 CentOS 7系统 OpenSSH和OpenSSL版本升级指南环境说明当前系统版本当前组件版本 现存安全漏洞升级目标版本升级准备工作OpenSSL升级步骤1. 下载和解压2. 编译安装3. 配置环境 OpenSSH升级步骤1. 下载和解压2. 编译安装3. 创建systemd服务配置4. 更新SSH配置文件5. 设置…...
使用 Comparable 和 Comparator 接口对集合排序
使用 Comparable 和 Comparator 接口对集合排序: 1. 使用 Comparable 接口: 当你希望一个类的对象能够按照某种自然顺序进行排序时,可以实现 Comparable 接口 并重写 compareTo() 方法。 实现步骤: 1.1 实现 Comparable<T&g…...
最新常见的图数据库对比,选型,架构,性能对比
图数据库排名 地址:https://db-engines.com/en/ranking/graphdbms 知识图谱查询语言 SPARQL、Cypher、Gremlin、PGQL 和 G-CORE 语法 / 语义 / 特性 SPARQL Cypher Gremlin PGQL G-CORE 图模式匹配查询 语法 CGP CGP CGP(无可选)1 CGP CGP 语义 子…...
混合合并两个pdf文件
混合两个pdf 1、在线免费交替和混合奇数和偶数PDF页面2、有什么软件把两个 PDF 交叉合并?3、pdfsam本地合并 如何Google翻译的原文和译文合并,(沉浸式翻译效果相对较好) 1、在线免费交替和混合奇数和偶数PDF页面 https://deftpd…...
OpenCV-Python实战(9)——滤波降噪
一、均值滤波器 cv2.blur() img cv2.blur(src*,ksize*,anchor*,borderType*)img:目标图像。 src:原始图像。 ksize:滤波核大小,(width,height)。 anchor:滤波核锚点,…...
uniapp——微信小程序读取bin文件,解析文件的数据内容(三)
微信小程序读取bin文件内容 读取用户选择bin文件,并解析数据内容,分包发送给蓝牙设备; 文章目录 微信小程序读取bin文件内容读取文件读取内容返回格式 API文档: getFileSystemManager 关于App端读取bin文件,请查看&…...
Python 中常用的算法
1. 排序算法 用于将数据按特定顺序排列。 冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)快速排序(Quick Sort)归并排序(Merge Sort…...
xadmin后台首页增加一个导入数据按钮
xadmin后台首页增加一个导入数据按钮 效果 流程 1、在添加小组件中添加一个html页面 2、写入html代码 3、在urls.py添加导入数据路由 4、在views.py中添加响应函数html代码 <!DOCTYPE html> <html lang...
Kubernetes: NetworkPolicy 的实践应用
一、Network Policy 是什么,在云原生领域有和作用 Network Policy 是 Kubernetes 官方提出来的一种网络策略的规范,用户通过编写符合对应规范的规则来控制 k8s 集群内 L3 和 L4 层的网络流量。 NetworkPolicy 主要的功能就是实现在云原生领域的容器网络管控它给用…...
计算机体系结构期末复习3:GPU架构及控制流问题
目录 一、GPU设计思路 1.简化流水线、增加核数 2.单指令多线程(SIMT) 3.同时驻留大量线程 4.总思路:多线程单指令多线程 二、GPU的控制流问题 1.什么是控制流问题 2.怎么应对分支分歧 一、GPU设计思路 1.简化流水线、增加核数 2.单指…...
excel怎么删除右边无限列(亲测有效)
excel怎么删除右边无限列(亲测有效) 网上很多只用第1步的,删除了根本没用,还是存在,但是隐藏后取消隐藏却是可以的。 找到右边要删除的列的第一个空白列,选中整个列按“ctrlshift>(向右的小箭头)”&am…...
ChatGPT-4助力学术论文提升文章逻辑、优化句式与扩充内容等应用技巧解析。附提示词案例
目录 1.扩写(expansion/paraphrasing) 2.优化(optimization) 3.缩写(optimization) 4.提取关键词(keyword extraction) 5.短语转换(phrase transformationÿ…...
C++和OpenGL实现3D游戏编程【连载19】——着色器光照初步(平行光和光照贴图)(附源码)
1、本节要实现的内容 我们在前期的教程中,讨论了在即时渲染模式下的光照内容。但在我们后期使用着色器的核心模式下,会经常在着色器中使光照,我们这里就讨论一下着色器光照效果,以及光照贴图效果,同时这里知识会为后期的更多光照效果做一些铺垫。本节我们首先讨论冯氏光照…...
html+css网页制作 美食 美食网5个页面
htmlcss网页制作 美食 美食网5个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1࿰…...
Mac 12.1安装tiger-vnc问题-routines:CRYPTO_internal:bad key length
背景:因为某些原因需要从本地mac连接远程linxu桌面查看一些内容,必须使用桌面查看,所以ssh无法满足,所以决定安装vnc客户端。 问题: 在mac上通过 brew install tiger-vnc命令安装, 但是报错如下: > D…...
遥感图像车辆检测-目标检测数据集
遥感图像车辆检测-目标检测数据集(包括VOC格式、YOLO格式) 数据集: 链接: https://pan.baidu.com/s/1XVlRTVWpXZFi6ZL_Xcs7Rg?pwdaa6g 提取码: aa6g 数据集信息介绍: 共有 1035 张图像和一一对应的标注文件 标注文件格式提供了…...
51c自动驾驶~合集43
我自己的原文哦~ https://blog.51cto.com/whaosoft/12930230 #ChatDyn 上交大最新ChatDyn:一句话操纵三维动态 理解和生成真实的三维虚拟世界是空间智能的核心。所生成的三维虚拟世界能够为自动驾驶、具身智能等AI系统提供高质量闭环仿真训练场,高效…...
随机变量是一个函数-如何理解
文章目录 一. 随机变量二. 随机变量是一个函数-栗子(一对一)1. 掷骰子的随机变量2. 掷骰子的随机变量(求点数平方)3. 抛硬币的随机变量4. 学生考试得分的随机变量 三. 随机变量是一个函数-理解(多对一) 一. 随机变量 随机变量就是定义在样本空间上的函数…...
云计算在医疗行业的应用
云计算在医疗行业的应用广泛而深入,为医疗服务带来了前所未有的变革。以下是对云计算在医疗行业应用的详细解析: ### 一、医疗数据共享与整合 云计算平台具有强大的数据存储和处理能力,使得医疗数据共享与整合成为可能。通过云计算平台&…...
Cursor提示词
你是一位经验丰富的项目经理,对于用户每一次提出的问题,都不急于编写代码,更多是通过深思熱虑、结构化的推理以产生高质量的回答,探索更多的可能方案,并从中寻找最佳方案。 约束 代码必须可以通过编译回答尽量使用中…...
C++ 设计模式:单例模式(Singleton Pattern)
链接:C 设计模式 链接:C 设计模式 - 享元模式 单例模式(Singleton Pattern)是创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。单例模式在需要全局共享资源或控制实例数量的…...
C++中生成0到180之间的随机数
在C中生成0到180之间的随机数,可以使用标准库中的和头文件。提供了rand()函数来生成随机数,而提供了time()函数来设置随机数生成的种子。这样每次运行程序时,生成的随机数序列都会不同。 以下是一个简单的示例代码,展示了如何生成…...
[.闲于修.]Autosar_UDS_笔记篇_ISO14229-1
前言:闲来无事,摸鱼无趣,准备细读一下14229,记录一些容易被忽略掉的内容 正文:(以下数字代表章节) 7、Application layer protocol 7.5.6 多个并发请求消息 常见的服务器实现在服务器中只有一…...
如何利用云计算进行灾难恢复?
云计算环境下的灾难恢复实践指南 天有不测风云,企业的IT系统也一样,我见过太多因为没有做好灾备而吃大亏的案例。今天就和大家聊聊如何用云计算来做灾难恢复。 一个惊心动魄的真实案例:某电商平台的主数据中心因为市政施工不小心挖断了光纤…...
Redis - 1 ( 7000 字 Redis 入门级教程 )
一: Redis 1.1 Redis 简介 Redis 是一种基于键值对(key-value)的 NoSQL 数据库,与其他键值对数据库不同,Redis 的值可以是多种数据结构和算法的组合,如字符串(string)、哈希&#…...
[羊城杯 2024]不一样的数据库_2
题目描述: 压缩包6 (1).zip需要解压密码: 尝试用ARCHPR工具爆破一下: (字典可自行在github上查找) 解压密码为:753951 解压得到13.png和Kee.kdbx文件: 二维码图片看上去只缺了正常的三个角&…...
租赁系统的数字化转型与高效管理新模式分析
内容概要 在当今瞬息万变的市场环境中,租赁系统的数字化转型显得尤为重要。信息技术的迅猛发展不仅改变了我们的生活方式,也迫使企业重新审视其运营模式。为了顺应这一潮流,租赁系统亟需通过高效管理新模式来提升运营效率,从而保…...
Selenium+Java(21):Jenkins发送邮件报错Not sent to the following valid addresses解决方案
问题现象 小月妹妹近期在做RobotFrameWork自动化测试,并且使用Jenkins发送测试邮件的时候,发现报错Not sent to the following valid addresses,明明各个配置项看起来都没有问题,但是一到邮件发送环节,就是发送不出去,而且还不提示太多有用的信息,急的妹妹脸都红了,于…...
【每日学点鸿蒙知识】文字识别、快捷登录、输入法按钮监听、IDE自动换行、资产访问等
【每日学点鸿蒙知识】24.09.07 1、API使用: hms.ai.ocr.textRecognition(文字识别)? 需要接入API文档https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/core-vision-text-recognition-api-V5中的文字识别…...
LabVIEW化工实验室设备故障实时监测
化工实验室中,各类设备的运行状态直接影响实验的精度与安全性。特别是重要分析仪器的突发故障,可能导致实验中断或数据失效。为了实现设备运行状态的实时监控与故障快速响应,本文提出了一套基于LabVIEW的解决方案,通过多参数采集、…...
小程序学习05——uniapp路由和菜单配置
目录 一、路由 二、如何管理页面及路由? 三、pages.json 页面路由 四、 tabBar 一、路由 路由:在前端,往往指代用不同地址请求不同页面,决定了用户如何在应用的不同页面之间导航。 菜单:对于每个路径(…...
漏洞分析 | Apache Struts文件上传漏洞(CVE-2024-53677)
漏洞概述 Apache Struts是美国阿帕奇(Apache)基金会的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架。 近期,网宿安全演武实验室监测到Apache Struts在特定条件下,存在文件上传漏洞(网宿评…...
【VBA】EXCEL - VBA 遍历工作表的 5 种方法,以及注意事项
目录 1. 遍历单列数据并赋值 2. 遍历整个工作表的数据区域并赋值 3. 遍历指定范围的数据并赋值 4. 遍历多列数据并赋值 5. 遍历所有工作表中的数据并赋值 注意事项: 1. 遍历单列数据并赋值 Sub UpdateColumnData()Dim ws As WorksheetSet ws ThisWorkbook.S…...
CSS浮动
浮动 可以让块级元素待在一行,紧挨着,没有空格 float:left 浮动的元素会脱离正常的文档系统,像浮云一样飘起来浮动元素后面的正常元素会自动补位浮动元素会被父元素的宽高所束缚,所以不算完全的脱离文档流当浮动元素…...
gitlab 还原合并请求
事情是这样的: 菜鸡从 test 分支切了个名为 pref-art 的分支出来,发布后一机灵,发现错了,于是在本地用 git branch -d pref-art 将该分支删掉了。之后切到了 prod 分支,再切出了一个相同名称的 pref-art 分支出来&…...
【GPT】Coze使用开放平台接口-【8】创建应用
coze 可以用来创建简单的应用啦,这样测试起来会比原本的 Agent 更加方便,我们来看看如何创建一个“语音Real不Real”的应用。这个应用就是来检测语音是否是伪造的,克隆或者是合成的。先看下原本 Agent 的样子: 深度伪造语音检测&a…...
海外盲盒系统开发,助力企业全球化发展
近几年来,在海外市场中,盲盒已经成为了一种新的时尚单品,深受东南亚等海外消费者的喜爱。同时,泡泡玛特在海外的成功也为国内企业提供了发展机遇,盲盒出海具有广阔的发展前景! 随着信息技术的快速发展&a…...
pytorch 梯度判断函数介绍
PyTorch 提供了一些函数用于判断当前的梯度计算状态以及张量是否需要梯度。这些函数帮助开发者在训练、推理和调试过程中了解和控制梯度计算行为。 PyTorch 梯度判断函数 1. torch.is_grad_enabled() 功能: 判断当前是否启用了全局的梯度计算状态。返回值: 布尔值,True 表…...
每日一题 367. 有效的完全平方数
367. 有效的完全平方数 低效率法 class Solution { public:bool isPerfectSquare(int num) {if(num 1){return true;}long num1 num;for(int i1;i< num/2;i){if((long)(i)*i num){return true;}}return false;} };二分法 class Solution { public:bool isPerfectSquar…...
图像转换 VM与其他格式互转
目录 前言 图像转换 1.相机取流转VM对应类型图像格式 1.1 相机采图转流程输入和Group输入(ImageBaseData_V2) 1.2 相机采图转图像源SDK输入(ImageBaseData) 1.3 相机采图转模块输入(InputImageData) 1.4 相机采图转算子输入(CmvdImage) 2.Bitmap取图与VM对应图像格式互…...
streamlit、shiny、gradio、fastapi四个web APP平台体验
streamlit、shiny、gradio、fastapi四个web APP平台体验 经常被问的问题就是:web APP平台哪个好?该用哪个?刚开始只有用streamlit和shiny,最近体验了一下gradio和fastapi,今天根据自己的体会尝试着回答一下。 使用R语…...
BootstrapTable处理表格
需求背景 历史项目使用 BootstrapTable 作为前端组件 应客户需要调整: 冻结前四列对于大文本文字显示部分内容,鼠标悬浮显示完整内容 冻结列 1、引入相关CSS,JS CSS <link rel"stylesheet" href"/css/bootstrap.min.css"> …...
家政预约小程序04活动管理表结构设计
目录 1 创建活动表2 创建活动规则表3 创建活动参与记录表总结 为了满足我们日常的营销,我们通常需要搞一些活动,比如满减、折扣、团购等。启动活动后,会在首页进行显示,当用户访问小程序的时候,就可以参与活动…...
WPF使用OpenCvSharp4
WPF使用OpenCvSharp4 创建项目安装OpenCvSharp4 创建项目 安装OpenCvSharp4 在解决方案资源管理器中,右键单击项目名称,选择“管理 NuGet 包”。搜索并安装以下包: OpenCvSharp4OpenCvSharp4.ExtensionsOpenCvSharp4.runtime.winSystem.Man…...
STM32-笔记23-超声波传感器HC-SR04
一、简介 HC-SR04 工作参数: • 探测距离:2~600cm • 探测精度:0.1cm1% • 感应角度:<15 • 输出方式:GPIO • 工作电压:DC 3~5.5V • 工作电流:5.3mA • 工作温度:-40~85℃ 怎么…...