在面试了阿里、腾讯众多大厂之后,我终明白了为什么需要消息队列

双非院校非科班的学弟,刚刚拿到了腾讯、网易、美团等大厂Offer 本文来自作者投稿,作者是是双非院校且非科班的大三学生,以下是他最近的面试总结: 先说下我的面试准备经历,为了保证自己简历有较大一定的概率通过筛选,我在去年11月面试多家公司,去了一家小公司实习到今年3月 但其实用处还是不太大,京东、贝壳、猿辅导等好多大厂在简历筛选挂了我 目前面试过的大厂有阿里、腾讯、字节、美团、网易、shopee;也投过中小厂去练练手,但面试的问题有些水,后面便不投了,有那时间还不如多刷几道算法题;虽然面试的大厂不多,但是还是比较幸运的拿到了腾讯csig、美团支付平台、网易杭州研究院 阅读详情

本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等

消息队列是最古老的中间件之一,从系统之间有通信需求开始,就自然产生了消息队列。但是给消息队列下一个准确的定义却不太容易。我们知道,消息队列的主要功能就是收发消息,但是它的作用不仅仅只是解决应用之间的通信问题这么简单。

我们举个例子说明一下消息队列的作用。话说小袁是一家巧克力作坊的老板,生产出美味的巧克力需要三道工序:首先将可可豆磨成可可粉,然后将可可粉加热并加入糖变成巧克力浆,最后将巧克力浆灌入模具,撒上坚果碎,冷却后就是成品巧克力了。

最开始的时候,每次研磨出一桶可可粉后,工人就会把这桶可可粉送到加工巧克力浆的工人手上,然后再回来加工下一桶可可粉。小袁很快就发现,其实工人可以不用自己运送半成品,于是他在每道工序之间都增加了一组传送带,研磨工人只要把研磨好的可可粉放到传送带上,就可以去加工下一桶可可粉了。 传送带解决了上下游工序之间的“通信”问题。

传送带上线后确实提高了生产效率,但也带来了新的问题:每道工序的生产速度并不相同。在巧克力浆车间,一桶可可粉传送过来时,工人可能正在加工上一批可可粉,没有时间接收。不同工序的工人们必须协调好什么时间往传送带上放置半成品,如果出现上下游工序加工速度不一致的情况,上下游工人之间必须互相等待,确保不会出现传送带上的半成品无人接收的情况。

为了解决这个问题,小袁在每组传送的下游带配备了一个暂存半成品的仓库,这样上游工人就不用等待下游工人有空,任何时间都可以把加工完成的半成品丢到传送带上,无法接收的货物被暂存在仓库中,下游工人可以随时来取。传送带配备的仓库实际上起到了“通信”过程中“缓存”的作用。

传送带解决了半成品运输问题,仓库可以暂存一些半成品,解决了上下游生产速度不一致的问题,小袁在不知不觉中实现了一个巧克力工厂版的消息队列。

一、哪些问题适合使用消息队列来解决?

接下来我们说一下日常开发中,哪些问题适合使用消息队列解决。

1.异步处理

大多数程序员在面试中,应该都问过或被问过一个经典却没有标准答案的问题:如何设计一个秒杀系统?这个问题可以有一百个版本的合理答案,但大多数答案中都离不开消息队列。

秒杀系统需要解决的核心问题是,如何利用有限的服务器资源,尽可能多地处理短时间内的海量请求。我们知道,处理一个秒杀请求包含了很多步骤,例如:

  • 风险控制;
  • 库存锁定;
  • 生成订单;
  • 短信通知;
  • 更新统计数据。

如果没有任何优化,正常的处理流程是:App 将请求发送给网关,依次调用上述 5 个流程,然后将结果返回给 APP。

对于对于这 5 个步骤来说,能否决定秒杀成功,实际上只有风险控制和库存锁定这 2 个步骤。只要用户的秒杀请求通过风险控制,并在服务端完成库存锁定,就可以给用户返回秒杀结果了,对于后续的生成订单、短信通知和更新统计数据等步骤,并不一定要在秒杀请求中处理完成。

所以当服务端完成前面 2 个步骤,确定本次请求的秒杀结果后,就可以马上给用户返回响应,然后把请求的数据放入消息队列中,由消息队列异步地进行后续的操作。

处理一个秒杀请求,从 5 个步骤减少为 2 个步骤,这样不仅响应速度更快,并且在秒杀期间,我们可以把大量的服务器资源用来处理秒杀请求。秒杀结束后再把资源用于处理后面的步骤,充分利用有限的服务器资源处理更多的秒杀请求。

