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

Gateway实战入门(四)、断言-请求头以及请求权重分流等

spring cloud-Gateway:断言-请求头以及请求权重分流等

    • 一、断言Header信息要求
      • 项目前置环境要求
      • 案例一、断言-请求头信息-匹配X-Request-Id
        • 1、配置文件及代码
        • 2、测试
      • 案例二、断言-请求头信息-匹配API版本
        • 场景
        • 主要配置信息
      • 案例三、断言-请求头信息:匹配请求来源
        • 场景
        • 主要配置信息
      • 案例四、断言-请求头信息:匹配用户权限/角色
        • 场景
        • 主要配置信息
    • 二、断言-请求方式
      • 案例、请求方式Demo
        • 主要配置信息
        • 测试
    • 三、断言-查询条件
      • 案例、断言-查询条件QueryDemo
        • 主要配置信息
        • 测试
    • 四、断言-将请求按设定的权重进行分流
      • 涉及到要用权重分流的场景
      • 案例、断言-WeightDemo
        • 主要配置信息
        • 测试

一、断言Header信息要求

需要参数header 和regexp(正则表达式),即key和value,匹配请求携带的信息。实际就是对应请求头携带的信息,官网的案例是X-Request-Id,所以我们第一个案例就以它为例 ;)

项目前置环境要求

  • 启动nacos服务,对应版本: 2.2.3 ,jdk1.8或以上。
  • 至少1个服务提供者,端口9001,提供一个web接口,【我的是/hello,下文也是以此接口为例】;
  • 一个网关服务端口 9966 ;

案例一、断言-请求头信息-匹配X-Request-Id

1、配置文件及代码

网关gateway的yaml配置文件:

server:port: 9966
spring:application:name: gateway-servicecloud:nacos:discovery:server-addr: 192.168.0.103:80gateway:discovery:locator:enabled: false # 关闭注册中心路由功能routes:- id: nacos-provideruri: lb://nacos-provider #路由到注册中心,服务为nacos-provider的服务predicates:- Path=/nancy/** # 路径匹配,则进行路由- Header=X-Request-Id,\d+ #表示数字filters:- StripPrefix=1 # 截取掉断言路径的第一部分
management:endpoint:web:exposure:include: '*'

网关gateway主启动类:

package com.nancy.gateway9966;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient
@SpringBootApplication
public class Gateway9966Application {public static void main(String[] args) {SpringApplication.run(Gateway9966Application.class, args);}
}

服务提供者9001,接口

/*** @Auther: gina* @Date: 2025-03-10* @Description:*/
@RestController
@Slf4j
public class UserController {@GetMapping("/hello")public String hello(HttpServletRequest request) {log.info("........Nacos Provider run.......... ");return "9001-----hello Nancy...";}
}

服务提供者yaml

server:port: 9001spring:application:name: nacos-providercloud:discovery:server-addr: 192.168.0.103:80
management:endpoint:web:exposure:include: '*'

服务提供者主启动类

@EnableDiscoveryClient
@SpringBootApplication
public class NacosProvider9001Application {public static void main(String[] args) {SpringApplication.run(NacosProvider9001Application.class, args);}}

服务提供者,引入maven依赖

 		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
2、测试

启动9001服务,gateway9966网关侧服务。访问链接:http://localhost:9966/nancy/hello
在这里插入图片描述

案例二、断言-请求头信息-匹配API版本

场景

案例一的粒度要粗一些,属于服务之间的隔离;但实际工作中会有粒度更细的场景,比如API 可以同时存在多个版本的场景,举个实际场景的例子:
手机APP,新业务迭代,对于老版本app也要做兼容,但老app界面框架无法更改(涉及到合规和用户体验的考量,一般不会选择强制更新),这时就会有相同业务不同api版本的诉求。

而落地实现的方式之一,可以基于spring cloud 的gateway 的断言来实现,通过断言做API版本隔离,不同版本路由到不同的服务;话不多说直接上实例。

主要配置信息

网关gateway9966的yaml文件关于路由的内容设置:

 spring:cloud:gateway:routes:- id: route_api_v1uri: http://nacos-consumer/testV1predicates:- Header=X-API-Version, 1.1.0  # 如果 API 版本为 1.1.0,则路由到 v1 服务- id: route_api_v2uri: http://nacos-consumer/testV2predicates:- Header=X-API-Version, 1.2.0  # 如果 API 版本为 1.2.0,则路由到 v2 服务

