B+树的正确打开方式?你知道吗?

tqdm 简介及正确的打开方式 tqdm 简介及正确的打开方式 查遍了网上资料,发现绝大中文的讲解全都是一手带过,还称详细,真是醉了,于是有该文,也算给自己做个笔记 1. 什么是tqdm? tqdm是一个快速的,易扩展的进度条提示模块,官方网站点击这里 但是为什么要取名为这样呢,官方上说: tqdm derives from the Arabic word taqaddum (تقدّم) which can mean “... 阅读详情

 

01 前言

InnoDB数据页的7个组成部分,各个数据页组成了一个双向链表,而每个数据页中的记录按照主键从小到大的顺序组成一个单链表,每个数据页中为这些记录生成了一个目录,可以采用二分法查找,提升查询速度。

那么问题来就来了,如果表中的记录涉及多个数据页,那又该如何查找呢?

02 没有索引的查找

为了方便理解,咱先说一个SQL语句的情况,就是最简单的精准查询,如下:

select [列名列表] from [表名] where 列名=XXX

2.1 在一个页中的查找

  • 以主键为搜索条件

可以直接使用数据页中的目录进行二分查找。

  • 以其他列为搜索条件

不可以使用数据页中的目录进行二分查找,只能顺序查找,一列列的对比是否满足条件。

2.2 在多个页中的查找

不管是否以主键作为搜索提交,都不能使用数据页中的目录进行二分查找,只能顺序查找,逐一对比。

结果:这样查找速度肯定是慢的,我们得想一个提升速度的方法,那么索引就出现了。

03 有索引的查找

3.1 索引是什么?

我们先来创建一个表score,并为其新增三条语句,语句如下:

create table score(
id varchar(10),
name varchar(10),
score int,
primary key (id)
);
insert into score values('001','张三',100);
insert into score values('002','李四',90);
insert into score values('004','王五',70);

根据之前我们说的,其在硬盘上的存储结构如下(假设每一页只存3条数据,其他不必要的信息都删掉了)。

                                                                  

 

如果再新增一条数据,这一页可以放不下了,需要新增一页来存放数据啦,如下图。

                                             

 

通过上图,我们发现003比004小,却排在了后面,不符合下一个数据页中用户记录的主键值必须大于上一页中用户记录的主键值这一标准,所以我们需要将003的这条记录和004的这条记录交换一下。

为什么要符合这一标准呢?我们在页内可以使用目录进行二分查找,提升查询速度,那么我们在页间是不是也可以采用二分查找呢?答案是肯定的,所以就要符合刚才的标准,因为二分查找的前提就是数据必须有序。

试想一下,如果有很多页数据,我们每三页合并一个大的页,大的页一共三条数据,分别对应着底下小页的最小值,但是即使这样,数据量还是很多,我们就再进行页的合并,这样就形成了下图的形式,即为B+树。

事实上,经他人统计(哈哈哈,错了好甩锅,链接见文章尾),600万的数据也就3层,so,一般情况下B+树不超过4层(包括3层目录项页和1层数据项页)。

                                                

 

所以,索引是对按主键排列的数据进行速度提升的一种数据结构。我自己想的,非官方概念。

3.2 万年面试题:索引为什么是B+树?而不是B树?

在搞清楚这个问题前,我们先来看一下什么是B树,什么是B+树?(我就盗图啦,不想自己画了)

B树:也就是B-树,主要特点是非叶子节点上不仅有指针,也有data域。

                               

 

B+树:非叶子节点只有指针,没有data域,InnoDB的默认索引存储引擎。

                                         

