Java基础面试高频问题

java面试后端面试高频问题吐血整理 自己在求职的过程中整理的48个java后端面试的高频问题,也对每一个问题清晰地用思维导图拆解了,非常便于记忆和回顾,重要的知识点还有讲解的比较好的博客链接,主要的知识点有如下: 乐/悲观锁 RPC cookie和session区别 转发和重定向区别 aop实现原理 事务四个特征 Mysql四种隔离级别 spring创建对象 Spring5种隔离级别 Spring 7种 事务传播行为 Spring管理Bean生命周期 MySQL MyBatis nginx 7种负载均衡策略 @C 阅读详情

本章节主要分享一些Java基础知识在面试中常出现的高频考点,这里给出的是相对比较简略的答案,不过针对面试的回答,这些就足够了,另外就是一定要加入自己的个人理解,不要背书形式的回答。

1.Java语言的三大特性是什么?

回答:Java语言的三大特性分别是封装、继承和多态。

封装是指将对象的属性私有化,提供一些可以访问属性的方法,我们通过访问这些方法得到对象的属性。

继承是指某新类继承已经存在的类,该新类拥有被继承的类的所有属性和方法,并且新类可以根据自己的情况拓展属性或方法。其中新类称为子类,原存在的类被称为父类。

  1. 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有。
  2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
  3. 子类可以用自己的方式实现父类的方法。

注意:Java不支持多继承

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作

多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。【摘自JavaGuide】

在 Java 中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一方法)。

2.重载与重写的区别

回答:

重载是发生在同一个类中,具有相同的方法名,但是有不同的参数,参数的个数不一样、参数的位置不一样,方法的返回值不一样,这就叫重载,常见的就比如构造方法,有有参构造和无参构造。

重写是发生在当子类继承父类时,对父类中的一些方法根据自己的需求进行重写操作。

3.接口和抽象类的区别是什么?

回答:接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制。

接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现。

抽象类是可以有私有方法或私有变量的,通过把类或者类中的方法声明为abstract来表示一个类是抽象类,被声明为抽象的方法不能包含方法体。子类实现方法必须含有相同的或者更低的访问级别(public->protected->private)。抽象类的子类为父类中所有抽象方法的具体实现,否则也是抽象类。

相同点: (1)都不能被实例化 (2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。

不同点:

(1)接口只有定义,不能有方法的实现,但java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。

(2)实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。

(3)接口强调特定功能的实现,而抽象类强调所属关系。

(4)接口方法默认修饰符是 public,抽象方法可以有 public、protected 和 default 这些修饰符(抽象方法就是为了被重写所以不能使用 private 关键字修饰!)。

(5)接口被用于常用的功能,便于日后维护和添加删除,而抽象类更倾向于充当公共类的角色,不适用于日后重新对立面的代码修改。从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。

4.Java中的内部类说一下

回答:内部类有四种,分别是静态内部类、局部内部类、匿名内部和成员内部类

静态内部类:常见的main函数就是静态内部类,调用静态内部类通过“外部类.静态内部类”

局部内部类:定义在方法中的类叫做局部内部类。

匿名内部类:是指继承一个父类或者实现一个接口的方式直接定义并使用的类,匿名内部类没有class关键字,因为匿名内部类直接使用new生成一个对象

5.说一下final关键字的作用

回答:final关键字可以修饰类、方法和属性。

当final修饰类的时候,表明这个类不能被继承。final 类中的所有成员方法都会被隐式地指定为 final 方法。

当final修饰方法的时候,表明这个方法不能被重写。

当final修饰属性的时候,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

6.说一下String,StringBuilder和StringBuffer的区别

String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。

StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。

总结:

  1. 操作少量的数据: 适用 String
  2. 单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder
  3. 多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer

7.说一下Java中的==与eaquels的区别

== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)。

eaquels:

  • 情况 1:类没有重写 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
  • 情况 2:类重写了 equals() 方法。一般,我们都重写 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。

8.Java访问修饰符有哪些?都有什么区别?