测试同案例一,不再赘述。

案例三、断言-请求头信息:匹配请求来源

场景

在处理跨域请求时,会在请求Header中添加Origin字段。使用Header断言可以根据Origin字段的值判断请求的来源,从而设定只限某些来源的请求来访问资源。

主要配置信息

gateway网关侧yaml文件主要配置信息如下:

spring:cloud:gateway:routes:- id: allowed_origin_routeuri: http://backend-servicepredicates:- Header=Origin, https://nancy.com  # 只允许来自 https://nancy.com 的请求

案例四、断言-请求头信息:匹配用户权限/角色

场景

微服务架构中,在请求Header里可能会增加用户的角色信息,比如X-User-Role。基于 此断言的Header信息里用户的角色,将请求路由到不同的资源或服务。

主要配置信息

gateway网关侧yaml文件主要配置信息如下:

spring:cloud:gateway:routes:- id: admin_routeuri: http://nacos-consumer/adminpredicates:- Header=X-User-Role, admin  # 用户角色是管理员,则路由到admin服务- id: user_routeuri: http://nacos-consumer/userpredicates:- Header=X-User-Role, user  # 用户角色是普通用户,则路由到user服务

二、断言-请求方式

Method:可以设置一个或多个参数,匹配HTTP请求,比如GET、POST

案例、请求方式Demo

主要配置信息
server:port: 9966
spring:application:name: gateway-servicecloud:nacos:discovery:server-addr: 192.168.0.103:80gateway:discovery:locator:enabled: false # 开启注册中心路由功能routes:- id: nacos-provideruri: lb://nacos-provider #路由到注册中心,服务为nacos-provider的服务predicates:- Path=/nancy/** # 路径匹配,则进行路由- Method=POST,GET # 匹配GET请求或者POST请求filters:- StripPrefix=1 # 截取掉断言路径的第一部分
management:endpoint:web:exposure:include: '*'
测试

访问路径:http://localhost:9966/nancy/hello
1、代码中设置的请求方式只有post和get两种,如果访问put方式,会报404,如图:
在这里插入图片描述
2、如果请求方式设置为get,则接口是通的,由网关路由到9002端口的hello接口,如下图:
在这里插入图片描述

三、断言-查询条件

案例、断言-查询条件QueryDemo

Query:需要指定一个或者多个参数,一个必须参数和一个可选的正则表达式,匹配请求中是否包含第一个参数,
如果有两个参数,则匹配请求中第一个参数的值是否符合正则表达式。

主要配置信息

gateway的配置信息

server:port: 9966
spring:application:name: gateway-servicecloud:nacos:discovery:server-addr: 192.168.0.103:80gateway:discovery:locator:enabled: false # 开启注册中心路由功能routes:- id: nacos-provideruri: lb://nacos-provider #路由到注册中心,服务为nacos-provider的服务predicates:- Path=/nancy/** # 路径匹配,则进行路由- Query=id,.+ # 匹配请求参数,这里如果需要匹配多个参数,可以写多个Queryfilters:- StripPrefix=1 # 截取掉断言路径的第一部分
management:endpoint:web:exposure:include: '*'
测试

测试链接:http://localhost:9966/nancy/hello
当不传id时,测试不通过:
在这里插入图片描述

传id以及value值时,测试通过:
在这里插入图片描述

四、断言-将请求按设定的权重进行分流

实现路由权重,需要参数 group 和weight(int);按照路由权重选择同一个分组中的路由。

涉及到要用权重分流的场景

案例、断言-WeightDemo

gateway的配置信息
该路由配置 约 80%的流量转发到服务 nacos-consumer ,约20%的流量转发给服务nacos-consumer-openFeign
路由属性Weight接收两个参数:groupweight(int),分流权重按组计算,在断言里配置权重路由配置如下:

主要配置信息

gateway的yaml文件配置如下:

 server:port: 9999
