【Java从0到架构师】学习记录

Java 从 0 到 架构师

争取9月开学前学完这门课!!!!冲啊!!!

第一阶段:Java 基础语法

学习视频:Java从0到架构师①零基础高效率入门

面向对象基础、Java程序的内存划分、嵌套类(内部类、静态嵌套类)、局部类、接口的升级问题(默认方法、静态方法)、instanceof

匿名类(代码传递、回调、过滤器)、Lambda表达式(方法引用)、函数式接口(Supplier、Consumer、Predicate、Function)

字符串(String、StringBuilder),日期(Date、日期SimpleDateFormat、Calendar)

单字符匹配、预定字符、量词、Matcher(贪婪、勉强、独占模式)、捕获组、边界匹配符、String类与正则表达式

异常、try-catch、finally、异常的种类、throws、thorw、自定义异常、断言类

枚举、包装类、Math、Radnom、UUID、格式化、DecimalFormat、高精度计算(BigDecimal)

泛型(泛型类型、原始类型、泛型方法)、通配符(上界、下界、无限制、继承)

ArrayList、LinkedList、Stack、Queue、Set、Map, 迭代器 Iterable、Iterator,Collections类

File、字符集、字节流、字符流、缓冲流、数据流、对象流、序列化、try-with-resources语句

多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池

计算机网络体系结构(OIS参考模型、TCP/IP体系、网络通信标准化组织)及 Java网络编程

第二阶段:JavaEE 基石

学习视频:Java从0到架构师②JavaEE技术基石

Gitee 代码:https://gitee.com/szluyu99/mj_java/tree/master

基本概念 + 环境搭建

【Java从0到架构师】基本概念 + 环境搭建

基本概念

  • 网页基础知识、基本HTML标签
  • Apache Tomcat

环境搭建

  • 启动和关闭 Tomcat
  • Tomcat 乱码问题
  • Idea 关联 Tomcat 源码
  • Idea 左侧显示多个项目
  • 新建 Web 项目

Servlet_JSP

【Java从0到架构师】Servlet_JSP

Servlet

  • 乱码问题
  • Servlet 的细节
  • Servlet 处理请求的常见过程
  • Servlet 生命周期
  • loadOnStartup
  • ServletContext

JSP

  • EL表达式、JSTL标签库
  • JSP 处理请求的常见过程

Servlet + JSP

  • Servlet + JSP 处理请求的常见过程
  • 转发 (forward)
  • 转发链条
  • 重定向 (redirect)
  • 转发 vs 重定向

JSP 九大内置对象

MySQL 基础 + 多表查询

【Java从0到架构师】MySQL 基础

MySQL

  • MySQL 的使用步骤
  • 数据库的内部存储细节
  • GUI 工具
  • SQL 语句

DDL 语句

  • DDL 语句 - 数据库
  • DDL 语句 - 表
  • 常用数据类型 - 数字类型
  • 常用数据类型 - 字符串类型
  • 常用类型 - 日期和时间类型
  • TRUNCATE
  • 表的复制

列的常用属性

DML 语句

DQL 语句

  • 聚合函数 (Aggregate Function)
  • 常见的 WHERE 字句

UNIQUE 索引

主键 (PRIMARY KEY)

外键 (FOREIGN KEY)

级联 (CASCADE)

【Java从0到架构师】SQL 多表查询

多表查询

多表查询核心概念

多表查询 SQL 示例

  • INNER JOIN
  • LEFT JOIN
  • LEFT JOIN EXCLUDING INNER JOIN
  • RIGHT JOIN
  • RIGHT JOIN EXCLUDING INNER JOIN
  • FULL OUTER JOIN
  • FULL OUTER JOIN EXCLUDING INNER JOIN

更多的表

排序、分页

子查询

JDBC、Spring JDBC、JUnit

【Java从0到架构师】JDBC、Spring JDBC、JUnit

下载 MySQL 的 JDBC 实现(jar,驱动包)
JDBC 使用

  • Statement 的常用 API
  • ResultSet 的常用 API
  • PreparedStatement
  • 配置文件
  • 数据库连接池

Spring JDBC

