FAQ(JAVA基础二)整理

更新时间:2024-05-05 01:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

JAVA类型(二)

1.java中会存在内存泄漏吗,请简单描述。

答案:会。如:int i,i2; return (i-i2); //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。

2.java中实现多态的机制是什么?

答案:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。

3.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

答案:对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是\可达的\,哪些对象是\不可达的\。当GC确定一些对象为\不可达\时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。

4.String 和StringBuffer的区别?

答案:JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

5.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

答案:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

6.abstract class和interface有什么区别?

答案:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具

体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

7.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

答案:都不能。

8.静态变量和实例变量的区别?

答案:static i = 10; //常量 class A a; a.i =10;//可变

9.什么是java序列化,如何实现java序列化?

答案:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

10.是否可以从一个static方法内部发出对非static方法的调用?

答案:不可以,如果其中包含对象的method();不能保证对象初始化.

11.写clone()方法时,通常都有一行代码,是什么?

答案:Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。

12.在JAVA中,如何跳出当前的多重嵌套循环?

答案:用break; return 方法。

13.Java中的异常处理机制的简单原理和应用?

答案:当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发

IndexOutOfBoundsException;访问

null

的对象时会引发

NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。

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

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

15.J2EE是什么?

答案:J2EE是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。

16.UML方面

答案:标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。

17.说出一些常用的类,包,接口,请各举5个

答案:常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer

常用的包:java.lang java.awt java.io java.util java.sql 常用的接口:Remote List Map Document NodeList

18.sleep() 和 wait() ,yield()有什么区别?

答案:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等

待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

19.同步和异步有何异同,在什么情况下分别使用他们?

答案:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率.

20.启动一个线程是用run()还是start()?

答案:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

21.I/O流中输入输出流理解?

答案:I/O流分类:功能:,内容,方向

处理对象流:ObjectOutputStream,ObjectInputStream 序列化

22.开发中都用到了那些设计模式?用在什么场合?

答案:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC的设计模式。用来开发JSP/Servlet或者J2EE的相关应用。简单工厂模式等。

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

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

jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到一个新的页面。

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

24.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

答案:可以继承其他类或完成其他接口,在swing编程中常用此方式。

25.应用服务器与WEB SERVER的区别?

答案:

1、应用服务器处理业务逻辑,web服务器则主要是让客户可以通过浏览器进行访问。 2、应用服务器处理业务逻辑,web服务器是用于处理HTML文件的。

web服务器通常比应用服务器简单,如apache就是web服务器,Jboss 就是EJB应用服务器。应用服务器:Weblogic、Tomcat、Jboss;WEB SERVER:IIS、 Apache

26.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的顺序访问

STAX:Streaming API for XML (StAX)

27.如何给weblogic指定大小的内存?

答案:在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以调整最小内存为32M,最大200M。

28.如何设定的weblogic的热启动模式(开发模式)与产品发布模式?

答案:可以在管理控制台中修改对应服务器的启动模式为开发或产品模式之一。或者修改服务的启动文件或者commenv文件,增加set PRODUCTION_MODE=true。

29.如何在启动weblogic时不需输入用户名与密码?

答案:修改服务启动文件,增加 WLS_USER和WLS_PW项。也可以在boot.properties文件中增加加密过的用户名和密码。

30.在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中?

答案:保存在此Domain的config.xml文件中,它是服务器的核心配置文件。

31.说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入http://主机:端口号//helloword.jsp就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean该如何办?

答案:Domain目录\\服务器目录\\applications,将应用目录放在此目录下将可以作为应用访问,如果是Web应用,应用目录需要满足Web应用目录要求,jsp文件可以直接放在应用目录中,Javabean需要放在应用目录的WEB-INF目录的classes目录中,设置服务器的缺省应用将可以实现在浏览器上无需输入应用名。

32.在weblogic中发布ejb需涉及到哪些配置文件?

答案:不同类型的EJB涉及的配置文件不同,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xml CMP实体Bean一般还需要weblogic-cmp-rdbms-jar.xml 。