那么问题就来了,为什么索引采用B+树呢?

 

  • B+树的所有叶子节点都通过双向链表关联(不要问我截的图为什么没有,因为是从人家那里偷得,我已经用红色的箭头加上了),如果我想搜索范围,比如数值从60到66的,就可以直接通过叶子节点的之间的指针来获取,速度比较慢。如果使用的B树,得采用中序遍历的方式,查询速度慢。
  • 之前我们有说到数据是有分成页的,而InnoDB存储引擎层是将数据页分批读取到内存,由内存对数据进行加工完返回给客户端的。如果在读取相同页数的情况下,B+树能存放的数据信息更多,因为其只有指针,没有数据,所占的内存更小。所以B+树单次磁盘IO信息大于B树,所以B+树比B树的IO次数少,当然速度也就更快。

3.3 聚簇索引

上面说的就是聚簇索引,包括两个特点:

  • 使用表中定义的主键建立树形结构。页中的记录是按照主键的大小顺序排列,呈现单链表的形式,页与页之间是通过双向链表的形式相关联的。比如上面的score表主键是id,那么他的聚簇索引就是按照id从小到大的顺序排放。如果我要查id=XXX的记录,就可以直接通过该聚簇索引来采用类二分的方法查询,可以明显的提升查询速度。
  • 聚簇索引的叶子节点存储的是完整的用户记录,也就是说score表中除了主键id外,name和score都存储在叶子节点中。

注意:这一点我们在辅助索引(二级索引)说,因为聚簇索引存储的是完整的用户记录,总有什么索引存储的不是完整的用户记录。

3.4 辅助索引(二级索引)

当当当,辅助索引(二级索引)到了。

如果当要查询name=XXX的记录时,我们只能通过主键id聚簇索引的叶子节点来一个个遍历,然后比对哪一个name=XXX,这样的方式就是一个遍历单链表查询,不用说了,这肯定贼慢。那有没有更好一点的方法呢?

答案肯定是有的,那就是再为name列建一个索引,根据name从小到大的顺序排列,这个就可以和主键id一样,采用类二分的形式快速查出数据。

那我们就先在name上建一个索引index_name,语句如下:

alter table score add index index_name(name)

索引已经建立好了,那么辅助索引是如何存放数据的?简易版的,讲究看看吧,哈哈哈。

                              

 

从上图中我们可以发现辅助索引的叶子节点并没有分数score字段,但是却有主键id字段,也就是他的叶子节点的数据并不完整。那么如果我们要查看李四的id,name,score这三个字段,我们就可以使用基于name的所有index_name,采用类二分法找到李四这条记录的主键id,再通过主键id去主键构成的聚簇索引查找这条记录的完整信息,这个过程叫做回表。

注意:为什么要采用回表的形式呢?因为如果辅助索引的叶子节点存放的也是完整的记录,列存放的数据越大,对内存的消耗就越明显,越浪费空间。采用回表的方式,可以节省下空间,多浪费了一些时间。那么问题就来了,如果我采用辅助索引得出来的数据量很大,已经接近于所有数据,然后再根据各自的主键id去查看完整的记录,这样的时间消耗可以比我直接采用主键索引一个个遍历对比的时间消耗来的大,那么MySQL还会选择辅助索引吗?

3.5 联合索引

比如我想找name=张三,score=100的这条记录,如果使用基于主键id的聚簇索引,只能一个个遍历并且对比,这样的速度是很慢的。或者采用基于name的辅助索引,但是辅助索引里面没有分数score字段,所以还要通过回表的方式,找到score字段,但如果name=张三的记录有100条,那我们只能找到100条数据,再挨个通过回表的方式,找到score=100的这条记录。这样看来,不管是基于主键id的聚簇索引还是基于name的辅助索引,都不是最好的方案。

所以可以创建联合索引,语句如下,他其实就是当name一样的时候,再按score进行排序,索引包括name,score,和主键id。其所对应的索引图如下,简单点啦,将就看看吧。我已经努力画了(为了测试,我多加了两条数据,005和006)。

create index name_and_score_index on score (name,score); 

                                  

 

注意:因为这边就只有三个字段,如果字段量多的话,也是需要回表,通过主键id得到其他字段信息。

04 索引的正确打开方式

基于上面的理论知识,我们来实践一下(上面的弄得明明白白就可以)。

