携程系统架构师带你手写spring mvc,解读spring核心源码!

面试手撕代码篇:手写模拟SpringBoot核心流程 面试这种场合,大家最怕的就是面试官让我们现场手撕代码,让你写点“平时压根不写”的问题——比如:就像领导站在你的背后,让你快点写,但是你却需要百度一下的窘迫。这不,最近就有小伙伴再面试过程中遇到了这道堪称难得一遇的面试题。想要回答好这个问题,我们首先要明白面试官想要通过这道题考核我们哪方面的能力所以如果我们实在写不出来,也可以把SpringBoot的核心启动流程、自动配置流程说一下,也是很好的加分项下面小北就通过手写模拟实现一个Spring Boot,让大家能以非常简单的方式就能知道Spring Boot大概 阅读详情

讲师简介:

James老师

系统架构师、项目经理

十余年Java经验,曾就职于携程、人人网等一线互联网公司,专注于java领域,精通软件架构设计,对于高并发、高性能服务有深刻的见解, 在服务化基础架构和微服务技术有大量的建设和设计经验。

13467292-78e53d9b0c902e3a

课程内容:

1.为什么读Spring源码?

如果你是一名JAVA开发人员,你一定用过Spring Framework。

作为一款非常经典的开源框架,从2004年发布的1.0版本到现在的5.0版本,经历了14年的洗礼, 持久不衰

与其说现在是JAVA的天下, 不如说是Spring的天下

2.Spring源码的核心组件

IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖

AOP面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术

3.手写SpringMVC之前的那些事

@Controller, @Service 注解是什么

DispatcherServlet原理与机制

4.手写SpringMVC实战

13467292-31205e0a86c3853d

5.互联网架构树

13467292-82762f866a019881

那些能拿高薪的技术,你又知道多少?

13467292-25aacc6fa0c657ff

架构师筑基

13467292-28d9864eb1e1b057

开源框架

13467292-fe4628237b97dc70

高性能

13467292-00b10ef6a3efa2c8

微服务

13467292-3eb73fe23be10034

团队开发

13467292-4fc869d14a07ac3f

B2C商城

13467292-dc4fcf9c11160617

资料获取方式

加群:923116658

点击链接加入群聊【Java架构解析】:https://jq.qq.com/?_wv=1027&k=5e1QsXb

Spring源码——Spring MVC 前言 内容主要参考自《Spring源码深度解析》一书,算是读书笔记或是原书的补充。进入正文后可能会引来各种不适,毕竟阅读源码是件极其痛苦的事情。 本文主要涉及书中第十一章的部分,依照书中内容以及个人理解对Spring源码进行了注释,详见Github仓库:https://github.com/MrSorrow/spring-framework Spring框架提供了构建Web应用程序的全功能MVC模... 阅读详情

相关推荐

Spring MVC核心源码深度解析与架构实战

Spring MVC基于经典的MVC(Model-View-Controller)架构模式,通过职责分离实现Web层的高内聚低耦合。其中,Model承载业务数据,View负责渲染展示,Controller处理请求调度与流程控制。这种分层结构使得各组件可独立演化,提升代码可维护性。// 数据与视图解耦上述代码体现了Spring MVC对MVC模式的编程抽象:控制器返回对象,将模型数据与逻辑视图名分离,交由后续视图解析器动态决定渲染方式。是。

weixin_28681379的博客 315

扩展Spring的几种方式

1. 背景介绍 Spring现在几乎已经成为了Java开发的必备框架,在享受Spring框架本身强大能力的同时,有时我们也会希望自己研发的组件和Spring进行整合,从而使得组件更易于上手,而且配合Spring使用能发挥更强大的作用。 Apollo配置中心的Java客户端在前一段时间也提供了和Spring整合的功能,详细代码改动可以参考PR543。 Apollo既支持传统的基于XML的...

papamilk的博客 2073

中国传媒大学计算机考研初复试经验贴

中传的计算机专业考研的话主要分为两大学院:计网学院和国重,大部分专业在计网学院。

DoKiDoK的博客 1561

springboot2.0整合apollo

https://blog.youkuaiyun.com/aaronsimon/article/details/83657612

qq_32814555的博客 1389

tiny4412用 usb 连接计算机显示sec s5pc210 test b/d 解决方法

当我用USB线连接tiny4412的microUSB端口的时候,出现了驱动没有正常安装,显示“sec s5pc210 test b/d” 出现这种问题的原因有: 1、没有安装到正确的USB驱动; 2、SD卡没有插好 我出现问题的原因属于第二种,插入SD卡后,上电后,LCD屏亮了,但没有任何显示   解决方法是:     更换一张SD卡,重新插入开发板卡槽,上电开