33.如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置?

答案:缺省安装中使用DemoIdentity.jks和DemoTrust.jks KeyStore实现SSL,需要配置服务器使用Enable SSL,配置其端口,在产品模式下需要从CA获取私有密钥和数字证书,创建identity和trust keystore,装载获得的密钥和数字证书。可以配置此SSL连接是单向还是双向的。

34.CORBA是什么?用途是什么?

答案:CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture),由对象管理组织 (Object Management Group,缩写为 OMG)标准化。它的组成是接口定义语言(IDL), 语言绑定(binding:也译为联编)和允许应用程序间互操作的协议。 其目的为:用不同的程序设计语言书写在不同的进程中运行,为不同的操作系统开发。

35.说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法。

答案:

Session Facade Pattern:使用SessionBean访问EntityBean Message Facade Pattern:实现异步调用

EJB Command Pattern:使用Command JavaBeans取代SessionBean,实现轻量级访问 Data Transfer Object Factory:通过DTO Factory简化EntityBean数据提供特性 Generic Attribute Access:通过AttibuteAccess接口简化EntityBean数据提供特性 Business Interface:通过远程(本地)接口和Bean类实现相同接口规范业务逻辑一致性 EJB架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及开发效率。项目越复杂,项目队伍越庞大则越能体现良好设计的重要性。

36.说说在weblogic中开发消息Bean时的persistent与non-persisten的差别。

答案:

persistent方式的MDB可以保证消息传递的可靠性,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来,而non-persistent方式的消息将被丢弃。

37.BS与CS的联系与区别。

答案:C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。

C/S 与 B/S 区别: 1.硬件环境不同:

C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.

B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有

操作系统和浏览器就行 2.对安全要求不同

C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息。

B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。 3.对程序架构不同

C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.

B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的

.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟.

4.软件重用不同

C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.

B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子

5.系统维护不同

C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统

B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.

6.处理问题不同

C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统

B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小.

7.用户接口不同

C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高

B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本.

8.信息流不同

C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低

B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心。

38.LINUX下线程,GDI类的解释。

答案:LINUX实现的就是基于核心轻量级进程的\一对一\线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。 GDI类为图像设备编程接口类库。

39.STRUTS的应用(如STRUTS架构)

答案:Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能: 一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。 二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。 三.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。

40.Jdo是什么?

答案:JDO是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据底层上运行。JDBC只是面向关系数据库(RDBMS)JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强

41.内部类可以引用他包含类的成员吗?有没有什么限制?

答案:一个内部类对象可以访问创建它的外部类对象的内容

42.WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。

答案:Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。JAXP(Java API for XML Parsing) 定义了在Java中使用DOM, SAX, XSLT的通用的接口。这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码。JAXM(Java API for XML Messaging) 是为SOAP通信提供访问方法和传输机制的API。WSDL是一种 XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务)。SOAP即简单对象访

问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。 UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

43.int 和 Integer 的区别:

答案:Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。

原始类型封装类

booleanBoolean

charCharacter byteByte

shortShort

intInteger longLong

floatFloat

doubleDouble

引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。

44.String类和StringBuffer类的区别:

答案:它们都是处理字符串的类,但是它们有一个最大的区别,那就是, String对象是存储你不能改动的文本字符串,相反,如果你希望改动,则应使用StringBuffer类作为替换

StringBuffer是可变的而String是不可变的,而且String用得多个的话会占用不同的内存.

如:String str = \str = \

前一个bb的内存地址不变,当又给它赋值为aa时它(str)又指向aa的地址,而StringBuffer就不会这样.

45.\和 \方法的区别?

答案:\:对于基本类型的数据,比较的是内容;而对于两个引用类型的变量则比较的是两个对象的地址;

\:不支持基本类型的比较,对于应用类型的变量默认情况下比较的也是地址,除非你自己手动的覆盖\方法,在\方法中指定自己的比较策略。

但是对于String类型变量则直接比较是两个字符串的内容,因为JDK中String类已经实现了\方法,(在字符串中)\比较的是两个对象的值.

