《计算机是怎样跑起来的》矢泽久雄 读书笔记(关于数据库,数据加密,XML和CSV)

计算机的三大原则

  1. 计算机是执行输入、运算、输出的机器
  2. 程序是指令和数据的集合
  3. 计算机的处理方式有时与人们的思维习惯不同

关于Java 和.NET

Java 和.NET 其实是位于操作系统(Windows 或Linux 等)之上,旨在通过隐藏操作系统的复杂性从而提升开发效率的程序集,这样的程序集也被称作“框架”(Framework)。
框架由两部分构成,一部分是负责安全执行程序的“执行引擎”,另一部分是作为程序组件集合的“类库”。
无论是使用Java 还是.NET,都需要依赖类库进行面向对象编程。在Java 中,使用的是与框架同名的Java 语言。而在.NET 中,使用的是.NET 框架支持的C#、Visual Basic.NET、Visual C++、NetCOBOL等语言进行开发。
上述的每种语言都是面向对象语言。
其中VisualBasic.NET 和NetCOBOL 是在古老的Visual Basic 和COBOL 语言中增加了面向对象的特性(类的义、继承、封装和多态等)而诞生的新语言。
至今还对面向对象编程敬而远之的程序员们,你们已经不得不迎头赶上了。

数据库

DBMS、关系型数据库、SQL( Structured Query Language,结构化查询语言)、事务(Transaction)

数据库是数据的基地

适合存储大规模数据的是关系型数据库(Relational Database)。在关系型数据库中,数据被拆分整理到多张表中,同时表与表之间的关系也可以被记录下来
1970 年美国IBM 公司的Codd 先生设计发明了关系型数据库。
现在关系型数据库被广泛应用,以至于一提到数据库就默认是关系型数
据库。

为了编写数据库应用程序(即为了便于操作数据库而编写的程序),诸位可以从零开始埋头编写所有代码,但是一般情况下,还是会借助称作DBMS 的软件。Microsoft Access、Oracle、SQL Server、DB2 等诸位都有所耳闻吧,这些都是DBMS 的实例。数据库的实质虽然是某种
数据文件,但是诸位编写的应用程序并不是直接去读写这些数据文件,而是以DBMS 作为中介间接地读写(如图8.3 所示)。DBMS 不但可以使应用程序轻松地读写数据文件,而且还具有一致并且安全地存储数据的功能。

数据库系统的构成要素包括“数据文
件”“DBMS”“应用程序”三部分。在小型系统中,把三个要素全部部
署在一台计算机上,称作“独立型系统”。在中型系统中,把数据文件
部署在一台计算机上,并且使数据文件被部署了DBMS 和应用程序
的多台计算机共享,这样的系统被称为“文件共享型系统”。在大型
系统中,把数据文件和DBMS 部署在一台(或者多台)计算机上,然
后用户从另外一些部署着应用程序的计算机上访问,这样的系统被称
作“客户端/服务器型系统”。其中部署着数据文件和DBMS 的计算
机是服务器(Server),即服务的提供者;部署着应用程序的计算机是
客户端(Client),即服务的使用者。如果把服务器和客户端之间用互联网联结起来,就形成了Web 系统。在Web 系统中,一般情况下应用程序也是部署在服务器中的,在客户端只部署Web 浏览器(如图
8.4 所示)。

设计数据库

在关系型数据库中,把录入到表中的每一行数据都称为记录,把构成一条记录中的各个数据项(在本例中是商品名称、单价等)所在的列都称作字段。记录有时也被称为
行或元组(Tuple),字段有时也被称为列或属性(Attribute)。

通过拆表和整理数据实现规范化

第一个问题是,用户不得不多次录入
相同的数据,就像第一条和第二条记录中的数据“日经次郎、东京都千
代田区、03-2222-2222”。录入重复数据不仅使应用程序的操作变得繁
琐,更白白浪费了磁盘空间。另一个问题是,录入的名称不同指代的
却是相同的商品,就像在第三条记录中,应该输入“威士忌”,却错误
地输入了“维士忌”,如果让计算机来处理,这种情况就会被识别成不
同的商品。也就是说,如果仅使用一张表,就会和应用卡片型数据库(每条记录对应一张卡片)时面临相同的问题。