再介绍下背景,score表有三个字段,分别是id,name,score。其还有两个索引,一个是聚簇索引,一个是基于name和score的联合索引。

先看下面的语句,判断是不是能使用索引进行查询。如果能准确说出下面是不是有使用索引,那么下面就不要看了,就说的这些内容。

select * from score where id=XXX; 聚簇索引
select * from score where name=XXX;联合索引
select * from score where score=XXX;不使用索引
select * from score where name=XXX and score=XXX; 联合索引
select * from score where score=XXx and name=XXX; 不使用索引
select * from score order by name; 联合索引
select * from score order by score;不使用索引

前五个语句主要是最左前缀原则的使用。

第一个不用说了,如果where后面的查询条件是id,那么他直接根据聚簇索引,采用类二分法,也就是从树的根节点开始,能很快的查询到相应的记录。

第二个where后面的查询条件是name,那么也可以根据联合索引来查询。(因为联合索引是根据先name后score的方式来排序的,所以通过name查出一系列数据)。

第三个where后面的查询条件是score,那就不能用联合索引了,因为有可能不同的name有着相同的score,那么数据就是分散在各个页上的,所以只能使用聚簇索引来一个个遍历,并对比字段。

第四个和第二个类似,第五个和第三个类似。

后面两个主要是用于排序的,如果SQL语句中有根据某个字段排序,尽量让其在索引层面完成排序。如果在索引层面没有完成排序,那么就会在内存中就会浪费时间和空间来进行一系列排序算法来实现排序功能,这肯定对性能有影响。回到刚才的SQL语句,如果按name排序,则可以使用索引,因为索引是先按name排序,再按score索引的。但是如果按score排序,则不可以使用索引,因为score是后面排序的,也就是只有name一样才会按score排序,但是SQL语句需要的是全量的按照score排序。

如果觉得有所收获,就请点个赞再走呗~

 

 

 

 

 

 

python文件打开方式详解——a、a+、r+、w+、rb、rt区别 1.排除文件打开方式错误: r只读,r+读写,不创建,即需要事先存在一个文件以供读/读写,若不存在文件会报错 w新建只写,w+新建读写,二者都会将文件内容清零,即事先不需要有该文件存在,若已经存在则会覆盖 (以w方式打开,不能读出。w+可读写) w+与r+区别: r+:可读可写,若文件不存在,报错;w+: 可读可写,若文件不存在,创建 r+与a+区别: fd = open("1.t... 阅读详情

相关推荐

Rk3128投影仪救砖操作和固件分享思路

大家搞一条比较硬的东西,插入耳机口,就可以进入刷机模式了的,我的机器是这样的,大家也可以试试。(看不懂可以往下看)

MMX7088的博客 1万+

详解B+树及其正确打开方式

前言 hello,小可爱们,继上篇长文的更新,我又又又来了。 前面我们长大了InnoDB数据页的7个组成部分,各个数据页组成了一个双向链表,而每个数据页中的记录按照主键从小到大的顺序组成一个单链表,每个数据页中为这些记录生成了一个目录,可以采用二分法查找,提升查询速度。 那么问题来就来了,如果表中的记录涉及多个数据页,那又该如何查找呢? 没有索引的查找 为了方便理解,咱先说一个SQL语句...

路漫漫其修远兮,吾将上下而求索。 2487

Unable to negotiate with XXXX port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

打开ssh_config此文件,滑动到最下面,新增自己git主机地址(这里我直接默认*)执行命令 git clone git@xxxxxxxxxxxxx.git。代码仓库已经添加了ssh公钥之后,克隆代码到本地时就报了这个问题。首先是找到git安装目录(根据自己安装时选项,找到这个目录)再进入ssh目录,找到 ssh_config 配置文件。配置完成后,保存配置文件后再次去clone代码。直接复制下面这一段到文件中最底部位置即可。然后进入 etc目录,找到ssh目录。终于可以克隆下来了。

萌兔兔MMQ!! 3360

MySQL索引底层:B+树详解

前言 当我们发现SQL执行很慢的时候,自然而然想到的就是加索引。对于范围查询,索引的底层结构就是B+树。今天我们一起来学习一下B+树哈~ 公众号:捡田螺的小男孩 树简介、树种类 B-树、B+树简介 B+树插入 B+树查找 B+树删除 B+树经典面试题 树的简介 树的简介 树跟数组、链表、堆栈一样,是一种数据结构。它由有限个节点,组成具有层次关系的集合。因为它看起来像一棵树,所以得其名。一颗普通的树如下: 树是包含n(n为整数,大于0)

施小楠的博客 1182

第二节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - Python Flask 后端开发详解(附源码)

大家好,我是cuiwin!本节内容,我们从零开始开发基于Python(Flask)的后端项目,对接Vue Vben Admin(vben5)。登录mysql数据库执行: 创建数据库。

cuiwin的专栏 2270

【数据集】中国大气污染物数据集CHAP(1km空间分辨率)-韦晶团队

中国大气污染物数据集CHAP(1km空间分辨率)-韦晶团队

WW、forever的博客 2601

B树和B+树

B树是是二叉树上进行优化的多叉树,因为随着我们数据的增加。二插树它的树高也会越高,每次查询都需要访问过多节点(MySQL的InnoDB存储引擎中,他一次IO读取的数据量大小是16K,而二叉树每次只读取一个节点数据(大约16个字节,占用千分之一),大大消耗浪费读取内存),即访问数据块过多,而从磁盘随机读取数据块过于耗时。所以我们需要减少磁盘的读取,减少IO次数。比如一棵 100 万节点的平衡二叉树,树高 20。一次查询可能需要访问 20 个数据块。

qq_48157004的博客 3970

【STK】手把手教你利用STK进行仿真-STK软件简介02 STK专业分析模块

STK/Astrogator是一个交互式轨道机动和深空探测计划工具,用于飞行器运行及任务分析,通过定义推力模型、目标星历、飞行器姿态,提供轨道机动的解决及优化方案。应用Astrogator分析轨道机动的可见性和地面站覆盖,用户可以快速、方便地进行全局分析。任务控制序列保存在STK场景中,用于任务运行、快速制定精确轨道机动方案。为在轨运行的飞行器制定或执行机动计划时,分析人员可以根据飞行过程数据,如发动机定标参数、实际初始轨道,计算出推进器点火和点火时机数据,用于发出指令及精炼机动计划。

weixin_44184852的博客 1866

B+树 范围查询_数据结构与算法-- B+树

既然前面提到B-树的查找性能已经很优秀了,为什么又出来了B+树?试想B-树每查找一个元素都进行一次磁盘IO,尽管已经通过降低树高减少IO次数,但如果树高为n,要查找的元素恰好位于叶子结点,那么最快也要经过n次IO,如果数据库中存在上亿条记录,查询的性能可想而知。那么有没有更好的方法提高效率呢?B+树便产生了。开始讲B+树之前,先 温习一下B-树的特性:一个m阶的B-树具有以下特性:1.根节点至少有...

weixin_39885412的博客 2387

FPGA电路设计2——芯片原理图绘制

FPGA板卡设计要点:1. 引脚分配遵循电平标准分组原则,需通过预编译验证;2. 电源设计需满足上电时序要求并合理估算功耗;3. 最小系统包含配置Bank(Bank0)、通用I/O Bank(HRBank)、高性能Bank(HPBank)和高速收发器Bank(MGT/GTX)。其中Bank0负责关键配置功能,包括模式选择(支持SPI/BPI/JTAG等5种配置方式)、JTAG调试接口和系统监控引脚,其电压选择(CFGBVS_0)必须与VCCO_0电压匹配。

在读研究生,FPGA电路设计与功能开发。 1246

华硕 NUC 对比 Mac mini:跑 OpenClaw 谁性价比更高?

在选择本地 AI 服务器硬件时,华硕 NUC 和 Mac mini 是两个热门选择。本文将从硬件规格、性能、成本、功耗、易用性等多个维度对比这两款设备,帮助您决定哪款更适合运行 OpenClaw。

博客 1025

B+树 范围查询_MySQL的索引 B+Tree

MySQL的索引 B+Tree1. 常见索引的数据结哈希(Hash)示意图​效率高,但是因为Hash算法的特性,数据无序,不能进行范围搜索二分搜索树(Binary Search Tree)示意图​数据有序,能够按范围查找,但是容易造成部分数据倾斜,导致该部分数据查询较慢平衡二分搜索树(Balanced Binary Search Tree, AVL Tree)示意图​​是二分搜索树的优化版,解决了...

weixin_39929721的博客 743

毕设-YOLOv8-OBB 实现自有数据集缺陷旋转检测全过程记录

这次项目让我深入理解了 YOLOv8-OBB 的原理和使用流程。步骤内容工具数据标注制作倾斜缺陷样本格式转换从 HBB 转换为 OBB模型训练使用 Ultralytics YOLOv8 OBBCLI 命令模型测试推理与结果可视化通过 OBB 模型,我的缺陷检测系统获得了更高的精度和鲁棒性。未来我打算继续优化数据增强方式,比如引入随机旋转、仿射变换等,让模型更适应不同角度的样本。

FJN110的博客 447

这才是B站的正确打开方式!

关注+星标,每天学习C语言新技能因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源:网络每天都在用B站刷杂七杂八的视频,有没有考虑过挖掘一些优质UP主?想要发掘优质UP主,靠B站官方推荐,想都不要想!不仅是B站,目前绝大多数内容平台都是这样,平台主推的只有两类作者:官方重点扶持 自己兴趣相关 官方流量扶持这种很容易理解,平台为了增加自身的知名度和活跃度,会找一些内容还可以的...

轻松学C语言 2604

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

树莓派4b安装系统时Raspberry Pi Imager的正确打开方式

详细介绍如何使用Raspberry Pi Imager为树莓派4b安装系统,避免常见操作误区,提升烧录效率与成功率,是树莓派4b安装系统过程中不可或缺的实用技巧。

weixin_33670640的博客 1168

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

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

树莓派4B散热片及九层亚克力外壳的正确打开方式

一、简介 因为毕设的原因,最近入手了树莓派4B,故记录之。 二、如何正确安装 ①、散热片安装 4B的散热片比3B要少一片,从淘宝购买4B套装的话默认就送,但是确实一般没有必要买套装,为了省钱可以直接淘宝买配件即可。 成品图: 粘贴的时候注意不要手抖,以免歪斜,贴纸双面,注意轻撕。 ②、九层亚克力外壳安装 根据下图排列以此从下往上安装放置即可 风扇引脚:红二黑三 另附商家附赠视频安装链接: 链接:https://pan.baidu.com/s/1oOT-XdP2v6oDhd1fKbG9Wg 提取码:

汤姆lazy的优快云博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python爬虫之b站的正确打开方式

点击上方"brucepk",选择"置顶公众号"第一时间关注 Python 技术干货!阅读文本大概需要 3.6 分钟。国庆假期,大家应该都出去浪了吧,不用想...

Python知识圈 731

windows@默认打开方式@打开方式列表软件配置@ftype@assoc命令

使用assoc和ftype命令,您可以轻松地在 Windows 操作系统中管理文件类型与程序之间的关联。

xuchaoxin1375的博客 1922

python正确打开方式_Python爬虫之b站的正确打开方式

文章转载自 「brucepk」国庆假期,大家应该都出去浪了吧,不用想,各个景区应该都是人满为患了,大部分时间都花在排队上了。pk哥知道人多,哪儿也没去,就在附近转悠了下,在家闲着了。这不,为了给排队等待的朋友解闷,我这次对 b 站下手了。我用 Python 对 b 站的小视频进行了爬取,因为是小视频,大小平均在 5 兆以内。排队时,没网络也能看小姐姐了,爽啊。文末给出了源码获取方式。b 站小视频地...

weixin_39869593的博客 116

Windows 设置文件默认打开方式

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan 【前言】 计算机是现在办公必用品,如何熟练使用自己的计算机从而提高自己的效率是每个人都应该去学习去实践;今天在此为大家介绍一招设置文件的默认打开方式。 【设置方式】 一、重复操作: 1.每次打开一个计算机未设置默认打开方式的...

通往精英的成长之路 2万+

【git & GitHub 工作流】关于git的正确打开方式

本文介绍了GitHub标准工作流,主要包含以下步骤:1) 克隆远程仓库到本地;2) 创建独立分支进行开发;3) 修改代码后提交到暂存区并commit;4) 推送分支到远程;5) 处理主分支更新的情况(通过rebase同步);6) 发起Pull Request进行代码合并;7) 合并后删除分支。重点强调了创建独立分支的重要性,以及如何正确处理主分支更新的情况。这套流程能有效保证代码管理的规范性和多人协作的高效性。

