分布式事务——三阶段提交(1),2024年最新flutter页面跳转黑屏

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img

img
img
htt

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注鸿蒙)
img

正文

在前文,我们介绍来了分布式事务,以及分布式事务的解决方案之一的二阶段提交
本文介绍分布式事务处理方案之一的三阶段提交协议。

分布式事务

分布式事务是指发生在多个数据节点之间的事务,分布式事务比单机事务要复杂的多。在分布式系统中,各个节点之间在是相互独立的,需要通过网络进行沟通和协调。由于存在事务机制,可以保证每个独立节点上的数据操作可以满足ACID。但是,相互独立的节点之间无法准确地知道其他节点的事务执行情况。所以从理论上来讲,两个节点的数据是无法达到一致的状态。如果想让分布式部署的多个节点中的数据保持一致性,那么就要保证在所有节点数据的写操作,要么全部都执行,要么全部都不执行。但是,一台机器在执行本地事务的时候无法知道其他机器中的本地事务的执行结果,所以它也就不知道本次事务到底应该commit还是rollback。所以,常规的解决办法就是引入一个"协调者"的组件来统一调度所有分布式节点的执行。

为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复权衡过程中总结了许多典型的协议和算法。其中比较著名的有二阶提交协议(Two Phase Commitment Protocol)、三阶提交协议(Three Phase Commitment Protocol)和Paxos算法。针对分布式事务,是X/Open 这个组织定义的一套分布式事务的标准X/Open DTP(X/Open Distributed Transaction Processing ReferenceModel),定义了规范和API接口,可以由各个厂商进行具体的实现。

大部分的关系型数据库通过两阶段提交(Two Phase Commit,2PC)算法来完成分布式事务,比如Oracle中通过dblink方式进行事务处理。下面重点介绍下3PC算法。

下面重点介绍下三阶提交协议算法。

三阶段提交概述

三阶段提交协议可以理解为两阶段提交协议的改良版,是在协调者和参与者中都引入超时机制,并且把两阶段提交协议的第一个阶段分成了两步: 询问,然后再锁资源,最后真正提交。

两阶段提交协议最早是分布式事务的专家Jim Gray在1978年的一篇文章Notes on Database Operating Systems中提及。两阶段提交协议可以保证数据的强一致性,即保证了分布式事务的原子性:所有结点要么全做要么全不做。许多分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定提交或取消(回滚)的分布式算法。同时也是解决一致性问题的算法。该算法能够解决很多的临时性系统故障(包括进程、网络节点、通信等故障),被广泛地使用。但是,它并不能够通过配置来解决所有的故障,在某些情况下它还需要人为的参与才能解决问题。两阶段提交协议存在的问题是,协调者在某些时刻如果失败了, 整个事务就会阻塞。于是Skeen发布了"NonBlocking Commit Protocols" (1981)这篇论文,论文指出在一个分布式的事务里面, 需要一个三阶段的提交协议来避免在两阶段提交中存在的阻塞问题。

顾名思义,三阶段提交分为以下三个阶段:

  • CanCommit
  • PreCommit
  • DoCommit

在三阶段提交协议中,系统一般包含两类角色:

  • 协调者(Coordinator),通常一个系统中只有一个;
  • 参与者(Participant),一般包含多个,在数据存储系统中可以理解为数据副本的个数。

CanCommit

在CanCommit阶段,协调者协议流程如下:

  • 写本地日志“BEGIN_COMMIT”,并进入WAIT状态;
  • 向所有参与者发送“VOTE_REQUEST”消息;
  • 等待并接收参与者发送的对“VOTE_REQUEST”的响应。参与者响应“VOTE_ABORT”或“VOTE_COMMIT”消息给协调者。

该流程与两阶段提交协议类似。

PreCommit

在PreCommit阶段,,协调者将通知事务参与者准备提交或取消事务,写本地的redo和undo日志,但不提交。

协调者协议流程如下:

  • 若收到任何一个参与者发送的“VOTE_ABORT”消息;
  • 写本地“GLOBAL_ABORT”日志,进入ABORT状态;
  • 向所有的参与者发送“GLOBAL_ABORT”消息;
  • 若收到所有参与者发送的“VOTE_COMMIT”消息;
  • 写本地“PREPARE_COMMIT”日志,进入PRECOMMIT状态;
  • 向所有的参与者发送“PREPARE _COMMIT”消息;
  • 等待并接收参与者发送的对“GLOBAL_ABORT”消息或“PREPARE_COMMIT”消息的确认响应消息。一旦收到所有参与者的“GLOBAL_ABORT”确认消息或者超时没有收到,写本地“END_TRANSACTION”日志流程结束,则不再进入DoCommit阶段。如果收到所有参与者的“PREPARE_COMMIT”确认消息,则进入DoCommit阶段。

该流程与两阶段提交协议相比,多了一个PRECOMMIT状态。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

setState() or markNeedsBuild() called when widget tree was locked. This BetterPlayerSubtitlesDrawer widget cannot be marked as needing to build because the framework is locked. The widget on which setState() or markNeedsBuild() was called was: BetterPlayerSubtitlesDrawer state: _BetterPlayerSubtitlesDrawerState#42f65 When the exception was thrown, this was the stack: #0 Element.markNeedsBuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:5193:9) #1 Element.markNeedsBuild (package:flutter/src/widgets/framework.dart:5203:6) #2 State.setState (package:flutter/src/widgets/framework.dart:1224:15) #3 _BetterPlayerSubtitlesDrawerState._updateState (package:better_player_plus/src/subtitles/better_player_subtitles_drawer.dart:79:7) #4 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:437:24) #5 ValueNotifier.value= (package:flutter/src/foundation/change_notifier.dart:559:5) #6 VideoPlayerController.pause (package:better_player_plus/src/video_player/video_player.dart:442:5) #7 BetterPlayerController.pause (package:better_player_plus/src/core/better_player_controller.dart:584:34) #8 BetterPlayerController.dispose (package:better_player_plus/src/core/better_player_controller.dart:1207:9) #9 _BetterPlayerState.dispose (package:better_player_plus/src/core/better_player.dart:115:23) #10 StatefulElement.unmount (package:flutter/src/widgets/framework.dart:5840:11) #11 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2078:13) #12 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #13 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:7012:16) #14 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #15 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #16 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #17 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #18 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #19 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #20 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #21 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #22 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #23 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #24 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #25 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #26 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #27 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #28 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:7012:16) #29 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #30 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #31 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #32 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #33 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #34 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #35 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #36 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #37 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #38 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #39 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #40 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #41 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #42 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #43 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #44 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #45 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #46 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #47 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #48 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #49 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #50 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #51 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #52 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #53 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #54 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #55 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #56 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #57 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #58 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #59 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #60 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #61 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #62 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #63 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #64 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #65 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #66 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #67 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #68 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #69 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #70 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #71 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #72 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #73 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #74 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #75 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #76 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #77 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #78 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #79 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #80 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #81 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #82 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #83 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #84 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #85 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #86 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #87 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #88 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #89 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #90 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #91 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #92 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #93 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #94 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #95 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #96 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #97 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #98 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #99 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #100 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #101 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #102 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #103 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #104 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #105 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #106 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #107 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #108 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #109 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #110 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #111 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #112 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #113 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #114 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #115 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #116 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #117 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #118 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #119 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #120 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #121 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #122 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #123 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #124 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #125 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #126 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #127 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #128 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #129 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #130 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #131 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #132 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #133 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #134 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #135 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #136 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #137 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #138 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #139 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #140 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #141 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #142 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #143 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #144 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #145 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #146 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #147 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #148 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #149 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #150 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #151 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #152 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #153 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #154 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #155 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #156 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #157 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #158 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #159 ListIterable.forEach (dart:_internal/iterable.dart:49:13) #160 _InactiveElements._unmountAll (package:flutter/src/widgets/framework.dart:2087:25) #161 BuildOwner.lockState (package:flutter/src/widgets/framework.dart:2954:15) #162 BuildOwner.finalizeTree (package:flutter/src/widgets/framework.dart:3264:7) #163 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1183:19) #164 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:475:5) #165 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1397:15) #166 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1318:9) #167 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1176:5) #168 _invoke (dart:ui/hooks.dart:312:13) #169 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:427:5) #170 _drawFrame (dart:ui/hooks.dart:283:31) The VideoPlayerController sending notification was: VideoPlayerController#77d27(VideoPlayerValue(duration: 0:51:26.720000, size: Size(1920.0, 960.0), position: 0:00:08.695000, absolutePosition: null, buffered: [DurationRange(start: 0:00:00.000000, end: 0:00:08.695000)], isPlaying: false, isLooping: false, isBuffering: false, volume: 1.0, errorDescription: null)) ==================================================================================================== E/flutter (17057): [ERROR:f. 问题还在
最新发布
07-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值