JAVA 程序员面试题(1)
2008-06-12 10:40
1. HashMap 和 Hashtable 的区别。
HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完成
了 Map 接口,主要区别在于 HashMap 允许空(null)键值(key),由于非
线程安全,效率上可能高于 Hashtable。
HashMap 允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable
不允许。
HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和
containsKey。因为 contains 方法容易让人引起误解。
Hashtable 继承自 Dictionary 类,而 HashMap 是 Java1.2 引进的 Map
interface 的一个实现。
最大的不同是,Hashtable 的方法是 Synchronize 的,而 HashMap 不是,
在多个线程访问 Hashtable 时,不需要自己为它的方法实现同步,而
HashMap 就必须为之提供外同步。
Hashtable 和 HashMap 采用的 hash/rehash 算法都大概一样,所以性能不
会有很大的差异。
2. 同步和异步有何异同,在什么情况下分别使用他们?举例说明。
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读
的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等
待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
3. final, finally, finalize 的区别是什么?
final 修饰符(关键字)如果一个类被声明为 final,意味着它不能再派生出新的子类,
不能作为父类被继承。因此一个类不能既被声明为 abstract 的,又被声明为 final 的。
将变量或方法声明为 final,可以保证它们在使用中不被改变。被声明为 final 的变量
必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为 final 的方
法也同样只能使用,不能重载 finally 再异常处理时提供 finally 块来执行任何清除
操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入
finally 块(如果有的话)。
finalize 方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中
清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用
时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆
盖 finalize() 方法以整理系统资源或者执行其他清理工作。 finalize() 方法是在垃
圾收集器删除对象之前对这个对象调用的。
4. & 和&& 的区别
& 是位运算符。&& 是布尔逻辑运算符。
5. Collection 和 Collections 的区别
Collections 是个 java.util 下的类,它包含有各种有关集合操作的静态方法。
Collection 是个 java.util 下的接口,它是各种集合结构的父接口。
6. GC 是什么? 为什么要有 GC? (基础)
GC 是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
要请求垃圾收集,可以调用下面的方法之一: System.gc() Runtime.getRuntime().gc()
7. String s = new String("xyz");创建了几个 String Object?