STAX:Streaming API for XML (StAX) Eak$u>Fd8c
71、简述synchronized和java.util.concurrent.locks.Lock的异同 ? .GPT!lDc
主要相同点:Lock能完成synchronized所实现的所有功能 j?3wvw6T
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。 ~OYiq}g
72、EJB的角色和三个对象 {=9,n\85#
一个完整的基于EJB的分布式计算结构由六个角色组成,这六个角色可以由不同的开发商提供,每个角色所作的工作必须遵循Sun公司提供的EJB规范,以保证彼此之间的兼容性。这六个角色分别是EJB组件开发者(Enterprise Bean Provider) 、应用组合者(Application Assembler)、部署者(Deployer)、EJB 服务器提供者(EJB Server Provider)、EJB 容器提供者(EJB Container Provider)、系统管理员(System Administrator) b;B%q$sntC
三个对象是Remote(Local)接口、Home(LocalHome)接口,Bean类 9IdA%RM~mH
73、EJB容器提供的服务 Wq D4YGN
主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。 K^)Eb(4
74、EJB规范规定EJB中禁止的操作有哪些? D
:4[~A
1.不能操作线程和线程API(线程API指非线程对象的方法如notify,wait等),2.不能操作awt,3.不能实现服务器功能,4.不能对静态属生存取,5.不能使用IO操作直接存取文件系统,6.不能加载本地库.,7.不能将this作为变量和返回,8.不能循环调用。 x$A+lj]x
75、remote接口和home接口主要作用 TPQ%L@^L+
remote接口定义了业务方法,用于EJB客户端调用业务方法。 q5J5>
home接口是EJB工厂用于创建和移除查找EJB实例 r..iko]T
76、bean 实例的生命周期 <[a=ceL]|
对于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在缓冲池管理,而对于Entity Bean和Statefull Session Bean存在Cache管理,通常包含创建实例,设置上下文、创建EJB Object(create)、业务方法调用、remove等过程,对于存在缓冲池管理的Bean,在create之后实例并不从内存清除,而是采用缓冲池调度机制不断重用实例,而对于存在Cache管理的Bean则通过激活和去激活机制保持Bean的状态并限制内存中实例数量。 D#9m\o_
77、EJB的激活机制 8?B!2
以Stateful Session Bean 为例:其Cache大小决定了内存中可以同时存在的Bean实例的数量,根据MRU或NRU算法,实例在激活和去激活状态之间迁移,激活机制是当客户端调用某个EJB实例业务方法时,如果对应EJB Object发现自己没有绑定对应的Bean实例则从其去激活Bean存储中(通过序列化机制存储实例)回复(激活)此实例。状态变迁前会调用对应的ejbActive和ejbPassivate方法。 )` Sr fGp8
78、EJB的几种类型 ^&9zw\x;z
会话(Session)Bean ,实体(Entity)Bean 消息驱动的(Message Driven)Bean +B,}Q r
会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种 IEL%!RFG
实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种
7~G9'P<
79、客服端调用EJB对象的几个基本步骤 !,_u)4
设置JNDI服务工厂以及JNDI服务地址系统属性,查找Home接口,从Home接口调用Create方法创建Remote接口,通过Remote接口调用其业务方法。 p}}R-D&K
80、如何给weblogic指定大小的内存?
i<C*j4qQ
在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以调整最小内存为32M,最大200M @(EAq<5{
81、如何设定的weblogic的热启动模式(开发模式)与产品发布模式? jKz$@gP
可以在管理控制台中修改对应服务器的启动模式为开发或产品模式之一。或者修改服务的启动文件或者commenv文件,增加set PRODUCTION_MODE=true。 V@.Ior}w
82、如何启动时不需输入用户名与密码? 4@+`q *
修改服务启动文件,增加 WLS_USER和WLS_PW项。也可以在boot.properties文件中增加加密过的用户名和密码. //up5R_nx
83、在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中? W 8<&gh+
保存在此Domain的config.xml文件中,它是服务器的核心配置文件。 p%up)]?0
84、说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入http://主机:端口号//helloword.jsp就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean该如何办? rK8lBy:<
Domain目录\服务器目录\applications,将应用目录放在此目录下将可以作为应用访问,如果是Web应用,应用目录需要满足Web应用目录要求,jsp文件可以直接放在应用目录中,Javabean需要放在应用目录的WEB-INF目录的classes目录中,设置服务器的缺省应用将可以实现在浏览器上无需输入应用名。 6%\J"AgXO
85、在weblogic中发布ejb需涉及到哪些配置文件 {LI=:xJJv
不同类型的EJB涉及的配置文件不同,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP实体Bean一般还需要weblogic-cmp-rdbms-jar.xml hk;5w{t}}
86、如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置 f=+mIZ
缺省安装中使用DemoIdentity.jks和DemoTrust.jks KeyStore实现SSL,需要配置服务器使用Enable SSL,配置其端口,在产品模式下需要从CA获取私有密钥和数字证书,创建identity和trust keystore,装载获得的密钥和数字证书。可以配置此SSL连接是单向还是双向的。 9 &dtd
87、如何查看在weblogic中已经发布的EJB? 2"v6
>b%
可以使用管理控制台,在它的Deployment中可以查看所有已发布的EJB /cUO$m o
88、CORBA是什么?用途是什么? aL\PGdgO
CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture),由对象管理组织 (Object Management Group,缩写为 OMG)标准化。它的组成是接口定义语言(IDL), 语言绑定(binding:也译为联编)和允许应用程序间互操作的协议。 其目的为:用不同的程序设计语言书写在不同的进程中运行,为不同的操作系统开发。 7(1|xYCx$
89、说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法 MVpGWTH@F
Session Facade Pattern:使用SessionBean访问EntityBean 1;bh^WMJ
Message Facade Pattern:实现异步调用 B6+khuG(
EJB Command Pattern:使用Command JavaBeans取代SessionBean,实现轻量级访问 *xAqnk
Data Transfer Object Factory:通过DTO Factory简化EntityBean数据提供特性 Uk[b|<U-`d
Generic Attribute Access:通过AttibuteAccess接口简化EntityBean数据提供特性 Qab>|eSm
Business Interface:通过远程(本地)接口和Bean类实现相同接口规范业务逻辑一致性 L]|gZ&^
EJB架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及开发效率。项目越复杂,项目队伍越庞大则越能体现良好设计的重要性。 tH@Erh|%
90、说说在weblogic中开发消息Bean时的persistent与non-persisten的差别 I.(,hFx;
persistent方式的MDB可以保证消息传递的可靠性,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来,而non-persistent方式的消息将被丢弃。 c1(RuP:S
91、Servlet执行时一般实现哪几个方法? ;$, U~ 0
public void init(ServletConfig config) /s&9SYF
public ServletConfig getServletConfig() @f>-^
public String getServletInfo() a@K%06A;'
public void service(ServletRequest request,ServletResponse response) P7bMI e
public void destroy() d UE,U=
92、j2ee常用的设计模式?说明工厂模式。 eI}aQ]$ED
Java中的23种设计模式: =`oCLsz=
Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式), [-1^-bb
Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式), KJUH(]>F
Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式), tPWLg),
Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式), 8.1c?S
Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式), S&5&];Ag
Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式), sjHE/qmq-Z
Observer(观察者模式), State(状态模式), Strategy(策略模式), v|,1[i{
Template Method(模板方法模式), Chain Of Responsibleity(责任链模式) hg]]Ok~cAs
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。 & bm
1Fz
93、EJB需直接实现它的业务接口或Home接口吗,请简述理由。 B N5[,J
远程接口和Home接口不需要直接实现,他们的实现代码是由服务器产生的,程序运行中对应实现类会作为对应接口类型的实例被使用。 |)DGkOtd
94、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。 dh\'<|\K
排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序) 8mrUotjS
快速排序的伪代码。 5X$ jl;6
/ /使用快速排序方法对a[ 0 :n- 1 ]排序 J$DE"|-
从a[ 0 :n- 1 ]中选择一个元素作为m i d d l e,该元素为支点 s-!ArB,
把余下的元素分割为两段left 和r i g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点 QD&`^(X1p
递归地使用快速排序方法对left 进行排序
K=Z|/Kkh
递归地使用快速排序方法对right 进行排序 Z9ZPr?C=
所得结果为l e f t + m i d d l e + r i g h t ?#G$=4;i
95、请对以下在J2EE中常用的名词进行解释(或简单描述) l~q\3UKlt
web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。 T@B/xAq5!
EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。 ,.8KN<A2]'
JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。 :uS\3toj
JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。 ;%9 |kU
JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。 / &5,3rU.G
JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。 !;v|' I
RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。 #$07:UJ
96、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗? Hyl%mJ
Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。 9d659iC
用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。 Ykw*&opz
throw语句用来明确地抛出一个"异常"。 wH&!W~M
throws用来标明一个成员函数可能抛出的各种"异常"。 O"9\5(w
Finally为确保一段代码不管发生什么"异常"都被执行一段代码。 S!CC
}3zw
可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。 s?}e^/"v
97、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? dt]-,Y
可以。必须只有一个类名与文件名相同。 ,/I.t DH
98、MVC的各个部分都有那些技术来实现?如何实现? 8C:z"@ o
MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。 %p=M;
99、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? s~g *@K >+
有两种实现方法,分别是继承Thread类与实现Runnable接口 L|xbR#v
用synchronized关键字修饰同步方法 }@+0/W?\.
反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。 j{A y\n (
100、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? Y eo]]i{
字节流,字符流。字节流继承于InputStream \ OutputStream,字符流继承于InputStreamReader \ OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。 <{cQM$#
101、java中会存在内存泄漏吗,请简单描述。 ?Ep [M:,q
会。如:int i,i2; return (i-i2); //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。 LckK\`mh
102、java中实现多态的机制是什么? =s2*H8]
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。 J=I:CD%
103、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? #OD/$f_
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。 u|TeE\0
104、静态变量和实例变量的区别? )9`qG:b'
static i = 10; //常量 $|@@Qk/T
class A a; a.i =10;//可变 d.d/<
105、什么是java序列化,如何实现java序列化? E
A1?)|}n
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。 IueFx u
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。 [EXs
106、是否可以从一个static方法内部发出对非static方法的调用? "7F?@D$e
不可以,如果其中包含对象的method();不能保证对象初始化. WlC:l
107、写clone()方法时,通常都有一行代码,是什么? g7`LEF <A
Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。 K`zdc`/
108、在JAVA中,如何跳出当前的多重嵌套循环? Hk.TM2{w
用break; return 方法。 z E9W8:7
109、List、Map、Set三个接口,存取元素时,各有什么特点? >W+%8e
List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。 Vaw+.sG`AP
110、J2EE是什么? :>f )g
J2EE是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。 giw &&l=_
111、UML方面 bJ {'<J
标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。 YfKdR"i+.
112、说出一些常用的类,包,接口,请各举5个 L48_96
常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer ,j_i?Ff
常用的包:java.lang java.awt java.io java.util java.sql CxW>~O:
常用的接口:Remote List Map Document NodeList g@!V3V
113、开发中都用到了那些设计模式?用在什么场合? YZ8>OwQz2
每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC的设计模式。用来开发JSP/Servlet或者J2EE的相关应用。简单工厂模式等。 KBc1{adDx@
114、jsp有哪些动作?作用分别是什么? (vJNHY M
JSP共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。 G}raA%
115、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? |3"KK
可以继承其他类或完成其他接口,在swing编程中常用此方式。 xdt-
;w|
116、应用服务器与WEB SERVER的区别? Ka
V8[|Gn,
应用服务器:Weblogic、Tomcat、Jboss =>v#4zFd
WEB SERVER:IIS、 Apache H40p86@M
117、BS与CS的联系与区别。 Kn;"R:
C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。 2eY_%Y0
B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。 6"5A%{J
C/S 与 B/S 区别: Ls$D$/:q?
1.硬件环境不同: "R1NG?;q
C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务. O1U= X:Zl
B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行 $m{:C;UH
2.对安全要求不同 BB!THj69a6
C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息. TA`1U;c{n
B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。 IS{wtuA.
3.对程序架构不同 $=8
NED5
C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑. t~EPn.
B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟. $%CF8\0
4.软件重用不同 rq/yD,I,
C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好. j_!F*yul
B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子 Yz/md1T$
5.系统维护不同 %S@ZXf~:
C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统 Jr
,;>
B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级. D9CaFu
6.处理问题不同 nwB_8mN|
C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统 ?qLFaFt/
B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小. q77;ZPfs8
7.用户接口不同 <EB+1GFuI
C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高 pMx*F@&nU
B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本. b8`)y<