spring:application:name: gateway-servicecloud:nacos:discovery:server-addr: 172.18.101.197:80gateway:discovery:locator:enabled: false # 开启注册中心路由功能routes:# 配置流量分流权重- id: nacos-consumer-routeruri: lb://nacos-consumer #路由到注册中心,服务为nacos-consumer的服务predicates:- Path=/testC/** # 路径匹配,则进行路由- Weight=group1, 2filters:- StripPrefix=1 # 截取掉断言路径的第一部分- id: nacos-consumer-openfeignuri: lb://nacos-consumer-openfeign #路由到注册中心,服务为nacos-consumer的服务predicates:- Path=/testC/** # 路径匹配,则进行路由- Weight=group1, 8filters:- StripPrefix=1 # 截取掉断言路径的第一部分management:endpoint:web:exposure:include: '*'

9101和9102接口,分别为:
接口映射明不变,返回值为对应端口

	//9102static  AtomicInteger a1=new AtomicInteger(0);@GetMapping("/abTest")public String versionB() throws InterruptedException {log.info("端口9102 调用次数 " + a1.incrementAndGet());return "version_B--9102";}//9101private static AtomicInteger a = new AtomicInteger(0);@GetMapping("/abTest")@SentinelResource(value = "version_A")public String versionB() throws InterruptedException {log.info("端口9101 调用次数 " + a.incrementAndGet());return "version_A--9101";} 
测试

启动三个服务,注册中心可以看到服务均已注册成功:
在这里插入图片描述
测试链接:http://localhost:9999/testC/abTest
验证分流情况,预期结果:9101 约20%的流量,9102约80%的流量。
实际结果:
通过jmeter测试,总请求数量设定1000,从控制台可观测到结果:
在这里插入图片描述

在这里插入图片描述
可看出请求分流权重,实际结果跟预期相符。

相关文章:

Gateway实战入门(四)、断言-请求头以及请求权重分流等

spring cloud-Gateway&#xff1a;断言-请求头以及请求权重分流等 一、断言Header信息要求项目前置环境要求案例一、断言-请求头信息-匹配X-Request-Id1、配置文件及代码2、测试 案例二、断言-请求头信息-匹配API版本场景主要配置信息 案例三、断言-请求头信息&#xff1a;匹配…...

YOLOv11模型的常见处理

一.数据准备&#xff1a; 1.数据集格式&#xff1a; 目录结构示例&#xff1a; datasets/├── images/│ ├── train/ # 训练图片│ └── val/ # 验证图片└── labels/├── train/ # 训练标签└── val/ # 验证标签 每张图片对应一个 .txt 标注文件…...

conda 清除 tarballs 减少磁盘占用 、 conda rename 重命名环境、conda create -n qwen --clone 当前环境

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 conda clean --tarballsconda rename 重命名环境conda create -n qwen --clone …...

无线局域网

1.5G支持中低频和高频频段&#xff0c; 2.网络切片是指从应该网络中选取特定的特性和功能 3.WLAN广义指无线电波&#xff0c;激光&#xff0c;红外线等无线信号代替有线局域网中的部分或者全部传输介质所构成的网络。 4.802.11运行在2.4GHz ISM 频段&#xff0c;采用扩频通信…...

百人会上的蔚小理与「来的刚刚好」的雷军

这就是2025百人会上的蔚小理&#xff0c;努力的李斌、宣扬飞行汽车的何小鹏与大讲开源的李想。那么小米汽车的模式是什么呢&#xff1f;站在蔚小理的肩上。 这就是2025百人会上的蔚小理&#xff0c;努力的李斌、宣扬飞行汽车的何小鹏与大讲开源的李想。那么小米汽车的模式是什么…...

现代优雅杂志海报徽标设计手写英文字体安装包 Attomes – Brush Handwritten Font

Attomes 简介 – Brush 手写字体 此字体是一种精致、优雅、流畅的手写字体。它有一个美丽而独特的连字混合字母&#xff0c;因此作者用一个小漩涡嵌入来撰写它&#xff0c;从而形成现代字体&#xff0c;并准备好通过为您的下一个设计项目添加优雅和独特的风格来发表声明。将其…...

Java进阶——静态代理与动态代理

代理模式是一种常用的设计模式&#xff0c;为其他对象提供一种代理以控制对这个对象的访问。代理模式就像是一个中间人&#xff0c;客户端通过代理来间接访问目标对象&#xff0c;可以在不修改目标对象的基础上&#xff0c;对目标对象的功能进行增强或扩展。代理模式主要分为静…...

