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

Sentinel全面解析与实战教程

Sentinel全面解析与实战教程

一、引言

在现代分布式系统中,随着业务的不断发展和流量的日益增长,保障系统的稳定性成为了重中之重。Sentinel作为一款优秀的高可用流量防护组件,为解决系统中的流量控制、熔断降级等问题提供了有效方案。本文将深入讲解Sentinel的原理、安装配置、各种功能的使用以及实际项目中的集成方法,帮助你全面掌握Sentinel的应用。

二、Sentinel基本概念与架构

(一)基本概念

资源:是Sentinel进行保护的目标,可以是一个接口、一个方法或者一段代码逻辑。它是流控、熔断等规则作用的对象。
规则:定义了对资源如何进行保护的策略,包括流量控制规则、熔断降级规则、系统保护规则等。
流控模式
直接模式:对资源直接进行流控,最简单的模式,直接根据设定的阈值来控制请求。
关联模式:当关联的资源满足条件时,对目标资源进行流控。例如,当关联的接口响应时间过长时,对调用它的接口进行限流。
链路模式:对一个调用链路中的所有资源进行统一的流控,适用于整个业务链路的防护。

流控效果
QPS 模式:根据每秒查询率(Queries Per Second)来控制流量,即限制单位时间内允许通过的最大请求数量。
线程数模式:根据当前处理的并发线程数来控制流量,避免系统线程资源耗尽。

(二)架构概述

Sentinel 主要由以下核心模块组成:
核心模块:提供流量控制、熔断降级等核心功能的实现。
数据采集模块:采集系统的运行指标数据,如请求量、响应时间等,用于规则的判断和决策。
规则加载模块:负责读取和解析用户在配置文件或控制台中设置的规则。
集群模块:支持在分布式环境下对多个实例进行统一的流量控制和规则管理。

三、安装Sentinel