Dasi_C_upup的博客 2193

python爬取b站网页信息_Python爬虫之b站的正确打开方式

文章转载自 「brucepk」国庆假期,大家应该都出去浪了吧,不用想,各个景区应该都是人满为患了,大部分时间都花在排队上了。pk哥知道人多,哪儿也没去,就在附近转悠了下,在家闲着了。这不,为了给排队等待的朋友解闷,我这次对 b 站下手了。我用 Python 对 b 站的小视频进行了爬取,因为是小视频,大小平均在 5 兆以内。排队时,没网络也能看小姐姐了,爽啊。文末给出了源码获取方式。b 站小视频地...

weixin_39900736的博客 435

Mac的正确打开方式你知道多少

最近有伙伴跟我说她刚入手Macbook Pro但是也没发现什么明显优于Windows电脑的地方,搞不懂为什么大家漫天吹Mac。于是我问了她一串问题,发现不是Mac不好用,而是她不会用。 于是在她的要求下我写了这篇让Mac更方便的12个必备技巧,让刚开始适应Mac的朋友感受一下Mac的优越性吧 ~ 1.截屏 cmd+shift+3: 对整个屏幕进行截图; cmd+shift+4: 对自行选择的区域进行截图; cmd+shift+4+space (空格键) :对选定的某个应用程序界面窗口进行截图。