46.集合

Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。

Java集合的缺点:类型未知

总的说来,Java API中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下:

Collection<--list><--vector> Collection<--list><--arraylist> Collection<--list><--linkedlist> Collection<--set><--hashset>

Collection<--set><--hashset><--linkedhashset> Collection<--set><--sortedset><--treeset> List 是基于Array,可以有重复的值。

Vector : 基于Array的List很重要的一点就是Vector是“sychronized”的,这个也是Vector和ArrayList的唯一的区别。

ArrayList:基于Array上的链表,但是不同的是ArrayList不是同步的。

LinkedList:它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势

HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储。

47.Set总结

1. Set实现的基础是Map(HashMap);

2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象;

性能时Map所要面对的一个大问题。如果你知道get()时怎么工作的,你就会发觉(比方说)在ArrayList里面找对象会是相当慢的。而这正是 HashMap的强项。它不是慢慢地一个个地找这个键,而是用了一种被称为hash code的特殊值来进行查找的。散列(hash)时一种算法,它会从目标对象当中提取一些信息,然后生成一个表示这个对象的“相对独特”的int。 hashCode()是Object根类的方法,因此所有Java对象都能生成hash code。HashMap则利用对象的hashCode()来进行快速的查找。这样性能就有了急剧的提高。

设计模式方面:

48.开发中都用到了那些设计模式?用在什么场合?

答案:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需再重复相同的工作。主要用到了MVC的设计模式。用来开发JSP/Servlet或者J2EE的相关应用。简单工厂模式等。

49.UML方面

答案:标准建模语言UML。 用例图, 静态图 ( 包括 类图、对象图 和 包图 ), 行为图, 交互图 。

50.概述struts,以及struts如何实现MVC架构的?

答案:struts framework是一种基于java的技术,Web应用程序开发人员通过struts framework即可充分利用面向对象设计、代码重用以及“编写一次、到处运行”的优点。Struts提供了一种创建Web应用程序的框架,其中对应用程序的显示、表示和数据的后端代码进行了抽象。Struts采用jsp作为MVC的视图, 由ActionServlet具体指定的action动作类作为控制器即MVC中的C,负责视图与模型之间的交互。控制器的每个入口点都由名为struts-config.xml的配置文件设置。该文件把来自视图的请求映射为特定的JAVA类以进行相应的处理,控制器还指定下一个视图的位置。Struts中的模型主要指的就是javabean,它是模型的代表,主要封装数据和业务逻辑。

Struts的处理流程:

<1> 控制器进行初始化工作,读取配置文件,为不同的Struts模块初始化相应的ModulConfig对象。

<2> 控制器接收Http请求,并从ActionConfig中找出对应于该请求的Action子类,如果没有对应的Action,控制器直接将请求转发给JSP或者静态页面,否则控制器将请求分发至具体的Action类进行处理。

<3> 在控制器调用具体的Action的Execute方法之前,ActionForm对象将利用Http请求中的参数来填充自已。还可以在ActionForm类中调用Validate方法来检查请求参数的合法性,并且可以返回一个包含所有错误信息的ActionErrors对象。

<4> 执行具体的的Execute的方法,它负责执行相应的业务逻辑。执行完后,返回一个ActionForward对象,控制器通过该ActionForward对象来进行转发工作。也可以把Action要处理的业务逻辑封装在JavaBean中,如果系统中还有EJB,那么通过JavaBean调用EJB以完成业务处理;如果没有EJB,那么就直接在JavaBean中连接数据库,进行数据库相关的操作。

51.概述MVC体系结构

答案:MVC包括三类对象,model是应用对象,view是视图,controller是控制器,它定义用户界面对用户输入的响应方式。

在MVC体系中,模型通常被称为“业务逻辑”,是真正完成任务的代码,视图就是使用界面,反映数据的变化。控制器控制着模型和视图之间的交互过程,它决定着向用户返回怎样的视图、检查通过界面输入的信息以及选择处理输入信息的模型