(一)本地安装Sentinel Dashboard

  1. 下载压缩包:访问Sentinel官方网站(https://sentinelguard.github.io/sentinel/ ),找到相应版本的Dashboard下载链接,下载 sentinel-dashboard.jar 压缩包。
  2. 启动Dashboard:打开命令行终端,进入到压缩包所在的目录,执行以下命令启动Dashboard:
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.6.jar

这里将Dashboard的服务端口设置为8080,你可以根据需要修改。如果启动成功,页面会自动打开 http://localhost:8080 ,显示Dashboard的登录界面,由于是本地演示,直接刷新即可进入控制台。

(二)在项目中集成Sentinel Core

以Maven项目为例,在 pom.xml 中添加以下依赖:

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.6</version> <!-- 使用最新稳定版 -->
</dependency>

四、Sentinel核心功能实战

(一)流量控制功能

流量控制主要限制对某个资源的请求速率,防止系统因过载而崩溃。

  1. QPS限流示例
    以下是一个简单的Java代码示例,演示如何对一个方法进行QPS限流:
import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;import java.util.ArrayList;
import java.util.List;public class FlowControlExample {public static class MyService {public void process() {try (Entry entry = SphU.entry("myResource")) {// 模拟业务逻辑处理System.out.println("Processing request...");Thread.sleep(100);} catch (BlockException e) {// 请求被限流时的处理逻辑System.out.println("Request is blocked due to flow control.");} catch (InterruptedException e) {e.printStackTrace();}}}private static void initFlowRules() {List<FlowRule> rules = new ArrayList<>();FlowRule rule = new FlowRule();rule.setResource("myResource"); // 资源名称,需和上面SphU.entry中的参数一致rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // 设置流控模式为QPSrule.setCount(5); // 设置限流阈值,即每秒最多允许5个请求rules.add(rule);FlowRuleManager.loadRules(rules);}public static void main(String[] args) throws InterruptedException {initFlowRules();MyService service = new MyService();// 模拟并发请求for (int i = 0; i < 15; i++) {new Thread(service::process).start();Thread.sleep(200);}}
}

在上述代码中,FlowControlExample 类包含一个 MyService 服务类,其中 process 方法使用 SphU.entry 方法尝试获取资源访问权。如果超过设定的QPS阈值(这里是5),则会抛出 BlockException 异常,表示请求被限流。

  1. 关联限流示例
    关联限流可以在关联资源出现问题时,对目标资源进行限流。例如,当依赖的数据库查询接口响应时间过长时,限制对上层业务接口的访问。
// 先定义关联资源名和被保护资源名
private static final String ASSOCIATE_RESOURCE = "associatedResource";
private static final String PROTECTED_RESOURCE = "protectedResource";// 初始化关联限流规则
private static void initAssociateFlowRules() {List<FlowRule> rules = new ArrayList<>();FlowRule rule = new FlowRule();rule.setResource(PROTECTED_RESOURCE);rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setCount(10);rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);rule.setParamIdx(0);rule.setStrategy(RuleConstant.STRATEGY_ASSOCIATE); // 设置策略为关联模式rule.setAssociateResource(ASSOCIATE_RESOURCE); // 关联的资源名称rules.add(rule);FlowRuleManager.loadRules(rules);
}// 模拟关联资源操作(可以是依赖服务调用等)
public static void associatedOperation() {// 假设这里是一个可能耗时的数据库查询操作try {Thread.sleep(50); // 模拟耗时操作} catch (InterruptedException e) {e.printStackTrace();}// 当这里操作耗时过长,可能会触发对保护资源的限流
}

在实际应用中,需要在关联资源的相关操作处进行指标统计(Sentinel会自动采集指标),根据采集到的指标来判断是否触发对目标资源的限流。

(二)熔断降级功能

熔断降级是为了防止依赖服务的故障影响到整个系统的稳定性,在依赖服务出现问题时,快速失败并采取降级措施。

  1. 响应时间熔断示例
    以下代码演示了如何基于响应时间进行熔断降级:
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;public class DegradeExample {public static class DegradeService {public String callDependentService() {try (Entry entry = SphU.entry("degradeResource")) {// 模拟调用依赖服务simulateDependentServiceCall();return "Dependent service call success";} catch (BlockException e) {// 降级处理逻辑return "Service call degraded due to high response time";}}private void simulateDependentServiceCall() {// 模拟依赖服务可能的长时间响应try {Thread.sleep((long) (Math.random() * 150)); // 随机睡眠0 - 150ms,模拟不同响应时间} catch (InterruptedException e) {e.printStackTrace();}if (Math.random() > 0.3) { // 模拟大部分情况下响应时间较长// Sentinel会自动采集响应时间指标,当超过阈值时触发熔断}}}private static void initDegradeRules() {List<DegradeRule> rules = new ArrayList<>();DegradeRule rule = new DegradeRule();rule.setResource("degradeResource");rule.setGrade(RuleConstant.DEGRADE_GRADE_RT); // 设置熔断模式为响应时间模式rule.setCount(100); // 响应时间阈值,单位毫秒rule.setTimeWindow(10); // 熔断时长,单位秒rules.add(rule);DegradeRuleManager.loadRules(rules);}public static void main(String[] args) {initDegradeRules();DegradeService service = new DegradeService();for (int i = 0; i < 20; i++) {System.out.println(service.callDependentService());}}
}

在这个示例中,DegradeService 类的 callDependentService 方法模拟调用依赖服务。Sentinel会自动采集该资源的响应时间指标,当超过设定的阈值(100毫秒)时,会对后续请求进行熔断处理,返回降级结果。

(三)系统保护功能

系统保护主要从整体层面监控系统的负载情况,当系统负载过高时,采取措施限制请求的进入,保护系统核心服务不崩溃。

以下是一个简单的系统保护配置示例:

// 初始化系统保护规则
private static void initSystemRules() {List<SystemRule> rules = new ArrayList<>();SystemRule systemRule = new SystemRule();systemRule.setQps(500); // 设置系统允许的最大QPSsystemRule.setAvgRt(50); // 设置平均响应时间阈值,单位毫秒systemRule.setThread(200); // 设置系统允许的最大并发线程数rules.add(systemRule);SystemRuleManager.loadRules(rules);
}

系统保护规则可以同时考虑多个维度,如QPS、平均响应时间和并发线程数等。当任一维度的指标超过设定的阈值时,Sentinel会自动触发系统保护策略。

五、Sentinel Dashboard使用与管理

(一)控制台界面介绍

启动Sentinel Dashboard后,打开浏览器访问 http://localhost:8080 。控制台主要包含以下功能模块:
实时监控:展示系统的实时指标数据,如流量、响应时间、线程数等。
规则管理:可以查看、添加、编辑和删除流控、熔断降级等规则。
簇点链路:以链路图的形式展示各个资源的调用关系和流量情况。

(二)动态配置规则

通过控制台可以方便地动态配置规则,无需重启应用程序。例如,要添加一个流控规则:

  1. 在控制台首页导航到“规则管理” - “流控规则”。
  2. 点击“新增流控规则”按钮,填写资源名称、流控模式、限流阈值等相关信息。
  3. 点击“保存”按钮,新的流控规则将立即生效。

六、Sentinel与Spring Cloud Alibaba集成

在实际的微服务项目中,通常使用Spring Cloud Alibaba集成Sentinel,以实现更细粒度的流量控制和熔断降级管理。

(一)引入依赖

在Spring Boot项目的 pom.xml 中添加 spring-cloud-starter-alibaba-sentinel 依赖:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

(二)配置文件设置

application.propertiesapplication.yml 中配置Sentinel相关参数:

spring:cloud:sentinel:transport:dashboard: localhost:8080 # 指定Sentinel Dashboard地址eager: false # 开启延迟加载(默认false,在应用启动完成后连接Dashboard)

(三)使用注解方式定义资源

import com.alibaba.csp.sentinel.annotation.SentinelResource;@RestController
public class UserController {@GetMapping("/getUser")@SentinelResource(value = "getUser", blockHandler = "handleBlock", fallback = "handleFallback")public String getUser() {// 模拟用户查询逻辑return "User information";}// 处理被限流的情况public String handleBlock(BlockException ex) {return "Request is blocked.";}// 处理业务异常或熔断降级的情况public String handleFallback(Throwable t) {return "Service error, try again later.";}
}

使用 @SentinelResource 注解可以方便地将方法定义为一个需要保护的资源,并指定在被限流或熔断降级时要执行的方法。

七、性能优化与最佳实践

(一)指标采集优化

合理配置指标采集的频率和维度,避免过多的指标采集对系统性能产生影响。

(二)规则管理策略

避免定义过多复杂或矛盾的规则,定期审查和优化规则,确保规则的合理性和有效性。

(三)降级策略设计

降级策略应根据业务的重要性进行设计,优先保障核心业务的稳定性,对于非核心业务可以适当放宽限流和熔断的阈值。

八、总结与展望

Sentinel作为一款强大的流量控制和熔断降级组件,在微服务架构和复杂分布式系统中发挥着重要作用。通过本文的介绍和实践示例,你应该对Sentinel有了较为全面的了解。在实际项目中,根据具体业务需求和系统架构,合理运用Sentinel的各项功能,可以有效保障系统的稳定性和可靠性。

随着技术的发展,Sentinel也在不断演进和扩展。未来,我们可以期待Sentinel在更多方面提供更强大的功能,如与更多类型的中间件集成、提供更智能的规则自动生成和优化机制等。

希望本文能帮助你快速上手Sentinel,并在实际项目中充分发挥其优势,构建高可用的分布式系统。

以上教程详细阐述了Sentinel的核心概念、各种功能的使用方法、与其他框架的集成以及在性能优化方面的注意事项,希望能满足你制作完善博客的需求。如果你还有其他问题,欢迎随时提问。

相关文章:

Sentinel全面解析与实战教程

Sentinel全面解析与实战教程 一、引言 在现代分布式系统中&#xff0c;随着业务的不断发展和流量的日益增长&#xff0c;保障系统的稳定性成为了重中之重。Sentinel作为一款优秀的高可用流量防护组件&#xff0c;为解决系统中的流量控制、熔断降级等问题提供了有效方案。本文…...

考研总结(初试篇)--双非勇闯985

考研终于告一段落了&#xff0c;也是被湖南大学拟录取了&#xff0c;写下这篇总结&#xff0c;回顾一下我的经历吧。 我是2024年3月开学的时候&#xff0c;正式确定考研的。当时纠结于定学校&#xff0c;长理和湖大。最后还是选择湖大&#xff0c;因为反正都是要好好准备的&am…...

【电路笔记】-触发器的转换

触发器的转换 文章目录 触发器的转换1、概述2、置位-复位SR触发器3、门控置位-复位(SR)触发器4、数据(D型)触发器5、JK触发器6、使用主从触发器的触发器转换7、(切换)T型触发器8、总结触发器是时序电路的基本构建模块,可以从一种形式转换到另一种形式,能够存储单个数据…...

QT 中的元对象系统(五):QMetaObject::invokeMethod的使用和实现原理

目录 1.简介 2.原理概述 3.实现分析 3.1.通过方法名调用方法的实现分析 3.2.通过可调用对象调用方法的实现分析 4.使用场景 5.总结 1.简介 QMetaObject::invokeMethod 是 Qt 框架中的一个静态方法&#xff0c;用于在运行时调用对象的成员函数。这个方法提供了一种动态调…...

基数排序算法解析与TypeScript实现

基数排序&#xff08;Radix Sort&#xff09;是一种高效的非比较型整数排序算法&#xff0c;通过逐位分配与收集的方式实现排序。本文将深入解析其工作原理&#xff0c;并给出完整的TypeScript实现。 一、算法原理 1. 核心思想 多关键字排序&#xff1a;将整数按位数切割成不同…...

oracle asm 相关命令和查询视图

有关asm磁盘的命令 添加磁盘 alter diskgroup data1 add disk /devices/diska*;---runs with a rebalance power of 5 , and dose not return until the rebalance operation is completealter diskgroup data1 add disk /devices/diskd* rebalance power 5 wait;查询 select …...

THUNLP_Multimodal_Excercise

背景 多模态大模型&#xff08;Multimodal Large Language Models, MLLM&#xff09;的构建过程中&#xff0c;模型结构、模型预测、指令微调以及偏好对齐训练是其中重要的组成部分。本次任务中&#xff0c;将提供一个不完整的多模态大模型结构及微调代码&#xff0c;请根据要求…...

AIGC6——AI的哲学困境:主体性、认知边界与“天人智一“的再思考

引言&#xff1a;当机器开始"思考" 2023年&#xff0c;Google工程师Blake Lemoine声称对话AI LaMDA具有"自我意识"&#xff0c;引发轩然大波。这一事件将古老的哲学问题重新抛回公众视野&#xff1a;​**机器能否拥有主体性&#xff1f;**从东方"天人…...

主题(topic)中使用键(key)来区分同一主题下的多个数据实例

在Fast DDS中&#xff0c;通过在主题&#xff08;topic&#xff09;中使用键&#xff08;key&#xff09;来区分同一主题下的多个数据实例&#xff0c;具体含义如下&#xff1a; 1. **主题&#xff08;Topic&#xff09;**&#xff1a;在DDS中&#xff0c;主题是数据的类型或类…...

[王阳明代数讲义]琴语言类型系统工程特性

琴语言类型系统工程特性 层展物理学组织实务与艺术与琴生生.物机.械科.技工.业研究.所软凝聚态物理开发工具包社会科学气质砥砺学人生意气场社群成员魅力场与心气微积分社会关系力学 意气实体过程图论信息编码&#xff0c;如来码导引 注意力机制道装Transformer架构的发展标度律…...

蜜蜡是什么?蜜蜡与琥珀的区别以及蜜蜡的收藏价值一览

蜜蜡是琥珀的一种&#xff0c;在物理成分和化学成分上都和琥珀没有区别&#xff0c;只是因其“色如蜜&#xff0c;光如蜡”而得名。蜜蜡形成于白垩纪时期&#xff0c;因形成时间较长&#xff0c;形成过程比较复杂等原因&#xff0c;种类较其他产地要多。 蜜蜡是有机矿物&#x…...

第五课:高清修复和放大算法

文章目录 Part.01 高清修复(Hi-Res Fix)Part.02 SD放大(SD Upscale)Part.03 附加功能放大Part.01 高清修复(Hi-Res Fix) 文生图中的高清修复/高分辨率修复/超分辨率修复先低分辨率抽卡,再高分辨率修复。不能突破显存限制放大重绘幅度安全范围是0.3-0.5,如果想让AI更有想象力0…...

SpringSecurity6.0 通过JWTtoken进行认证授权

之前写过一个文章&#xff0c;从SpringSecurity 5.x升级到6.0&#xff0c;当时是为了配合公司的大版本升级做的&#xff0c;里面的各项配置都是前人留下来的&#xff0c;其实没有花时间进行研究SpringSecurity的工作机制。现在新东家有一个简单的系统要搭建&#xff0c;用户的认…...

TypeScript工程集成

以下是关于 TypeScript 工程集成 的系统梳理,涵盖基础配置、进阶优化、开发规范及实际场景的注意事项,帮助我们构建高效可靠的企业级 TypeScript 项目: 一、基础知识点 1. 项目初始化与配置 tsconfig.json 核心配置:{"compilerOptions": {"target": &…...

网络空间安全(51)邮件函数漏洞

前言 邮件函数漏洞&#xff0c;特别是在PHP环境中使用mail()函数时&#xff0c;是一个重要的安全问题。 一、概述 在PHP中&#xff0c;mail()函数是一个用于发送电子邮件的内置函数。其函数原型为&#xff1a; bool mail ( string $to , string $subject , string $message [, …...

怎么让一台云IPPBX实现多家酒店相同分机号码一起使用

下面用到的IPPBX是我们二次开发后的成品&#xff0c;支持各种云服务器一键安装&#xff0c;已经写好了一键安装包&#xff0c;自动识别系统环境&#xff0c;安装教程这里就不再陈述了&#xff01; 前言需求 今天又遇到了一个客户咨询&#xff0c;关于部署一台云IPPBX&#xf…...

qt tcpsocket编程遇到的并发问题

1. 单个socket中接收消息的方法要使用局部变量而非全局&#xff0c;避免消息频发时产生脏数据 优化后的关键代码 recieveInfo() 方法通过返回内部处理后的 msg 进行传递if (data.indexOf("0103") -1) { 这里增加了判断, 对数据&#xff08;非注册和心跳&#xff0…...

U盘实现——BOT 常用命令

文章目录 U盘实现——BOT 常用命令命令格式CBWCSW数据传输条件命令传输数据传输状态传输命令汇总INQUIRY Command:12h数据格式抓包READ FORMAT CAPACITIES Command: 23h数据格式抓包READ CAPACITY Command: 25h数据格式抓包TEST UNIT READY Command: 00h数据格式抓包WRITE(10) …...

JavaScript DOM 节点操作

目录 一、DOM 节点 节点类型&#xff08;Node Types&#xff09; 二、查找节点 1.查找父节点 1. parentNode 2. parentElement 2.查找子节点 1. childNodes 2. children 3. firstChild / lastChild 4. firstElementChild / lastElementChild 3.查找兄弟节点 1. pre…...

JDBC常用的接口

一、什么是JDBC JDBC是Java语言连接数据库的接口规范。 二、JDBC的体系 1、Java官方提供一个操作数据库的抽象接口 抽象接口有很多的接口和抽象类。 例如&#xff1a;Driver、Connection、Statement。 2、各个数据库厂商提供各自的Java实现类 需要各自实现具体的细节。 例如&am…...

【DLI】Generative AI with Diffusion Models通关秘籍

Generative AI with Diffusion Models&#xff0c;加载时间在20分钟左右&#xff0c;耐心等待。 6.2TODO 这里是在设置扩散模型的参数&#xff0c;代码里的FIXME部分需要根据上下文进行替换。以下是各个FIXME的替换说明&#xff1a; 1.a_bar 是 a 的累积乘积&#xff0c;在 …...

TP6图片操作 Image::open 调用->save()方法时候报错Type is not supported

错误提示&#xff1a; { "code": 0, "msg": "Type is not supported", "data": { "code": 0, "line": 50, "file": "/www/wwwroot/ytems/vendor/topthink/framework/src/think…...

11_常用函数

文章目录 一、概述二、字符函数2.1、获取字符串所占字节数2.2、获取字符个数2.3、拼接字符串2.4、大小写转换2.5、获取子串2.6、获取子串第一次出现的索引2.7、去除字符串前后子字符串2.7.1、去掉左侧空格2.7.2、去掉右侧空格 2.8、左右填充2.9、字符串替换 三、数学函数3.1、四…...

《inZOI(云族裔)》50+MOD整合包

载具 RebelCore - 年龄和时间 mod启动器 优化补丁 去除雾气 坦克模型 菜单 前置 跳过启动 更好性能 等 共计50MOD整合 在游戏的世界里&#xff0c;追求更丰富、更优质的体验是玩家们永恒的主题。RebelCore 这款游戏通过精心打造的 50MOD 整合&#xff0c;为玩家带来了前所未有的…...

【技术报告】GPT-4o 原生图像生成的应用与分析

【技术报告】GPT-4o 原生图像生成的应用与分析 1. GPT-4o 原生图像生成简介1.1 文本渲染能力1.2 多轮对话迭代1.3 指令遵循能力1.4 上下文学习能力1.5 跨模态知识调用1.6 逼真画质与多元风格1.7 局限性与安全性 2. GPT-4o 技术报告2.1 引言2.2 安全挑战、评估与缓解措施2.2.1 安…...

拼多多延迟发货解答2

三、延迟发货处理标准 延迟发货极大地影响了消费者的购物体验&#xff0c;平台对延迟发货行为也有相应的处理标准&#xff0c;因此各位商家一定不要以为延迟发货是小事儿。延迟发货处理标准具体可查看《拼多多发货规则》第3条。 商家发生延迟发货的&#xff0c;拼多多平台有权…...

RTOS基础 -- NXP M4小核的RPMsg-lite与端点机制回顾

一、RPMsg-lite与端点机制回顾 在RPMsg协议框架中&#xff1a; Endpoint&#xff08;端点&#xff09; 是一个逻辑通信端口&#xff0c;由本地地址&#xff08;local addr&#xff09;、远程地址&#xff08;remote addr&#xff09;和回调函数组成。每个消息都会发送到特定的…...

25.4.3学习总结【Java】

又是一道错题&#xff1a; 1. 班级活动https://www.lanqiao.cn/problems/17153/learning/?page1&first_category_id1&sortdifficulty&asc1&second_category_id3 问题描述 小明的老师准备组织一次班级活动。班上一共有 n 名 (n 为偶数) 同学&#xff0c;老师…...

市场交易策略优化与波动管理

市场交易策略优化与波动管理 在市场交易中&#xff0c;策略的优化和波动的管理至关重要。市场价格的变化受多种因素影响&#xff0c;交易者需要根据市场环境动态调整策略&#xff0c;以提高交易的稳定性&#xff0c;并有效规避市场风险。 一、市场交易策略的优化方法 趋势交易策…...

TypeScript 元数据操作 API 及示例

TypeScript 元数据操作 API 及示例 1. 配置环境 安装依赖 npm install reflect-metadatatsconfig.json 配置 {"compilerOptions": {"experimentalDecorators": true,"emitDecoratorMetadata": true,"target": "ES6"} }2…...

蓝桥杯刷题记录【并查集001】(2024)

主要内容&#xff1a;并查集 并查集 并查集的题目感觉大部分都是模板题&#xff0c;上板子&#xff01;&#xff01; class UnionFind:def __init__(self, n):self.pa list(range(n))self.size [1]*n self.cnt ndef find(self, x):if self.pa[x] ! x:self.pa[x] self.fi…...

搜广推校招面经六十六

高德推荐算法 一、介绍Transformer中的位置编码&#xff08;Positional Encoding&#xff09; 在 Transformer 结构中&#xff0c;由于模型没有内置的序列信息&#xff08;不像 RNN 那样有时间步的顺序依赖&#xff09;&#xff0c;需要通过**位置编码&#xff08;Positional…...

Java高频面试题2:集合框架

一、集合框架概述 1. 常见的集合框架有哪些&#xff1f; Collection&#xff1a;存储单个元素的集合。 List&#xff08;有序、可重复&#xff09;&#xff1a;ArrayList&#xff08;动态数组&#xff09;、LinkedList&#xff08;双向链表&#xff09;。Set&#xff08;无序…...

06-公寓租赁项目-后台管理-公寓管理篇

尚庭公寓项目/公寓管理模块 https://www.yuque.com/pkqzyh/qg2yge/5ba67653b51379d18df61b9c14c3e946 一、属性管理 属性管理页面包含公寓和房间各种可选的属性信息&#xff0c;其中包括房间的可选支付方式、房间的可选租期、房间的配套、公寓的配套等等。其所需接口如下 1.1…...

目前主流OCR/语义理解/ASR

OCR 基于多篇专业评测的结果&#xff0c;以下是目前免费开源OCR工具的推荐排名&#xff08;侧重中文场景&#xff09;&#xff1a; 1. RapidOCR 优势&#xff1a;基于PaddleOCR优化&#xff0c;在印刷中文、自然场景文字识别中综合评分第一&#xff0c;支持180度旋转和低对比…...

Selenium 元素定位方法详解

Selenium 提供了多种元素定位方式&#xff0c;掌握这些方法是进行 Web 自动化测试的基础。以下是主要的元素定位方法及其使用示例&#xff1a; 1. 基本定位方法 1.1 通过 ID 定位 element driver.find_element(By.ID, "element_id") 1.2 通过 Name 定位 element …...

fastGPT—前端开发获取api密钥调用机器人对话接口(HTML实现)

官网文档链接&#xff1a;OpenAPI 介绍 | FastGPT 首先按照文档说明创建api密钥 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…...

c语言数据结构--------拓扑排序和逆拓扑排序(Kahn算法和DFS算法实现)

#include <stdio.h> #include <string.h> #include <stdbool.h> #include <stdlib.h>//使用卡恩算法(Kahn)和深度优先算法(DFS)实现//拓扑排序和逆拓扑排序//拓扑排序和逆拓扑排序顶点顺序相反//图&#xff0c;邻接矩阵存储 #define MaxVertexNum 100 …...

日期类的实现

本文运用c类和对象中的构造函数&#xff0c; 析构函数 &#xff0c;拷贝构造函数 &#xff0c; 赋值运算符重载等为大家模拟实现日期类的操作 #define _CRT_SECURE_NO_WARNINGS 1 #include"date.h" void Date:: showinfo() {cout << _year << "年&…...

3dgs通俗讲解

3d gaussian splatting&#xff1a;基于splatting和机器学习的三维重建方法。 特点&#xff1a; 无深度学习简单的机器学习大量的CG知识复杂的线性代数对GPU的高性能编程 一、什么是splatting 1、选择“雪球”&#xff1b; 为什么使用核&#xff08;雪球&#xff09; 各向…...

源码分析之Leaflet比例尺控件Control.Scale实现原理

概述 Control.Scale 是一个用于显示地图比例尺的控件&#xff0c;是 Leaflet 中实现比例尺控件的核心逻辑&#xff0c;用于在地图上动态显示公制&#xff08;米/千米&#xff09;和英制&#xff08;英尺/英里&#xff09;的比例尺。 源码分析 源码实现 Control.Scale的源码…...

【无标题 langsmith

【GPT入门】第32课 langsmith介绍与实战 1.lang smith作用2.lang smith配置方法3. 上手第一个lang smith3.1 可运行代码3.2 lang smith 官网&#xff0c;个人项目下 1.lang smith作用 LangSmith是由LangChain开发的一个平台&#xff0c;主要用于构建生产级LLM应用程序&#xf…...

智能建造新范式:装配式建筑 4.0 的数字化进阶

在全球数字化与可持续发展的浪潮中&#xff0c;建筑业正经历着第四次工业革命的深刻变革。装配式建筑4.0的出现&#xff0c;标志着建筑行业从传统的“钢筋水泥时代”迈向“数据驱动时代”&#xff0c;其核心在于通过技术融合重构建筑全生命周期的生产方式&#xff0c;实现从设计…...

从标准输入中读取所有内容sys.stdin.read()

sys.stdin.read().strip() 用于从标准输入中读取所有内容并去除首尾的空白字符。 1. sys.stdin.read() 作用&#xff1a;从标准输入流中读取所有内容&#xff0c;直到遇到文件结束符&#xff08;EOF&#xff09;。在命令行中&#xff0c;EOF 可以通过 CtrlD&#xff08;Linux…...

网络:华为数通HCIA学习:静态路由基础

文章目录 前言静态路由基础静态路由应用场景 静态路由配置静态路由在串行网络的配置静态路由在以太网中的配置 负载分担配置验证 路由备份&#xff08;浮动静态路由&#xff09;配置验证 缺省路由配置验证 总结 华为HCIA 基础实验&#xff0d;静态路由 & eNSP静态路由 基础…...

DAY 35 leetcode 202--哈希表.快乐数

题号202 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&a…...

Linux Command nmap 网络扫描

tags: 网络 文章目录 简介原理端口状态选项基本扫描发现扫描禁用DNS名称解析无ping扫描 端口扫描版本检测防火墙规避技术故障排除和调试NMAP 脚本 简介 Nmap&#xff08;“ Network Mapper ”&#xff09;是一个用于网络探索和安全审计的开源工具。它旨在快速扫描大型网络&…...

根据源码分析vue中nextTick的实现原理

根据源码分析vue中nextTick的实现原理 一. ‌核心变量定义‌‌二. 异步策略选择&#xff08;降级处理&#xff09;‌1. 微任务优先‌2. 降级到 MutationObserver‌3. 降级到宏任务‌ 三、回调执行逻辑‌四、 ‌nextTick 函数实现‌五、 ‌与 Vue 更新流程的结合‌六‌、关键设计…...

Linux内核TCP/IP协议栈中的设计模式:从面向对象到系统级软件的跨界实践

引言 设计模式(Design Patterns)自GoF(Gang of Four)在1994年提出以来,已成为软件工程领域的核心概念。尽管其经典定义基于面向对象编程(OOP),但设计模式的本质是解决复杂问题的经验总结,而非局限于特定编程范式。本文以Linux内核的TCP/IP协议栈为例,探讨设计模式在…...

风云可测:华为AI天气大模型将暴雨预测误差缩至3公里内

华为云正式发布全球首个气象专用人工智能大模型"盘古气象"&#xff0c;实现台风路径24小时预测误差<30公里、暴雨落区72小时精度91%&#xff0c;较传统数值预报效率提升10000倍。本文基于对西北太平洋10个台风回溯测试、全国2360个气象站验证数据&#xff0c;解析…...