回答:Java中的修饰符有public private protected

1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用

2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。

3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。

追问:怎么获取private修饰的变量

回答:private通过反射获取,可以设置setAccessable为true实现

9.Java中的异常体系说一下?

回答:Java中的异常主要分为Error和Exception

Error 指Java程序运行错误,如果程序在启动时出现Error,则启动失败;如果程序运行过程中出现Error,则系统将退出程序。出现Error是系统的内部错误或资源耗尽,Error不能在程序运行过程中被动态处理,一旦出现Error,系统能做的只有记录错误的原因和安全终止。

Exception 致 Java程序运行异常,在运行中的程序发生了程序员不期望发生的事情,可以被Java异常处理机制处理。Exception也是程序开发中异常处理的核心,可分为RuntimeException(运行时异常)和CheckedException(检查异常),如下图所示

  • RuntimeException(运行时异常):指在Java虚拟机正常运行期间抛出的异常,RuntimeException可以被捕获并处理,如果出现此情况,我们需要抛出异常或者捕获并处理异常。常见的有NullPointerException、ClassCastException、ArrayIndexOutOfBoundsException等
  • CheckedException(检查异常):指在编译阶段Java编译器检查CheckedException异常,并强制程序捕获和处理此类异常,要求程序在可能出现异常的地方通过try catch语句块捕获异常并处理异常。常见的有由于I/O错误导致的IOException、SQLException、ClassNotFoundException等。该类异常通常由于打开错误的文件、SQL语法错误、类不存等引起。

追问:异常的处理方式?

回答:异常处理方式有抛出异常和使用try catch语句块捕获异常两种方式。

(1)抛出异常:遇到异常时不进行具体的处理,直接将异常抛给调用者,让调用者自己根据情况处理。抛出异常的三种形式:throws、throw和系统自动抛出异常。其中throws作用在方法上,用于定义方法可能抛出的异常;throw作用在方法内,表示明确抛出一个异常。

(2)使用try catch捕获并处理异常:使用费try catch 捕获异常能够有针对性的处理每种可能出现的异常,并在捕获到异常后根据不同的情况做不同的处理。其使用过程比较简单:用try catch语句块将可能出现异常的代码抱起来即可。

10.Java中的深拷贝和浅拷贝说一下?

回答:深拷贝和浅拷贝都是对象拷贝

浅拷贝:按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。(浅拷贝仅仅复制所考虑的对象,而不是复制它所引用的对象。)

上图: 两个引用student1和student2指向不同的两个对象,但是两个引用student1和student2中的两个teacher引用指向的是同一个对象,所以说明是浅拷贝。

深拷贝:在拷贝引用类型成员变量时,为引用类型的数据成员另辟了一个独立的内存空间,实现真正内容上的拷贝。(深拷贝把要复制的对象所引用的对象都复制了一遍。)

上图:两个引用student1和student2指向不同的两个对象,两个引用student1和student2中的两个teacher引用指向的是两个对象,但对teacher对象的修改只能影响student1对象,所以说是深拷贝。

摘自:JavaGuide

浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。

深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。

追问:浅拷贝与深拷贝的特点是什么?

浅拷贝特点

(1) 对于基本数据类型的成员对象,因为基础数据类型是值传递的,所以是直接将属性值赋值给新的对象。基础类型的拷贝,其中一个对象修改该值,不会影响另外一个。 (2) 对于引用类型,比如数组或者类对象,因为引用类型是引用传递,所以浅拷贝只是把内存地址赋值给了成员变量,它们指向了同一内存空间。改变其中一个,会对另外一个也产生影响。

深拷贝特点

(1) 对于基本数据类型的成员对象,因为基础数据类型是值传递的,所以是直接将属性值赋值给新的对象。基础类型的拷贝,其中一个对象修改该值,不会影响另外一个(和浅拷贝一样)。

(2) 对于引用类型,比如数组或者类对象,深拷贝会新建一个对象空间,然后拷贝里面的内容,所以它们指向了不同的内存空间。改变其中一个,不会对另外一个也产生影响。