【多线程】进阶

目录 一、CAS 什么是 CAS CAS 伪代码 CAS 有哪些应用 实现原子类 CAS 是怎么实现的 如何通过 CAS 实现的原子类 CAS 的 ABA 问题 什么是 ABA 问题 ABA 问题引来的 BUG 正常的过程 异常的过程 解决方案 &#x1f4dd;相关面试题 二、JUC(java.util.concurrent)的…...

MFC中字符串string类型和CString类型互转方法

文章目录 一、CString 转 std::string1. Unicode项目&#xff08;_UNICODE 已定义&#xff09;2. 多字节项目&#xff08;_MBCS 已定义&#xff09; 二、std::string 转 CString1. Unicode项目&#xff08;_UNICODE 已定义&#xff09;2. 多字节项目&#xff08;_MBCS 已定义&a…...

工作记录 2017-03-13

工作记录 2017-03-13 序号 工作 相关人员 1 修改邮件上的问题。 开始处理操作日志部分。 测试了C#和MySql的连接。 更新RD服务器。 郝 更新的问题 1、 修改了CMS1500的打印&#xff0c;NDC的内容用了小的字体。 2、在Cliams List中可以查看Job的Notes。 3、Payment Po…...

Linux 配置NFS服务器

1. 开放/nfs/shared目录&#xff0c;供所有用户查阅资料 服务端 &#xff08;1&#xff09;安装nfs服务&#xff0c;nfs-utils包中包含rpcbind&#xff08;rpc守护进程&#xff09; [rootnode1-server ~]# yum install -y nfs-utils # nfs-utils包中包含rpcbind [rootnode…...

Linux《进程概念(上)》

在之前的Linux学习当中我们已经了解了基本的Linux指令以及基础的开发工具的使用&#xff0c;那么接下来我们就要开始Linux当中一个非常重要的部分的学习——进程&#xff0c;在此进程是我们之后Linux学习的基础&#xff0c;并且通过进程的学习会让我们了解更多的操作系统的相关…...

游戏开发中的贝塞尔曲线:感受丝滑的数学之美

这是一篇vip文章,如果你还不是vip,可以移步https://www.ilikexff.cn/articles/165免费阅读。 介绍 贝塞尔曲线是计算机图形学中最重要的概念之一,以其在表示曲线时的灵活性和精确性而闻名。广泛应用于计算机图形学、动画、路径规划等领域的数学曲线。 贝塞尔曲线的数学原理基…...

Java【多线程】(6)定时器

目录 1.前言 2.正文 2.1库中定时器 2.2手搓定时器 3.小结 1.前言 哈喽大家好呀&#xff0c;今天继续给大家分享Java中定时器的学习&#xff0c;正文包括定时器的三种实现方式&#xff0c;正文如下。 2.正文 在 Java 中&#xff0c;定时器&#xff08;Timer&#xff09;…...

Epub转PDF软件Calibre电子书管理软件

Epub转PDF软件&#xff1a;Calibre电子书管理软件 一款好用的电子书管理软件&#xff0c;可快速导入电脑里的电子书并进行管理&#xff0c;支持多种格式&#xff0c;阅读起来非常方便。同时也有电子书格式转换功能。 第一步&#xff1a;添加电子书 将需要转换的电子书添加到…...

使用FastExcel时的单个和批量插入的问题

在我们用excel表进行插入导出的时候&#xff0c;通常使用easyexcel或者FastExcel&#xff0c;而fastexcel是easy的升级版本&#xff0c;今天我们就对使用FastExcel时往数据库插入数据的业务场景做出一个详细的剖析 场景1 现在我们数据库有一张组织表&#xff0c;组织表的字段…...

nginx https配置

一.https配置 HTTPS 协议是由HTTP 加上TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议&#xff0c;主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密&#xff0c;实现互联网传输安全保护。 1.生成证书 openssl genrsa -des3 -out server.key 20…...

git --- cherry pick

git --- cherry pick cherry pick cherry pick Cherry Pick 是 Git 中的一个操作&#xff0c;它允许你选择某个分支的某次&#xff08;或多次&#xff09;提交&#xff0c;并将其应用到当前分支&#xff0c;而不会合并整个分支的所有更改。 cherry pick 的作用 只提取某个特定的…...

