面试简答

5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 
在switch(expr1)中,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。 


10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:


 final StringBuffer a=new StringBuffer("immutable");
执行如下语句将报告编译期错误:


a=new StringBuffer("");
但是,执行如下语句则可以通过编译:


a.append(" broken!"); 


 


11、"=="和equals方法究竟有什么区别?


记住,字符串的比较基本上都是使用equals方法。
这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。


12、静态变量和实例变量的区别? 
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
 


说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly。


作用域    当前类 同一package 子孙类 其他package 


public    √     √          √       √ 


protected  √     √          √      × 


friendly   √     √          ×      × 


private    √     ×          ×      × 




说说has a与is a的区别。


答:is-a表示的是属于得关系。比如兔子属于一种动物(继承关系)。


         has-a表示组合,包含关系。比如兔子包含有腿,头等组件;






4.在oracle数据库中需要查询出前8条记录的sql语句怎么写?
select * from tableName order by columnName where rowNum <= 8 




新题目:编程:1.编写一个函数将一个十六进制数的字符串参数转换成整数返回。


      
可以用Integer.parseInt(str,16),但面试官很可能是想考我们的编码基本功。






4、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承具体类。抽象类中可以有静态的main方法。
只有记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。




面向对象的编程语言有封装、继承 、多态 ,抽象 等4个主要的特征。


7、java中实现多态的机制是什么? 
靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象


8、abstract class和interface有什么区别?     




1.抽象类可以有构造方法,接口中不能有构造方法。


2.抽象类中可以有普通成员变量,接口中没有普通成员变量


3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的


5. 抽象类中可以包含静态方法,接口中不能包含静态方法


7. 一个类可以实现多个接口,但只能继承一个抽象类。




14. jdk中哪些类是不能继承的?
不能继承的是类是那些用final关键字修饰的类。一般比较基本的类型或防止扩展类无意间破坏原来方法的实现的类型都应该是final的,在jdk中System,String,StringBuffer等都是基本类型。


2、String是最基本的数据类型吗? 
基本数据类型包括byte、int、char、long、float、double、boolean和short。 


java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类




5、String 和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,。String类表示内容不可改变的字符串。而StringBuffer类表示内容可以被修改的字符串。
 


8.StringBuffer与StringBuilder的区别
  StringBuffer和StringBuilder类都表示内容可以被修改的字符串,StringBuilder是线程不安全的,运行效率高。


3、如何把一段逗号分割的字符串转换成一个数组?
如果不查jdk api,我很难写出来!我可以说说我的思路:
       用正则表达式,代码大概为:String [] result = orgStr.split(“,”);


 


38、数组有没有length()这个方法? String有没有length()这个方法? 
数组没有length()这个方法,有length的属性。String有有length()这个方法。
 


5、运行时异常与一般异常有何异同? 
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。


15、error和exception有什么区别? 
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 




33、请写出你最常见到的5个runtime exception。 


它们都是RuntimeException的子类,:NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException。
池创建多线程的方式:




有两种实现方法,分别是继承Thread类与实现Runnable接口 


用synchronized关键字修饰同步方法 


反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,suspend()方法容易发生死锁。 


13、sleep() 和 wait() 有什么区别? 
     (网上的答案:sleep是线程类(Thread)的方法,,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。


 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。) 


 


16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 


当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 
 
3、Collection框架中实现比较要实现什么接口
comparable/comparator


3、ArrayList和Vector的区别
答:
这两个类都实现了List接口,他们都是有序集合,
 
接着才说ArrayList与Vector的区别,这主要包括两个方面:. 


 Vector是线程安全的,而ArrayList是线程序不安全的
 数据增长:即Vector增长原来的一倍,ArrayList增加原来的0.5倍。


4、HashMap和Hashtable的区别


HashMap非线程安全的实现,在只有一个线程访问的情况下,效率要高于Hashtable。 


HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。  


5、List 和 Map 区别?
一个是存储单列数据的集合,另一个是存储键和值这样的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。




109、List、Map、Set三个接口,存取元素时,各有什么特点? 


List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。


 


7、说出ArrayList,Vector, LinkedList的存储性能和特性 
ArrayList和Vector都是使用数组方式存储数据,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,所以插入速度较快。


 


4、去掉一个Vector集合中重复的元素 


还有一种简单的方式,HashSet set = new HashSet(vector); 


39、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 
Set里的元素是不能重复的,元素重复与否是使用equals()方法进行判断的。 


   equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。




