java面试题及答案(基础题122道,代码题19道)2009-8-6-004续

某公司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(); } } } 解答: 。请大概描述一下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(); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值