可以看到,在这个场景中,消息队列被用于实现服务的异步处理。这样做的好处是:

  • 可以更快地返回结果;
  • 减少等待,自然实现了步骤之间的并发,提升系统总体的性能。

2.流量控制

继续说我们的秒杀系统,我们已经使用消息队列实现了部分工作的异步处理,但我们还面临一个问题:如何避免过多的请求压垮我们的秒杀系统?

一个设计健壮的程序有自我保护的能力,也就是说,它应该可以在海量的请求下,还能在自身能力范围内尽可能多地处理请求,拒绝处理不了的请求并且保证自身运行正常。不幸的是,现实中很多程序并没有那么“健壮”,而直接拒绝请求返回错误对于用户来说也是不怎么好的体验。

因此,我们需要设计一套足够健壮的架构来将后端的服务保护起来。我们的设计思路是,使用消息队列隔离网关和后端服务,以达到流量控制和保护后端服务的目的。

加入消息队列后,整个秒杀流程变为:

  1. 网关在收到请求后,将请求放入请求消息队列;
  2. 后端服务从请求消息队列中获取 APP 请求,完成后续秒杀处理过程,然后返回结果。

秒杀开始后,当短时间内大量的秒杀请求到达网关时,不会直接冲击到后端的秒杀服务,而是先堆积在消息队列中,后端服务按照自己的最大处理能力,从消息队列中消费请求进行处理。

对于超时的请求可以直接丢弃,APP 将超时无响应的请求处理为秒杀失败即可。运维人员还可以随时增加秒杀服务的实例数量进行水平扩容,而不用对系统的其他部分做任何更改。

这种设计的优点是:能根据下游的处理能力自动调节流量,达到“削峰填谷”的作用。但这样做同样是有代价的:

  • 增加了系统调用链环节,导致总体的响应时延变长。
  • 上下游系统都要将同步调用改为异步消息,增加了系统的复杂度。

那还有没有更简单一点儿的流量控制方法呢?如果我们能预估出秒杀服务的处理能力,就可以用消息队列实现一个令牌桶,更简单地进行流量控制。

令牌桶控制流量的原理是:单位时间内只发放固定数量的令牌到令牌桶中,规定服务在处理请求之前必须先从令牌桶中拿出一个令牌,如果令牌桶中没有令牌,则拒绝请求。这样就保证单位时间内,能处理的请求不超过发放令牌的数量,起到了流量控制的作用。

实现的方式也很简单,不需要破坏原有的调用链,只要网关在处理 APP 请求时增加一个获取令牌的逻辑。

令牌桶可以简单地用一个有固定容量的消息队列加一个“令牌发生器”来实现:令牌发生器按照预估的处理能力,匀速生产令牌并放入令牌队列(如果队列满了则丢弃令牌),网关在收到请求时去令牌队列消费一个令牌,获取到令牌则继续调用后端秒杀服务,如果获取不到令牌则直接返回秒杀失败。

以上是常用的使用消息队列两种进行流量控制的设计方法,你可以根据各自的优缺点和不同的适用场景进行合理选择。

3.服务解耦

消息队列的另外一个作用,就是实现系统应用之间的解耦。再举一个电商的例子来说明解耦的作用和必要性。

我们知道订单是电商系统中比较核心的数据,当一个新订单创建时:

  1. 支付系统需要发起支付流程;
  2. 风控系统需要审核订单的合法性;
  3. 客服系统需要给用户发短信告知用户;
  4. 经营分析系统需要更新统计数据;
  5. ……

这些订单下游的系统都需要实时获得订单数据。随着业务不断发展,这些订单下游系统不断的增加,不断变化,并且每个系统可能只需要订单数据的一个子集,负责订单服务的开发团队不得不花费很大的精力,应对不断增加变化的下游系统,不停地修改调试订单系统与这些下游系统的接口。任何一个下游系统接口变更,都需要订单模块重新进行一次上线,对于一个电商的核心服务来说,这几乎是不可接受的。

所有的电商都选择用消息队列来解决类似的系统耦合过于紧密的问题。引入消息队列后,订单服务在订单变化时发送一条消息到消息队列的一个主题 Order 中,所有下游系统都订阅主题 Order,这样每个下游系统都可以获得一份实时完整的订单数据。

无论增加、减少下游系统或是下游系统需求如何变化,订单服务都无需做任何更改,实现了订单服务与下游服务的解耦。

总结

以上就是消息队列最常被使用的三种场景:异步处理、流量控制和服务解耦。当然,消息队列的适用范围不仅仅局限于这些场景,还有包括:

  • 作为发布 / 订阅系统实现一个微服务级系统间的观察者模式;
  • 连接流计算任务和数据;
  • 用于将消息广播给大量接收者。