为了解决这类问题,在设计关系型数据库时,还要进行“规范化”。所谓规范化,就是将一张大表分割成多张小表,然后再在小表之间建立关系,以此来达到整理数据库结构的目的。通过规范化,可以形成
结构更加优良的数据库。DBMS 提供了可视化的工具,用户仅仅通过
简单的操作就可以进行规范化(如图8.7 所示)。

规范化的要点是在一个数据库中要避免重复存储相同的数据。因
此在本例中,把酒铺的数据库分为“商品表”“顾客表”和“销售记录
表”三张表,然后再在它们之间建立关系(用被细线连接起来的短杠表
示)。通过这样的处理,既省去了多次重复录入相同的顾客姓名、住
址、电话号码的麻烦,又能防止把相同的商品名称输入成不同名称的
错误。如图8.8 所示,酒铺的数据被分别存储到了三张表中。表格的最
后一行只是表示在这里可以输入下一条记录,并非实际存在着这样一
条记录。

用主键和外键在表间建立关系

为了在表间建立关系,就必须加入能够反映表与表之间关系的字段,为此所添加的新字段就被称为键(Key)。首先要在各个表中添加
一个名为主键(Primary Key)的字段,该字段的值能够唯一地标识表中
的一条记录(如图8.9 所示)。在顾客表中添加的“顾客ID”字段,在
销售记录表中添加的“销售记录ID”字段以及在商品表中添加的“商品
ID”字段,都是主键。

索引能够提升数据的检索速度

索引表是一种数据结构,存储着字段的值以及字段所对应记录的位置。

设计用户界面

对数据库进行的操作的种类通常称为CRUD。CRUD 由以下四种操作的英文名称的首字母组成, 即记录的插入(CREATE)、获取(REFER)、更新(UPDATE)、删除(DELETE)。
数据库应用程序只要能够对记录进行CRUD 的操作就可以了。当然,为了满足用户的需求,为应用程序相应地增加统计、打印等功能的情况也是存在的。

向DBMS 发送CRUD 操作的SQL 语句

为了对数据库进行CRUD 操作,就必须从应用程序向DBMS 发送
命令。这里所使用的命令就是SQL 语言(Structural Query Language,
结构化查询语言)。SQL 语言的标准是由ISO(International Organization
for Standardization,国际标准化组织)制订的。现在市面上几乎所有的
DBMS 都支持SQL 语言。

一旦向DBMS 发送了一条命令(SQL 语句),与此相应的操作就会
立刻被执行。与BASIC 或C 语言等编程语言不同的是,使用SQL 语
言通常不需要定义变量或者考虑程序的执行流程。下面给诸位展示一个SQL 语句的例子,可以看出它和英文的句子很像。

使用数据对象向DBMS 发送SQL 语句

在Windows 应用程序中,向DBMS 发送SQL 语句时,一般情况
下使用的都是被称为数据对象(Data Object)的软件组件(参考第7 章
所介绍的类)。一般的开发工具中也都包含了数据对象组件。在Visual
Basic 6.0 中,使用的是被称为ADO(ActiveX Data Object,ActiveX 数
据对象)的数据对象。

ADO 是以下几个类的统称,其中包括用于建立和DBMS 连接的
Connection 类, 向DBMS 发送SQL 语句的Command 类以及存储
DBMS 返回结果的Recordset 类等。图8.14 所示的应用程序的代码如代
码清单8.1 所示。在程序启动时连接DBMS,然后进行与各个按钮对应
的CRUD 操作,在程序结束时关闭与DBMS 的连接。在使用ADO 时
必不可少的是SQL 语句,其中主要是SELECT 语句。而插入、更新、
删除语句可以通过Recordset 类所提供的AddNew、Update、Delete 方
法(类中所提供的函数)执行。可以认为这些方法在内部自动生成了
SQL 语句并发送给了DBMS。诸位可以不去深究以下代码的细节,只
要能抓住其大意就可以了。

事务控制也可以交给DBMS 处理

