Java面试题(1)



Java面试题(1)


#########################################################

###【面试题部分:难度比较大】###
#########################################################

某公司Java面试题及部分解答(难度较大)

1。请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别。(5) 

2。请问你在什么情况下会在你的JAVA代码中使用可序列化?(5) 
为什么放到HttpSession中的对象必须要是可序列化的?(5) 

3。为什么在重写了equals()方法之后也必须重写hashCode()方法?(10) 

4。sleep()和wait()有什么区别?(10) 

5。编程题:用最有效率的方法算出2乘以17等于多少?(5) 

6。JAVA是不是没有内存泄漏问题?看下面的代码片段,并指出这些代码隐藏的问题。(10) 

Object[] elements = new Object[10]; 
int size; 
...

public Object pop() { 
    if (size == 0) 
    return null; 
    Object o = elements[--size]; 
    return o; 
} 

7。请阐述一下你对JAVA多线程中“锁”的概念的理解。(10) 


8。所有的递归实现都可以用循环的方式实现,请描述一下这两种实现方式各自的优劣。 
并举例说明在什么情况下可以使用递归,而在什么情况下只能使用循环而不能使用递归?(5) 

9。请简要讲一下你对测试驱动开发(TDD)的认识。(10) 

10。请阐述一下你对“面向接口编程”的理解。(10) 

11。在J2EE中有一个“容器(Container)”的概念,不管是EJB、PICO还是Spring都有他们 
各自实现的容器,受容器管理的组件会具有有生命周期的特性,请问,为什么需要容器? 
它的好处在哪里?它会带来什么样的问题?(15) 

12。请阐述一下你对IOC(Inversion of Control)的理解。(可以以PICO和Spring的IOC作为例子说明他们在实现上各自的特点)(10) 

13。下面的代码在绝大部分时间内都运行得很正常,请问在什么情况下会出现问题?问题的根源在哪里?(10) 

	import java.util.LinkedList; 

	public class Stack { 
		LinkedList list = new LinkedList(); 
			public synchronized void push(Object x) { 
			synchronized(list) { 
			list.addLast( x ); 
			notify(); 
		} 
	} 

	public synchronized Object pop() 
		throws Exception { 
			synchronized(list) { 
				if( list.size() <= 0 ) { 
					wait(); 
				} 
				return list.removeLast(); 
			} 
		} 
	} 


解答:

1。请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别。(5) 线程安全与否角度回答

2。请问你在什么情况下会在你的JAVA代码中使用可序列化?(5) cluster中session复制,缓存persist与reload
为什么放到HttpSession中的对象必须要是可序列化的?(5) 没必须,不过session反序列化过程会导致对象不可用.

3。为什么在重写了equals()方法之后也必须重写hashCode()方法?(10)API规范

4。sleep()和wait()有什么区别?(10)前者占用CPU,后者空闲CPU

5。编程题:用最有效率的方法算出2乘以17等于多少?(5)17>>1

6。JAVA是不是没有内存泄漏问题?看下面的代码片段,并指出这些代码隐藏的问题。(10)不是
...
...没发现内存泄漏的问题

7。请阐述一下你对JAVA多线程中“锁”的概念的理解。(10)同步因子,在某段代码上增加同步因子,那么整个JVM内部只能最多有一个线程执行这段,其余的线程按FIFO方式等待执行.

8。所有的递归实现都可以用循环的方式实现,请描述一下这两种实现方式各自的优劣。
并举例说明在什么情况下可以使用递归,而在什么情况下只能使用循环而不能使用递归?(5)没发现所有的递归都可以用循环实现的,尤其是那种不知道循环重数的递归算法.递归的优点是简炼,抽象性好;循环则更直观.递归一般用于处理一级事务能转化成更简的二级事务的操作.归纳不出二级事务或者二级事务更复杂的情况不能用.

9。请简要讲一下你对测试驱动开发(TDD)的认识。(10)不认识