在MVC中,表示层和逻辑层分离,各部分可相互独立进行开发,便于开发和维护,提高了开发效率。

线程方面:

52.多线程的优点?

答案:可分两方面来答: 相对于单线程而言 : 可以响应多任务的并发操作。

多线程取消了主循环和轮流检测机制,一个线程可以暂停而不阻止系统其他的部分的执行,而且当程序中一个线程阻塞时,只有那个被阻塞的线程暂停,所有其他的线程继续执行。

相对于进程而言:(可以答也可以不答) 它所要求的开销比较小,转换成本较小。 所有线程共享同一地址空间,相互协作。 彼此之间通信很容易。

53.EJB概述

答案:EJB是企业级的JavaBean,它提供了构建企业级业务逻辑的一种组件模型。 EJB分为三种:Session Bean Entity Bean Message-Driven Bean 三种,其中Session Bean分为有状态和无状态Session Bean两种,Entity Bean分为容器管理的Entity Bean ( CMP ) 和 Bean管理的 Entity Bean ( BMP )。每一个EJB由一个远程接口、一个本地接口和一个EJB容器实现组成,远程接口声明了提供给EJB客户调用的各种应用方法,本地接口声明了创建新的EJB实例的create方法、寻找EJB实例的查找(finder)方法以及刪除EJB实例的remove方法。EJB容器提供了EJB的运行环境和生命周期的管理。

54.用java访问Oracle数据库、取得记录并输出到界面

答案:

Class.forName(“oracle.jdbc.driver.OracleDriver”);

Connection conn=DriverManager.getConnection( url , username , password ); Statement stmt=conn.createStatement(); String str=”select * from [table]”; ResultSet rs=stmt.executeQuery(str); While(rs.next()) {

???????? }

rs.close(); stmt.close(); conn.close();

55.概述java垃圾回收机制

答案:它的工作原理如下:

当不存在对一个对象的引用时,我们就假定不再需要那个对象,那个对象所占有的存储单元可以被收回,可通过System.gc()方法回收,但一般要把不再引用的对象标志为null为佳。

56.java类是否可以多继承,怎么实现多继承?

答案:java没有多继承,但可以通过接口的形式来达到多继承的目地。

57.接口有什么优点

答案:接口有以下优点:

1 接口只是一个框架而没有实现,因此在接口定义时不需要考虑接口中的方法如何实现。

2 利用接口可达到实现多继承的目地。

3 可以在不暴露对象的类的前提下,暴露对象的编程接口。 4 不用强迫类关系在无关类中截获相似处(采用适配器就可以了)。 5 声明想执行的一个或多个方法。

58.ArrayList 与 Vector 的区别

答案:主要从两个方面来说明: 安全、效率方面

如果要实现同步安全,则要用Vector,否则则用ArrayList,因为ArrayList不考虑同步安全的问题,所以效率要高些。

资源方面

当两者的容量已满时,它们都会自动增长其容量,但Vector是按其容量的一倍增长,而ArrayList则按其容量的50%增加,所以Vector更能节省资源。

59.MVC结构在Jtable中怎样实现的,这种结构有什么好处?

答案:在Jtable中不存储它的单元数据,它的所有实例把它们的单元值交给实现了TableModel接口的对象来维护和管理,所以在MVC结构中,Jtable的表格主要体现了一个V的作用,其表格将数据变化体现出来,而数据模型则体现了M的作用,封装数据和业务逻辑。

60.在控制台中输入一个字符串,然后按照逆序打印出来

答案:

import java.io.*; public class test{

public static void main(String args[]){ String A=””; String B=””; String C=””; try{

BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); If ((B=br.readLine())!=null){ A=A+B; }

for(int I=A.length()-1;I>=0;I--){ C=C+A.substring(I,I+1);

}

System.out.println(C); }

catch(Exception e){

System.out.println(e.getMessage()); } } }

61.java是否存在内存泄露

答案:存在,当一个对象引用另一对象后,当另一对象为空时,会出现内存泄露。