简单的说,我们在单体应用里面需要用队列解决的问题,在分布式系统中大多都可以用消息队列来解决。

同时我们也要认识到,消息队列也有它自身的一些问题和局限性,包括:

  • 引入消息队列带来的延迟问题;
  • 增加了系统的复杂度;
  • 可能产生数据不一致的问题。

所以我们说没有最好的架构,只有最适合的架构,根据目标业务的特点和自身条件选择合适的架构,才是体现一个架构师功力的地方。

Ubuntu 24.04 部署 EMQX 5.8 开源版MQTT服务器:从零搭建到实战应用 本文详细指导如何在Ubuntu 24.04系统上部署EMQX 5.8开源版MQTT服务器。内容涵盖从环境准备、安装Erlang、下载安装包到启动服务的完整步骤,并提供了验证服务、配置网络防火墙以及通过WebSocket工具进行基础消息收发的实战方法,帮助用户快速搭建稳定、免费的物联网消息中间件。 阅读详情

相关推荐

2月底速申!国家超算互联网免费算力全攻略|编程小白零消耗实操首测_2026-02-26

2月底速申!国家超算互联网免费算力全攻略|编程小白零消耗实操首测作为一名编程小白,我目前正在学习编译和运行 Qt 框架,也在逐步摸索开发环境的配置方法,目标是打造一款属于自己的个人效率工具。就在这时,我挖到了一个国家级硬核福利:国家超算互联网核心节点开放免费试运行!哪怕是零基础如我,也能申领到 100 卡时异构加速卡算力,关键是——2 月底前申请更稳妥,早占位早使用。

qq_58517981的博客 2104

分布式消息队列详解 (资源)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34146410的博客 370

告别OpenAI API调用:手把手在本地CPU/GPU上部署fast-whisper中文语音识别模型

本文详细指导如何在本地CPU/GPU上部署fast-whisper中文语音识别模型,摆脱对OpenAI API的依赖。从环境准备、模型获取与优化,到CPU/GPU环境的具体部署步骤和性能优化技巧,全面覆盖本地化语音识别的实现方案,帮助开发者提升效率并保障数据隐私。

weixin_29988907的博客 307

消息队列,入门轻松,进阶不易

我一直不认为自己是什么优秀的编程者,甚至如果按照现在的标准,去应聘巨头的普通开发岗位,我也是很难获得入职资格的。但在早期互联网时代,我还是有一点优势,就是遇到问题的时候,...

caoz的梦呓 5474

保姆级教程:手把手带你复现APFNet论文的RGBT目标跟踪模型(附完整代码与数据集配置)

本文提供了一份详细的APFNet论文复现指南,涵盖从环境搭建到模型测试的全流程。通过解析多模态融合模块和渐进式训练流程,帮助读者高效完成RGBT目标跟踪模型的复现工作,特别针对训练和测试中的常见问题提供实用解决方案。

weixin_29056781的博客 342

llama factory

NOTE] 除上述链接以外的其他网站均为未经许可的第三方网站,请小心甄别。

thesky123456的博客 1273

消息队列适合解决的问题

一、异步处理 秒杀系统需要解决如何利用有限的服务器资源,尽可能多地处理短时间内的海量请求。 处理一个秒杀请求包含步骤: 风险控制 库存锁定 生成订单 短信通知 更新统计数据 能否决定秒杀成功,实际上只有风险控制和库存锁定这两步,当服务端完成前面2个步骤,确定本次请求的秒杀结果后,就可以马上给用户返回响应,然后把请求的数据放入消息队列中,由消息队列异步地进行后续的操...

weixin_30507481的博客 262

LAMMPS模拟新合金没势函数?手把手教你用`pair_style hybrid`混合势函数(附FeCMnSiTi案例)

本文详细介绍了在LAMMPS中如何使用`pair_style hybrid`混合势函数模拟新型高熵合金(如FeCMnSiTi),解决缺乏现成势函数的问题。通过实战案例,涵盖参数查找、命令编写、错误排查等关键步骤,特别适合处理多组元体系的复杂相互作用。文章还提供了EAM势函数与LJ势的组合技巧,帮助研究者准确模拟合金性能。

weixin_30635053的博客 243

阿里+头条+腾讯大厂Java笔试真题,Java开发必会技术

说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。推荐一份Java架构之路必备的学习笔记,内容相当全面!!!成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?

2301_79655576的博客 739

Unreal Engine开发:角色动画与状态机_动画混合:通过混合节点实现平滑动画过渡