(3) 对于有多层对象的,每个对象都需要实现 Cloneable 并重写 clone() 方法,进而实现了对象的串行层层拷贝。 (4) 深拷贝相比于浅拷贝速度较慢并且花销较大。

Java面试高频问题(6-10) logger.info("方法执行耗时: {}ms", System.currentTimeMillis() - start);3. 切面执行顺序:@Around > @Before > 目标方法 > @AfterReturning/@AfterThrowing。数据库乐观锁 :版本号/状态字段更新;// 2(Store屏障)性能损耗: CAS自旋+park/unpark;2. 锁降级策略:Condition的await/unpark控制。if (flag) { // 3(Load屏障) 阅读详情

相关推荐

Java高频面试基础问题与知识点整理

Java高频面试知识点总结:覆盖高频基础知识考点+高频集合知识点深入分析+高频多线程与并发编程面试题汇总+其他扩展考察等。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

Java中==和equals的区别

Java

ddli99的博客 1万+

ORCAD 层次化原理图使用TCL获取位号的方法

orcad tcl 获取occurrence位号的方法。

m0_46675718的博客 1136

“==“与“equals”区别

总结:   1、string是一个特殊的引用类型。对于两个字符串的比较,不管是 == 和 Equals 这两者比较的都是字符串是否相同;   2、当你创建两个string对象时,内存中的地址是不相同的,你可以赋相同的值。   所以字符串的内容相同。引用地址不一定相同,(相同内容的对象地址不一定相同),但反过来却是肯定的,此时==返回false,Equals(如果进行了重写)返回true;   3、基本数据类型比较(string 除外) == 和 Equals 两者都是比较值;

相由心生-心随相改~ 1万+

银河麒麟桌面版V10搭建Qt4.8.6开发环境

银河麒麟桌面版V10搭建Qt4.8.6开发环境

qq_34932364的博客 2402

CEH Practical 实战考试真题与答案

CEH Practical 是 EC-Council 推出的Certified Ethical Hacker(CEH)认证项目中的一项高级动手实践考试。它不同于传统的理论考试,侧重于在真实环境中检验考生的实操能力。

sgafdgdagd的博客 970

JAVA面试题分享三百二十:ES超详细讲解

搜索引擎是对数据的检索,所以我们先从生活中的数据说起。和。:也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。指具有固定格式或有限长度的数据,如数据库,元数据等。:又可称为全文数据,不定长或无固定格式,不适于由数据库二维表来表现,包括所有格式的办公文档、XML、HTML、word文档,邮件,各类报表、图片和咅频、视频信息等。说明:如果要更细致的区分的话,XML、HTML可划分为。

之乎者也·的博客 1447

LTSPICE使用教程:导入第三方库模型进行仿真

LTSPICE导入第三方SPICE模型进行仿真,以英飞凌的第三方.lib模型为实例进行详解

焊武大帝的专栏 3万+

2021.06.15