62.String类的值是否可以改变

答案:String类的值在初始后不能改变,如果要改变,可转换为StringBuffer类,这个类的值是可以动态改变的。(这里主要考String 和 StringBuffer 的区别)

63.java 有几种修饰符?默认的是什么?

答案:(注:修饰符是影响类、变量及成员方法的生存空间和可访问性的关键字) 修饰符 类 成员方法 成员变量 局部变量 abstract √ √ - - static - √ √ - public √ √ √ - protected - √ √ - private - √ √ -

private protected - √ √ - synchronized - √ - - native - √ - - volatile - - √ - final √ √ √ - transient - - √ √

以下是访问控制修饰符: 默认为friendly 修饰符 同类 同包 子孙类 不同包 public √ √ √ √ protected √ √ √ - friendly √ √ - -

private √ - - -

64.toString方法的概述

答案:因为每个类都继承了Object类,所以都实现了toString()方法。 通过toString()方法可以决定所创建对象的字符串表达形式。

65.Object类的概述

答案:Object类是所有其他的类的超类,Object的一个变量可以引用任何其他类的对象。因为数组是作为类实现的,所以Object的一个变量也可以引用任何数组,它包括以下几种方法:

clone() equals() finalize() getClass() hashCode() notify() notifyAll() toString() wait()

66.java特点

答案:java具有以下几个主要特点: 1) 简单性

2) 面向对象:JAVA是完全面向对象的,它支持静态和动态风格的代码继承及重用 3) 分布式:包括数据分布和操作分布

4) 健壮性:java系统仔细检测对内存的每次访问,确认它是否合法,而且在编译和运行

程序时,都要对可能出现的问题进行检查,以消除错误的产生。 5) 结构中立

6) 安全性:java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这

样就防止程序员使用木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。

7) 与平台无关:java写的应用程序不用修改就可在不同的软硬平台上运行。平台无关性

有两种:源代码级和目标代码级。 Java主要靠JAVA虚拟机在目标代码级上实现平台无关性

8) 解释执性:运行JAVA程序时,它首先被编译成字节代码,字节代码非常类似机器码,

执行效率非常高。 9) 高性能 10) 多性程

11) 动态性:它允许程序动态的装入运行时需要的类。

67.什么叫抽象类?抽象类跟接口有什么区别?为什么引进数据接口概念?

答案:具有关键字abstract ,在实现内容上没有完全定义的类就叫抽象类。

抽象类和接口的区别如下:

① 在类继承抽象类时,只需实现部分具体方法和全部抽象方法,而实现接口则要实现里面的全部方法。

②在接口中无成员变量,而抽象类中可有成员变量。 在Java中引进接口主要是为了解决多继承的问题。

68.doGet与doPut的区别?

答案:doPut会把地址作为一个文件写到服务器,而doGet不会,而只显示在地址栏。

69.多线程实现有那几种方法,同步有哪几种方法?

答案:实现同步主要有两种方法:1.synchronized 2.wait notify 。实现多线程主要继承Thread 类和实现Runnable接口。

70.JSP页面的跳转?

答案:jsp页面实现跳转主要有jsp:forward 和 sendRedirect 两种方法

jsp:forward:在本容器内跳转 。 跳转后,地址栏地址不变 。效率高。跳转后立即结束本页的内容。

sendRedirect:在容器之间的跳转,跳转后地址栏地址为跳转后的地址,效率较低。 通常采用jsp:forward方式跳转。

71.类变量的初始化

答案:在Java中类变量在局部中一定要初始化,因为局部变量会覆盖全局变量,否则会报错:变量未初始化。全局变量则可以不初始化,而到具体的内部方法或其他的类成员中初始化。

72.数组的定义

答案:数组是作为一种对象实现的。数组元素可以包含作何类型值,但数组里面的每个元素的类型必须一致

创建数组步聚如下: 1) 声明 2) 构造 3) 初始化

Java代码查错:

73.以下有何错误:

abstract class Name { private String name;

public abstract boolean isStupidName(String name) {} }

答案:错。abstract method必须以分号结尾,且不带花括号。

74.查错

public class Something { void doSomething () { private String s = \ int l = s.length(); } } 有错吗?

答案:错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。

75.查错误

abstract class Something {

private abstract String doSomething (); }

这好像没什么错吧?

答案:错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstractmethod封锁起来呢? (同理,abstract method前不能加final)。

76.查错误

public class Something {

public int addOne(final int x) { return ++x; } }

这个比较明显。

答案: 错。int x被修饰成final,意味着x不能在addOne method中被修改。

77.查错误

public class Something {

public static void main(String[] args) { Other o = new Other(); new Something().addOne(o); }

public void addOne(final Other o) { o.i++; } }

class Other { public int i; }

和上面的很相似,都是关于final的问题,这有错吗?

答案:正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了o的reference(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是o的member vairable(成员变量),而o的reference并没有改变。

78.查错误

class Something { int i;

public void doSomething() { System.out.println(\ } }

有什么错呢? 看不出来啊。

答案:正确。输出的是\。int i属於instant variable (实例变量,或叫成员变量)。instant variable有default value。int的default value是0。

79.查错误

class Something {

final int i;

public void doSomething() { System.out.println(\ } }

和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?

答案: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为\。

80.查错误

public class Something {

public static void main(String[] args) { Something s = new Something();

System.out.println(\ }

public String doSomething() { return \ } }

看上去很完美。

答案:错。看上去在main里call doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。static method不能直接call non-static methods。可改成

\returns \+

s.doSomething());\。同理,static method不能访问non-static instant variable。

81.查错误

此处,Something类的文件名叫OtherThing.java class Something {

private static void main(String[] something_to_do) { System.out.println(\ } }

这个好像很明显。

答案:正确。从来没有人说过Java的Class名字必须和其文件名相同。但public class

的名字必须和文件名相同。

82.查错误

interface A{ int x = 0; } class B{ int x =1; }

class C extends B implements A { public void pX(){ System.out.println(x); }

public static void main(String[] args) { new C().pX(); } }

答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确。

83.查错误

interface Playable { void play(); }

interface Bounceable { void play(); }

interface Rollable extends Playable, Bounceable { Ball ball = new Ball(\}

class Ball implements Rollable { private String name; public String getName() {

return name; }

public Ball(String name) { this.name = name; }

public void play() {

ball = new Ball(\

//错在这儿

System.out.println(ball.getName()); } }

这个错误不容易发现。

答案: 错。\Rollable extends Playable, Bounceable\没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的\new Ball(\。任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final。也就是说\ball = new Ball(\实际上是\static final Ball ball = new Ball(\。在Ball类的Play()方法中,\改变了ball的reference,而这里的ball来自Rollable interface,Rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在\Ball(\这里显示有错。

JAVA编程题:

84.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序。

答案:结果为,提供reset

import java.util.*; public class bycomma{

public static String[] splitStringByComma(String source){ if(source==null||source.trim().equals(\ return null;

StringTokenizer commaToker = new StringTokenizer(source,\ String[] result = new String[commaToker.countTokens()]; int i=0;

while(commaToker.hasMoreTokens()){ result[i] = commaToker.nextToken(); i++; }

return result; }

public static void main(String args[]){

String[] s = splitStringByComma(\ int[] ii = new int[s.length]; for(int i = 0;i

Arrays.sort(ii); //asc

for(int i=0;i

for(int i=(s.length-1);i>=0;i--){ System.out.println(ii[i]); } } }

85.编程题: 写一个Singleton出来。

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。一般Singleton模式通常有几种种形式:第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。public class Singleton {private Singleton(){} private static Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; } } 第二种形式: public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { (instance==null) instance=new Singleton();

if

return instance; } } 其他形式: 定义一个类,它的构造函数为private的,所有方法为static的。一般认为第一种形式要更加安全些

本文来源:https://www.bwwdw.com/article/srdg.html

Top