JUnit

  • 常用注解
  • 断言类 Assert 的常用方法

JS_jQuery_BootStrap

【Java从0到架构师】JS_jQuery_BootStrap

JavaScript

  • script 标签
  • 基础语法
  • 数据类型
  • 字符串的遍历
  • 数组的遍历
  • 对象的遍历
  • 常用 API 参考
  • 函数
  • DOM 操作

jQuery

  • 基于 jQuery 的各种插件

BootStrap

Maven

【Java从0到架构师】Maven

Tomcat 部署项目的方式

传统项目 vs Maven 项目

Maven

  • Maven 项目的常见目录
  • pom.xml
  • 构建生命周期
  • default 生命周期
  • 常用命令
  • dependency 中 scope 的取值

Maven 常见操作

  • 初始化配置:环境变量、仓库位置、配置镜像
  • 修改 Maven 的 JDK 版本
  • 命令行新建 Maven 项目
  • IDEA 导入 Maven 项目
  • IDEA 新建 Maven 项目(Web 项目)
  • 生成 Runnable Jar
  • 安装本地 jar 到 Maven 的 LocalRepository

Maven 常见问题解决

  • 文件编码的警告:Using platform encoding
  • 控制台输出乱码

会话跟踪 Cookie_Session

【Java从0到架构师】会话跟踪 Cookie_Session

Cookie

  • Cookie 的有效期 - expires、max-age
  • Cookie 的作用域 - domain、path
  • 服务器设置 Cookie

Session

  • Tomcat 中 getSession 的内部原理
  • Session 的有效期

Cookie Session 总结

Filter_Listener_AJAX

【Java从0到架构师】Filter_Listener_AJAX

过滤器 - Filter

  • Filter 中的生命周期方法
  • Filter - dispatcherTypes
  • Filter 示例

监听器 - Listener

  • Listener 示例

AJAX

  • 原生 AJAX 示例
  • jQuery AJAX 示例
  • jQuery - getJSON

第二阶段项目实战 - 个人简历项目

【Java从0到架构师】个人简历项目实战

功能性

  • 登陆流程
  • 验证码

JavaWeb

  • Service、Dao 方法名规范
  • form 文件上传 - 前端、后台、实时预览
  • 页面可见性
  • Service 层
  • 面向接口编程

后端技巧

  • 利用 Jackson 将 Java 对象转成 Json 字符串
  • 利用反射获取泛型的类型

前端技巧

  • 利用 reset 清空 form 表单
  • 图片的 MIMEType
  • 验证码功能发送不同的参数防止缓存
  • 登陆/修改密码功能,利用隐藏域发送加密后的密码

第三阶段:进阶互联网架构师

学习视频:Java从0到架构师③进阶互联网架构师

在学习各种框架的时候,首先要牢牢掌握 XML 的使用方式,因为注解都是基于 XML 的

Gitee 代码:https://gitee.com/szluyu99/mj_java_frame/tree/master

企业流行框架:

  • SSM (Spring、SpringMVC、Mybatis)
  • Apache Shiro
  • SpringBoot

MyBatis - 查询

【Java从0到架构师】MyBatis - 查询

数据库事务 (Database Transaction)

MyBatis 使用准备

  • 依赖
  • 配置文件
  • 创建 Session

MyBatis 查询

  • 实体映射
  • 字段映射 - resultMap
  • 传参 - 单个参数
  • 传参 - 多个参数
  • 打印 SQL 语句
  • 多表关联查询 - resultType

MyBatis - 增删改、动态SQL

【Java从0到架构师】MyBatis - 增删改、动态 SQL

动态 SQL

  • if 标签
  • where 标签
  • sql 标签
  • foreach 标签

typeAliases 标签

添加

  • 主键设置
  • 批量添加 - 利用 foreach 标签

更新

删除

  • 批量删除 - 利用 foreach 标签

MyBatis - 连接池、分页_PageHelper

【Java从0到架构师】MyBatis - 连接池、分页_PageHelper

集成 druid 连接池

  • 读取外部的配置文件

分页查询 - PageHelper

  • PageHelper 环境配置
  • PageHelper 使用方法

