以下题目都是我面试时亲身经历的,我应聘的是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.   

    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?
      

  2.   

    谈谈我在没查网上资料的时候,(目前自学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软件工程师,重点和知识体系说哈,谢)