面试题集-CoreJava 部分


面试题集-CoreJava 部分 文件修改控制 修改记录编号 修改内容 修改人 修改日期 v0.01/1 将原先面试题集进行拆分,并加入样式控制 郭大喜 2009-5-21 [附加说明] 1. “修改记录编号”的填写内容为:本次修改后的版本号+“/”+流水号,例如:V1.01/1。 2. 一次修改可以修改文档的多个位置,流水号为对该版本修改的流水号。当版本变时,流 水号归为 1。 面试题集共分为以下十部分: 一、Core Java: 1 — 95 题 1 — 24 页 基础及语法: 1 — 61 题 1 — 13 页 异常: 62 — 69 题 13 — 15 页 集合: 70 — 80 题 15 — 18 页 线程: 81 — 90 题 18 — 21 页 IO & Socket: 91 — 95 题 21 — 24 页 二、OOAD & UML: 96 — 101 题 24 — 25 页 三、XML: 102 — 105 题 26 — 29 页 四、SQL: 106 — 109 题 29 — 31 页 五、JDBC & Hibernate: 110 — 121 题 31 — 35 页 六、Web: 122 — 161 题 35 — 44 页 七、EJB & Spring: 162 — 179 题 44 — 47 页 八、数据结构 & 算法 & 计算机基础: 180 — 187 题 48 — 51 页 九、C++: 188 — 201 题 51 — 56 页 十、Weblogic 及其它(附加部分) 202 — 201 题 56 — 58 页 一、COREJAVA 部分: ........................................................................................................................ 6 基础及语法部分: .............................................................................................................................. 6 1、面向对象的特征有哪些方面? 【基础】 ................................................................................ 6 2、作用域 public,private,protected,以及不写时的区别?【基础】 ............................................ 6 3、String 是最基本的数据类型吗? 【基础】 ............................................................................. 6 4、float 型 float f=3.4 是否正确? 【基础】 ................................................................................. 6 5、语句 float f=1.3;编译能否通过?【基础】 .......................................................................... 7 6、short s1 = 1; s1 = s1 + 1;有什么错? ........................................................................................ 7 7、Java 有没有 goto??【基础】 ................................................................................................... 7 8、int 和 Integer 有什么区别? 【基础】 .................................................................................. 7 9、&和&&的区别?【基础】 ....................................................................................................... 7 10、简述逻辑操作(&,|,^)与条件操作(&&,||)的区别?【基础】 ................................................ 7 11、heap 和 stack 有什么区别?【基础】 ................................................................................... 7 12、Math.round(11.5) 等于多少? Math.round(-11.5)等于多少??【基础】 ................................ 7 13、swtich 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上? 【基础】 ......................................................................................................................................................... 8 14、编程题: 用最有效率的方法算出 2 乘以 8 等於几? 【基础】 ........................................... 8 15、有没有 length()这个方法? String 有没有 length()这个方法?【基础】 ............................. 8 16、在 JAVA 中,如何跳出当前的多重嵌套循环?【基础】 .................................................... 8 17、构造器 Constructor 是否可被 override? 【基础】 .............................................................. 8 18、两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句话对不对? 【基 础】 .................................................................................................................................................. 8 19、是否可以继承 String 类? 【基础】 ...................................................................................... 8 20、以下二条语句返回值为 true 的有: ...................................................................................... 8 21、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回 变化后的结果,那么这里到底是值传递还是引用传递? 【基础】 .......................................... 8 22、我们在 web 应用开发过程中经常遇到输出某种编码的字符,如 iso8859-1 等,如何输出 一个某种编码的字符串?【基础】 .............................................................................................. 8 23、String 和 StringBuffer 的区别? 【基础】 ............................................................................. 9 24、String, StringBuffer StringBuilder 的区别。【基础】 ....................................................... 9 25、Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型? 【基础】 ......................................................................................................................................................... 9 26、代码题:定义类 A 和类 B 如下:【基础】 ........................................................................... 9 27、描述一下 JVM 加载 class 文件的原理机制? 【基础】 ..................................................... 10 28、char 型变量中能不能存贮一个中文汉字?为什么? 【基础】 .......................................... 10 29、abstract class 和 interface 有什么区别? 【基础】 ............................................................. 10 30、Static Nested Class 和 Inner Class 的不同?【基础】 ...................................................... 11 31、java 中会存在内存泄漏吗,请简单描述。【基础】 .......................................................... 11 32、abstract 的 method 是否可同时是 static,是否可同时是 native,是否可同时是 synchronized?? 【基础】 ........................................................................................................................................ 11 33、静态变量和实例变量的区别?【基础】 ............................................................................ 11 34、是否可以从一个 static 方法内部发出对非 static 方法的调用?【基础】 ....................... 11 35、写 clone()方法时,通常都有一行代码,是什么?【基础】 ............................................ 11 36、GC 是什么? 为什么要有 GC? 【基础】 ........................................................................... 11 37、垃圾回收的优点和原理。并考虑 2 种回收机制。【基础】 .............................................. 11 38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通 知虚拟机进行垃圾回收?【基础】 ............................................................................................ 12 39、String s=new String(“xyz”);创建了几个 String Object? 【基础】 .................................... 12 40、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类 (concrete class)? 【基础】 ........................................................................................................... 12 41、Java 的接口和 C++的虚类的相同和不同处。【基础】 ..................................................... 12 42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?【基础】 ....................................................................................................................................................... 12 43、说出一些常用的类,包,接口,请各举 5 个。【基础】 .................................................. 12 44、Anonymous Inner Class (匿名内部类) 是否可以 extends(继承)其它类?是否可以 implements(实现)interface(接口)? 【基础】 .............................................................................. 12 45、内部类可以引用他包含类的成员吗?有没有什么限制?【基础】 ................................ 12 46、java 中实现多态的机制是什么?【基础】 ........................................................................ 13 47、在 java 中一个类被声明为 final 类型,表示了什么意思?【基础】 .............................. 13 48、下面哪些类可以被继承? 【基础】 .................................................................................... 13 49、代码题 指出下面程序的运行结果: 【基础】 ................................................................... 13 50、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么? 【基础】 ........... 14 51、内部类的实现方式? 【基础】 ............................................................................................ 14 52、关于内部类: 【基础】 ...................................................................................................... 15 53、数据类型之间的转换: .......................................................................................................... 15 54、字符串操作:如何实现字符串的反转及替换?【基础】 ................................................ 16 55、编码转换:怎样将 GB2312 编码的字符串转换为 ISO-8859-1 编码的字符串?【基础】 ....................................................................................................................................................... 16 56、写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔。 【基础】 ....................................................................................................................................................... 16 57、写一个函数,2 个参数,1 个字符串,1 个字节数,返回截取的字符串,要求字符串中 的中文不能出现乱码:如(“我 ABC”, 4)应该截为“我 AB”,输入(“我 ABC 汉 DEF”, 6) 应该输出为“我 ABC”而不是“我 ABC+汉的半个”。 【基础】 ......................................... 16 58、日期和时间: ........................................................................................................................ 17 59、Java 编程,打印昨天的当前时刻。【基础】 ......................................................................... 17 60、java 和 javasciprt 的区别。【基础】 .................................................................................... 17 61、什么时候用 assert?【中等难度】 ..................................................................................... 18 异常部分: ........................................................................................................................................ 18 62、Java 中的异常处理机制的简单原理和应用?【基础】 .................................................... 18 63、error 和 exception 有什么区别? 【基础】 ......................................................................... 19 64、try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行, 什么时候被执行,在 return 前还是后? 【基础】 .................................................................... 19 65、JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally 分别代表什么意义? 在 try 块中可以抛出异常吗?【基础】 ...................................................................................... 19 66、运行时异常与一般异常有何异同?【基础】 .................................................................... 19 67、给我一个你最常见到的 runtime exception?【基础】 ...................................................... 19 68、final, finally, finalize 的区别? 【基础】 .............................................................................. 20 69、类 Example A 继承 Exception,类 ExampleB 继承 Example A;【基础】 ....................... 20 集合部分: ........................................................................................................................................ 20 70、介绍 JAVA 中的 Collection FrameWork(及如何写自己的数据结构)【基础】 .................. 21 71、List,Set,Map 是否继承自 Collection 接口?【基础】 ........................................................ 21 72、你所知道的集合类都有哪些?主要方法?【基础】 ........................................................ 21 73、说出 ArrayList,Vector, LinkedList 的存储性能和特性?【基础】 ..................................... 21 74、Collection 和 Collections 的区别?【基础】 .................................................................... 21 75、HashMap 和 Hashtable 的区别? 【基础】 ......................................................................... 21 76、Arraylist 与 Vector 区别?【基础】 ..................................................................................... 22 77、List、Map、Set 三个接口,存取元素时,各有什么特点?【基础】 ............................. 22 78、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是 equals()? 它们有何区别? 【基础】 ............................................................................................................ 22 79、用程序给出随便大小的 10 个数,序号为 1-10,按从小到大顺序输出,并输出相应的序 号。【基础】 .................................................................................................................................. 22 80、用 JAVA 实现一种排序,JAVA 类实现序列化的方法? 在 COLLECTION 框架中,实现 比较要实现什么样的接口?【基础】 ........................................................................................ 23 线程部分: ........................................................................................................................................ 24 81、sleep() 和 wait() 有什么区别? 【基础】 .......................................................................... 24 82、当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对象的其 它方法? 【基础】 ........................................................................................................................ 24 83、请说出你所知道的线程同步的方法。【基础】 .................................................................. 24 84、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 【基础】 ............. 25 85、同步和异步有何异同,在什么情况下分别使用他们?举例说明。【基础】................... 25 86、启动一个线程是用 run()还是 start()?【基础】 .................................................................. 25 87、 线程的基本概念、线程的基本状态以及状态之间的关系?【基础】 .......................... 25 88、简述 synchronized 和 java.util.concurrent.locks.Lock 的异同 ?【中等难度】 ................ 25 89、java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和 suspend() 方法为何不推荐使用?【中等难度】 ........................................................................................ 25 90、设计 4 个线程,其中两个线程每次对 j 增加 1,另两个线程对 j 每次减少 1;写出程序。 【中等难度】 ................................................................................................................................ 26 IO 流及 SOCKET 部分: .................................................................................................................... 27 91、什么是 java 序列化,如何实现 java 序列化?【基础】 .................................................. 27 92、java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他 们分别是哪些类?【基础】 ........................................................................................................ 27 93、文件和目录(IO)操作: .................................................................................................... 27 94、写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。 【基础】 ........................................................................................................................................ 28 95、Java 的通信编程,编程题(或问答),用 JAVA SOCKET 编程,读服务器几个字符,再写 入本地显示?【基础】 ................................................................................................................ 28 一、CoreJava 部分: (共 95 题:基础 91 道,中等难度 4 道) 基础及语法部分: (共 61 题:基础 60 道、中等难度 1 道) 1、面向对象的特征有哪些方面? 【基础】 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前 目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细 节。抽象包括两个方面,一是过程抽象,二是数据抽象。 ? 2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表 述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了 原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生 类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特 殊的需要。 3)封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象 计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象 通过一个受保护的接口访问其他对象。 4)多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性 和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应 用程序函数同名问题。 2、作用域 public,private,protected,以及不写时的区别?【基础】 答:区别如下: 作用域 当前类 同包 子孙类 其他 public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × × 不写时默认为 default。 3、String 是最基本的数据类型吗? 【基础】 答:不是。 4、float 型 float f=3.4 是否正确? 【基础】 答:不正确;精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4 。 5、语句 float f=1.3;编译能否通过?【基础】 答:不能;应该用强制类型转换,如下所示:float f=(float)1.3; 。 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 【基础】 答:short s1 = 1; s1 = s1 + 1;s1+1 运算结果是 int 型,需要强制转换类型; short s1 = 1; s1 += 1;可以正确编译,自动类型提升。 7、Java 有没有 goto??【基础】 答:goto 是 java 中的保留字,现在没有在 java 中使用。 8、int 和 Integer 有什么区别? 【基础】 答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型); int 是 java 的原始数据类型,Integer 是 java 为 int 提供的封装类。 Java 为每个原始类型提供了封装类: 原始类型: boolean,char,byte,short,int,long,float,double 封装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具 有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储, 当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省 值为 null,而原始类型实例变量的缺省值与它们的类型有关。 9、&和&&的区别?【基础】 答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 10、简述逻辑操作(&,|,^)与条件操作(&&,||)的区别?【基础】 答:区别主要有两点:a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且 可以操作数值型 b.逻辑操作不会产生短路。 11、heap 和 stack 有什么区别?【基础】 答:栈是一种线形集合,其添加和删除元素的操作应在同一段完成,栈按照后进先出的方式 进行处理;堆是栈的一个组成元素。 12、Math.round(11.5) 等于多少? Math.round(-11.5)等于多少??【基础】 答:Math.round(11.5)==12? Math.round(-11.5)==-11? round 方法返回与参数最接近的长整数, 参数加 1/2 后求其 floor。 13、swtich 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上? 【基础】 答:switch(expr1)中,expr1 是一个整数表达式。因此传递给 switch 和 case 语句的参数 应该是 int、 short、 char 或者 byte。long,string 都不能作用于 swtich。 14、编程题: 用最有效率的方法算出 2 乘以 8 等於几? 【基础】 答: 2 << 3。 15、有没有 length()这个方法? String 有没有 length()这个方法?【基础】 答:数组没有 length()这个方法,有 length 的属性。String 有 length()这个方法。 16、在 JAVA 中,如何跳出当前的多重嵌套循环?【基础】 答:在最外层循环前加 label 标识,然后用 break:label 方法即可跳出多重循环。 17、构造器 Constructor 是否可被 override? 【基础】 答:构造器 Constructor 不能被继承,因此不能重写 Overriding,但可以被重载 Overloading。 18、两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句话对不对? 【基 础】 答:不对,有相同的 hash code。 19、是否可以继承 String 类? 【基础】 答:String 类是 final 类,故不可以继承。 20、以下二条语句返回值为 true 的有: A:“ beijing”==“beijing”; B:“ beijing”.equalsIgnoreCase(new String(“ beijing”));【基础】 答:A 和 B 。 21、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回 变化后的结果,那么这里到底是值传递还是引用传递? 【基础】 答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方 法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的 引用是永远不会改变的。 22、我们在 web 应用开发过程中经常遇到输出某种编码的字符,如 iso8859-1 等,如何输出 一个某种编码的字符串?【基础】 答:public String translate(String str){ ? String tempStr = ""; try{ tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); tempStr = tempStr.trim(); }catch (Exception e){ System.err.println(e.getMessage()); } return tempStr; } 23、String 和 StringBuffer 的区别? 【基础】 答:JAVA 平台提供了两个类:String 和 StringBuffer,它们可以储存和操作字符串,即包含多 个字符的字符数据。这个 String 类提供了数值不可改变的字符串。而这个 StringBuffer 类提 供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用 StringBuffer。典型地, 你可以使用 StringBuffers 来动态构造字符数据。 24、String, StringBuffer StringBuilder 的区别。【基础】 答:String 的长度是不可变的; StringBuffer 的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要 修改时,那么使用 StringBuffer,如果最后需要 String,那么使用 StringBuffer 的 toString()方 法;线程安全; StringBuilder 是从 JDK 5 开始,为 StringBuffer 该类补充了一个单个线程使用的等价类; 通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步, 所以速度更快。 25、Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型? 【基础】 答:方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写 Overriding 是父类与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一种表现。如 果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。 子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽” 了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型, 则称为方法的重载(Overloading)。Overloaded 的方法是可以改变返回值的类型。 26、代码题:定义类 A 和类 B 如下:【基础】 class A { int a=1; double d=2.0; void show(){ System.out.println("Class A: a="+a +"\td="+d); } } class B extends A{ float a=3.0f; String d="Java program."; void show(){ super.show( ); System.out.println("Class B: a="+a +"\td="+d); } } (1) 若在应用程序的 main 方法中有以下语句: A a=new A(); a.show(); 则输出的结果如何? (2) 若在应用程序的 main 方法中定义类 B 的对象 b: A b=new B(); b.show(); 则输出的结果如何? 答:输出结果为: 1)Class A: a=1 d=2.0 ; 2)Class A: a=1 d=2.0 Class B: a=3.0 d=Java program。 27、描述一下 JVM 加载 class 文件的原理机制? 【基础】 答:JVM 中类的装载是由 ClassLoader 和它的子类来实现的,Java ClassLoader 是一个重要的 Java 运行时系统组件。它负责在运行时查找和装入类文件的类。 28、char 型变量中能不能存贮一个中文汉字?为什么? 【基础】 答:能够定义成为一个中文的,因为 java 中以 unicode 编码,一个 char 占 16 个字节,所以 放一个中文是没问题的。 29、abstract class 和 interface 有什么区别? 【基础】 答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体 现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建 abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的 一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽 象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的 其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。新型多继承性可通过 实现这样的接口而获得。接口中的所有方法都是抽象的,所有成员变量都是 public static final 的。一个类可以实现多个接口,当类实现特殊接口时,它定义(即将程序体给予)所有这种 接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象 类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口 类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 30、Static Nested Class 和 Inner Class 的不同?【基础】 答:Static Nested Class 是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实 例化。而通常的内部类需要在外部类实例化后才能实例化。 31、java 中会存在内存泄漏吗,请简单描述。【基础】 答:会;存在无用但可达的对象,这些对象不能被 GC 回收,导致耗费内存资源。 32、abstract的 method是否可同时是 static,是否可同时是native,是否可同时是 synchronized?? 【基础】 答:都不能。 33、静态变量和实例变量的区别?【基础】 答:静态变量也称为类变量,归全类共有,它不依赖于某个对象,可通过类名直接访问;而 实例变量必须依存于某一实例,只能通过对象才能访问到它。 34、是否可以从一个 static 方法内部发出对非 static 方法的调用?【基础】 答:不可以,如果其中包含对象的 method(),不能保证对象初始化。 35、写 clone()方法时,通常都有一行代码,是什么?【基础】 答:Clone 有缺省行为:super.clone(),他负责产生正确大小的空间,并逐位复制。 36、GC 是什么? 为什么要有 GC? 【基础】 答:GC 是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方, 忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自 动监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放已分配内 存的显示操作方法。 Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要 请求垃圾收集,可以调用下面的方法之一:System.gc() 或 Runtime.getRuntime().gc() 。 37、垃圾回收的优点和原理。并考虑 2 种回收机制。【基础】 答:Java 语言中一个显著的特点就是引入了垃圾回收机制,使 c++程序员最头疼的内存管理 的问题迎刃而解,它使得 Java 程序员在编写程序的时候不再需要考虑内存管理。由于有个 垃圾回收机制,Java 中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。 垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一 个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用 的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾 回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。 38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通 知虚拟机进行垃圾回收?【基础】 答:对于 GC 来说,当程序员创建对象时,GC 就开始监控这个对象的地址、大小以及使用 情况。通常,GC 采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪 些对象是"可达的",哪些对象是"不可达的"。当 GC 确定一些对象为"不可达"时,GC 就有责 任回收这些内存空间。可以。程序员可以手动执行 System.gc(),通知 GC 运行,但是 Java 语 言规范并不保证 GC 一定会执行。 39、String s=new String(“xyz”);创建了几个 String Object? 【基础】 答:两个对象,一个是存在于堆空间中的对象"xyz",另外一个是存在于串池中的对象"xyz"。 40、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类 (concrete class)? 【基础】 答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但前提 是实体类必须有明确的构造函数。 41、Java 的接口和 C++的虚类的相同和不同处。【基础】 答:由于 Java 不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方 法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接 口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性, 并且接口里面的属性在默认状态下面都是 public static,所有方法默认情况下是 public.一个类 可以实现多个接口。 42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?【基础】 答:可以;必须只有一个类名与文件名相同。 43、说出一些常用的类,包,接口,请各举 5 个。【基础】 答:常用的类:BufferedReader BufferedWriter?FileReader?FileWirter String?Integer; 常用的包:java.lang? java.awt? java.io? java.util? java.sql; 常用的接口:Remote? List? Map? Document? NodeList 44、Anonymous Inner Class (匿名内部类) 是否可以 extends(继承)其它类?是否可以 implements(实现)interface(接口)? 【基础】 答:可以继承其他类或实现其他接口,在 swing 编程中常用此方式。 45、内部类可以引用他包含类的成员吗?有没有什么限制?【基础】 答:一个内部类对象可以访问创建它的外部类对象的内容。 46、java 中实现多态的机制是什么?【基础】 答:方法的覆盖 Overriding 和重载 Overloading 是 java 多态性的不同表现;覆盖 Overriding 是父类与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一种表现。 47、在 java 中一个类被声明为 final 类型,表示了什么意思?【基础】 答:表示该类不能被继承,是顶级类。 48、下面哪些类可以被继承? 【基础】 1)java.lang.Thread?(T) 2)java.lang.Number?(T) 3)java.lang.Double?(F) 4)java.lang.Math??(F) 5)java.lang.Void??(F) 6)java.lang.Class??(F) 7)java.lang.ClassLoader?(T) 答:1、2、7 可以被继承。 49、代码题 指出下面程序的运行结果: 【基础】 class A{ ??? static{ ??????? System.out.print("1"); ??? } ??? public A(){ ??????? System.out.print("2"); ??? } } class B extends A{ ??? static{ ??????? System.out.print("a"); ??? } ??? public B(){ ??????? System.out.print("b"); ??? }?? } public class Hello{ ??? public static void main(String[] ars){ ??????? A ab = new B(); //执行到此处,结果: 1a2b ? ab = new B();?//执行到此处,结果: 1a2b2b ??? } } 答:输出结果为 1a2b2b;类的 static 代码段,可以看作是类首次加载(虚拟机加载)执行的代 码,而对于类加载,首先要执行其基类的构造,再执行其本身的构造。 50、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么? 【基础】 父类: package test; public class FatherClass { public FatherClass() { System.out.println("FatherClass Create"); } } 子类: package test; import test.FatherClass; public class ChildClass extends FatherClass { public ChildClass() { System.out.println("ChildClass Create"); } public static void main(String[] args) { FatherClass fc = new FatherClass(); ChildClass cc = new ChildClass(); } } 答:输出结果为: FatherClass Create FatherClass Create ChildClass Create 51、内部类的实现方式? 【基础】 答:示例代码如下: package test; public class OuterClass { private class InterClass { public InterClass() { System.out.println("InterClass Create"); } } public OuterClass() { InterClass ic = new InterClass(); System.out.println("OuterClass Create"); } public static void main(String[] args) { OuterClass oc = new OuterClass(); } } 输出结果为: InterClass Create OuterClass Create 52、关于内部类: 【基础】 public class OuterClass { private double d1 = 1.0; //insert code here } You need to insert an inner class declaration at line 3,Which two inner class declarations are valid?(Choose two.) A. class InnerOne{ public static double methoda() {return d1;} } B. public class InnerOne{ static double methoda() {return d1;} } C. private class InnerOne{ double methoda() {return d1;} } D. static class InnerOne{ protected double methoda() {return d1;} } E. abstract class InnerOne{ public abstract double methoda(); } 答:答案为 C、E;说明如下: 1)静态内部类可以有静态成员,而非静态内部类则不能有静态成员;故 A、B 错; 2)静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变 量;故 D 错; 3)非静态内部类的非静态成员可以访问外部类的非静态变量;故 C 正确 。 53、数据类型之间的转换: 1)如何将数值型字符转换为数字? 2)如何将数字转换为字符? 3)如何取小数点前两位并四舍五入? 【基础】 答:1)调用数值类型相应包装类中的方法 parse***(String)或 valueOf(String) 即可返回相 应基本类型或包装类型数值; 2)将数字与空字符串相加即可获得其所对应的字符串;另外对于基本类型 数字还可 调用 String 类中的 valueOf(„)方法返回相应字符串,而对于包装类型数字则可调用其 toString() 方法获得相应字符串; 3)可用该数字构造一 java.math.BigDecimal 对象,再利用其 round()方法 进行四舍五入 到保留小数点后两位,再将其转换为字符串截取最后两位。 54、字符串操作:如何实现字符串的反转及替换?【基础】 答:可用字符串构造一 StringBuffer 对象,然后调用 StringBuffer 中的 reverse 方法即可实现字 符串的反转,调用 replace 方法即可实现字符串的替换。 55、编码转换:怎样将 GB2312 编码的字符串转换为 ISO-8859-1 编码的字符串?【基础】 答:示例代码如下: String s1 = "你好"; String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1"); 56、写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔。 【基础】 答:函数代码如下: public String[] split(String str, int chars){ int n = (str.length()+ chars - 1)/chars; String ret[] = new String[n]; for(int i=0; i 0); // throws an Assertionerror if a <= 0 断言可以有两种形式: assert Expression1 ; assert Expression1 : Expression2 ; Expression1 应该总是产生一个布尔值。 Expression2 可以是得出一个值的任意表达式;这个值用于生成显示更多调试信息的 String 消息。 断言在默认情况下是禁用的,要在编译时启用断言,需使用 source 1.4 标记: javac -source 1.4 Test.java 要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。 要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。 要在系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁 用断言。可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给 私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了 断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利 用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。 异常部分: (共 8 题:基础 8 道) 62、Java 中的异常处理机制的简单原理和应用?【基础】 答:当 JAVA 程序违反了 JAVA 的语义规则时,JAVA 虚拟机就会将发生的错误表示为一个异 常。违反语义规则包括 2 种情况。一种是 JAVA 类库内置的语义检查。例如数组下标越界, 会引发 IndexOutOfBoundsException;访问 null 的对象时会引发 NullPointerException。另一种情 况就是 JAVA 允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何 时用 throw 关键字引发异常。所有的异常都是 java.lang.Thowable 的子类。 63、error 和 exception 有什么区别? 【基础】 答:error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下 的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况; exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就 是说,它表示如果程序运行正常,从不会发生的情况。 64、try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行, 什么时候被执行,在 return 前还是后? 【基础】 答:会执行,在 return 前执行。 65、JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally 分别代表什么意义? 在 try 块中可以抛出异常吗?【基础】 答:Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的 接口。在 Java 中,每个异常都是一个对象,它是 Throwable 类或其它子类的实例。当一个方 法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕 获到这个异常并进行处理。Java 的异常处理是通过 5 个关键词来实现的:try、catch、throw、 throws 和 finally。一般情况下是用 try 来执行一段程序,如果出现异常,系统会抛出(throws) 一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器 来处理; try 用来指定一块预防所有“异常”的程序; catch 子句紧跟在 try 块后面,用来指定你想要捕捉的“异常”的类型; throw 语句用来明确地抛出一个“异常”; throws 用来标明一个成员函数可能抛出的各种“异常”; Finally 为确保一段代码不管发生什么“异常”都被执行一段代码; 可以在一个成员函数调用的外面写一个 try 语句,在这个成员函数内部写另一个 try 语句 保护其他代码。每当遇到一个 try 语句,“异常”的框架就放到堆栈上面,直到所有的 try 语 句都完成。如果下一级的 try 语句没有对某种“异常”进行处理,堆栈就会展开,直到遇到 有处理这种“异常”的 try 语句。 66、运行时异常与一般异常有何异同?【基础】 答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中 可能遇到的异常,是一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运 行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 67、给我一个你最常见到的 runtime exception?【基础】 答:ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException 68、final, finally, finalize 的区别? 【基础】 答:final:修饰符(关键字);如果一个类被声明为 final,意味着它不能再派生出新的子类, 不能作为父类被继承,因此一个类不能既被声明为 abstract 的,又被声明为 final 的;将变 量或方法声明为 final,可以保证它们在使用中不被改变;被声明为 final 的变量必须在声明 时给定初值,而在以后的引用中只能读取,不可修改;被声明为 final 的方法也同样只能使 用,不能重载。 finally:再异常处理时提供 finally 块来执行任何清除操作;如果抛出一个异常,那么相 匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 finalize:方法名;Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除 出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个 对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方 法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这 个对象调用的。 69、类 Example A 继承 Exception,类 ExampleB 继承 Example A;【基础】 有如下代码片断: try{ throw new ExampleB(“b”); }catch(ExampleA e){ System.out.printfln(“ ExampleA”); }catch(Exception e){ System.out.printfln(“ Exception”); } 输出的内容应该是: A:ExampleA B:Exception C:b D:无 答:输出为 A。 集合部分: (共 11 题:基础 11 道) 70、介绍 JAVA 中的 Collection FrameWork(及如何写自己的数据结构)【基础】 答:Collection FrameWork 如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素 (Elements); Map 提供 key 到 value 的映射。 71、List,Set,Map 是否继承自 Collection 接口?【基础】 答:List,Set 是;Map 不是。 72、你所知道的集合类都有哪些?主要方法?【基础】 答:最常用的集合类是 List 和 Map。List 的具体实现包括 ArrayList 和 Vector,它们是可 变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值 索引访问元素的情形。 Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元 素对(称作“键”和“值”),其中每个键映射到一个值。 73、说出 ArrayList,Vector, LinkedList 的存储性能和特性?【基础】 答:ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便 增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内 存操作,所以索引数据快而插入数据慢,Vector 由于使用了 synchronized 方法(线程安全), 通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引数据需要进行 前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 74、Collection 和 Collections 的区别?【基础】 答:Collection 是 java.util 下的接口,它是各种集合的父接口,继承于它的接口主要有 Set 和 List;Collections 是个 java.util 下的类,是针对集合的帮助类,提供一系列静态方法实现对各 种集合的搜索、排序、线程安全化等操作。 75、HashMap 和 Hashtable 的区别? 【基础】 答 : 二 者 都 实 现了 Map 接口,是将惟一键映射到特定的值上;主要区别在于: 1)HashMap 没有排序,允许一个 null 键和多个 null 值,而 Hashtable 不允许; 2)HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey,因为 contains 方法容易让人引起误解; 3)Hashtable 继承自 Dictionary 类,HashMap 是 Java1.2 引进的 Map 接口的实现; 4)Hashtable 的方法是 Synchronize 的,而 HashMap 不是,在多个线程访问 Hashtable 时,不 需要自己为它的方法实现同步,而 HashMap 就必须为之提供外同步。 Hashtable 和 HashMap 采用的 hash/rehash 算法大致一样,所以性能不会有很大的差异。 76、Arraylist 与 Vector 区别?【基础】 答:就 ArrayList 与 Vector 主要从二方面来说: 1)同步性:Vector 是线程安全的(同步),而 ArrayList 是线程序不安全的; 2)数据增长:当需要增长时,Vector 默认增长一倍,而 ArrayList 却是一半。 77、List、Map、Set 三个接口,存取元素时,各有什么特点?【基础】 答:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保 存 key-value 值,value 可多值。 78、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是 equals()? 它们有何区别? 【基础】 答:Set 里的元素是不能重复的,用 equals ()方法来区分重复与否。覆盖 equals()方法用来判 断对象的内容是否相同,而”==”判断地址是否相等,用来决定引用值是否指向同一对象。 79、用程序给出随便大小的 10 个数,序号为 1-10,按从小到大顺序输出,并输出相应的序 号。【基础】 答:代码如下: package test; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Random; public class RandomSort { public static void printRandomBySort() { Random random = new Random(); // 创建随机数生成器 List list = new ArrayList(); // 生成 10 个随机数,并放在集合 list 中 for (int i = 0; i < 10; i++) { list.add(random.nextInt(1000)); } Collections.sort(list); // 对集合中的元素进行排序 Iterator it = list.iterator(); int count = 0; while (it.hasNext()) { // 顺序输出排序后集合中的元素 System.out.println(++count + ": " + it.next()); } } public static void main(String[] args) { printRandomBySort(); } } 80、用 JAVA 实现一种排序,JAVA 类实现序列化的方法? 在 COLLECTION 框架中,实现比较 要实现什么样的接口?【基础】 答:用插入法进行排序代码如下: package test; import java.util.*; class InsertSort { ArrayList al; public InsertSort(int num,int mod) { al = new ArrayList(num); Random rand = new Random(); System.out.println("The ArrayList Sort Before:"); for (int i=0;i
还剩29页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 3 人已下载

下载pdf

pdf贡献者

simonmei

贡献于2012-06-01

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf