谁再悄咪咪的吃掉异常,我上去就是一 JIO

语义分割(Semantic Segmentation)近年发展综述 目标:为图像中每个像素分配一个语义类别标签(如“道路”、“行人”、“天空”),不区分同类实例。关键挑战精确边界恢复(高空间分辨率)全局上下文理解(大感受野)计算效率与精度平衡小样本/弱监督泛化语义分割的十年演进,是一条从专用→通用、封闭→开放、慢速→实时、像素→语义2015:FCN/U-Net 奠基;2018:DeepLabv3+/PSPNet 实现高精度;2020:HRNet+OCR 登顶竞赛;2021:SegFormer 开启 Transformer 新纪元;2023+ 阅读详情

 

这图太魔性了啊

这次分享一下上个月碰到的离奇的问题。一个简单的问题,硬是因为异常被悄咪咪吃掉,过关难度直线提升,导致小黑哥排查一个晚上。

这个美好的晚上,本想着开两把 LOL 无限火力,在召唤师峡谷来个五杀的~

哎,就这样没了啊!我知道,你们一定能理解这种五杀被抢的感觉~

下次,真的,谁再让我看到悄咪咪的吃掉异常,我真的要上去一 Jio 了!

 

好了,本文可不是水文,看完本篇文章,你可以学到以下知识点:

  • Arthas 排查技巧
  • 啥是 NoClassDefFoundError
  • Dubbo 异常内部处理方式

好了,同学们,打开小本子,准备记好知识点~

 

 

起因

我们有个业务系统,应用之间调用链如下所示:

 

A 应用是业务发生起始应用,在这个应用中将会根据一定规则选择最后的通讯渠道 C,然后将这个渠道标识传递给 B 应用。

B 应用的功能类似网关,这个应用将会根据 A 应用传递过来的渠道标识,将会请求路由下发到具体的 C 应用,起到服务路由的功能。

C 应用是与外部应用交互的应用,我们将其称为渠道通讯机。

假设一次业务中,A 应用根据规则选择 C2 的渠道标识,然后传递给 B 应用。B 应用根据这个标识选择使用 C2 进行通讯,最后 C2 调用外部应用完成一次业务调用。

上述所有应用都基于 Dubbo 进行远程通讯。

介绍完业务的基本情况,现在我们来看下到底发生了啥事。

一次业务需求中,需要改动 C2 应用,这次改动功能点真的很小,很快就完成了。小黑哥想着闲着也是闲着,于是就把之前 C2 应用中打印的日志中一些没有脱敏的信息,进行脱敏处理。

由于之前日志框架脱敏处理存在一些问题,于是就将日志框架从 Log4j 升级为 LogBack。升级之后,为了防止不同日志框架中之间的产生冲突,于是使用 IDEA Maven Helper 插件,统一将应用中所有的 Log4j 相关依赖都给排除了。

改动完成之后,将 C2 应用发布到测试环境,再次从 A 应用发起测试, B 应用返回异常提示未找到 C2 应用。

B 应用业务代码类似如下:


 
public Response pay(Request req) {        try {        if (!isSupport(req.getChnlCode())) {            return new Response("ERROR", "未找到相关渠道应用");        }        return doPay(req);    } catch (Exception e) {        return new Response("ERROR", "未找到相关渠道应用");    }}

正常情况下,若是配置存在问题,B 应用将会返回未找到具体渠道,请求也会在 B 应用结束,不会调用到 C2 应用(也没办法调用)。

然而此次配置什么都没问题, 而且最诡异的是 C2 应用居然收到了请求,并且成功处理了业务请求。

排查问题

由于 B 应用异常处理时,将异常吃掉了,我们没办法得知这个过程到底发生了啥事,所以第一要紧的事获取异常信息。

最简单的办法就是,将 B 应用改造一下,加入打印异常日志。不过当时比较懒,不想改造应用,就想获取异常信息,于是想到使用 Arthas[1]。

Arthas 排错技巧

Arthas 是Alibaba开源的Java诊断工具,这里就不再详细介绍这个工具,主要讲下这次排错用到的命令watch[2]。

watch 命令可以方便观察指定方的调用情况,可以具体观察方法的返回值、抛出异常、入参,另外还可以通过 OGNL表达式查看对应的变量。

这里我们主要为了查看方法抛出的异常信息,执行命令如下:


 
watch com.dubbo.example.DemoService doPay -e -x 2 '{params,throwExp}'

上述命令将会在方法异常之后观察方法的入参以及异常信息。

注意,我们需要查看 doPay 方法,而不是 pay 方法。这是因为 pay方法中我们将异常捕获,不太可能会抛出异常哦~

异常信息如下所示:

 

真正引起此次错误的异常信息为:


 
java.lang.NoClassDefFoundError: Could not initialize class xx.xxx.xx.GELogger

由于此次 B 应用不存在改动,所以推测这个异常实际发生在 C2 应用,于是在 C2 应用处再次使用 Arthas watch 命令,同样观察到相同的错误信息。

NoClassDefFoundError

NoClassDefFound,从名字上我们可以推测是因为类不存在,从而引发的这个错误。按照这个思路,我们首先可以简单查看一下 B 应用中是否存在 GELogger 相关类。

查看 B 应用相关依赖包,从中发现了这个类文件,这说明这个类确实存在。

在 IDEA 反编译查看 GELogger类相关源码,从中发现了问题。


 
private static Logger logger;static {    System.out.println("static init");    logger = Logger.getLogger(NoClassDefFoundErrorTestService.class);    System.out.println("Logger init success");}

GELogger存在一个静态代码块,用于初始化一个 org.apache.log4j.Logger日志类。

然后在上面改动中,全部的 Log4j依赖都被排除了,所以这里运行时应该会抛出另外一个找到 org.apache.log4j.Logger 错误。

执行以下代码,模拟抛错过程。


 
System.out.println("模拟第一次 Error");try {    NoClassDefFoundErrorTestService noClassDefFoundErrorTestService=new NoClassDefFoundErrorTestService();} catch (Throwable e) {    e.printStackTrace();}System.out.println("模拟第二次 Error");try {    NoClassDefFoundErrorTestService noClassDefFoundErrorTestService=new NoClassDefFoundErrorTestService();} catch (Throwable e) {    e.printStackTrace();}

异常信息如下所示:

 

异常信息

第一次创建 NoClassDefFoundErrorTestService实例时,Java 虚拟机读取加载时,将会初始化静态代码块时。由于 org.apache.log4j.Logger类不存在,静态代码块执行异常,从而导致类加载失败。

第二次再创建 NoClassDefFoundErrorTestService 实例时,Java 虚拟机不会再次读取加载,所以直接返回了以下异常。


 
java.lang.NoClassDefFoundError: Could not initialize class com.dubbo.example.NoClassDefFoundErrorTestService

找到问题真正原因,解决办法也很简单,直接排除 GELogger 所在依赖包。

Dubbo 内部异常处理

虽然问题到此解决了,但是这里还有一个疑问,为何 C2 应用发生了异常,却没有相关错误日志,并且 C2 业务逻辑也正常处理完成。

这就要说到 Dubbo 内部异常错误处理方式,上面 GELogger 其实作用在一个 Dubbo 自定义 Filter 中,用来记录结果,模拟代码如下:


 
@Activate(        group = {"provider", "consumer"})public class ErrorFilter implements Filter {    @Override    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {        Result result = invoker.invoke(invocation);        NoClassDefFoundErrorTestService noClassDefFoundErrorTestService=new NoClassDefFoundErrorTestService();        // 处理业务逻辑        return result;    }}

这个自定义 Filter 中首先执行 invoker 方法,这个方法将会调用真正的业务方法,这就是为什么 C2 应用逻辑是正常处理完成。

业务方法处理完成之后,然后执行后续逻辑。由于 NoClassDefFoundErrorTestService将会抛出 Error,最终这个 Error,将会在 HeaderExchangeHandler#handleRequest 被捕获,然后将会把相关异常信息返回给调用 Dubbo 消费者。

 

Dubbo 2.7

而在 Dubbo 消费者接受到服务提供者返回信息之后,将会在 DefaultFuture#doReceived转化成 RemotingException。

 

dubbo consumer 2.7

而 RemotingException 最终将会在 FailoverClusterInvoker#doInvoke 转换成 RpcException返回给业务代码。

 

 

总结

好了,说了这么多,总结一下本文知识点

  1. 异常捕获之后,一定要记得打印日志,并且要记得输出堆栈信息。
  2. 运行时类不存在,将会导致 NoClassDefFoundError,类加载过程失败,也会导致 NoClassDefFoundError。
  3. 对外提供的二方包,最好不要依赖特定日志框架,如 Log4j,Logback 等,应该使用 Slf4j 框架。

参考资料

[1] Arthas: https://alibaba.github.io/arthas/index.html

[2] watch: https://alibaba.github.io/arthas/watch.html

[3] 当Dubbo遇上Arthas:排查问题的实践: https://dubbo.apache.org/zh-cn/blog/dubbo-meet-arthas.html

[4] java.lang.NoClassDefFoundError 的解决方法一例: https://www.codelast.com/原创-java-lang-noclassdeffounderror-的解决方法一例/

[5] noclassdeffounderror-could-not-initialize-class-error: https://stackoverflow.com/questions/1401111/noclassdeffounderror-could-not-initialize-class-error

【uniapp踩坑记】App Store上传失败:Invalid Swift Support错误怎么解决? 作为一个前端出身的开发者,用 uniapp 开发原生 App 已经够挑战了,打包 iOS 上传 App Store 更是处处暗雷。这次的坑虽然小,但确实容易忽略。如果你也遇到了类似的报错,希望这篇文章能帮你少踩一次坑! 阅读详情

相关推荐

PCA9698嵌入式C++驱动库:高性能I²C GPIO扩展方案

GPIO扩展是嵌入式系统中解决MCU引脚资源不足的关键技术,其核心原理在于通过串行总线(如I²C)桥接主控与外设寄存器,实现逻辑引脚到物理IO的映射与状态同步。技术价值体现在低开销、高确定性与多设备可扩展性,广泛应用于工业控制、传感器节点和LED矩阵驱动等实时场景。本文聚焦PCA9698——一款支持24通道双向IO、中断输出与可编程驱动模式的I²C GPIO扩展芯片,结合其C++驱动库的影子寄存器机制、端口级原子操作及非阻塞同步设计,提供面向资源受限平台(如ATmega2560)的工程就绪方案。

weixin_35756637的博客 626

c++ 外部组件发生异常_谁再悄咪咪的吃掉异常,我上去就是一 JIO

又到周末了,周更选手申请出站~这图太魔性了啊这次分享一下上个月碰到的离奇的问题。一个简单的问题,硬是因为异常被悄咪咪吃掉,过关难度直线提升,导致小黑哥排查一个晚上。这个美好的晚上,本想着开两把 LOL 无限火力,在召唤师峡谷来个五杀的~哎,就这样没了啊!我知道,你们一定能理解这种五杀被抢的感觉~下次,真的,谁再让我看到悄咪咪的吃掉异常,我真的要上去一 Jio 了!好了,本文可不是水文,看完本篇文章...

weixin_39683021的博客 537

VizCut 全自动批量视频二次去重处理!支持视频无水印解析下载和批量剪辑,完全免费,使用简单!

可制作和分享剪辑模板,已提供20+种剪辑方案,内置众多扫光蒙版素材。支持二次去重批量处理,完全免费,无广告,且支持视频无水印解析下载,非常强大。如果说我们处理的视频需要进行一样的参数设置的话,就可以把我,1设置的参数设置为模板,后面就可以一键调用。1. 本地CPU处理,可设置线程数,可开启GPU加速,无任何限制,全看机器性能。适用场景:自媒体搬运、短视频二创、批量去重等,完全免费,无广告干扰!3. 20+种参数可调可选,内置很多相关素材。可保存为模板,可复用、可分享、可导入。2. 所有参数的设置,

goodfat的博客 5321

谁再悄咪咪的吃掉异常吗,我上去就是一JIO

又到周末了,周更选手申请出站~ 这次分享一下上个月碰到的离奇的问题。一个简单的问题,硬是因为异常被悄咪咪吃掉,过关难度直线提升,导致小黑哥排查一个晚上。 这个美好的晚上,本想着开两把 LOL 无限火力,在召唤师峡谷来个五杀的~ 哎,就这样没了啊!我知道,你们一定能理解这种五杀被抢的感觉~ 下次,真的,谁再让我看到悄咪咪的吃掉异常,我真的要上去一 Jio 了! 好了,本文可不是水文,看完本篇文章,你可以学到以下知识点: Arthas 排查技巧 啥是 NoClassDefFoundError Dubbo

楼下小黑哥 984

10万+字超硬核 机器学习 笔记(面试八股)

10w字总结面试中可能用到的机器学习八股和常用算法,包括感知机(Perceptron)、多层感知机(MLP, Multi-Layer Perceptron)、支持向量机(SVM, Support Vector Machine)、K 最近邻(KNN, K-Nearest Neighbors)、朴素贝叶斯(Naive Bayes)、决策树(Decision Tree)、随机森林(Random Forest)、Bagging、Boosting、GBDT、XGBoos、LightGBM等。

haopinglianlian的博客 4658

从源码编译CesiumForUnreal

从源码编译CesiumForUnreal插件

专注GIS开发 5644

log4j 抛出异常信息_谁再悄咪咪的吃掉异常,我上去就是一 JIO

又到周末了,周更选手申请出站~这图太魔性了啊这次分享一下上个月碰到的离奇的问题。一个简单的问题,硬是因为异常被悄咪咪吃掉,过关难度直线提升,导致小黑哥排查一个晚上。这个美好的晚上,本想着开两把 LOL 无限火力,在召唤师峡谷来个五杀的~哎,就这样没了啊!我知道,你们一定能理解这种五杀被抢的感觉~下次,真的,谁再让我看到悄咪咪的吃掉异常,我真的要上去一 Jio 了!好了,本文可不是水文,看完本篇文章...

weixin_42146230的博客 157

Windows VHD的新玩法——设置任意挂载点

vhd 挂载隐藏的虚拟分区 详细过程 分别使用CreateVirtualDisk和OpenVirtalDisk来创建和打开虚拟磁盘文件。 使用AttachVirtualDisk,必须具有管理员权限才能成功执行此步骤。 初始化设备(延时Sleep),获取附加 VHD 的 UNC 路径:\\.\PhysicalDrive# 。 使用FindFirstVolume/FindNextVolume枚举已安装的卷以查找虚拟磁盘上的卷。 使用SetVolumeMountPoint将卷挂载到文件夹或者设

圣三一 2587

slf4j打印未捕获异常信息_谁再悄咪咪的吃掉异常,我上去就是一 JIO

关注“Java有道”,星标或置顶,更多干货等你发现!转自程序通事这次分享一下上个月碰到的离奇的问题。一个简单的问题,硬是因为异常被悄咪咪吃掉,过关难度直线提升,导致小黑哥排查一个晚上。这个美好的晚上,本想着开两把 LOL 无限火力,在召唤师峡谷来个五杀的~哎,就这样没了啊!我知道,你们一定能理解这种五杀被抢的感觉~下次,真的,谁再让我看到悄咪咪的吃掉异常,我真的要上去一 Jio 了!好了...

weixin_39805732的博客 224

PLC框架-1.3- 汇川PN伺服(3号报文)

本文以汇川IS620F伺服为例,详细介绍了FB_Servo_ToAxis功能块的应用方法。该功能块封装了MC_Home等轴控指令,实现使能、定位、点动、速度模式及回零等功能,支持转矩限制与显示,并具备行程统计和HMI单位自动切换特性。文章从硬件配置(PN网络连接、报文选择)、参数设置(控制模式、电子齿轮比),到软件实现(功能块调用、手动/自动控制逻辑)进行了系统说明,重点展示了绝对/相对定位、速度模式等典型应用场景的程序编写方法,为汇川伺服在Profinet网络下的工程应用提供了完整解决方案。

qq_34047402的博客 756

[QMT和ptrade量化交易小白入门]-125、菜场大妈加上四大现金行业指数风控,最大回撤从22%减少了一半

群里面有人建议,在菜场大妈策略的基础上,加入申万的行业指数(银行,钢铁,有色,煤炭)测算其宽度,当这四大行业其中有一个高就会清仓(用来控制回撤)。这背后的逻辑是,在存量资金博弈的市场环境中,资金总量相对固定,当银行、钢铁、有色、煤炭等大市值周期行业因基本面改善(如涨价、政策催化)或避险需求而走强时,会吸引大量资金涌入,导致其他板块(尤其是小市值股票)面临流动性虹吸。经过回测,对比上一个版本发现确实是可以降低一半的回撤,最大回撤从22.3%降到了11.4%,而且有很多时间是空仓等待。

木头大左的博客 241

此异常最初是在此调用堆栈中引发的: [外部代码]_第二次了!谁再悄咪咪的吃掉异常,就别怪我“翻脸无情”了...

又到周末了,周更选手申请出站~这次分享一下上个月碰到的离奇的问题。一个简单的问题,硬是因为异常被悄咪咪吃掉,过关难度直线提升,导致小黑哥排查一个晚上。这个美好的晚上,本想着开两把 LOL 无限火力,在召唤师峡谷来个五杀的~哎,就这样没了啊!我知道,你们一定能理解这种五杀被抢的感觉~下次,真的,谁再让我看到悄咪咪的吃掉异常,我真的要上去一 Jio 了!好了,本文可不是水文,看完本篇文章,你可以学到以...

weixin_39900206的博客 1317

097、Zephyr RTOS驱动开发实战:传感器驱动(陀螺仪)

I2C速率别设太高:LSM6DSO支持最高400kHz,但实际布线有寄生电容时,400kHz容易出错。工业产品我统一用100kHz,稳定压倒一切。FIFO水印值要计算:假设ODR=6.66kHz,每150us产生一组数据,如果水印设32组,则每4.8ms触发一次中断。这个间隔要大于I2C读取耗时(实测约200us),否则中断堆积。电源纹波敏感:陀螺仪对电源噪声敏感,特别是3.3V供电时。我遇到过因为DC-DC纹波太大,陀螺仪输出噪声从0.1dps飙升到2dps。

m0_50546716的博客 118

log4j 抛出异常信息_第二次了!谁再悄咪咪的吃掉异常,就别怪我“翻脸无情”了...

又到周末了,周更选手申请出站~这次分享一下上个月碰到的离奇的问题。一个简单的问题,硬是因为异常被悄咪咪吃掉,过关难度直线提升,导致小黑哥排查一个晚上。这个美好的晚上,本想着开两把 LOL 无限火力,在召唤师峡谷来个五杀的~哎,就这样没了啊!我知道,你们一定能理解这种五杀被抢的感觉~下次,真的,谁再让我看到悄咪咪的吃掉异常,我真的要上去一 Jio 了!好了,本文可不是水文,看完本篇文章,你可以学到以...

weixin_39565300的博客 116

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ELK太笨重了?想放弃?快试试日志系统新贵Loki吧!

往期热门文章:1、《往期精选优秀博文都在这里了!》2、谁再悄咪咪的吃掉异常,我上去就是一 JIO3、现在的学生太厉害!冒着挂科的风险写的 Spring Cloud 总结4、Apache ...

Java后端技术 722

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

这 10 行比较字符串相等的代码给我整懵了,不信你也来看看

往期热门文章:1、《往期精选优秀博文都在这里了!》2、谁再悄咪咪的吃掉异常,我上去就是一 JIO3、现在的学生太厉害!冒着挂科的风险写的 Spring Cloud 总结4、Apache ...

Java后端技术 475

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

求求你!数据库不要再使用外键了?

往期热门文章:1、《往期精选优秀博文都在这里了!》2、还在写慢SQL?3、ELK太笨重了?想放弃?快试试日志系统新贵Loki吧!4、谁再悄咪咪的吃掉异常,我上去就是一 JIO5、现在的学...

Java后端技术 1348

sql 加条件反而变慢_还在写慢SQL?

往期热门文章:1、《往期精选优秀博文都在这里了!》2、ELK太笨重了?想放弃?快试试日志系统新贵Loki吧!3、谁再悄咪咪的吃掉异常,我上去就是一 JIO4、现在的学生太厉害!冒着挂科的风险写的 Spring Cloud 总结5、Apache Dubbo 被曝出“高危”远程代码执行漏洞一 前言不管是开发同学还是DBA,想必大家都遇到慢查询(select,update,insert,del...

weixin_39674190的博客 3816

还在写慢SQL?

往期热门文章:1、《往期精选优秀博文都在这里了!》2、ELK太笨重了?想放弃?快试试日志系统新贵Loki吧!3、谁再悄咪咪的吃掉异常,我上去就是一 JIO4、现在的学生太厉害!冒着挂科的...

Java后端技术 715

sql 外键_求求你!数据库不要再使用外键了?

往期热门文章:1、《往期精选优秀博文都在这里了!》2、还在写慢SQL?3、ELK太笨重了?想放弃?快试试日志系统新贵Loki吧!4、谁再悄咪咪的吃掉异常,我上去就是一 JIO5、现在的学生太厉害!冒着挂科的风险写的 Spring Cloud 总结为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题...

weixin_39827306的博客 135

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 289

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 346

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 198

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 130
上一篇: 拥有大厂梦,却因为MySQL败下阵来,那你一定要看这本经典之作
下一篇: 连夜整理了142页Spring知识点总离线文档(源码笔记+思维导图)
java架构那些事
博客等级 码龄6年 6粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值