对于set,大概的方法是add,remove, contains;
对于map,大概的方法就是put,remove,contains
List类会有get(int index)这样的方法,因为它可以按顺序取元素,而set类中没有get(int index)这样的方法。
 


常用的类:BufferedReader  BufferedWriter  FileReader  FileWirter  String  Integer 


java.util.Date,System,Class,List,HashMap


 


常用的包:java.lang   java.io  java.util  java.sql ,javax.servlet,org.apache.strtuts.action,org.hibernate


常用的接口:Remote  List  Map  Document  NodeList ,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)、Session(Hibernate),HttpSession




54、描述一下JVM加载class文件的原理机制? 
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。 
 


103、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。 


101、java中会存在内存泄漏吗,请简单描述。 
所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。
java中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,
    无用,无法回收。


1、说明生活中遇到的二叉树,用java实现二叉树
这是组合设计模式。


我有很多个(假设10万个)数据要保存起来,以后还需要从保存的这些数据中检索是否存在某个数据,(我想说出二叉树的好处,该怎么说呢?那就是说别人的缺点),假如存在数组中,那么,碰巧要找的数字位于99999那个地方,那查找的速度将很慢,因为要从第1个依次往后取,取出来后进行比较。平衡二叉树(构建平衡二叉树需要先排序,我们这里就不作考虑了)可以很好地解决这个问题,但二叉树的遍历(前序,中序,后序)效率要比数组低很多,原理如下图:




5. html&JavaScript&ajax部分




1. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。
<body>






<script type="text/javascript">


   window.οnlοad=function()


        {


               var tbl = document.getElementById("tbl");


               rows = tbl.getElementsByTagName("tr");


               for(i=0;i<rows.length;i++)


               {


                      var j = parseInt(i/3);


                      if(j%2==0) rows[i].style.backgroundColor="#f00";


                      else  rows[i].style.backgroundColor="#0f0";


               }


        }


</script>


1、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则的话提示用户并终止提交? 
<form οnsubmit=’return chkForm(this)’>


<input type="text" name="d1"/>


<input type="submit"/>


</form>


<script type=”text/javascript” />    


function chkForm(this)


       { 


              var value = thist.d1.value;


              var len = value.length;


              for(var i=0;i<len;i++)


              {


                     if(value.charAt(i)>"9" || value.charAt(i)<"0")


                     {


                            alert("含有非数字字符");


                            return false;


                     }


              }


              return true;


       }


</script>


1、说一说Servlet的生命周期? 


Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doGet或doPost,当服务器决定将实例销毁的时候调用其destroy方法。 


 


60、什么情况下调用doGet()和doPost()? 
Jsp页面中的FORM标签里的method属性为get时调用doGet(),为post时调用doPost()。 


 


66、Request对象的主要方法: 
setAttribute(String name,Object):设置名字为name的request的参数值 
getAttribute(String name):返回由name指定的属性值 
getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组 
getSession([Boolean create]):返回和请求相关Session 




19、forward 和redirect的区别 
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,所以它的地址栏中还是原来的地址。 


   redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。


4、request.getAttribute() 和 request.getParameter() 有何区别?


request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取http提交过来的数据。 一般是string型用request.getParameter 对象的引用用request.getAttribute 








1. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 
答:JSP共有以下9个内置的对象: 


request 用户端请求,此请求会包含来自GET/POST请求的参数 


response 网页传回用户端的回应 


pageContext 网页的属性是在这里管理 


session 与请求有关的会话期 


application servlet 正在执行的内容 


out 用来传送回应的输出 


config servlet的构架部件 


page JSP网页本身 


exception 针对错误网页,未捕捉的例外 


 






request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。 


   response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等) 


   out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 


   pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 


   session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息 


   applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 


   config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 


   page表示从该页面产生的一个servlet实例 


 


2. jsp有哪些动作?作用分别是什么? 


答:JSP共有以下6种基本动作 


jsp:include:在页面被请求的时候引入一个文件。 


jsp:useBean:寻找或者实例化一个JavaBean。 


jsp:setProperty:设置JavaBean的属性。 


jsp:getProperty:输出某个JavaBean的属性。 


jsp:forward:把请求转到一个新的页面。 


jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记


59、JSP的常用指令 
isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式) 


 


3. JSP中动态INCLUDE与静态INCLUDE的区别? 
答:动态INCLUDE用jsp: 它总是会检查所含文件中的变化,并且可以带参数 会有三个servlet 运行时包含


静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面 <%@ include file=included.htm %> 


63、页面间对象传递的方法 
request,session,application,cookie等 


64、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 
JSP是Servlet技术的扩展,本质上是Servlet的简易方式
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。 




2、Class.forName的作用?为什么要用? 
答:按参数中指定的字符串形式的类名去搜索并加载相应的类
有时候,我们程序中所有使用的具体类名在开发时无法确定,只有程序运行时才能确定,这时候就需要使用Class.forName去动态加载该类,
 


36、说出数据连接池的工作机制是什么? 
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。 




8. XML部分
70、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 
a: 两种形式 dtd  schema,b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的),c:有DOM,SAX,STAX等 


        DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问 


SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问 


1、谈谈你对Struts的理解。
1. struts是一个按MVC模式设计的Web层框架,它通过接受一个客户端的请求,然后依据配置文件来判断由哪个Action来处理和存储数据,在把对象传递给action的execute方法之前,可能会调调用validate方法进行校验,最后通过Action的返回值来判断应该由哪个jsp来展示数据






2、谈谈你对Hibernate的理解。


Hibernate就是其中的一种流行ORM框架。使用Hibernate框架,不用写JDBC代码,仅仅是调用一个save方法,就可以将对象保存到关系数据库中,仅仅是调用一个get方法,就可以从数据库中加载出一个对象。使用Hibernate的基本流程是:配置Configuration对象、产生SessionFactory、创建session对象,启动事务,完成CRUD操作,提交事务,关闭session。在应用Hibernate时,重点要了解Session的缓存原理,级联,延迟加载和hql查询。




3、你对Spring的理解。
IOC
把创建和查找依赖对象的控制权交给了容器,由容器进行注入,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。






3. *****什么是AOP(学员注:会用,但感觉说不清楚)
它是把系统的一个方面的功能封装成对象的形式来处理,把功能模块对应的对象作为切面嵌入到原来的各个系统模块中,采用代理技术,代理会调用目标,同时把切面功能的代码(对象)加入进来,比如记录日志,统一异常处理,事务处理,权限检查,这些功能都是软件系统的一个面,




12、Struts优缺点 
优点: 
 1. 实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现.


2.有丰富的tag可以用 ,Struts的标记库(Taglib),如能灵活动用,则能大大提高开发效率


3. 页面导航
4. 提供Exception处理机制 . 


5. 数据库链接池管理 


110、说说struts1与struts2的区别。
4.struts1的前端控制器是ActionServlet,struts2的前端控制器是一个filter


6.在struts1中使用formbean封装请求参数,在struts2中直接使用action的属性来封装请求参数。


7.与Struts1不同,Struts2对用户的每一次请求都会创建一个Action,所以Struts2中的Action是线程安全的。 


9、hibernate的inverse属性的作用?
inverse 即不维护关联关系,属性默认是false,若为false,则关联由自己控制,若为true,则关联
由对方控制。


8.介绍一下Hibernate的二级缓存




(2)Hibernate的Session就是Hibernate的一级缓存,当想使用session从数据库中查询出一个对象时,Session也是先从自己内部查看是否存在这个对象,存在则直接返回,不存在才去访问数据库,
并将查询的结果保存在自己内部。由于Session代表一次会话过程,所以Session最好不要长时间保持打开,。并且Session是线程不安全的,被多个线程共享时容易出现问题,因此,Hibernate的Session这一级缓存的应用价值不大。Hibernate的二级缓存就是要为Hibernate配置一种全局缓存,让多个线程和多个事务都可以共享这个缓存。


(3)二级缓存是独立于Hibernate的软件部件,属于第三方的产品。
 


2、应用服务器与WEB SERVER的区别?
应用服务器:Weblogic、Tomcat、Jboss 


WEB SERVER:IIS、 Apache 




95、请对以下在J2EE中常用的名词进行解释(或简单描述) 
web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。 




JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。 
 


12. ejb部分
3、EJB与JAVA BEAN的区别? 
由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。它是不能被跨进程访问的。


EJB可以被远程访问(跨进程、跨计算机)。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。 


31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的? 
SessionBean:Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例。 


EntityBean:Entity Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理。 




78、EJB的几种类型 
会话(Session)Bean ,实体(Entity)Bean 消息驱动的(Message Driven)Bean 


会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种 




13. webservice部分
4、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。
Web ServiceWeb Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。 


65、四种会话跟踪技术 
会话作用域ServletsJSP 页面描述 


page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面 


request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系) 


session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求 


application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域 


69、简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。 
区别主要答两点:a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型 


b.逻辑操作不会产生短路 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值