karaskass的博客 3231

Qt (高仿Visio)流程图组件开发(一) 效果展示及基本开发框架构思

最近因为工作原因需要使用Qt开发一个类似于Visio的流程图组件,需满足基本的流程图功能,图元类型可自定义扩展,不同图元存有各类自定义数据,可以保存为xml文件,可以读取xml文件生成流程图等等。

qq_43793182的博客 1万+

19.Spring源码解读之简单手写spring框架

1.Spring底层源码解读课程安排2.Springxml、注解实现IOC区别3.简单模拟手写出xml方式实现IOC4.简单模拟手写出注解方式实现IOC。

陌陌龙的博客 473

【SAP ME 3】JAVA 调用SAP PO WebService

Java调用SAP PO/PI WebService接口

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 847

MyBatisPlus与Spring MVC集成源码解读

本文深入解析MyBatisPlus与Spring Boot的集成原理,重点剖析自动配置机制和Mapper扫描机制。通过自动配置类MybatisPlusAutoConfiguration实现数据源、SqlSessionFactory等核心组件的自动装配,同时借助@MapperScan注解完成Mapper接口的扫描与代理生成。文章提供了完整的集成示例,包括项目搭建、配置文件设置、Mapper接口定义以及业务层实现,帮助开发者快速掌握集成方法并解决常见问题。

fykam的博客 1169

Linux系统中u-boot启动流程分析(详解)

代码部分,具体如下;

嵌入式技术开发 1992

MATLAB应用实战系列(四十三)-基于MATLAB的光伏并网系统仿真设计

在Matlab中建立光伏电站接入系统模型,包括光伏发电逆变器及负荷模型等,仿真分析接入点处的电能质量,实现高品质并网运行。 壹 构建太阳能电池模型。 初始化参数如下图所示。 贰 构建MPPT控制模型。 具体封装如下所示: 通过PWM算法实现DC-DC稳步输出最大点。 叁 三、构建直流短距离输电线路。 仿真模型如下图: 通过电容来均衡线路电压,使得线路电压保持可靠性。 肆 通过逆变器变换,使得直流线路转换成...

wenyusuran的专栏 3169

springmvc 上传文件大小配置_T5大牛带你解读Spring核心源码—一小时手写SpringMVC!...

SpringMVC简介SpringMVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对Struts 2的超越。现在越来越多的开发团队选择了Spring MVC。Spring为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一Spring3.0后全面超越Struts2,成为最优...

weixin_35251837的博客 145

从零搭建 C# + YOLO 工业视觉系统:从模型训练到上位机部署(工业级落地)

做工业质检、自动化生产线的同学都懂:一套能用的工业视觉系统,既要“检测准”,又要“界面易操作”,还要“部署稳”。之前帮某电子厂做PCB缺陷检测,一开始用Python+YOLO做检测核心,QT做上位机,结果踩了无数坑:Python推理速度波动大,QT和Python跨语言集成繁琐,数据传递容易卡顿;后来换成C# + YOLO的组合,直接打通了“模型训练-上位机开发-工业部署”全流程——C#的WinForms/WPF开发上位机高效,工业相机SDK支持完善;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 737

Spring MVC 深度解析:原理、源码剖析与实战

在 Spring 体系中,Spring MVC 作为 Web 层的核心框架,承担着请求处理、参数解析、视图渲染等关键任务。Spring MVC(Model-View-Controller)是一种基于。:Spring 事务管理(事务传播、@Transactional 源码分析)构建一个简单的 Spring MVC 应用,并实现。Spring MVC 在启动时,会通过。是 Spring MVC 用于。:每次请求前打印日志,方便调试。,作为 MVC 的中央调度器。Spring MVC 通过。

工一木子 1496

笔试题-2023-乐鑫-数字IC设计【纯净题目版】

笔试题-2023-乐鑫-数字IC设计【纯净题目版】

w0shishabi的博客 1777

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

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

【spring】Spring MVC 类图与源码请求处理流程

类图清晰:DispatcherServlet➡️HandlerMapping➡️HandlerAdapter➡️Controller➡️ViewResolver➡️View来源:DispatcherServlet.doDispatch() 为中心,全流程控制参数解析、消息转换、JSON 支持都是通过策略组件实现结合源码拆解流程,能快速知道每个环节干了啥我精心收集了一份10万字的java全面知识总结,包括了java几乎所有的面试基础解读,有兴趣可以获取看看领取方式。

2401_88055648的博客 1362

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

京东T5大牛1小时手写SpringMVC,带你解读Spring核心源码