m0_46528371的博客 555

小程序 FileSystemManager 正确打开方式

小程序文档特别差,写的不清晰,很容易误解,坑无数人,举个栗子。 微信小程序文件读写报错: FileSystemManager.readFile() 读文件报错---> FileSystemManager is not defined wx.readFile() 读文件报错---> wx.readFile is not a function 正确打开方...

轻量开发 3万+

BigDecimal的正确打开方式

项目中明确规定,凡是涉及到金额的属性定义都必须使用BigDecimal类型,这里来和大家一起学习下BigDecimal的错误打开方式。

爱琴孩的博客 696

Qwen3.8-9B 多模态能力探索:图像与视频输入的正确打开方式

**Qwen3.8-9B** 是 Empero 团队基于 Qwen3.5-9B 架构打造的 90 亿参数多模态大模型,它把 Qwen3.8 2.4T 旗舰教师模型的推理精华完整蒸馏到单卡可部署的规模,并原生保留了视觉语言基座的图像与视频理解能力。本文从模型档案、视觉编码原理到图像/视频输入的实操代码,带你一次摸清这款多模态模型的使用要点。 --- ## Qwen3.8-9B 多模态模型档案速览

gitblog_00044的博客 854
上一篇: 10种阻碍程序员职业生涯发展的行为,你有吗?
下一篇: 学并发编程,透彻理解这三个核心才是关键
加班不秃顶
博客等级 码龄7年 1822粉丝 599原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值