`
DoReMi123
  • 浏览: 5890 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类

Java问题集,针对EJ2nd中文版而整理,面对精通Java的简历时可用上

阅读更多
  此题集根据在阅读 Effective Java Second Edition中文版 时整理而成的,欢迎进行讨论与补充,共同学习与掌握。

1、 静态工厂方法相对公有构造器的优势有哪些?静态工厂方法的缺点又有哪些?通常在什么样的情况下使用它们比较合适?优先使用谁呢?为什么?请举例说明。

2、 Builder模式在什么样的情况下是一种不错的选择?为什么?Builder模式与传统的构造器相比,有什么优点?Builder模式与JavaBeans模式相比又有什么优点?

3、 请用最简洁高效的方式实现Singleton模式,并实现序列化,同时保证在反序列化后仍不会创建一个新的实例,而且能够有效地抵制反射(Reflection)的攻击。

4、 通过什么样的方式可以强化类的不可实例化?怎么样做比较明智?这样的实现方式有什么样的副作用?

5、 如何改进以下程序,使性能有明显的提升?
public static void main(String[] args) {
    Long sum = 0L;
    for (long i = 0; i < Integer.MAX_VALUE; i++) {
        sum += i;
    }
    System.out.println(sum);
}


6、 以下程序存在什么问题?如何加以修正?在日常的开发过程中,内存泄露的情况有哪些?如何针对这些可能出现的情况进行分析并加以解决?
public class Stack {
	private Object[] elements;
	private int size = 0;
	private static final int DEFAULT_INITIAL_CAPACITY = 16;
	public Stack() {
		elements = new Object[DEFAULT_INITIAL_CAPACITY];
	}
	public void push(Object e) {
		ensureCapacity();
		elements[size++] = e;
	}
	public Object pop() {
		if (size == 0)
			throw new EmptyStackException();
		return elements[--size];
	}
	/**
	* Ensure space for at least one more element, roughly
	* doubling the capacity each time the array needs to grow.
	*/
	private void ensureCapacity() {
		if (elements.length == size)
			elements = Arrays.copyOf(elements, 2 * size + 1);
	}
}


7、 Java语言规范保证了哪个线程将会执行终结方法finalize()呢?在什么时间执行?终结方法在性能上会带来多大的增强?终结方法有哪些合法的用途?有什么样的手段能够保证终结方法finalize()会被执行?




8、 考虑以下程序片断,它的输出结果是什么?为什么呢?
	java.net.URL urlMain = new java.net.URL("http://www.iteye.com");
	java.net.URL urlSub = new java.net.URL("http://Doremi123.iteye.com");	System.out.println(urlMain.equals(urlSub));


9、 你是否拒绝使用Cloneable接口?理由是什么?请举例说明。


10、 在Java里有四种可能的访问级别,私有的(private)、包级私有的(package-private)、受保护的(protected)、公有的(public)。那么请设计或举例出一个比这四种访问级别更小的访问级别,并说明它的作用。

11、 以下的代码片断是线程安全的吗?如果不是,请问如何改进后才可能是线程安全的,有哪些方式?这些方式各自的优缺点是什么?
public static final Map map = new HashMap();


12、 常量接口有哪些什么样的缺点?如何针对性地进行改进?


13、 考虑以下代码,为什么Java泛型系统会对基本类型进行限制,如何进行修正呢?
java.util.Stack <int> abc ;


14、 Producer-Extends,Consumer-Super(PECS)这个基本原则适用于哪里?所有的comparable和comparator是属于Producer吗?为何?


15、 自从Java 1.5发布以来,增加了枚举(enum)类型,请说说Java枚举类型背后的原理是什么?它有没有可以访问的构造器?能否创建枚举类型的实例,能否对它进行扩展?它是Singleton吗?

16、 考虑以下程序,打印的结果是什么?怎么样才能结果为26,为什么会发生这种情况?何以进行修正?
public class Bigram {
	private final char first;
	private final char second;
	public Bigram(char first, char second) {
		this.first = first;
		this.second = second;
	}
	public boolean equals(Bigram b) {
		return b.first == first && b.second == second;
	}
	public int hashCode() {
		return 31 * first + second;
	}
	public static void main(String[] args) {
		Set<Bigram> s = new HashSet<Bigram>();
		for (int i = 0; i < 10; i++)
			for (char ch = 'a'; ch <= 'z'; ch++)
				s.add(new Bigram(ch, ch));
				System.out.println(s.size());
	}
}


17、 考虑以下程序,它打印的结果是什么呢?为什么?与自己预期的目标是否相符?
public class CollectionClassifier {
	public static String classify(Set<?> s) {
		return "Set";
	}
	public static String classify(List<?> lst) {
		return "List";
	}
	public static String classify(Collection<?> c) {
		return "Unknown Collection";
	}
	public static void main(String[] args) {
		Collection<?>[] collections = {
		new HashSet<String>(),
		new ArrayList<BigInteger>(),
		new HashMap<String, String>().values()
	};
	for (Collection<?> c : collections)
		System.out.println(classify(c));
	}
}


18、 在Java 1.5发行版本中增加了可变参数(varargs)方法,它可以接受0个到多个指定类型的参数,请问它的实现原理是什么?为什么说printf和反射机制在可变参数中得到了极大的益处?


19、 相对于传统的for循环,for-each有哪些方面的优点?在性能上哪个更好?但是for-each在哪些种的情况下并不适应?为何?应当怎么做?

20、 基本类型与装箱基本类型之间三个会让你陷入麻烦的区别,它们是什么呢?什么时候应该用装箱基本类型呢?它们有几个合理的用处呢?基本类型与装箱基本类型在使用时应当注意哪些方面的问题呢?

21、 考虑以下程序,它说明了什么问题?你应当注意什么样的原则?
List<Subscriber> subscribers = new Vector<Subscriber>();

Vector<Subscriber> subscribers = new Vector<Subscriber>();


22、 在利用Java的反射机制给你带来编程上的灵活性时,说说利用反射机制也付出了其它方面的代价,这些代价有哪些方面?
23、 说说什么时机下才有使用本地方法(Native Method)的可能,理由是什么?本地方法存在哪些严重的缺点?


24、 请举例说明将Exception作为控制程序流向给你带来的后果有哪些?为什么?你将如何应对这样的后果?

25、 一般而言,失败的方法调用应该使对象保持在被调用之前的状态。具有这种属性的方法被称为具有失败原子性(failure atomic),那么有几种方法能够实现这种效果呢?你是怎么看待这个特性的?

26、 考虑以下程序,你应该如何进行处理?
try {
...
} catch (SomeException e) {
}



27、 考虑以下程序,它存在什么问题?如何进行修正才保证是线程安全的?
private static volatile int nextSerialNumber = 0;
	public static int generateSerialNumber() {
	return nextSerialNumber++;
}


28、 线程安全性有哪些种级别?并考虑以下程序,它是线程安全的吗?不是的话,如何修正才能保证它是线程安全的?
private Object lock = new Object();
	public void foo() {
		synchronized(lock) {
		...
	}
}


29、 考虑以下双重检查模式的程序,它是线程安全的吗?不是的话,如何修正才能保证它是线程安全的?
private FieldType field;
FieldType getField() {
	FieldType result = field;
	if (result == null) { // First check (no locking)
		synchronized(this) {
			result = field;
			if (result == null) // Second check (with locking)
				field = result = computeFieldValue();
		}
	}
	return result;
}



30、 HTTP会话状态为什么可以被缓存?RMI的异常为什么可以从服务器端传递到客户端呢?GUI组件为什么可以被发送、保存和恢复呢?是因为它们实现了Serializable接口吗?

31、 通过implements Serializable接口就实现类的序列化吗?实现序列化Serializable接口的代价有哪些?

32、 如果超类没有提供一个可访问的无参构造器,它的子类可以被序列化吗?

33、 当一个实例采用默认的序列化形式,并且给某些域标记为transient,那么当实例反序列化回来后,这些标志为transient域的值各是些什么呢?

34、 序列化代理模式(Serialization Proxy Pattern)有哪些局限性?它所增强的功能和安全性带来的后果是什么?
20
2
分享到:
评论
11 楼 tianmo2008 2009-06-05  
怪不得这段时间的面试题目难度大了那么多了,原来是楼主的题目已经在市面上流行了,
这份提对付高手还说得过去,一些公司用来对付新人,就实在太冤了..呵呵
10 楼 oldcrane 2009-06-03  
惭愧啊,书看过,好些问题还要回去查书
9 楼 JimyChen 2009-06-02  
只有问题,没答案的?
8 楼 mianhuatangone 2009-06-02  
有结果吗?希望作者解答一下
7 楼 linhong_1001 2009-06-02  
不知道问题是什么意思的人飘过
6 楼 kiven 2009-06-01  
 
读的很细心、可以根据博主的观点在看看这本书。
5 楼 whaosoft 2009-06-01  
楼主整理的真不少呢


呵呵 只有应届毕业的 才在简历上乱抡呢~ 什么精通啊什么的
要不就是忽悠  1年经验做5个以上项目的

4 楼 zuzong 2009-06-01  
  博主厉害,我看过两遍都不太清楚。。。
3 楼 phyeas 2009-06-01  
还好没在 简历上写精通XXX
2 楼 Saito 2009-05-31  
很经典. 不错.  楼主看书仔细的嘞. .
1 楼 剑事 2009-05-31  
不错的整理
^
|

相关推荐

Global site tag (gtag.js) - Google Analytics