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

【八股消消乐】发送请求有遇到服务不可用吗?如何解决?

在这里插入图片描述

😊你好,我是小航,一个正在变秃、变强的文艺倾年。
🔔本专栏《八股消消乐》旨在记录个人所背的八股文,包括Java/Go开发、Vue开发、系统架构、大模型开发、机器学习、深度学习、力扣算法等相关知识点,期待与你一同探索、学习、进步,一起卷起来叭!

目录

  • 题目
  • 答案

题目

💬技术栈:Dubbo

🔍简历内容:独立定制Cluster扩展解决同机房请求无法连通。

🚩面试问:某公司有一个多机房部署的系统,线上运行一直比较稳定,但最近,部分流量请求先出现超时异常,紧接着出现无提供者异常,最后部分功能不可用。怎么办?

在这里插入图片描述
(1)超时异常日志:

Caused by: org.apache.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2022-10-25 20:14:16.718, end time: 2022-10-25 20:14:16.747, client elapsed: 1 ms, server elapsed: 28 ms, timeout: 5 ms, request: Request [id=2, version=2.0.2, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=sayHello, parameterTypes=[class java.lang.String], arguments=[Geek], attachments={path=com.hmilyylimh.cloud.facade.demo.DemoFacade, remote.application=dubbo-04-api-boot-consumer, interface=com.hmilyylimh.cloud.facade.demo.DemoFacade, version=0.0.0, timeout=5}]], channel: /192.168.100.183:62231 -> /192.168.100.183:28043at org.apache.dubbo.remoting.exchange.support.DefaultFuture.doReceived(DefaultFuture.java:212)at org.apache.dubbo.remoting.exchange.support.DefaultFuture.received(DefaultFuture.java:176)at org.apache.dubbo.remoting.exchange.support.DefaultFuture$TimeoutCheckTask.notifyTimeout(DefaultFuture.java:295)at org.apache.dubbo.remoting.exchange.support.DefaultFuture$TimeoutCheckTask.lambda$run$0(DefaultFuture.java:282)at org.apache.dubbo.common.threadpool.ThreadlessExecutor$RunnableWrapper.run(ThreadlessExecutor.java:184)at org.apache.dubbo.common.threadpool.ThreadlessExecutor.waitAndDrain(ThreadlessExecutor.java:103)at org.apache.dubbo.rpc.AsyncRpcResult.get(AsyncRpcResult.java:193)... 29 more

(2)无提供者异常和原因

org.apache.dubbo.rpc.RpcException: Failed to invoke the method sayHello in the service com.hmilyylimh.cloud.facade.demo.DemoFacade. No provider available for the service com.hmilyylimh.cloud.facade.demo.DemoFacade from registry 127.0.0.1:2181 on the consumer 192.168.100.183 using the dubbo version 3.0.7. Please check if the providers have been started and registered.at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.checkInvokers(AbstractClusterInvoker.java:366)at org.apache.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:73)at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:340)at org.apache.dubbo.rpc.cluster.router.RouterSnapshotFilter.invoke(RouterSnapshotFilter.java:46)at org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:321)at org.apache.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:99)... 48 more

在这里插入图片描述

💡建议暂停思考10s,你有答案了嘛?如果你有不同题解,欢迎评论区留言、打卡。

答案

1.从第一条关键异常信息中看到有一个 Caused by 引发的 TimeoutException 异常类,认为发生了超时异常,但单从消费方无法定位真实原因。于是开始求证目标IP的健康状况

Caused by: org.apache.dubbo.remoting.TimeoutException: Waiting server-side response...

2.小航先在 CAT 上发现了目标 IP 在出问题期间几乎没有任何流量进来在 Prometheus 上发现在最近一段时间内 TCP 的连接耗时特别大,基本上都是有 SYN 请求握手包,但是没有 SYN ACK 响应包。然后又找网络人员帮忙实时 tcpdump 抓包测试,结果仍然发现没有 SYN ACK 响应包。好了,可以确认目标 IP 处于不可连通的状态,接着小航去开始确认目标 IP服务是宕机了还是流量被拦截。
3.继续查看日志:
org.apache.dubbo.rpc.RpcException: Failed to invoke the method sayHello…No provider available for the service … from registry 127.0.0.1:2181…
从第二条关键异常信息中,No provider available,显然找不到服务提供者,继续定位堆栈信息:

at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.checkInvokers(AbstractClusterInvoker.java:366)
at org.apache.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:73)

对应代码:

protected void checkInvokers(List<Invoker<T>> invokers, Invocation invocation) {// 检查传入的 invokers 服务提供者列表,若集合为空,则会抛出无提供者异常if (CollectionUtils.isEmpty(invokers)) {// 抛出的 RpcException 异常信息中,会有 No provider available 明显的关键字throw new RpcException(RpcException.NO_INVOKER_AVAILABLE_AFTER_FILTER, "Failed to invoke the method "+ invocation.getMethodName() + " in the service " + getInterface().getName()+ ". No provider available for the service " + getDirectory().getConsumerUrl().getServiceKey()+ " from registry " + getDirectory().getUrl().getAddress()+ " on the consumer " + NetUtils.getLocalHost()+ " using the dubbo version " + Version.getVersion()+ ". Please check if the providers have been started and registered.");}
}

定位代码后推断:消费方在内存中找不到对应的提供者,才会提示无提供者异常

继续分析checkInvokers[invokers 列表] => FailoverClusterInvoker => FailoverCluster => cluster = “failover” => 消费方订阅 => 消费方启动或注册中心节点变更会更新invokers列表源数据 => 源数据为什么更新没了 => 消费方已经处于运行状态,只是在调用的时候发生了无提供者异常 => 注册中心的节点发生了变更。

貌似找到了问题所在,小航重新正向复盘:节点宕机,造成提供方节点与注册中心断开心跳连接 => 注册中心会删掉提供方的IP节点 => 消费方感知到注册中心的节点发生变更 => 更新消费方本地的源数据信息 => 消费方在 checkInvokers 中发现 invokers 为空。

4.Ip一些正常一些不正常,首先排除人为恶搞因素,小航思索良久,和公司网工小李探讨了一番,得知它们全都是同一个机房的,最终问题定位到:机房A的某些提供者宕机了,且机房A的消费者状态正常,但把机房A的消费者拉下水导致各种功能无法正常运转

5.核心问题定位后,小航同志开始制作解决方案:机房之间防火墙彻底隔离,同机房已经调用不通,防止消费方硬着头皮一直从宕机的服务拿到响应内容。现在的应用大多数都是数十秒才启动成功,显然同机房请求死路一条,那么消费者的请求发给谁才能通呢?显然:中间商。

在这里插入图片描述

于是小航同志开始设计技术方案:消费方遇到无提供者异常后 => 调用转发服务 => 转发服务找可用机房的可用提供者并发起调用并拿到结果。貌似可行。不过为了避免这段代码,需要给每个消费者写,小航提炼了一个公共插件,既做到了代码公用只维护一份代码,又做到了对应用的非侵入特性,一举两得。

6.结果新的问题又来了,该在调用的哪个环节进行转发服务的处理呢?小航同志琢磨了一下,哪里出错,就从哪里开始,要调用转发服务,就需要先捕获到无提供者异常,翻阅源码:FailoverClusterInvoker#doInvoke => checkInvokers被 protected 修饰 => 可以被子类重写 => dubbo提供了一个检测 invokers 是否可用的机制。小航同志于是一顿操作:定义TransferClusterInvoker 类 => 继承 FailoverClusterInvoker => 重写 checkInvokers

7.CR很快就驳回来了,checkInvokers 只是意在让你检测,与设计意图不符。

8.小航又重新更换思路:FailoverClusterInvoker => doInvoke被 public 修饰 => 在子类 TransferClusterInvoker 中调用父类 FailoverClusterInvoker 的 doInvoke 方法 => 进行 try…catch… 捕获精准异常 => 既不会破坏设计者的意图,还能精准处理无提供者异常后转发调用。

public class TransferClusterInvoker<T> extends FailoverClusterInvoker<T> {// 按照父类 FailoverClusterInvoker 要求创建的构造方法public TransferClusterInvoker(Directory<T> directory) {super(directory);}// 重写父类 doInvoke 发起远程调用的接口@Overridepublic Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException {try {// 先完全按照父类的业务逻辑调用处理,无异常则直接将结果返回return super.doInvoke(invocation, invokers, loadbalance);} catch (RpcException e) {// 这里就进入了 RpcException 处理逻辑// 当调用发现无提供者异常描述信息时则向转发服务发起调用if (e.getMessage().toLowerCase().contains("no provider available")){// TODO 从 invocation 中拿到所有的参数,然后再处理调用转发服务的逻辑return doTransferInvoke(invocation);}// 如果不是无提供者异常,则不做任何处理,异常该怎么抛就怎么抛throw e;}}
}

9.核心逻辑已实现,接下来就是代码中触发TransferClusterInvoker,参考 FailoverCluster的编码 => 定义TransferCluster类 => 实现Cluster接口 => 创建 TransferClusterInvoker处理调用至转发服务器 => Dubbo SPI配置。

public class TransferCluster implements Cluster {// 返回自定义的 Invoker 调用器@Overridepublic <T> Invoker<T> join(Directory<T> directory, boolean buildFilterChain) throws RpcException {return new TransferClusterInvoker<T>(directory);}
}

10.下班


🔨总结梳理:Cluster作为路由层,封装多个提供方的路由及负载均衡,并桥接注册中心以 Invoker 为中心发起调用,哪些应用场景可以考虑集群扩展呢?

(1)同机房请求无法连通时,可以考虑转发HTTP请求至可用提供者。

(2)内网本机访问测试环境无法连通时,可以转发请求至HTTP协议的接口,然后在接口中泛化调用各种Dubbo服务。

在这里插入图片描述

(3)如果针对接口的多个提供者需要做适应当前公司业务的筛选、剔除、负载均衡之类的诉求时,也是可以考虑集群扩展的。

总之,不管是无提供者问题,还是公司特殊定制化筛选负载问题,核心都是在针对接口的所有提供者做逻辑处理,提供者为空做转发兼容处理,提供者不为空做特殊筛选负载处理,目的都是在调用时做一种容错兼容处理,让应用程序更加健壮稳定。

📌 [ 笔者 ]   文艺倾年
📃 [ 更新 ]   2025.4.27
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

在这里插入图片描述

相关文章:

【八股消消乐】发送请求有遇到服务不可用吗?如何解决?

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本专栏《八股消消乐》旨在记录个人所背的八股文&#xff0c;包括Java/Go开发、Vue开发、系统架构、大模型开发、机器学习、深度学习、力扣算法等相关知识点&#xff0c;期待与你…...

【博通芯片方案】调试指令详解版一(无线)

前言 无线路由器的主流芯片方案包括,博通(BCM)、联发科(MTK)和高通等等。掌握常用的调试指令,有助于产品的测试以及故障排查。本系列文章将介绍博通芯片方案调试指令,欢迎有需要的朋友关注和分享。 无线 wl指令 查无线国家码 指令:wl -i wl1 country 说明:本系列文章…...

【Google Colab】利用unsloth针对医疗数据集进行大语言模型的快速微调(含跑通原代码)

【本文概述】 为了快速跑通&#xff0c;首先忽略算力等问题&#xff0c;使用google colab云端服务器&#xff0c;选择unsloth/DeepSeek-R1-Distill-Llama-8B大语言模型进行微调&#xff0c;微调参数只进行了简单的设置。 在微调的时候&#xff0c;实际说明colab对8B的模型微调…...

基于STM32、HAL库的ADS1255IDBR模数转换器ADC驱动程序设计

一、简介: ADS1255IDBR是德州仪器(TI)生产的一款高精度、低噪声、24位ΔΣ模数转换器(ADC),主要特性包括: 24位无丢失码分辨率 高达23位有效分辨率(ENOB) 数据速率可达30kSPS 低噪声: 2.5μV RMS (20SPS时) 可编程增益放大器(PGA): 1-64V/V 单/差分输入配置 内置自校准和系…...

T检验、F检验及样本容量计算学习总结

目录 〇、碎语一、假设检验1.1 两种错误1.2 z检验和t检验1.3 t检验1.3.1 单样本t检验1.3.2 配对样本t检验1.3.3 独立样本t检验1.4 方差齐性检验1.4 卡方检验二、样本容量的计算2.1 AB测试主要的两种应用场景2.2 绝对量的计算公式2.3 率的计算公式参考资料〇、碎语 听到最多的检…...

PDFMathTranslate:让数学公式在PDF翻译中不再痛苦

在日常的论文阅读、教材翻译中&#xff0c;我们经常会遇到一个极其恼人的问题&#xff1a;PDF里的数学公式翻译错乱。即使用上了各种强大的PDF翻译工具&#xff0c;公式依然可能被拆碎、误解&#xff0c;甚至丢失。针对这个痛点&#xff0c;PDFMathTranslate 应运而生。 本文将…...

Docker(二):docker常用命令

一、帮助命令 1、docker 帮助命令 命令说明docker version / docker -v查看docker的版本信息docker info查看docker详细信息docker --help / docker -h查看docker帮助命令&#xff0c;可以查看到相关的其他命令 二、Docker镜像命令 1、docker pull 从远程仓库docker hub 上拉…...

Missashe考研日记-day28

Missashe考研日记-day28 1 专业课408 学习时间&#xff1a;2h学习内容&#xff1a; 今天先是预习了OS关于虚拟内存管理的内容&#xff0c;然后听了一部分视频课&#xff0c;明天接着学。知识点回顾&#xff1a; 1.传统存储管理方式特征&#xff1a;一次性、驻留性。2.局部性原…...

基于esp32实现键值对存储读写c程序例程

在基于 ESP32 的系统中&#xff0c;我们可以使用 NVS&#xff08;Non-Volatile Storage&#xff0c;非易失性存储&#xff09;来实现系统配置参数的掉电存储和读写。NVS 是 ESP32 提供的一种存储机制&#xff0c;允许我们将键值对数据存储在闪存中&#xff0c;即使设备掉电&…...

半导体行业如何开展风险管理?有没有半导体风控案例参考?

近年来&#xff0c;供应链中断事件的频发&#xff0c;成了越来越多半导体人的噩梦&#xff1a; ❗ 地缘冲突引爆“氖气危机”&#xff0c;生产成本激增&#xff01; ❗ 关税政策反复&#xff0c;被迫调整全球供应链布局&#xff01; ❗ 自然灾害导致工厂停工&#xff0c;原材…...

使用 malloc 函数模拟开辟一个 3x5 的整型二维数组

在 C 语言中&#xff0c;二维数组是非常常见的数据结构&#xff0c;用于表示矩阵或者表格形式的数据。而在动态内存分配的情况下&#xff0c;我们通常使用 malloc 函数来为数组分配内存。这篇博客将介绍如何通过 malloc 动态分配一个 3x5 的整型二维数组&#xff0c;并且使用下…...

Github 热点项目 rowboat 一句话生成多AI智能体!5分钟搭建企业级智能工作流系统

今日高星项目推荐&#xff1a;rowboat凭借1705总星数成为智能协作工具黑马&#xff01;亮点速递&#xff1a;①自然语言秒变AI流水线——只需告诉它“帮外卖公司处理配送异常”&#xff0c;立刻生成多角色协作方案&#xff1b;②企业工具库即插即用&#xff0c;Python包HTTP接口…...

Redis05-进阶-主从

零、文章目录 Redis05-进阶-主从 1、搭建主从架构 &#xff08;1&#xff09;概述 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 &#xff08;2&#xff09;集群概况 我们搭建的主从…...

rockermq多线程消费者配置

rockermq多线程消费者配置 增加消费者数量实现消费者consumer多线程消费 或是 task分布式部署&#xff0c;原理一样 都是增加 consumer数量&#xff0c;程序在多线程 处理的地方已经添加过 分布式redisson锁 保证数据在多线程下的唯一性。 配置 task.yml 配置文件 &#xff08…...

Spring框架的ObjectProvider用法-笔记

在Spring框架中&#xff0c;ObjectProvider 是一个用于灵活获取Bean实例的接口&#xff0c;它允许开发者以编程方式有条件地或可选地获取Bean&#xff0c;而无需强制依赖注入&#xff0c;避免在Bean不存在时启动失败。 1. ObjectProvider 的核心功能 ObjectProvider 是Spring…...

DigitalOcean推出Valkey托管缓存服务

今天我们激动地宣布推出DigitalOcean的Valkey托管缓存服务&#xff0c;这是我们全新的托管数据库服务&#xff0c;能够无缝替换托管缓存&#xff08;此前称为托管Redis&#xff09;。Valkey托管缓存服务在你一直依赖的功能基础上&#xff0c;还提供了增强工具来支持你的开发需求…...

如何通过挖掘需求、SEO优化及流量变现成功出海?探索互联网产品的盈利之道

挖掘需求&#xff0c;优化流量&#xff0c;实现变现&#xff1a;互联网出海产品的成功之路 在当今全球化的数字时代&#xff0c;越来越多的企业和个人选择将业务扩展到国际市场。这一趋势不仅为企业带来了新的增长机会&#xff0c;也为个人提供了通过互联网产品实现盈利的途径…...

ASP.NET图片盗链防护指南

图片盗链(Hotlinking)是指其他网站直接链接到你服务器上的图片资源,这会消耗你的带宽和服务器资源。以下是几种在ASP.NET中防止图片盗链的有效方法: 1. 使用URL重写模块(推荐) 在Web.config中配置URL重写规则: xml <system.webServer> <rewrite> …...

2025-4-25 情绪周期视角复盘(mini)

直接说结论&#xff0c;没有前戏哈&#xff0c;国芳集团这波消费的行情就相当于当时机器人大周期里的DS的一个补涨周期&#xff0c;那么红宝丽就是接替了中毅达的衣钵的趋势穿越龙&#xff0c;趋势穿越龙没有结束&#xff0c;仅仅是主升暂停&#xff0c;高位震荡&#xff0c;后…...

Java求职者面试:从Spring Boot到微服务的技术深度探索

场景&#xff1a;互联网大厂Java求职者面试 角色介绍&#xff1a; 面试官&#xff1a;技术精湛&#xff0c;负责把控面试质量。谢飞机&#xff1a;搞笑的程序员&#xff0c;偶尔能答对问题。 第一轮&#xff1a;基础知识 面试官&#xff1a;谢飞机&#xff0c;你能简要介绍…...

wsl(8) -- 图形界面

1. 前言 记录一些关于wsl2图形界面的事情。 2. x11-apps wsl2默认已支持图形界面&#xff0c;只是我们选择安装的wsl2 ubuntu发行版是非桌面的&#xff0c;其中没有集成桌面应用&#xff0c;Linux的桌面和windows不同&#xff0c;windows的桌面系统是内核的一部分&#xff0…...

socket套接字-UDP(中)

socket套接字-UDP&#xff08;上&#xff09;https://blog.csdn.net/Small_entreprene/article/details/147465441?fromshareblogdetail&sharetypeblogdetail&sharerId147465441&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link UDP服务器…...

Android源码编译命令详解

一、引言 先看下面几条指令,相信编译过Android源码的人都再熟悉不过的。 source setenv.sh lunch make -j8记得最初刚接触Android时,同事告诉我用上面的指令就可以编译Android源码,指令虽短但过几天就记不全或者忘记顺序,每次编译时还需要看看自己的云笔记,冰冷的指令总…...

AI 发展历史与关键里程碑_附AI 模型清单及典型应用场景以及物流自动化适合的模型选择

AI 发展历史与关键里程碑_附AI 模型清单及典型应用场景以及物流自动化适合的模型选择 下面分三部分进行介绍: 1. AI 发展历史与关键里程碑 1950 年:图灵测试 1950 年,艾伦图灵提出“图灵测试”(Turing Test),首次以可检验的方式讨论机器能否“思考”。# 图灵测试示意:…...

MVCC(多版本并发控制)

MVCC&#xff08;多版本并发控制&#xff09;是数据库实现高并发事务的核心技术之一&#xff0c;其核心是通过数据多版本解决读写冲突。以下从‌技术原理、实现细节、应用场景、优缺点‌四个方面深入解析。 ‌一、技术原理‌ 1. ‌核心思想‌ ‌数据多版本化‌&#xff1a;每…...

可以隐藏列的表格

今天积累一个可以隐藏列的表格的实现方法 需求&#xff1a; 表格中有一部分列可以隐藏&#xff0c;在列名右侧有一个复选框&#xff0c;点击勾选展示&#xff0c;否则隐藏另有一个小工具栏&#xff0c;其中有每一列对应的复选框&#xff0c;点击可以将隐藏的列再次展示 思路…...

学习MySQL的第十二天

夕阳西下 云霞满天 一、存储过程概述 1.1 理解 含义:存储过程的英文是 Stored Procedure。它的思想很简单,就是一组经过预先编译的SQL语句的封装。 执行过程:存储过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服…...

用Python做有趣的AI项目4:AI 表情识别助手

本项目将使用 计算机视觉 CNN 模型来识别人脸表情&#xff0c;例如&#xff1a; 开心 &#x1f60a; | 生气 &#x1f620; | 悲伤 &#x1f622; | 惊讶 &#x1f632; | 厌恶 &#x1f612; | 害怕 &#x1f631; | 中性 &#x1f610; &#x1f9e0; 项目目标 实时摄像头…...

2005-2020年 各省-绿色信贷水平原始数据及测算

各省-绿色信贷水平原始数据及测算&#xff08;2005-2020年&#xff09;.ziphttps://download.csdn.net/download/2401_84585615/90259771 https://download.csdn.net/download/2401_84585615/90259771 绿色信贷是指金融机构向符合环保要求的企业或项目提供的贷款&#xff0c;旨…...

STM32F103_HAL库+寄存器学习笔记21 - CAN接收过滤器:CPU减负神器,提升系统效率的第一道防线

在STM32F103的CAN总线应用中&#xff0c;硬件过滤器&#xff08;Filter&#xff09;承担着关键角色。 本章将从寄存器层面深入剖析CAN接收过滤器的工作机制与配置方法&#xff0c;帮助理解如何高效筛选关键信息&#xff0c;减轻CPU负担。 通过合理使用过滤器&#xff0c;不仅能…...

java_基础Java 转义字符学习笔记

Java 转义字符学习笔记 在Java编程中&#xff0c;转义字符用于表示那些无法直接在代码中表示的字符。以下是一些常用的Java转义字符&#xff1a; \t - 制表符&#xff1a;用于实现对齐功能。\n - 换行符&#xff1a;用于在文本中换行。\ - 反斜杠&#xff1a;表示一个反斜杠字…...

JavaScript基础(七)之web APIs

第二部分:Web APIs 目录 第二部分:Web APIs 五、DOM-节点操作 5.1 日期对象 5.1.1 实例化 5.1.2 时间对象方法 5.1.3 时间戳 5.2 节点操作 5.2.1 DOM节点 5.2.2 查找节点 父节点查找: 子节点查找: 兄弟关系查找: 5.2.3 增加节点 创建节点 5.2.4 删除节点 …...

强化学习机器人路径规划——Sparrow复现

强化学习机器人路径规划——Sparrow-v1.1复现教程 Sparrow是一个开源的移动机器人路径规划模拟器,重视模拟速度和轻量化,使用DDQN强化学习方法进行训练。本文在其基础上,增加了绘制训练曲线教程,并给出了自制地图文件,以实现在自己的地图上进行训练。 模型示意图 源码地…...

怎样给MP3音频重命名?是时候管理下电脑中的音频文件名了

在处理大量音频文件时&#xff0c;给这些文件起一个有意义的名字可以帮助我们更高效地管理和查找所需的内容。通过使用专业的文件重命名工具如简鹿文件批量重命名工具&#xff0c;可以极大地简化这一过程。本文将详细介绍如何利用该工具对 MP3 音频文件进行重命名。 步骤一&am…...

【Nova UI】十二、打造组件库之按钮组件(上):迈向功能构建的关键一步

序言 在上一篇文章中&#xff0c;我们深入探索了 icon 组件从测试到全局注册的全过程&#x1f3af;&#xff0c;成功为其在项目中稳定运行筑牢了根基。此刻&#xff0c;组件库的建设之旅仍在继续&#xff0c;我们将目光聚焦于另一个关键组件 —— 按钮组件。按钮作为用户与界面…...

C++初阶-STL简介

目录 1.什么是STL 2.STL的版本 3.STL的六大组件 4.STL的重要性 4.1在笔试中 4.2在面试中 4.3.在公司中 5.如何学习STL 6.总结和之后的规划 1.什么是STL STL&#xff08;standard template library-标准模板库&#xff09;&#xff1b;是C标准库的重要组成部分&#xf…...

(最短路)洛谷 P6880 JOI2020 奥运公交 题解

题意 给定一个 n n n 点 m m m 边的有向图&#xff0c;每条边从 u u u 指向 v v v&#xff0c;经过这条边的代价为 c c c。点编号为 1 1 1 到 n n n&#xff0c;无自环。 我们可以翻转一条边&#xff0c;即让他从 u u u 指向 v v v 变为从 v v v 指向 u u u&#…...

动态规划算法题1

动态规划做题步骤 确定状态表示&#xff1a;dp表中某一个位置中的值所表示的含义就是状态表示根据状态表示推导状态转移方程&#xff1a;dp[i]等于什么状态转移方程就是什么&#xff0c;用之前或者之后的状态&#xff0c;推导出dp[i]的值初始化(防止越界)&#xff1a;根据状态…...

π0.5:带开放世界泛化的视觉-语言-动作模型

25年4月来自具身机器人创业公司 PI 公司的论文“π0.5: a Vision-Language-Action Model with Open-World Generalization”。 为了使机器人发挥作用&#xff0c;它们必须在实验室之外的现实世界中执行实际相关的任务。虽然视觉-语言-动作 (VLA) 模型在端到端机器人控制方面已…...

ESP32开发入门(四):ESP32-s3多串口开发实践

摘要 本文详细介绍ESP32-S3芯片的UART外设开发方法&#xff0c;涵盖UART0(默认调试串口)、UART1和UART2的配置与使用技巧&#xff0c;并提供完整示例代码&#xff0c;帮助开发者快速实现多设备串口通信。 一、ESP32-S3串口硬件资源 ESP32-S3芯片提供3个UART控制器&#xff1…...

树莓派学习专题<10>:使用V4L2驱动获取摄像头数据--申请和管理缓冲区

树莓派学习专题&#xff1c;10&#xff1e;&#xff1a;使用V4L2驱动获取摄像头数据--申请和管理缓冲区 1. 申请和管理缓冲区代码2. 代码解析3. 实测结果 1. 申请和管理缓冲区代码 /* 数据缓冲区 */ typedef struct tag_BufDesc {void *pvBufPtr ;size_t szBuf…...

Android10.0 Android.bp文件详解,以及内置app编写Android.bp文件

1.前言 在10.0的系统rom定制化开发中,在内置app的时候都是常用的用法,用Android.mk的常用,但是某些时候,会 使用Android.bp的方式来内置app,接下来就来使用常用的方式来写内置so aar jar等文件 2.Android.bp文件详解,以及内置app编写Android.bp文件的介绍 根据设计,An…...

git回退commit

在Git中回退提交(commit)主要有两种方法:使用 `git reset` 或 `git revert`,具体取决于是否需要保留提交历史或是否已推送到远程仓库。以下是详细步骤: 一、使用 `git reset`(适合本地未推送的提交) `git reset` 会移动分支的 HEAD 指针到指定提交,可选择是否保留修改。…...

arcpy列表函数的应用(4)

动态获取字段信息 在处理要素类或表时&#xff0c;可能需要动态获取字段信息&#xff0c;以便根据字段类型或名称进行特定操作。可以使用arcpy.ListFields()函数获取字段列表&#xff0c;并根据需要筛选字段。 示例&#xff1a; python # 获取指定要素类的所有字段 fields …...

02 业务流程架构

业务流程架构提供了自上而下的组织鸟瞰图&#xff0c;是业务流程的全景图。根据所采用的方法不同&#xff0c;有时被称为流程全景图或高层级流程图&#xff0c;提供了业务运营中所有业务流程的整体视图。 这样有助于理解企业内部各个业务流程之间的相互关系以及它们如何共同工…...

「Mac畅玩AIGC与多模态01」架构篇01 - 展示层到硬件层的架构总览

一、概述 AIGC&#xff08;AI Generated Content&#xff09;系统由多个结构层级组成&#xff0c;自上而下涵盖交互界面、API 通信、模型推理、计算框架、底层驱动与硬件支持。本篇梳理 AIGC 应用的六层体系结构&#xff0c;明确各组件在系统中的职责与上下游关系&#xff0c;…...

如何有效防止 SQL 注入攻击?

&#x1f512; 如何有效防止 SQL 注入攻击&#xff1f; SQL 注入&#xff08;SQL Injection&#xff09;是黑客通过构造恶意输入&#xff0c;篡改 SQL 查询语句的攻击方式。以下是 7 大防御策略&#xff0c;涵盖开发、测试和运维全流程。 ✅ 1. 使用参数化查询&#xff08;Pre…...

路由交换网络专题 | 第九章 | NAT地址转换 | NAT回流

拓扑图 &#xff08;1&#xff09;配置实现内网用户可以通过 NAT 转换地址访问外网。 // 配置一条静态路由通往PC2 [AR1]ip route-static 0.0.0.0 0 60.1.1.10 // 配置ACL匹配网段 [AR1]acl 2000 [AR1-acl-basic-2000]rule permit source 192.168.1.10 0.0.0.0 // 设置地址池(不…...

DFPatternFunctor遍历计算图

文件&#xff1a;include/tvm/relay/dataflow_pattern_functor.h 功能&#xff1a;定义 DFPatternFunctor 基类&#xff0c;为 DFPattern 提供访问者模式(Visitor Pattern)的实现框架&#xff0c;支持对不同类型的模式节点进行差异化处理。 继承关系&#xff1a; template &…...

Spring Boot中@RequestParam、@RequestBody、@PathVariable的区别与使用

Spring Boot中RequestParam、RequestBody、PathVariable的区别与使用 前言 在当今的Web开发领域&#xff0c;Spring Boot凭借其简洁、高效和强大的功能&#xff0c;成为了Java开发者构建Web应用的首选框架。在开发过程中&#xff0c;处理来自客户端的请求参数是一项常见且关键…...