虚拟机安装linux系统无法上网的解决方法

在虚拟环境中运行Linux系统时&#xff0c;有时会遇到网络连接问题&#xff0c;特别是在使用虚拟机软件如VMware或VirtualBox时。本文将详细介绍一种针对“虚拟机安装Linux系统无法上网”问题的解决方案&#xff0c;以CentOS 6.5为例&#xff0c;适用于其他基于NAT模式的虚拟机环…...

北大人工智能研究院朱松纯:“中国的AI叙事” 存在认知偏差

3月29日&#xff0c;在2025中关村论坛通用人工智能论坛上&#xff0c;北京通用人工智能学院院长&#xff0c;北京大学人工智能研究院、智能学院院长朱松纯表示&#xff0c;目前&#xff0c;行业对AI的讨论几乎被大模型能力所占据&#xff0c;而基础学科、原始创新与智能本质的研…...

Java高频面试之集合-20

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;讲讲 HashSet 的底层实现&#xff1f; HashSet 是 Java 集合框架中用于存储唯一元素的高效数据结构&#xff0c;其底层实…...

使用Qemu模拟32位ARM系统

一、环境 实验环境如下&#xff1a; 主机&#xff1a;x86_64 操作系统&#xff1a;Ubuntu 20.04.6 LTS Qemu版本&#xff1a;QEMU emulator version 4.2.1 Linux内核版本&#xff1a;linux-4.4.240 Busybox版本&#xff1a;busybox-1.35.0二、前置准备 下载 linux-4.4.240 源…...

【初阶数据结构】栈

文章目录 一、概念与结构 二、栈的实现 栈的定义 1.初始化 2.入栈 3.判断栈是否为空 4.出栈 5.取栈顶元素 6.获取栈中有效元素个数 2.销毁 三、完整码源 总结 一、概念与结构 栈&#xff1a; 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据…...

docker-compose部署prometheus+grafana+node_exporter

目录 docker-compose文件 配置文件 文件层级关系&#xff0c;docker-compose和配置文件位于同级目录 node_exporter页面json文件 涉及离线包 一.docker-compose文件 [rootsulibao prometheus]# cat docker-compose.yml version: 3services:prometheus:image: registry.c…...

maya调整全局关节显示大小

请按以下步骤操作&#xff1a; 在 Maya 主菜单栏中&#xff0c;找到 Display (显示) 菜单。 在 Display 菜单下&#xff0c;找到 Animation (动画) 子菜单。 在 Animation 子菜单中&#xff0c;点击 Joint Size... (关节大小...)。 这时会弹出一个小窗口或者直接在界面上出现…...

“屏幕“的实现_程序中如何将数据映射到硬件_C++实战

前言 程序里的数据,最后都需要将数据对象写入硬件.C/C最大的优势体现也是在这里,他既是高级语言方便被程序员使用,又能和硬件沟通. 引入 以"屏幕"的实现,总结数据映射到硬件的代码写法 分析 软件部分 1.屏幕是数据对象---一切都是数据,一切都是对象;数据有类型,屏…...

R --- Error in library(***) : there is no package called ‘***’ (服务器非root用户)

步骤 步骤一&#xff1a;在自己目录下创建R包安装路径步骤二&#xff1a;配置用户本地的R库路径步骤三&#xff1a;安装缺失的包&#xff08;在终端&#xff09;步骤四&#xff1a;验证安装 步骤一&#xff1a;在自己目录下创建R包安装路径 mkdir -p ~/R_libs步骤二&#xff1…...

Go中的逃逸分析

什么是逃逸&#xff1f; 逃逸是指一个变量本来应该分配在栈&#xff08;stack&#xff09;上&#xff0c;但由于某些原因&#xff0c;最终被分配到了堆&#xff08;heap&#xff09;上。 类比&#xff1a; 栈就像一个临时的快餐盒&#xff0c;用来存放短期使用的数据。堆就像…...

解决 Android AGP 最新版本中 BuildConfig 报错问题

