面试Java开发时问的一些问题,多态的条件。。

Java中多态的条件


在Java语言中,Override(覆盖、重写)是实现多态的关键技术。

  • 继承
  • 父类引用子类对象
  • 方法的重写

PS:

1
2
3
这是面试官问的第一个问题,我回答的也是一脸懵逼。

不过两个面试官挺和蔼的,说就是覆盖和重写,我当时咋就想不到了。

HashMap与HashTable的比较

  • HashTable是线程安全的,使用synchronized来进行同步。
  • HashMap可以插入键为null的Entry。

设计模式

创建型

  • 单例模式(Singleton)


确保一个类只有一个实例,并提供该实例的全局访问点。

  • 工厂模式


在创建一个对象时不向客户端暴露内部细节,并提供一个创建对象的通用接口。

行为型

  • 责任链模式


使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。

  • 观察者模式


定义对象之间的一对多依赖,当一个对象的状态改变时,它的所有依赖都会收到通知并且自动更新状态。



主题(Subject)是被观察的对象,而其所有依赖者(Observer)称为观察者。


主题(Subject)具有注册和移除观察者,并通知所有观察者的功能,主题是通过维护一张观察者列表来实现这些操作的。


观察者(Observer)的注册功能需要调用主题的registerObserver()方法。

  • 策略模式


定义一系列算法,封装每个算法,并使它们可以互换。



策略模式可以让算法独立于使用它的客户端。

  • 命令模式


将命令封装到对象中,具有以下作用:

1
2
3
4
1. 使用命令来参数化其它对象
2. 将命令放入队列中进行排队
3. 将命令的操作记录到日志中
4. 支持可撤销的操作
结构型

  • 代理模式


控制对其他对象的访问,可以用于增强一个类的方法。

应用场景:

  • java.lang.reflect.Proxy
  • RMI
  • 适配器模式


把一个类的接口转换成另一个用户需要的接口。

  • 装饰模式


为对象动态添加功能。

应用场景:

  • java.io.BufferedInputStream(InputStream)
  • java.io.DataInputStream(InputStream)
  • java.io.BufferedOutputStream(OutputStream)
  • java.util.ZipOutputStream(OutputStream)
  • 组合模式


将对象组合成树形结构来表示”整体/部分”层次关系,允许用户以相同的方式单独处理对象和组合对象。

面经