日期:2014-05-20  浏览次数:20703 次

分享几个面试题
以下题目都是我面试时亲身经历的,我应聘的是java工程师,现在已经毕业上班了,给大家分享下:

1. 请解释以下设计模式:装饰,适配器,代理

2. servlet是线程安全吗?为什么不直接采用synchronized进行同步?

3. jvm的垃圾回收为什么设计成自动执行?(注意,不仅仅是为了防止由于程序员的粗心而造成的内存泄露)

4. java中的堆与栈的区别

5. 为什么覆盖了equals一定要覆盖hashcode?

6. 什么是开闭原则?

7. webwork与struts的区别?

8. 垃圾回收器的原理(主要是从有向图方面说)

9. 如何用java实现队列(估计是用LinkedList)

10. webwork的拦截器源码使用的什么框架?

11. 让你实现JNDI,你怎么做?

------解决方案--------------------
1. 请解释以下设计模式:装饰,适配器,代理 
.....

2. servlet是线程安全吗?为什么不直接采用synchronized进行同步? 
不是 要是进行同步了那你的网站就成彻底玩完了

3. jvm的垃圾回收为什么设计成自动执行?(注意,不仅仅是为了防止由于程序员的粗心而造成的内存泄露) 
减少工作量 专注业务逻辑 有时候什么时候释放内存不是程序员能预见的

4. java中的堆与栈的区别 
.....

5. 为什么覆盖了equals一定要覆盖hashcode? 
主要是Map么...

6. 什么是开闭原则? 
对扩展开放 对修改关闭

7. webwork与struts的区别? 
这个是不是类似struts1与struts2的区别

8. 垃圾回收器的原理(主要是从有向图方面说) 
....

9. 如何用java实现队列(估计是用LinkedList) 
....

10. webwork的拦截器源码使用的什么框架? 
....

11. 让你实现JNDI,你怎么做?
map?
------解决方案--------------------
谈谈我在没查网上资料的时候,(目前自学java相关知识,寻找工作中)回答哈下面问题,请指导:
1. 请解释以下设计模式:装饰,适配器,代理 
装饰模式:是不是就是外观facade模式根据字面意思就是把公用的部分(变量)定义为一个公用接口,如数据库连接;
适配器就是转换器,将已有的对象接口通过适配器类转换为自己需要的接口类型
代理:将对目标对象方法通过代理类对象访问,如各种框架的对象实例化是通过代理机制,但这个要求目标对象需要实现接口

2. servlet是线程安全吗?为什么不直接采用synchronized进行同步? 
不安全,servlet在服务器启动的时候就会创建,并且只有一个实例,当多用户访问时,若访问servlet的成员变量,则必须对servlet进行同步,将使其他用户不能访问该servlet,所以,一般不要在servlet中定义成员变量,但这里要注意向servlet中注入的HttpRequest和HttpResponse对象不是单例,它的创建相当于连接池的效果

3. jvm的垃圾回收为什么设计成自动执行?(注意,不仅仅是为了防止由于程序员的粗心而造成的内存泄露) 
提高系统资源的利用率
4. java中的堆与栈的区别 

堆用用来创建对象的用new,需要在运行期创建,速度慢,栈是创建基本类型,或常量区,它会在编译期进行自动优化(还没看《深入java虚拟机》,理解不专业)
5. 为什么覆盖了equals一定要覆盖hashcode? 
好象equals比较的就是内存地址的hashcode值
6. 什么是开闭原则? 

没听过
7. webwork与struts的区别? 
这里应该说的struts1和webwork,区别可以就是struts2和struts1的区别,struts2和webwork的区别就是包名吧,功能差不多
8. 垃圾回收器的原理(主要是从有向图方面说) 

不知道
9. 如何用java实现队列(估计是用LinkedList) 
对数据结构不了解,是不是就是实现一个先进后出的元素读取功能
10. webwork的拦截器源码使用的什么框架?
没理解意思拦截器应该使用aop编程,aop无非是用动态代理模式和CGLib机制 

11. 让你实现JNDI,你怎么做?
只知道jdbc数据源可以用JNDI访问,对EJB不了解,
(最后,大家给点建议,对于一个新手,面试java软件工程师,重点和知识体系说哈,谢)