动画混合是提升游戏动画质量的关键技术之一。Unreal Engine提供了多种混合节点,包括BlendSpace1D、Blend Two By Bool、Blend Two By Alpha和Sequencer,每种节点适用于不同的场景。通过合理使用这些节点,可以实现平滑、自然且高效的动画过渡效果。此外,遵循最佳实践和高级应用技巧,可以进一步优化动画质量和性能。希望本节内容对你在Unreal Engine中实现动画混合有所帮助,使你的游戏角色动作更加流畅和自然。

chenlz2007的博客 1245

robosuite 入门教程(一)安装与基本用法

摘要:Robosuite是基于MuJoCo的模块化机器人仿真框架,提供标准化基准测试环境和多样化机器人控制功能。作为ARISE计划的一部分,该框架支持强化学习、模仿学习等算法研究,包含程序化环境生成、多模态传感器、多种控制器及遥操作设备。支持macOS/Linux系统,提供详细安装指南和功能演示脚本,包括随机动作测试、控制器验证、域随机化等。最新版本v1.5新增人形机器人支持、全身控制器和照片级渲染功能,旨在降低机器人学习研究门槛,促进算法开发与评估。

2506_90492529的博客 1267

从简历被拒到收割3个大厂offer(阿里、网易、海康威视),我用2个月的时间破茧成蝶!