最后介绍DBMS 的一个高级功能——事务控制。事务由若干条
SQL 语句构成,表示对数据库一系列相关操作的集合。
为了防止出现这种问题,在SQL 语言中设计了以下三条
语句:1. BEGIN TRANSACTION(开启事务)语句,用于通知DBMS
开启事务;2. COMMIT(提交事务)语句,用于通知DBMS 提交事务;
3. ROLL BACK(事务回滚)语句,用于在事务进行中发生问题时,把
数据库中的数据恢复到事务开始前的状态(如图8.16 所示)。在使用
ADO 创建应用程序时, 可以分别使用Connection 类的BeginTrans、
CommitTrans 和RollbackTrans 方法实现上述三个操作。DBMS 真的是
很方便,只要使用了DBMS,连事务管理这样的高级功能都不必自己
实现了。

试着加密数据吧

加密和解密

在作为加密对象的数据中,蕴含着文本、图像等各种形式的信息。
但是,由于计算机会把所有的数据都用数字表示,所以即便数据有各种展现形式,对其加密的技术却是基本相同的。因此在本章中,我们就假设加密的对象仅限于文本数据。

文本数据可以由各种各样的字符构成。其中每个字符都被分配了
一个数字,我们称之为“字符编码”。定义了应该把哪个编码分配给哪
个字符的字符编码体系叫作字符集。字符集分为ASCII 字符集、JIS 字
符集、Shift-JIS 字符集,EUC 字符集、Unicode 字符集等若干种。

数据一旦以明文的方式在网络中传输,就会有被盗取滥用的危险,
因此要对明文进行加密,将它转换成为“密文”。当然密文也仅仅是一串数字,但是如果是把密文显示在屏幕上,那么在人类看来显示的也只不过是读不懂、没有意义的字符序列罢了。

虽然存在各种各样的加密技术,但是其中的基本手段无外乎还是字符编码的变换,即将构成明文的每个字符的编码分别变换成其他的数值。
通过反转这种变换过程,加密后的文本数据就可以还原。通常把密文还原成明文的过程(即解读密码的过程)称为“解密”。

错开字符编码的加密方式

加密方式一:将文本数据中每个字符所对应的字符编码一律向后错三个

因为加密时使用的是将字符编码向后错三个的方法,所以只要再
将字符编码向前挪三个就可以实现解密。
加上3 就是加密,减去3 就是解密。因此通常把像3这样用于加密和解密的数字称为“密钥”。
如果事先就把3 这个密钥作为只有数据的发送者和接受者才知道的秘密,那么不知道这个密钥的人,就无法对加密过的数据进行解密。

加密方式二:把每一个字符的编码与密钥做XOR 运算(eXclusive OR,逻辑异或运算)
XOR 运算的法则是把两个数据先分别用二进制表示,然后当一个
数据中的某一位与另一个数据中的1 相对时,就将这一位反转(若这一
位是0 就变成1,是1 就变成0)A。因为是靠翻转数字实现的加密,所
以只要再翻转一次就可以解密。

密钥越长,解密越困难

密钥越长,解密越困难
在互联网等环境中,会有很多不固定的人群相互收发经过加密处理的数据。一般情况下,会将所使用的加密方式公开,而只对密钥的值保密。但是令人感到遗憾的是,这个世界上还是有坏人的。
有些人会盗取那些并不是发送给他们的加密数据,企图破解后用于不可告人的目的。尽管这些人并不知道密钥的值,但是他们会利用计算机强大的计算能力,用密钥所有可能的取值去试着破解。
在互联网上经过加密的数据也难免被盗,因此就要先设法做到即
使数据被盗了,其内容也难以被破解。为此可以把密钥设成多位数而
不仅仅是一位数。
密钥每增长一位,破解所花费的时间就会翻10 倍。密钥再进一步增长
到16 位的话,破解时间就是2.78 小时×1000000 ≈ 317 年,从所需的
时间上来看,可以说破解是不可能的。

适用于互联网的公开密钥加密技术

前面几节所讲解的加密技术都属于“对称密钥加密技术”,也称作“秘密密钥加密技术”(如图10.7 所示)。这种加密技术的特征是在加密
和解密的过程中使用数值相同的密钥。