MyBatis - 多表查询_延迟加载

【Java从0到架构师】MyBatis - 多表查询_延迟加载

多表关系

  • 一对一
    association 标签 + JOIN 实现一对一
  • 一对多 \ 多对一
    collection 标签 + LEFT JOIN 实现一对多
  • 多对多
    多对多的本质:双方都是一对多的关系

延迟加载

  • 全局延迟加载开关
  • 延迟加载示例

MyBatis - 缓存_构造方法

【Java从0到架构师】MyBatis - 缓存_构造方法

缓存

  • 一级缓存 - SqlSession
  • 二级缓存
    • 开启二级缓存
    • useCache - 是否开启二级缓存
    • lushCache - 是否需要清楚缓存

指定构造方法

  • XML 中指定构造方法
  • 注解指定构造方法

MyBatis - dao

【Java从0到架构师】MyBatis - dao

使用 MyBatis 实现 dao 层的几种方式

自定义实现类,XML 实现 dao 层

只定义接口类,getMapper + XML 实现 dao 层

只定义接口类,getMapper + 注解实现 dao 层

  • @Select、@Insert、@Update、@Delete、@SelectKey
  • @Param、@Options、@CacheNamespace
  • @Results、@ResultMap、@One、@Many
  • @ConstructorArgs、@Arg
  • script

------------------------------------

Spring - IoC 控制反转、DI 依赖注入

【Java从0到架构师】Spring - IoC 控制反转、DI 依赖注入

Spring 简介

Spring 基本使用 - IoC 容器

依赖注入 (Dependency Injection)

  • 基于 setter 的注入 - 自定义对象 bean
  • 基于 setter 的注入 - 基本类型、String、BigDecimal
  • 基于 setter 的注入 - 数组、集合类型
  • 基于 setter 的注入 - properties
  • 基于 constructor 的注入 - 基本类型、String、BigDecimal
  • 基于 constructor 的注入 - 自定义对象 bean
  • 基于 constructor 的注入 - 集合类型

Spring - 复杂对象、Converter

【Java从0到架构师】Spring - 复杂对象、Converter

创建过程比较复杂的对象

  • 实例工厂
  • 静态工厂
  • FactroyBean
  • 引入外部配置文件
  • SpEL表达式
  • scope - 控制 bean 是否单例

Converter

  • Spring 内置基本的类型转换功能
  • 自定义 Converter

Spring - 整合 MyBatis

【Java从0到架构师】Spring - 整合 MyBatis

整合 MyBatis - 依赖

整合 MyBatis - 数据源

整合 MyBatis - SqlSessionFactoryBean

整合 MyBatis - MapperScannerConfigurer

完整配置文件

Spring - 生命周期、代理

【Java从0到架构师】Spring - 生命周期、代理

bean 的生命周期

代理

  • 业务层的一些问题
  • 静态代理 (Static Proxy)
  • 动态代理 (Dynamic Proxy)
    JDK 动态代理 - Proxy.newProxyInstance
    CGLib 动态代理 - Enhancer、MethodInterceptor

Spring - AOP

【Java从0到架构师】Spring - AOP

AOP 编程使用

  • AOP - MethodBeforeAdvice
  • AOP - MethodInterceptor

AOP - 动态代理的底层实现

  • AOP - 切入点表达式
  • AOP - 目标方法相互调用的细节
  • AOP - 配置多个 pointcut、advisor

Spring - 事务管理

【Java从0到架构师】Spring - 事务管理

声明式事务

  • propagation - 设置事务传播行为
  • read-only - 告诉数据库该事务只读
  • timeout - 超时抛出异常
  • rollback-for、no-rollback-for - 异常回滚
  • isolation - 设置事务的隔离级别

Spring - 注解

【Java从0到架构师】Spring - 注解

读取多个配置文件
注解实现 bean 标签 - @Component、@Component-scan
注解实现注入 - @Autowired、@Value、@PropertySource
注解实现 AOP

  • 复用切入点 - @Pointcut

注解实现事务管理

@Configuration、@Bean

  • @Bean 方法的注入 - bean
  • @Bean 方法的注入 - FactoryBean
  • @Bean 方法的注入 - 其他类型

创建工厂的入口

bean 的创建方式总结

------------------------------------

SpringMVC - 基础

【Java从0到架构师】SpringMVC - 基础

SpringMVC - 入门

  • web.xml 配置 DispatcherServlet
  • appliactionContext.xml
  • 新建 Controller

SpringMVC - 基础

  • 请求参数 - @RequestParam
  • 请求路径变量 - @PathVariable
  • 利用反射获取参数名
  • 乱码处理 - GET、POST 请求参数乱码
  • 乱码处理 - 响应数据乱码
  • Servlet 的 url 匹配 - 3 种
  • Tomcat 中默认的 Servlet
  • 静态资源被拦截的解决方案 - 2种

SpringMVC - 返回值

【Java从0到架构师】SpringMVC - 返回值
controller 中的返回值

  • 无返回值 - 使用原始的 Servlet 的方法
  • 普通文本、HTML - 设置响应头 Content-Type
  • XML - 推荐使用 jaxb
  • JSON - 框架中已经集成 jackson

jsp 相关

  • 转发 - ModelAndView、String
  • 路径问题总结(Java、Html)
  • 重定向 - “redirect:”
  • mvc:view-controller - 配置请求路径和 viewName
  • InternalResourceViewResolver - 设置视图的公共前缀、后缀
    忽略 InternalResourceViewResolver
    自定义 InternalResourceViewResolver
  • @ResponseStatus - 设置响应码

SpringMVC - 特殊的请求参数

SpringMVC - 特殊的请求参数

集合类型 - Map、List、Set、String[]

Multipart 参数 - multipartResolver

  • 文件参数 - MultipartFile
  • 多文件参数 - MultipartFile[]、List<>
  • CommonsMultipartResolver 的常用属性

日期类型

  • @DateTimeFormat
  • Converter

SpringMVC - 异常处理_拦截器

【Java从0到架构师】SpringMVC - 异常处理_拦截器

异常处理

  • 简单的异常与页面映射 - SimpleMappingExceptionResolver
  • √自定义异常处理类 - 实现 HandlerExceptionResolver 接口
  • @ExceptionHandler
  • √@ExceptionHandler + @ControllerAdvice

拦截器 (Interceptor)

  • 实现 HandlerInterceptor 接口
  • 配置拦截器
  • 方法解析 preHandle、postHadnle、afterCompletion
  • SpringMVC 的执行流程 - 源码跟踪
    doDispatch 核心流程

SpringMVC - RESTful

【Java从0到架构师】SpringMVC - RESTful

  • RESTful 风格的实践建议
  • 关于 put、delete
  • @RestController

SSM 整合(XML、纯注解)

【Java从0到架构师】SSM 整合(XML、纯注解)

父子容器

  • 父子容器的配置文件建议
  • 子容器的加载创建
  • 父容器的加载创建

MyBatis 补充

  • mybatis-config.xml

Maven 补充

SSM 整合 - 纯注解

  • Initializer 取代 web.xml
  • SpringConfig
  • SpringMVCConfig
    Interceptor - 添加拦截器
    ViewResolver - 添加视图解析器
    MultipartResolver - 添加 multipart 参数解析
    Converter - 类型转换器
    MessageConverters - 解决编码问题
    DefaultServletHandler

------------------------------------

Maven - 依赖冲突、分模块构建项目

【Java从0到架构师】Maven - 依赖冲突、分模块构建项目

依赖冲突

  • 解决方案 - dependencyManagement
  • 自定义属性

分模块构建项目

  • 继承 - parent
  • 聚合 - modules
  • 依赖 - dependency

各模块的分工 - 以层来划分

  • 父模块:全局定义
  • dao 模块:定义 dao 类、Model 类等
  • service 模块:定义 service 类等
  • web 模块:定义 controller 类等
  • optional

SpringBoot - 入门_配置文件_YAML

【Java从0到架构师】SpringBoot - 入门_配置文件_YAML

SpringBoot - 入门

  • @SpringBootApplication
  • 可运行 jar - spring-boot-maven-plugin
  • 热部署 - devtools

配置文件 - application

  • 运行参数、VM 选项
  • 配置文件的内容
  • YAML
  • 提高开发效率的依赖
  • 属性绑定 - @ConfigurationProperties]
  • 构造方法绑定 - @ConstructorBinding
  • 宽松绑定 (Relaxed Binding) - 概念
  • 拆分配置文件
  • banner

SpringBoot - 页面模版_Thymeleaf

【Java从0到架构师】SpringBoot - 页面模版_Thymeleaf

集成 JSP

集成 Thymeleaf

Thymeleaf 基本语法

  • 注释 - 3 种
  • 字面量 - ${}、[[ ${} ]]
  • 局部变量 - th:with、三目运算
  • 选中变量表达式 - *{}
  • 消息表达式 - #{}
  • 链接表达式 - @{}
  • 条件判断 - th:if、th:unless、th:switch
  • 遍历 - th:each
  • block - th:block
  • 属性设置 - th:attr
  • 内置对象
  • 视图映射 - WebMvcConfigurer

SpringBoot - MyBatis

【Java从0到架构师】SpringBoot - MyBatis

集成 MyBatis

  • 引入依赖
  • 数据源配置 - 源码
  • MyBatis 配置 - 源码
  • 扫描 Dao
  • MyBatis 主配置 - XML、注解、application
    XML配置
    注解
    application

starter 的命名规范

日志处理 - Log4j 1.x

【Java从0到架构师】日志处理 - Log4j 1.x

Java 日志处理的发展史

Log4j 1.x

  • 日志级别 - 6种
  • pattern - 输出格式

Log4j 1.x - properties

  • 子Logger
  • Appender - 控制日志的输出目标
  • ConsoleAppender - 将日志输出到控制台
  • FileAppender - 将日志输出到文件(单个)
  • RollingFileAppender - 将日志输出到文件(滚动)
  • DailyRollingFileAppender - 根据日期格式将日志输出到文件(滚动)

Log4j 1.x - XML

  • Filter - 让 Appender 在 Logger 的基础上过滤日志信息

日志处理 - SLF4J、Logback、Log4j 2.x

【Java从0到架构师】日志处理 - SLF4J、Logback、Log4j 2.x

SLF4J + Log4j 1.x

SLF4J + Logback

  • Logback - 配置文件
  • Logback - 控制台彩色打印
  • Logback - configuration
  • Logback - Appender 控制日志输出位置
  • Logback - Filter 在 Logger 基础上过滤日志输出信息
  • Logback - AsyncAppender 将写日志变为异步操作

Log4j 2.x

  • Log4j 2.x - 配置文件
  • Log4j 2.x - 控制台彩色打印
  • Log4j 2.x - Filter
  • Log4j 2.x - Appender
    滚动策略 - Delete
  • Log4j 2.x - Loggers
  • Log4j 2.x - Async

SLF4J + Log4j 2.x

日志处理 - 复杂的日志系统、SpringBoot 集成日志框架

【Java从0到架构师】交错的日志系统、SpringBoot 集成日志框架

交错复杂的日志系统① - 多个项目实现 SLF4J 门面

交错复杂的日志系统② - 统一底层实现为 Logback

交错复杂的日志系统③ - 统一底层实现为 Log4j 2.x

  • 解决方案1
  • 解决方案2

日志依赖总结

SpringBoot 集成日志框架

  • SpringBoot 集成 Logback
  • SpringBoot 集成 Log4j 2.x
  • SpringBoot 的 logging 配置 (application)

SpringBoot - SpringMVC

【Java从0到架构师】SpringBoot - SpringMVC

SpringMVC 的配置

文件上传功能

文件下载 - 以附件形式下载

静态资源访问

  • 静态资源访问 - 映射
  • 静态资源访问 - webjars

------------------------------------

项目实战 - 驾考(旧)- Freemarker、MyBatis-Plus

【Java从0到架构师】项目实战 - 驾考(旧)- Freemarker、MyBatis-Plus

项目实战 - 前后端分离、后端校验、Swagger

【Java从0到架构师】项目实战 - 前后端分离、后端校验、Swagger

项目实战 - 会话管理、EhCache、JWT、权限管理 Shiro、打包部署

【Java从0到架构师】项目实战 - 会话管理、EhCache、JWT、权限管理 Shiro、打包部署

------------------------------------

git 入门和基本应用

【Java从0到架构师】git 入门和基本应用

git 核心原理和分支管理

【Java从0到架构师】git 核心原理和分支管理

------------------------------------

Linux 基础知识、常用命令

【Java从0到架构师】Linux 基础知识、常用命令

Linux 管理 - Vi 编辑器、权限管理、系统服务管理、网络管理

【Java从0到架构师】Linux 管理 - Vi 编辑器、权限管理、系统服务管理、网络管理

Liunx 应用 - 软件包管理、软件安装

【Java从0到架构师】Linux 应用 - 软件包管理、软件安装

第四阶段:高级互联网架构师

Zookeeper - 系统高可用、分布式的基本概念、Zookeeper 应用场景

【Java从0到架构师】Zookeeper - 系统高可用、分布式的基本概念、Zookeeper 应用场景

Zookeeper - 安装、核心工作机制、基本命令

【Java从0到架构师】Zookeeper - 安装、核心工作机制、基本命令

Zookeeper 应用 - Java 客户端操作、服务器动态感知、分布式锁业务处理

【Java从0到架构师】Zookeeper 应用 - Java 客户端操作、服务器动态感知、分布式锁业务处理

------------------------------------

Redis 基础 - 数据类型

【Java从0到架构师】Redis 基础 - 数据类型

Redis 进阶 - pipline、发布订阅、Bitmap、HyperLogLog、GEO

【Java从0到架构师】Redis - 进阶(pipline、发布订阅、Bitmap、HyperLogLog、GEO)

Redis 进阶 - 持久化(RBD、AOF)、高可用(主从复制、哨兵机制、Cluster)

Redis - 持久化(RBD、AOF)、高可用(主从复制、哨兵机制、Cluster)

Redis 应用 - Jedis 基本使用、使用缓存的用户登陆、缓存常见问题

【Java从0到架构师】Redis 应用 - Jedis 基本使用、使用缓存的用户登陆、缓存常见问题

------------------------------------

Nginx 基础 - 环境搭建、常用配置(反向代理、负载均衡、动静分离)

【Java从0到架构师】Nginx 基础 - 环境搭建、常用配置(反向代理、负载均衡、动静分离)

Nginx 拓展 - HTTPS支持、缓存、Http请求防盗链、限流、高可用(Keepalived)

【Java从0到架构师】Nginx 拓展 - HTTPS支持、缓存、Http请求防盗链、限流、高可用(Keepalived)

------------------------------------

分布式框架通信核心基础 - 序列化(JDK、Protobuf)、远程过程调用 RMI

【Java从0到架构师】分布式框架通信核心基础 - 序列化(JDK、Protobuf)、远程过程调用 RMI

Dubbo 基础 - 设置启动时检查、直接提供者、线程模型、负载均衡、集群容错、服务降级

【Java从0到架构师】Dubbo 基础 - 设置启动时检查、直接提供者、线程模型、负载均衡、集群容错、服务降级

------------------------------------

RocketMQ 基础 - 应用、核心组件、安装

【Java从0到架构师】RocketMQ 基础 - 应用、核心组件、安装

RocketMQ 使用 - 发送消息、接收消息、特殊消息

【Java从0到架构师】RocketMQ 使用 - 发送消息、接收消息、特殊消息

RocketMQ 使用 - 集成 SpringBoot

【Java从0到架构师】RocketMQ 使用 - 集成 SpringBoot

------------------------------------

SpringCloud - Eureka、Ribbon、Feign

【Java从0到架构师】SpringCloud - Eureka、Ribbon、Feign

SpringCloud - Hystrix、Zuul

【Java从0到架构师】SpringCloud - Hystrix、Zuul

SpringCloud - Sleuth、Zipkin、Config

【Java从0到架构师】SpringCloud - Sleuth、Zipkin、Config

  • 17
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌宅鹿同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值