《java面试题精选.doc》由会员分享,可在线阅读,更多相关《java面试题精选.doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、java面试题精选(3)(2009-08-13 17:11:30)标签:杂谈 分类:Java100、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。 在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。101、java中会存在内存泄漏吗,请简单描述。 会。如:int i,i2; return (i-i2); /when i为足够大的正数,i2为足够大的负数。结果会造成
2、溢位,导致错误。102、java中实现多态的机制是什么? 方法的重写Overriding和重载Overloading是Java多态性的不同表现。 重写Overriding是父类与子类之间多态性的一种表现, 重载Overloading是一个类中多态性的一种表现。103、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。 通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是可达的,哪些对象是不可达的。 当GC确定一些对象为不可达时,
3、GC就有责任回收这些内存空间。 程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。104、静态变量和实例变量的区别? static i = 10; /常量 class A a; a.i =10;/可变105、什么是java序列化,如何实现java序列化? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。 可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。 序列化是为了解决在对对象流进行读写操作时所引发的问题。 序列化的实现:将需要被序列化的类实现Serializable接口, 该接口没有需要实现的方法,
4、implements Serializable只是为了标注该对象是可被序列化的, 然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象, 接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态), 要恢复的话则用输入流。106、是否可以从一个static方法内部发出对非static方法的调用? 不可以,如果其中包含对象的method();不能保证对象初始化.107、写clone()方法时,通常都有一行代码,是什么? Clone 有缺省行
5、为,super.clone();他负责产生正确大小的空间,并逐位复制。108、在JAVA中,如何跳出当前的多重嵌套循环? 用break; return 方法。109、List、Map、Set三个接口,存取元素时,各有什么特点? List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。110、J2EE是什么? J2EE 是Sun公司提出的多层(multi-diered),分布式(distributed), 基于组件(component-base)的企业级应用模型 (enterpriese application mod
6、el). 在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。 所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。111、UML方面 标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。112、说出一些常用的类,包,接口,请各举5个 常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer 常用的包:java.lang java.
7、awt java.io java.util java.sql 常用的接口:Remote List Map Document NodeList113、开发中都用到了那些设计模式?用在什么场合? 每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。 通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC的设计模式。 用来开发JSP/Servlet或者J2EE的相关应用。简单工厂模式等。114、jsp有哪些动作?作用分别是什么? JSP共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件。 jsp:useBe
8、an:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。115、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 可以继承其他类或完成其他接口,在swing编程中常用此方式。116、应用服务器与WEB SERVER的区别? 应用服务器:
9、Weblogic、Tomcat、Jboss WEB SERVER:IIS、 Apache117、BS与CS的联系与区别。 C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统, 如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。 B/是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser), 如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。 在这种结
10、构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。 浏览器通过eb Server 同数据库进行数据交互。C/S 与 B/S 区别: 硬件环境不同: C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务. B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行 对安全要求不同 C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B
11、/S发布部分可公开信息. B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。 对程序架构不同 C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑. B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构 是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟. 软件重用不同 C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/
12、S要求下的构件的重用性好. B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子 系统维护不同 C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统 B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级. 处理问题不同 C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统 B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操
13、作系统平台关系最小. 用户接口不同 C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高 B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本. 信息流不同 C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低 B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心。118、LINUX下线程,GDI类的解释。 LINUX实现的就是基于核心轻量级进程的一对一线程模型,一个线程实体对应一个核心轻量级进程, 而线程之间的管理在核外函数库中实现。 GDI类为图像设备编程接口类库。119、STRUTS的
14、应用(如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自动处理J
15、avaBeans属性、国际化的提示和消息。120、Jdo是什么? JDO 是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。 JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。 这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。 另外,JDO很灵活,因为它可以在任何数据底层上运行。 JDBC只是面向关系数据库(RDBMS)JDO更通用,提供到任何数据底层的存储功能, 比如关系数据库、文件、XML以及对象数据库
16、(ODBMS)等等,使得应用可移植性更强。121、内部类可以引用他包含类的成员吗?有没有什么限制? 一个内部类对象可以访问创建它的外部类对象的内容122、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。 Web Service:Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范, 这些规范使得Web Service能与其他兼容的组件进行互操作。 JAXP(Java API for XML Parsing) 定义了在Java中使用DOM, SAX, XSLT的通用的接口。 这样在你的程序
17、中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码。 JAXM(Java API for XML Messaging) 是为SOAP通信提供访问方法和传输机制的API。 WSDL是一种 XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。 这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。 相关的具体端点即组合成为抽象端点(服务)。 SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。 UDDI 的目的是为电子
18、商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范, 同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。JAVA代码查错1. abstract class Name private String name; public abstract boolean isStupidName(String name) 大侠们,这有何错误?答案: 错。abstract method必须以分号结尾,且不带花括号。2. public class Something void doSomething
19、() private String s = ; int l = s.length(); 有错吗?答案: 错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。3. abstract class Something private abstract String doSomething (); 这好像没什么错吧?答案: 错。abstract的methods不能以private修饰。abs
20、tract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstract method封锁起来呢? (同理,abstract method前不能加final)。4.public class Something public int addOne(final int x) return +x; 这个比较明显。答案: 错。int x被修饰成final,意味着x不能在addOne method中被修改。5.public class Something public static void main(String args) Other o = new Ot
21、her(); 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并没有改变。6.class Something int
22、 i; public void doSomething() System.out.println(i = + i); 有什么错呢? 看不出来啊。答案: 正确。输出的是i = 0。int i属於instant variable (实例变量,或叫成员变量)。instant variable有default value。int的default value是0。7.class Something final int i; public void doSomething() System.out.println(i = + i); 和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?答案
23、: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为final int i = 0;。8.public class Something public static void main(String args) Something s = new Something(); System.out.println(s.doSomething() returns + doSomething();
24、 public String doSomething() return Do something .; 看上去很完美。答案: 错。看上去在main里call doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。static method不能直接call non-static methods。可改成System.out.println(s.doSomething() returns + s.doSomething();。同理,static method不能访问non-static instant variable。9.此处,Som
25、ething类的文件名叫OtherThing.javaclass Something private static void main(String something_to_do) System.out.println(Do something .); 这个好像很明显。答案: 正确。从来没有人说过Java的Class名字必须和其文件名相同。但public class的名字必须和文件名相同。10interface A int x = 0;class B int x =1;class C extends B implements A public void pX() System.out.pri
26、ntln(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来明确。11.interface Playable void play();interface Bounceable void play();interfac
27、e Rollable extends Playable, Bounceable Ball ball = new Ball(PingPang);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(Football); System.out.println(ball.getName(); 这个错误不容易发现。答案: 错。
28、interface Rollable extends Playable, Bounceable没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的Ball ball = new Ball(PingPang);。任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final。也就是说Ball ball = new Ball(PingPang);实际上是public static final Ball ball = new Ball(PingPan
29、g);。在Ball类的Play()方法中,ball = new Ball(Football);改变了ball的reference,而这里的ball来自Rollable interface,Rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在ball = new Ball(Football);这里显示有错。编程题1现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供resetimport java.util.*;public cla
30、ss bycommapublic static String splitStringByComma(String source) if(source=null|source.trim().equals() return null; StringTokenizer commaToker = new StringTokenizer(source,); String result = new StringcommaToker.countTokens(); int i=0; while(commaToker.hasMoreTokens() resulti = commaToker.nextToken(
31、); i+; return result;public static void main(String args)String s = splitStringByComma(5,8,7,4,3,9,1);int ii = new ints.length;for(int i = 0;is.length;i+)iii =Integer.parseInt(si); Arrays.sort(ii); /asc for(int i=0;i=0;i-) System.out.println(iii); 2金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)(一千零一拾一元整)输出。经典试题:3
32、.public class Foopublic static void main(String sgf)StringBuffer a = new StringBuffer(A);StringBuffer b = new StringBuffer(B);operate(a,b);System.out.println(a+,+b);static void operate(StringBuffer x,StringBuffer y)x.append(y);y=x;What is the result?A.The code compiles and prints “A.B”.B.The code co
33、mpiles and prints “A.A”.C.The code compiles and prints “B.B”.D.The code compiles and prints “AB.B”.E.The code compiles and prints “AB.AB”.答案是Djava中都是按值传递的,所以a,b还是指向原来的地址空间,经过operate操作后,x更改了该地址空间的值,而y没有.public class Foopublic static void main(String sgf)StringBuffer a = new StringBuffer(A);StringBuffer b = new StringBuffer(B);operate(a,b); /方法调用完以后,a对象的内容为:AB,b对象的内容为:BSystem.out.println(a+,+b);static void operate(StringBuffer x,StringBuffer y)/对象传递进来以后又分别复制了一个x和y对象x和y,x和x指向同一个对象。y和y指向同一个对象。x.append(y); /所以执行此步操作以后,main中的x对象的内容也变化了。 /因为本来就是指向同一个对象吗!y=x; /执行此步操作以后,main中的y对象的内容没变! /因为此y非彼y也!
限制150内