在公开密钥加密技术中,用于加密的密钥可以公开给全世界,因此称为“公钥”,而用于解密的密钥是只有自己才知道的秘密,因此称
为“私钥”。
这样就算加密后的密文被人盗取了,
只要他还不知道笔者的私钥就不可能对其解密,从而保证了数据的安
全性。而收到了密文的笔者,则可以使用只有笔者自己才知道的私钥5
对其解密(如图10.7(2) 所示)。

可用于实现公开密钥加密技术的算法有若干种,这里笔者将介绍
目前广泛应用于互联网中的RSA 算法。RSA 这个名字是由三位发明者
Ronald Rivest、Adi Shamir 和Leonard Adleman 姓氏的首字母拼在一起
组成的

。无论
是公钥还是私钥都包含着两个数值,两个数值组成的数对儿才是一个
完整的密钥。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数字签名可以证明数据的发送者是谁

而在通过网络传输的文件中,数字签名可以发挥出与印章和签
名同样的证明效果。通常可以按照下面的步骤生成数据签名。步骤中
所提及的“信息摘要”(Message Digest)可以理解为就是一个数值,通
过对构成明文的所有字符的编码进行某种运算就能得出该数值。

请诸位注意,这里是使用私钥进行加密、使用公钥进行解密,这与之前的用法刚好相反

,因为印章或签字有两层约束。其一是发送者承认文件的内容是完整有效的;其二是文件确实是由发送者本人发送的。发送者用构成文件的所有字符的编码生成了信息摘要,就证
明发送者从头到尾检查了文件并承认其内容完整有效。如果接收者重
新算出的信息摘要和经过发送者加密的信息摘要匹配,就证明文件在
传输过程中没有被篡改,并且的确是发送者本人发送的。正因为数据
是用发送者的私钥加密的,接收者才能用发送者的公钥进行解密。

绝对无法破解的加密技术

绝对无法破解的加密技术也是存在的。首先密钥的位数要
与文件数据中的字符个数相同,其次每次发送文件时都需要先更换密
钥,最后为了防止密钥被盗,发送者还要亲手把密钥交给接收者。诸
位明白为什么说这样做就绝对无法破解了吗?原因在于这样做等同于
发送完全随机并且没有任何意义的数据。可是这种加密技术是不切实际的。合理的密钥应该满足如下条件:长短适中、可以反复使用、可以
通过某种通信手段交给接收者,并且通信双方以外的其他人难以用它
来解密。公开密钥加密技术就完全满足上述条件,

关于XML

XML 是eXtensible Markup Language 的缩写,译为可扩展标记语言。
用于编写网页的HTML(Hypertext Markup Language,超文本标记语言)就是一种标记语言。

通常把通过添加标签为数据赋予意义的行为称为“标记”。为这种给数据赋予意义的行为定义规则的语言就是“标记语言”。HTML 是用于编写网页的标记语言,更简单地说法就是HTML 决定了可用于编写网页的标签。
也可以这样说,可使用的标签的种类决定了标记语言的规范。Web浏览器会对HTML 的标签进行解析,把由它们标记的信息渲染成在视觉上可以阅读的网页。

XML 本身并不会限定标签的种类,反倒是允许XML 的使用者随心所欲地创建标签。也就是说,在“<”和“>”中的单词可以是任意的。这就是所谓的“可扩展”。在HTML 中,我们只能使用由HTML 定义出的那若干种标签,因此HTML 是固定的标记语言。与此相对,XML 是可扩展的标记语言。

XML 是元语言

XML 并没有限定标签的使用方式,使用什么样的标签都可以。可以说XML 仅仅限定了进行标记时标签的书写格式(书写风格)。也就是说通过定义要使用的标签种类,就可以创造出一门新的标记语言。

通常把这种用于创造语言的语言称作“元语言”

如果只是在文档中胡乱地堆积标签,则无法称之为符合XML 格式的语言。下表列出了作为元语言的XML 中的约束。
在这里插入图片描述
XML 的数据是纯文本格式的,也就是说只包含字符。通常把遵循了XML 的约束编写出的文档称为“XML 文档”;把保存着XML 文档的文件称为“XML 文件”。可以使用记事本等文本编辑器编写XML 文件。

通常把遵循XML 约束、正确标记了的文档称作“格式良好的XML 文档”(Well-formed XML Document)。换言之,只要能通过XML解析器的解析,就是格式良好的XML 文档。


XML 可以为信息赋予意义

XML 到底有什么用呢?
在商业领域中存在着不计其数的信息,蕴涵着各种各样的意义。
行业不同,信息的类型也就不同。
并且随着时代的发展,新兴行业还在不断地涌现。如果要适用于所有行业,那么就算HTML 的标签再多也还是不够用。
于是就发明出了XML 这种元语言,而HTML的用途就仅限于信息的可视化了,自始至终都用于展现网页。

XML 的主要用途是为在互联网上交换的信息赋予意义。当然,在互联网以外的场景也可以使用XML。只不过在XML 诞生的过程中互联网一直伴随其左右。

在互联网的世界中,有一个叫作W3C(World Wide Web Consortium,万维网联盟)的机构。该机构以“W3C 推荐标准”的形式制定了一系列标准。XML 于1996 年成为了W3C 的推荐标准(XML 1.0)。

这之后, 人们使用XML 这种元语言, 又定义出了新的网页标记语言XHTML(Extensible Hypertext Markup Language,可扩展超文本标记语言), 该语言也于2000 年成为了W3C 推荐标准。

CSV和XML的区别和联系

W3C 的推荐标准是不依赖于特定厂商的通用规范。因此可以认为
成为W3C 推荐标准的XML 是一种通用的数据交换格式。也就是说,
如果某家厂商的某个应用程序把数据保存到了XML 文件中,那么其
他厂商的另一个应用程序就应该可以通过加载这个XML 文件来使用
数据。除此之外,XML 也可以在同一个厂商的不同应用程序之间交换
数据。

XML 并不是第一个跨越了厂商或应用程序差异的通用数据交换格式。在计算机行业,长久以来一直把CSV(Comma Separated Value,
逗号分隔值)作为通用数据交换格式沿用至今。下面就试着对比一下
XML 和CSV 吧。

与XML 一样,CSV 也是仅由字符构成的纯文本文件。一般情况
下,CSV 文件的扩展名为.csv。正如其名,在CSV 文件中,记录的是
经过“,”(半角逗号)分割后的信息。

在CSV 中,只记录了信息本身,而并没有为各个信息赋予意义。
可以说在这一点上,还是XML 更胜一筹。既然这样的话,是不是说今
后CSV 将被淘汰,只剩下XML 还在使用呢?答案是否定的。CSV 和
XML 都会继续存在下去,因为它们各有千秋。不仅是计算机行业,其
他行业亦是如此,如果有多个方法可以达到相同的目的,那么这些方
法就自然会各有优劣。

只是瞥一眼,就能够看出来在XML 文件中,因为标签为信息赋予了意义,所以分析起来更方便。但是,另一方面,文件的尺寸也变大了。刚才的CSV 文件的大小不过50 字节,而这个XML 文件的大小是280 字节,竟比CSV 文件的5 倍还多。文件尺寸增大,就意味着会占用更多的存储空间、需要更长的传输及处理时间。

另外在诸位平时所使用的应用程序中,不仅可以把文件保存成私
有的数据格式,还可以把文件保存成通用的数据格式。以Microsoft
Excel 为例,在旧版本的Microsoft Excel 2000 中,采用了CSV 作为通用的数据格式。

可以为XML 标签设定命名空间

XML 文档并非互联网专用,但是XML 确实是一种主要通过互联网在全世界的计算机之间交换数据时使用的数据格式。这样的话就有可能遇到一个问题:虽然标签的名字相同,但是标记语言的创造者们却为它们赋予了各种不同的含义。

于是就诞生了一个W3C 推荐标准——XML 命名空间(Namespace
in XML),旨在防止这种同形异义带来的混乱。所谓命名空间,通常是一个能代表企业或个人的字符串,用于修饰限定标签的名字。在XML文档中,通过把“xmlns=" 命名空间的名字"”作为标签的一个属性记述,就可以为标签设定命名空间。xmlns 即XML NameSpace(命名空间)的缩写。通常用全世界唯一的标识符作为命名空间的名称。

可以严格地定义XML 的文档结构

