面试题

1.两个对象值相同(x.equals(y)==true),但却可有不同的hash code,这句话对不对?为什么?

答: 不对,有相同的hash code。

2.GC是什么?为什么要有GC?

答: GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃
圾收集器会自动进行管理。要请求垃圾收
集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()

3.请简要描述一下J2EE应用中的class loader的层次结构?

答:以tomcat为例子:

Tomcat Server在启动的时候将构造一个ClassLoader树,以保证模块的类库是私有的
Tomcat Server的ClassLoader结构如下:
其中:
- Bootstrap - 载入JVM自带的类和$JAVA_HOME/jre/lib/ext/*.jar
- System - 载入$CLASSPATH/*.class
- Common - 载入$CATALINA_HOME/common/...,它们对TOMCAT和所有的WEB APP都可见
- Catalina - 载入$CATALINA_HOME/server/...,它们仅对TOMCAT可见,对所有的WEB APP都不可见
- Shared - 载入$CATALINA_HOME/shared/...,它们仅对所有WEB APP可见,对TOMCAT不可见(也不必见)
- WebApp? - 载入ContextBase?/WEB-INF/...,它们仅对该WEB APP可见



4."组合优于继承",是否同意这句话,并阐述你的观点。

答: 继承和组合都可以实现代码的重用(Reuse),为什么组合要优于继承呢?
回想SimUDuck这个例子,颇有感触,开始Joe的方案是用继承,代码改动简单,可以实现现有情况下的某些需求(大部分鸭子都是正常的,但有一小部分 是失败的,比如RubberDuck);仔细思考继承:通过继承,子类能够获得与父类相同的功能和属性,父类拥有了某种功能,子类就有了;但是如果子类需 要新的功能,直接在父类里面增加新的功能,那么会导致所有的子类同时拥有这种功能,这实际上是将类的功能与类紧紧的耦合在一起,是一种紧密耦合系统,由于 关系相当密切,导致改动一处而动全身,实际上不利于代码的重用。而组合恰好相反,她把类的各项功能分割开,互不干涉。一个类的功能,实际上是各种子功能的 组合,比如鸭子的功能就是飞行功能和发出叫声功能的组合,无论是何种鸭子,都是这样。同时到底是怎样飞行,怎样叫,又可以通过面向接口的编程实现多态。因 此这个组合的系统(Duck)很容易在加入新的成员,比如加入ModelDuck,加入RocketDuck,只需要实现新的相应的飞行和叫的功能类(实 现功能接口)。很明显,组合所产生的代码便于维护,易于扩展,是真正的Flexible Design。

6.请说下Template模式与Strategy模式的异同点。

答:Template method适用域可能更小一点,灵活性也差一点。如果子类也可以订制这些子步骤的顺序,那就不适合使用Template。使用策略模式,则没有那么多的限制,甚至常常没有子步骤。不过实现者需要知道整个算法的流程,同时也可能暴露过多的行为,从而可能造成使用者误用的可能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值