括号生成–力扣 方法:回溯 回溯算法框架: result = [] def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择 核心回溯算法代码 public void core(StringBuilder sb, List<String> re

四斤酸辣粉的博客 2421

16、保障Azure应用安全:密钥管理与身份认证

本文深入探讨了保障Azure应用安全的关键措施,包括使用网络安全工具(如Application Gateway和Azure Front Door)防范攻击,解决传统密钥和机密存储方式的安全隐患,以及通过Azure Key Vault实现敏感信息的安全管理。同时,介绍了使用托管标识实现Azure资源间安全访问的方法,并结合实际操作步骤展示了如何配置Key Vault、设置访问策略、存储机密以及授予Web应用对SQL Server的访问权限。最后,对不同安全措施进行了比较,并提出了在开发、测试及生产环境中的综合

rock5的博客 73

【花雕学编程】Arduino动手做(249)---ESP32+GC9A01之播放GIF的空战锁定动画

摘要: 本实验基于ESP32开发板,驱动1.28寸圆形IPS彩色TFT显示屏(GC9A01驱动,240×240分辨率),通过SPI接口实现GIF动画播放。利用TFT_eSPI和AnimatedGIF库,成功加载并循环播放预置的科幻风格GIF动画(如HUD界面、X翼战机等)。代码实现了GIF解码、逐帧渲染及动态显示功能,通过串口调试监控运行状态。实验验证了该显示屏在动态图像显示中的流畅性,为嵌入式图形应用提供了实用方案,适用于智能穿戴、交互设备等场景。 关键词: ESP32、GC9A01、圆形TFT、GIF播

雕爷学编程 492

java面试题:Elasticsearch面试突击【2022年最新】

1、为什么要使用 Elasticsearch? (或 回答什么是ES?) 2、elasticsearch 的倒排索引是什么? 3、倒排索引的搜索过程是什么样的? 4、elasticsearch 索引数据多了怎么办,如何调优,部署 5、elasticsearch 是如何实现 master 选举的 6.详细描述一下 Elasticsearch 索引文档的过程 7、如何对Elasticsearch 进行性能优化?

m0_63270506的博客 3754

2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器

12v / 24v智能模拟高侧MOSFET栅极驱动器。2ED2410-EM具有输入CPP和CPN的电压比较器。该比较器可用于基于任何模拟电压触发SAFESTATE模式,甚至是外部电压2ED2410-EM。CPP为比较器的正输入,CPN为负输入。VcPREF可以通过微控制器进行调节,也可以通过板载电源芯片(如英飞凌SBC)或简单的分压器在限制VcP(REF)内进行固定,以保持稳定性。使用此比较器允许2ED2410-EM进入SAFESTATE并独立于微控制器关闭MOSFET。

让学习成为一种习惯 2201

Java面试高频问题

鉴于在网上看到很多面试题,比较没有头绪,所以自己根据目录一个个查找答案,总结了一份适合自己的面试题目列表和答案链接。以便将来面试前复习使用。 一、Java基础 1、String类为什么是final的。 2、HashMap的源码,实现原理,底层结构。(难,难以理解) https://blog.youkuaiyun.com/bn493235694/article/details/79599911 3、说说你知道的...

qq_42996037的博客 4307

github创建账号第一步始终出错

github创建账号总结:第一次注册GitHub,填好用户名邮箱密码后进入下一步就卡在哪里,上面还提示Unable to verify your captcha response等,进入网址的解决办法以及下载其他的浏览器也无法解决,用手机浏览器抱着试一试的心态竟然成功了,分享给大家。手机下载谷歌浏览器,进入GitHub正常注册,能向下继续,邮箱验证完以后再用电脑登陆就ok啦

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 4377

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java面试必备:最新最全高频技术问题深度解析(5000+字干货收藏版)

作为常年占据TIOBE榜单前三的编程语言,Java工程师的岗位竞争日益激烈。本文作者结合10年大厂面试官经验,整理了Java技术面试中的7大核心领域、58个高频问题,涵盖从基础到进阶的全方位知识点解析。本文涵盖的200+核心知识点和30个实战代码片段,凝聚了笔者参与数百场技术面试的精华总结。建立知识脑图:用XMind整理各模块关联动手实验验证:所有代码示例本地运行模拟面试演练:使用"费曼学习法"

~~~~~~~BUG FLY~~~~~~~~~ 1298

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java大厂面试高频问题总结

Java工程师面试时,大厂面试官通常会围绕技术深度、系统设计、实际场景解决方案等方向提问。

z17826856787的博客 391

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

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

jre9下载 jdk9

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

Java面试高频问题从入门到精通(壹)

《Java面试核心技术精要》摘要:本文针对Java开发者的面试需求,系统梳理了从基础到分布式架构的核心考点。基础篇涵盖HashMap红黑树优化、JVM内存模型、线程安全机制等底层原理;进阶篇深入Spring循环依赖、并发编程等难点;分布式篇解析Redis数据倾斜、分布式事务等实战问题。文章结合200+场面试经验,提供技术深度剖析、避坑指南及薪资谈判建议,强调工程化思维和问题解决能力的重要性。最后指出面试是双向选择,开发者应展现技术热情与改变世界的潜力。

qq_49729896的博客 1141

java 面试高频问题

高频问题 设计模式 单例模式 懒汉、饿汉、双重校验锁、静态内部类 工厂模式 JAVA基础 抽象类和接口区别 集合类的结构 Iterator、Collection(List、Set、Queue)、Map ArrayList和LinkedList的区别 HashMap 底层结构 数组 + 链表 Put 的过程 为什么长度是2的倍数 找索引时 key 的 hash 值与数组的长度值减 1 进行与运算,长...

zhangqiang180的博客 372

Java面试精选:3个高频技术问题详解

多线程:掌握线程创建方式和线程安全集合框架:理解不同集合类型的特性和使用场景并发编程:了解并发环境下的数据结构选择在实际开发中,这些知识点都非常重要。建议开发者不仅要记住概念,还要深入理解其底层实现和适用场景,这样才能在面试中脱颖而出,在实际工作中写出高质量的代码。

NicoAxi 665

2022春招 Java 岗面试高频问题总结

金九银十,又到了技术面试求职高峰期,你是否还在为面试不知道准备哪些技术问题而焦虑?力扣讨论区的一位扣友特别汇总 100 道Java高频重点面试题,想要面试 Java 工程师的小伙伴可以根据自己的进度准备这些问题,掌握了这些重点问题可以帮助我们大大增加通过前两轮技术面试的几率,顺利拿下心仪 Offer。 项目相关 1.1 介绍一下你简历上写的项目?自己主要做了什么? 1.2 你觉得项目里给你最大的挑战是什么?遇到了什么问题?如何解决的?从中学到了什么? 项目里面会不断出现各种...

q66562636的博客 303

Java 线程池面试高频问题全解析

/ 1. 将任务序列化// 2. 持久化到Redis// 3. 记录日志// 4. 后续可以通过定时任务从Redis取出重试自定义策略的典型应用场景任务持久化(数据库、Redis)降级处理异步重试机制告警通知自定义线程池的核心是合理配置和workQueue。

Toroto5的博客 1847

Java面试高频问题实战解析:从理论到代码实现

在准备Java面试时,很多开发者会遇到一个共同的问题:虽然知道一些常见的面试题,但真正被问到细节时却难以深入回答。为了帮助大家更好地掌握Java面试中的高频问题,我决定开发一个交互式的学习平台。这个平台不仅提供问题解析,还能让用户直接在线编辑代码并查看执行结果,从而加深理解。总之,这个项目不仅帮助我巩固了Java知识,还让我体验到了快速开发和部署的便利。它让我能够快速将项目上线,无需繁琐的环境配置,节省了大量时间。支持用户在线编辑代码并实时运行,查看执行结果,模拟实际面试中的编码环节。

NightshadeEagle34的博客 454

2025年金九银十Java 岗面试遇到的高频问题总结

面试,是进入一家心仪公司的钥匙,但是大多数人的面试都不是一帆风顺的。对于 Java 程序员而言,想要在面试过程中脱颖而出,除了要具有扎实的技术功底外,还需要掌握一定的面试技巧,做到知己知彼。下面就为大家分享下如何提高 java 开发岗的面试通过率?根据经验,一般面试分几轮,多数是 3 到 4 面,前两轮是技术面,最后一轮是 HR 面,每轮面试时间大概都在 40 分钟左右。至于问的什么问题,就看你面试的级别,面试时候回答问题的流畅度,以及跟面试官是否投缘了。

m0_69632475的博客 1166

【Java高频面试问题】JVM篇

而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。标记-整理(Mark-and-Compact)算法是根据老年代的特点提出的一种标记算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存。使用多线程和“标记-整理”算法。当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。

weixin_45698637的博客 1378
上一篇: 已上岸学姐零基础 Java 自学之路(2022年新版,适合0基础)
下一篇: Java中的异常体系
Javaesandyou
博客等级 码龄5年 742粉丝 563原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值