除了之前讲解过的“格式良好的XML 文档”,还有有一个词叫作“有效的XML 文档”(Valid XML document)。所谓有效的XML 文档是指在XML 文档中写有DTD(Document Type Definition,文档类型描述)信息。前面笔者没有说明,其实完整的XML 文档包括XML 声明、XML 实例和DTD 三个部分。所谓XML 声明,就是写在XML 文档开头的、形如<?xml version="1.0" encoding="Shift_JIS"?> 的部分。

XML实例是文档中通过标签被标记的部分。而DTD 的作用是定义XML 实例的结构。虽然也可以省略DTD,但是通过DTD 可以严格地检查XML 实例的内容是否有效。

用“<!DOCTYPE>”和“]>”括起来的部分就是DTD

只要定义了这样的DTD,当遇到那些虽然记录了公司名称和地址,但还没有记录员工数量的数据时,就可以判断出这不是一个有效的XML 实例。

与DTD 相同,还有一个名为XML Schema 的技术也可用于定义XML 实例的结构。在XML 中,DTD 借用了可称得上是标记语言始祖的SGML(Standard Generalized Markup Language,标准通用标记语言)语言的语法。而XML Schema 是为了XML 新近研发的技术,因此它可
以对XML 文档执行更严格地检查,例如检查数据类型或数字位数等。

用于解析XML 的组件

的确存在着用于处理XML 文档的程序组件。比如已成为W3C 标
准的DOM(Document Object Model,文档对象模型)以及由XML-dev社区开发的SAX(Simple API for XML)。

其实无论是DOM 还是SAX,都只是组件的规范,实际的组件是由某个厂商或社区提供的。如果使用的是Windows,那么就应该已经安装了一个由微软提供的、遵循了DOM 规范的组件(一个名为msxml3.dll 的DLL 文件)。

XML 可用于各种各样的领域

通过使用XML,诞生了各种各样的标记语言。

以往的软件厂商在存储数学算式、多媒体数据等数据时,使用的都是自家应用程序的私有格式。然而在未来,作为世界标准的XML 格式的标记语言将成为主流。即使是现在,也已经涌现出了一批成为W3C 建议标准的标记语言。
在这里插入图片描述
为了实现各自的目的,每一种标记语言中都定义了各种各样的标签。

例如,在描述数学算式的MathML(Mathematical Markup Language,数学标记语言)中,就定义了表示根号、乘方或分数等数学元素的标签。

SOAP(Simple Object Access Protocol,简单对象访问协议)可用于
分布式计算。
所谓分布式计算,就是把程序分散部署在用网络连接起来的多台计算机上,使这些计算机相互协作,充分发挥计算机整体的计算能力。简单地说,SOAP 就是使运行在A 公司计算机中的A 程序,可以调用运行在B 公司计算机中的B 程序。

SOAP 的出现使过去的分布式计算技术变得更容易使用,也更通用。无论是调用程序时所需的参数信息,还是程序执行后的返回结果,都可以用通用的数据格式XML 表示。
另一方面,SOAP 收发数据时所使用的传输协议并不固定,凡是能够收发XML 数据的协议均可使用。一般情况下使用的是HTTP 或SMTP 协议。可以说SOAP 的诞生使得人们可以更加轻松地构建分布式计算环境了。

XML 受到了众人的瞩目,在各种各样的场景中都可以见到它的身
影,这已经是不折不扣的事实了,而且还会继续诞生新的XML 的使用方法。
但是请不要认为这等同于“今后所有的数据都应该是XML 格式的”。因为XML 只有在充当通用数据格式时才有价值。也就是说,只有在像互联网那样的环境中,运行在不同机器中的不同应用程序相互联结,XML 才会大有作为。

只有一台独立的计算机,或者只在一家公司内部的话,使用XML 格式存储数据反而体现不出优势,仅仅是文件的尺寸变大从而浪费存储空间罢了。

同样地,在分布式计算中,如果是由不同种类的机器互联组成的系统,那么使用基于XML 的SOAP 才是有意义的。反之如果环境中的机器和应用程序全部来自同一厂商,那么使用厂商自己定制的格式而并非基于XML 的格式,反而可以更加快捷地处理信息。XML 是通用的,但它不是万能的。

笔者会把XML 中的X 看作是eXchangable(可交换的)而并非是eXtensible(可扩展的),

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值