讲师简介 James老师 系统架构师、项目经理 十余年Java经验,曾就职于携程、人人网等一线互联网公司,专注于java领域,精通软件架构设计,对于高并发、高性能服务有深刻的见解, 在服务化基础架构和微服务技术有大量的建设和设计经验。 视频内容 为什么读Spri...

weixin_34321753的博客 652

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Spring 机制六: MVC 全链路源码解析:从 DispatcherServlet 到返回值解析(超硬核源码深度)

目标:自动解析 HeaderX-User-Id@Override@Override。

Java、Python、AI、前沿技术等领域的技术总结和经验分享。 5726

Spring解读系列目录

最近因为工作需要笔者从官网从源码中学习了大量的Spring框架的内容,学习过程中发现有些同事对于怎么学习框架非常的迷惑和吃力,花了大量的时间也没有什么好的效果。我相信网上的各位同学一定也有这样的困惑。其实笔者认为学习框架固然枯燥,但是如果有钻研的劲头其实也可以做到很有成就感。看过笔者之前的贴子的同学应该有一个感觉,笔者进行这些理论研读的时候总是喜欢做一些小例子进行辅助理解。其实这也是笔者学习框架的一个特点吧,如果看到一个知识点,笔者会比较倾向把这个知识点模拟出来,然后通过对比大神的源码进一步分析理解,以达到

Smallc0de的博客 2634

Spring MVC Showcase源码分析:深入理解Spring MVC工作原理

Spring MVC Showcase是Spring官方提供的完整示例项目,通过一系列小而精的案例展示了Spring MVC框架的核心功能。这个项目是学习Spring MVC工作原理的终极指南,能够帮助开发者快速掌握Spring MVC的核心机制和最佳实践。🌟 ## 🔍 项目概览与核心价值 Spring MVC Showcase项目位于[src/main/java/org/springfr

gitblog_00384的博客 858

Spring 源码解读专栏:从零到一深度掌握 Spring 框架

Spring 是 Java 世界中无可争议的王者框架,它以其灵活、轻量、强大而著称,成为企业级开发的首选工具。然而,很多开发者在使用 Spring 时,往往只停留在会用的层面,对于其内部实现和设计原理知之甚少。

捕风捉你 · 星桥API接入与大模型实战 1214

Spring MVC 请求执行流程的源码深度解析【两万字】

基于最新Spring 5.x,详细介绍了Spring MVC 请求的执行流程源码,给出了更加详细的Spring MVC请求执行流程步骤总结,以及详细的执行流程图。

终生学习践行者 4587

Spring MVC 跨域(CORS)源码深度解析:从 @CrossOrigin 到 DefaultCorsProcessor 的完整链路

跨域资源共享(CORS)是 Web 开发中绕不开的经典问题。本文以 Spring MVC 的跨域实现为主线,从 `@CrossOrigin` 注解与 `<mvc:cors>` XML 两种配置方式入手,逐层剖析 `MappingRegistry#register`、`initCorsConfiguration`、`CorsBeanDefinitionParser`、`CorsInterceptor

gitblog_00803的博客 1022

从源码角度深度剖析 Spring MVC

Spring MVC 角色划分清晰,分工明细,并且和 Spring 框架无缝结合,Spring MVC 已经成为当前最主流的框架之一。并且随着 Spring3.0 的发布,全⾯超越 Struts2,成为最优秀的 MVC 框架。 但是很多开发者只知道写,但不知道为什么这么写、不知道如何进行优化,这是非常危险的。而且根据我多年的从业经验,Spring MVC 的问题是面试过程中出现的高频考察点,大厂对开发者的源码分析更加看重。 我在这里分享一个,有很多干货,包含jvm,netty,spring,线程,sprin

weixin_50917449的博客 4899

Spring源码探索-核心原理(AOP、MVC)

继承属性、方法的合并等等,我们以最简单的 AOP 切面织入来简单了解其主要的功能。的实现子类非常的多,分别完成不同的操作,如:AOP面向切 面编程的注册通知适配器、到这里代码的织入就完成了,最后就是看一下最后的运行是如何实现的,这里我们可以找一下。是用来渲染页面的,也就是说,它会将程序返回的 参数和数据填入模板中,最终生成。这个就是遍历所有的后置处理器,进行一些代码的织入,比如AOP的代码织入。AOP是在Bean的后置处理器中设置的也就是在初始化Bean的时候(中的参数和方法参数上数据的绑定。

Java技术攻略的博客 209
上一篇: 香格里拉+去哪网Java面试题及总结
下一篇: 千万级并发流量控制策略,分布式场景下的系统限流实战
普通网友
博客等级 码龄8年 55粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值