10。请阐述一下你对“面向接口编程”的理解。(10)1,利于扩展;2,暴露更少的方法;

11。在J2EE中有一个“容器(Container)”的概念,不管是EJB、PICO还是Spring都有他们
各自实现的容器,受容器管理的组件会具有有生命周期的特性,请问,为什么需要容器?
它的好处在哪里?它会带来什么样的问题?(15)组件化,框架设计...

12。请阐述一下你对IOC(Inversion of Control)的理解。(可以以PICO和Spring的IOC作为例子说明他们在实现上各自的特点)(10)不理解

13。下面的代码在绝大部分时间内都运行得很正常,请问在什么情况下会出现问题?问题的根源在哪里?(10)wait和notify使用目的不能达到,wait()的obj,自身不能notify().出题人对wait和notify机制不够理解.
import java.util.LinkedList;

	public class Stack {

		LinkedList list = new LinkedList();
	
		public synchronized void push(Object x) {
			synchronized(list) { 
				list.addLast( x );
				notify();
			}
		}

		public synchronized Object pop()
		throws Exception { 
			synchronized(list) { 
			if( list.size() <= 0 ) {
				wait();
				}
				return list.removeLast();
			}
		}
	}



你拿了多少分,从哪些方面考虑问题




1。请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别。(5)

// thread-safe or unsafe, could contain null values or not

2。请问你在什么情况下会在你的JAVA代码中使用可序列化?(5)
为什么放到HttpSession中的对象必须要是可序列化的?(5)
// save, communicate

3。为什么在重写了equals()方法之后也必须重写hashCode()方法?(10)

// implementations of dictionaries need hashCode() and equals()

4。sleep()和wait()有什么区别?(10)

// threads communication: wait() and notifyAll()

5。编程题:用最有效率的方法算出2乘以17等于多少?(5)

// 2<<4+2

6。JAVA是不是没有内存泄漏问题?看下面的代码片段,并指出这些代码隐藏的问题。(10)
...
Object[] elements = new Object[10];
int size;
...
public Object pop() {
if (size == 0)
return null;
Object o = elements[--size];
return o;
}

// elements[size] = null;

7。请阐述一下你对JAVA多线程中“锁”的概念的理解。(10)

// optimistic lock, pessimistic lock, signal, dead lock, starvation, synchronization

8。所有的递归实现都可以用循环的方式实现,请描述一下这两种实现方式各自的优劣。
并举例说明在什么情况下可以使用递归,而在什么情况下只能使用循环而不能使用递归?(5)

// recursive: when you need a stack and stack memory is enough
// non-recursive: when you need a queue

9。请简要讲一下你对测试驱动开发(TDD)的认识。(10)

// write unit testing code first

10。请阐述一下你对“面向接口编程”的理解。(10)

// adapter, listener, bridge, decorator, proxy... patterns

11。在J2EE中有一个“容器(Container)”的概念,不管是EJB、PICO还是Spring都有他们
各自实现的容器,受容器管理的组件会具有有生命周期的特性,请问,为什么需要容器?
它的好处在哪里?它会带来什么样的问题?(15)

// encapsulation

12。请阐述一下你对IOC(Inversion of Control)的理解。(可以以PICO和Spring的IOC作为例子说明他们在实现上各自的特点)(10)

// reduce classes' dependencies

13。下面的代码在绝大部分时间内都运行得很正常,请问在什么情况下会出现问题?问题的根源在哪里?(10)
import java.util.LinkedList;

	public class Stack {

		LinkedList list = new LinkedList();
	
		public synchronized void push(Object x) {
			synchronized(list) { 
				list.addLast( x );
				notify();
			}
		}

		public synchronized Object pop()
		throws Exception { 
			synchronized(list) { 
			if( list.size() <= 0 ) {
				wait();
				}
				return list.removeLast();
			}
		}
	}


// dead lock, synchronized on both 'list' and 'this'


你可能感兴趣的:(Java面试)