在最新版本的 Android Gradle Plugin (AGP) 中&#xff0c;Google 对构建系统做了不少改动&#xff0c;可能会导致一些与 BuildConfig 相关的问题。以下是常见问题及解决方案&#xff1a; 常见问题及修复方法 1. BuildConfig 类完全缺失 原因&#xff1a;AGP 8.0 默认不再为库模…...

Rollup系列之安装和入门

Rollup ‌Rollup.js‌的主要用途是将小的代码片段编译成更大、更复杂的代码&#xff0c;例如库或应用程序。它特别适用于将ES模块编译成不同的模块形式&#xff0c;如AMD、CommonJS、UMD等&#xff0c;以便在不同的环境中使用‌。 Rollup的应用场景与好处&#xff1a; 插件或…...

Kafka 4.0 发布:KRaft 替代 Zookeeper、新一代重平衡协议、点对点消息模型、移除旧协议 API

KRaft 全面替代 ZooKeeper Apache Kafka 4.0 是一个重要的里程碑&#xff0c;标志着第一个完全无需 Apache ZooKeeper 运行的主要版本。 通过默认运行在 KRaft 模式下&#xff0c;Kafka 简化了部署和管理&#xff0c;消除了维护单独 ZooKeeper 集群的复杂性。 这一变化显著降…...

MQTT之重复消息(6、在项目中遇到的问题)

项目背景: 在 Spring Boot MQTT 5.0 环境中&#xff0c;RTU设备向SpringBoot平台发送心跳数据、业务监控数据。同时SpringBoot平台可以向RTU设备下发指令&#xff0c;RTU在执行完指令之后向平台发送响应数据。 问题一、SpingBoot平台发送指令给RTU设备&#xff0c;RTU设备能够…...

8、linux c 信号机制

一、信号概述 1. 信号概念 信号是一种在软件层次上对中断机制的模拟&#xff0c;是一种异步通信方式。信号的产生和处理都由操作系统内核完成&#xff0c;用于在进程之间传递信息或通知某些事件的发生。 2. 信号的产生 信号可以通过以下方式产生&#xff1a; 按键产生&…...

Set,Map,WakeSet,WakeMap

简介 Set、Map、WeakMap 和 WeakSet 是 ES6 引入的高级数据结构&#xff0c;它们的底层实现和特性与传统的对象和数组有显著差异 强弱引用了解: link Set ​Set对象 是一种用于存储 ​唯一值 的可迭代集合&#xff0c;可存储任意类型的值&#xff08;原始值、对象引用等&…...

NSSCTF(MISC)—[HITCTF 2021]PNG

相应的做题地址&#xff1a;https://www.nssctf.cn/problem/819 import zlib from Crypto.Cipher import AES import base64 def decode(data, key, iv): cipher AES.new(key, AES.MODE_CBC, iv) decryptByts base64.b64decode(data) msg cipher.decrypt(decryptByts) msgs…...

只出现一次的数字

这个题目动了点脑筋&#xff0c;由于它们时无序的&#xff0c;所以我们如果去找的话比较费劲&#xff0c;可能要循环嵌套再嵌套&#xff0c;所以我们先利用库中自带的sort函数进行排序&#xff0c;把这些数从小到大以此排列&#xff0c;然后我们进行判断哪个数出现了一次即可。…...

【编程中的框架】

编码中常用的框架及其使用方法和好处 框架&#xff08;Framework&#xff09;是一种为解决特定问题而设计的软件架构&#xff0c;它提供了一组预定义的组件、模式和工具&#xff0c;帮助开发者更高效地构建应用程序。框架通常不仅仅是方法库&#xff0c;它们提供了一种结构化的…...

Python-常用关键字

基础值 1. False - 意义&#xff1a;布尔类型假值&#xff08;首字母大写&#xff09; - 用法示例&#xff1a; if condition is False: print("条件为假") 2. True - 意义&#xff1a;布尔类型真值&#xff08;首字母大写&#xff09; - 用法示例&…...

【计算机网络】DHCP工作原理

DHCP(动态主机配置协议) Dynamic Host Configuration Protocol 基于UDP协议传输 DHCP分配IP地址的过程 &#xff08;1&#xff09;DHCP DISCOVER客户机请求 IP 地址&#xff1a; 当一个 DHCP 客户机启动时&#xff0c;客户机还没有 IP 地址&#xff0c;所以客户机要通过 DHC…...

python 原型链污染学习

复现SU的时候遇到一道python原型链污染的题&#xff0c;借此机会学一下参考&#xff1a; 【原型链污染】Python与Jshttps://blog.abdulrah33m.com/prototype-pollution-in-python/pydash原型链污染 文章目录 基础知识对父类的污染命令执行对子类的污染pydash原型链污染打污染的…...

量子计算:未来计算技术的革命性突破

在当今科技飞速发展的时代&#xff0c;量子计算正逐渐从理论走向实践&#xff0c;成为计算技术领域最具潜力的革命性突破之一。与传统计算机基于二进制的计算方式不同&#xff0c;量子计算利用量子比特&#xff08;qubit&#xff09;的叠加和纠缠特性&#xff0c;能够在处理复杂…...

Maven:Java项目构建与依赖管理工具

Maven 是什么 Maven 将项目开发过程和管理过程抽象成一个项目对象模型&#xff08;POM&#xff09;&#xff0c;本质上是一个项目管理工具。Maven 主要用于Java项目的依赖管理、编译、测试、打包和部署等操作。 Maven的核心设计围绕标准化和自动化&#xff0c;通过一系列约定和…...

内积相似系数——内积度量相似系数

内积与相似系数 内积&#xff08;Inner Product&#xff09; 内积&#xff08;Inner Product&#xff09;&#xff0c;也称为点积&#xff08;Dot Product&#xff09;或标量积&#xff0c;两个向量点积的结果是一个标量&#xff08;通常是实数或复数&#xff09;。 内积&…...

问题:md文档转换word,html,图片,excel,csv

文章目录 问题&#xff1a;md文档转换word&#xff0c;html&#xff0c;图片&#xff0c;excel&#xff0c;csv&#xff0c;ppt**主要职责****技能要求****发展方向****学习建议****薪资水平** 方案一&#xff1a;AI Markdown内容转换工具打开网站md文档转换wordmd文档转换pdfm…...

GET 和 POST 有什么区别

GET 和 POST 是 HTTP 协议中两种最常见的请求方法&#xff0c;它们在用途、安全性、数据传递方式等方面有显著的区别。以下是它们的主要区别&#xff1a; 1. 用途 • GET&#xff1a; • 用于从服务器获取资源&#xff08;数据&#xff09;。 • 是一种无状态的操作&#xf…...

AI Agent 人工智能相关公开比赛汇总

参与 AI 相关比赛是提升技术能力、接触前沿算法、积累项目经验的绝佳方式。以下是全球知名的比赛&#xff0c;以及适合不同水平选手的竞赛分类。 1. 全球知名 AI & 计算机竞赛 (1) Kaggle 竞赛&#xff08;Kaggle Competitions&#xff09; 简介&#xff1a;全球最知名的…...

Java 多线程编程之 Object.wait 方法(工作原理、高级特性、notify 方法与 notifyAll 方法)

一、wait 方法 1、基本介绍 wait 方法是 Java 中每个对象都拥有的方法&#xff0c;它继承自 Object 类 wait 方法使当前线程进入等待状态&#xff0c;直到其他线程调用该对象的 notify 方法或 notifyAll 方法 wait 方法必须在同步代码块中使用&#xff0c;否则抛出 Interrup…...

python下载m3u8格式视频

一、安装 m3u8库 pip install requests pip install requests m3u8 二、编码实现 import os import re import requests import subprocess# 下载ts文件 def down_ts_file(base_url, m3u8_url, download_dir):# 从m3u8文件中获取所有ts的分片名称信息response requests.get…...

3.30 代码随想录第三十天打卡

准备:01背包理论基础&#xff08;二维&#xff09; 1.有n个物品每个物品只有一个 2.完全背包是有n个物品每个物品有无限多个 3.多重背包是有n个物品每种物品个数各不相同 &#xff08;1&#xff09;题目描述&#xff1a; &#xff08;2&#xff09;解题思路&#xff1b; 1…...

01 相机标定与相机模型介绍

学完本文,您将了解不同相机模型分类、内参意义,及对应的应用代码模型 标定的意义 建模三维世界点投影到二维图像平面的过程。标定输出的是相机模型。 相机模型 相机模型可以解理解为投影模型 +...