其实互联网职业可以大致分两个阶段,在毕业后的3到5年内主要都是以学习、积累为主,从一开始啥都不懂的校园“新鲜人”向“职业人”转变。如果你是Java开发者,在这个阶段你会学习: 1、基础的Java知识,多线程、集合类、JVM 2、进阶知识,设计模式、系统设计和方法论 3、主流框架,Spring、Spring Boot、MyBatis…… 4、微服务,Dubbo、ETCD、Spring Cloud…… 5、数据库,Redis、ES、MySQL、分库分表 分享一下我的学习之路 2017从杭州师范大学(也是马云

weixin_47066028的博客 4242

Claude Code 从入门到精通,通过实战项目穿插 Agent Skills、MCP、Hooks、子代理、插件等十五个知识点

本文介绍了Claude Code的高级使用技巧,通过一个个人简历网站实战项目,详细讲解了15个核心知识点。主要内容包括:三种权限模式(默认/编辑/计划)的使用与切换;历史会话管理(/resume、/rename、/clear命令);会话回滚功能(/rewind);以及危险参数--dangerously-skip-permissions的注意事项。文章还演示了如何通过计划模式拆分代码文件,并强调了在复杂任务中仔细检查规划步骤的重要性。这些技巧能帮助开发者更高效地使用Claude Code完成项目开发。

1788

大厂面试以及学习思维导图

分享一套阿里大牛整理的前端资料给大家,点击前端校招面试题精编解析大全即可获取!!(备注:前端)**分享一套阿里大牛整理的前端资料给大家,点击前端校招面试题精编解析大全即可获取。

2301_77033813的博客 849

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

近一个月面试了诸多大厂的 Android 开发,被挂的理由竟无一例外

我本来不是一个喜欢写博客的人,因为性格内向、不善言谈,也很少他人分享自己经历,以前也仅写过一些技术分享,转折点是上周阿里面试,面试官问我写过博客吗,想起简书上19年就停更的技术分享文章,我只能回答没有,面试官就推荐我多写一些博客,将自己面试遇到的技术问题公开分享。考虑到写一些技术分享的博客,有助于自己是技术的加深和理解,所以最近开始在简书记录一些自己曾遇到Android面试的技术问题。而写这篇大厂面试总结是因为刷到另一个博主的面经总结有感而为,觉得自己也应该记录下这一段自己认真努力中的日子。

2301_76352508的博客 759

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

大厂面试以及学习思维导图,吊打面试官

在面试前我花了三个月时间刷了很多大厂面试题,最近做了一个整理并分类,主要内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。HTML5新特性,语义化浏览器的标准模式和怪异模式xhtml和html的区别使用data-的好处meta标签canvasHTML废弃的标签。

m0_61549953的博客 944

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

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

这本阿里面试参考指南啃完,如果还不能面进大厂,你就别干这行了,找个工地搬砖吧

进阿里就像是程序员们的一道“必修课”,里面的人拼了命的想出来,外面的人拼了命的想进去!阿里就像一个大熔炉,重铸、再造、升级、更新,每年给社会输送了大量的IT的精英!如果你也有一个“阿里梦的”话,不妨接着往下看! 最新出炉的阿里面试参考指南V3.0版,更新到了分布式、中间件、大数据与高并发、数据库、设计模式与实践、数据结构与算法、面试题举例!下面一部分一部分来分享!由于文章篇幅有限,需要领取完整版收藏慢慢看的时候,添加VX:QSgc11 即可免费获取 面试之高并发 说一个让程序员又爱又恨的问题,

javajavajava 507

秋招大厂面试曝光:阿里,腾讯,美团,字节跳动面试真题分享!!!

正缝金九银十,相信有很多小伙伴已经拿到自己心仪的offer了,也有很多大厂的面试真题被曝光出来,大厂面试的时候从来都没有一套稳定的面试流程,所以需要了解和掌握够硬的技术才是王道。 今天给大家分享的是字节跳动面试真题四面,更多的大厂面试真题后续分享给大家 一面 正式批(别看了都是正式批,提前批就没让我面!)一面。面试时间 08-18,19:53 - 21:08,全程1个小时15分钟。涉及内容:项目、网络、数据库、算法题 1. 自我介绍 2. 项目中的有挑战的点(问了大概有五六个问题) 3. 问了下

weixin_45127309的博客 587

这本阿里面试参考指南啃完,如果还不能面进大厂,你就别干这行了,找个工地搬砖吧(1)

面试之中间件======其实所有的技术都不是无缘无故产生的,像中间件,不就是因为大数据量对后台服务产生了压力,后台累了,但是前台还在源源不断地产生数据和条件,那怎么办,找一个中间人进行协调,当压力实在顶不住了,他也适当地分担一点,这样就能很好的协调了,像redis等,那在面试的过程中,那些中间件是面试重点呢?来看一下面试之数据库======

2401_84412050的博客 506

近一个月面试了诸多大厂的 Android 开发,被挂的理由竟无一例外...

一、前言 我本来不是一个喜欢写博客的人,因为性格内向、不善言谈,也很少他人分享自己经历,以前也仅写过一些技术分享,转折点是上周阿里面试,面试官问我写过博客吗,想起简书上19年就停更的技术分享文章,我只能回答没有,面试官就推荐我多写一些博客,将自己面试遇到的技术问题公开分享。 考虑到写一些技术分享的博客,有助于自己是技术的加深和理解,所以最近开始在简书记录一些自己曾遇到Android面试的技术问题。 而写这篇大厂面试总结是因为刷到另一个博主的面经总结有感而为,觉得自己也应该记录下这一段自己认真努力中的日

A_pyf的博客 307

“新鲜出炉”阿里面试终极指南V3.0,符合一线大厂面试点需求

进阿里就像是程序员们的一道“必修课”,里面的人拼了命的想出来,外面的人拼了命的想进去!阿里就像一个大熔炉,重铸、再造、升级、更新,每年给社会输送了大量的IT的精英!如果你也有一个“阿里梦的”话,不妨接着往下看! 最新出炉的阿里面试参考指南V3.0版,更新到了分布式、中间件、大数据与高并发、数据库、设计模式与实践、数据结构与算法、面试题举例!下面一部分一部分来分享!由于文章篇幅有限,需要这份资料的,下方即可查看获取方式 面试之高并发 说一个让程序员又爱又恨的问题,刚刚过去的双十一,今年虽然没有之前那么疯狂

Java架构师联盟 346

2024年最新Github 阿里高并发技术小册究竟有什么魅力?居然能一夜爆火(3),让阿里架构师告诉你为什么要分库分表

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取orums/4f45ff00ff254613a03fab5e56a57acb)收录**需要这份系统化的资料的朋友,可以点击这里获取。

2401_84023482的博客 627

Java程序员必备!Redis面试复习大纲在手面试不慌,讲的明明白白!

前言 大数据、算法项目在任何大厂无论是面试还是工作运用都是非常广泛的,我们精选了50个百度、腾讯、阿里等大厂的大数据、算法落地经验甩给大家,千万不要做收藏党哦,空闲时间记得随时看看! 如果你没有大厂项目经验,对大厂算法、大数据的项目运用不了解强烈建议你看看! 数据库 2.1 池化技术:如何减少频繁创建数据库连接的性能损耗? 2.2 数据库优化方案(一):查询请求增加时,如何做主从分离? 2.3 数据库优化方案(二):写入数据量增加时,如何实现分库分表? 2.4 发号器:如何保证分库分表后ID的全局唯一性?

m0_56710876的博客 231
上一篇: 为什么现在BAT面试必问分布式?阿里大牛带你实战剖析分布式锁
下一篇: 在被leader说了无数次后,终于潜下心来整理了一下JVM的类加载器
Java_Cappuccino
博客等级 码龄7年 17粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值