面试Java开发时问的一些问题,多态的条件。。
Java中多态的条件
在Java语言中,Override(覆盖、重写)是实现多态的关键技术。
- 继承
- 父类引用子类对象
- 方法的重写
PS:1
2
3这是面试官问的第一个问题,我回答的也是一脸懵逼。
不过两个面试官挺和蔼的,说就是覆盖和重写,我当时咋就想不到了。
HashMap与HashTable的比较
- HashTable是线程安全的,使用synchronized来进行同步。
- HashMap可以插入键为null的Entry。
设计模式
创建型
- 单例模式(Singleton)
确保一个类只有一个实例,并提供该实例的全局访问点。
- 工厂模式
在创建一个对象时不向客户端暴露内部细节,并提供一个创建对象的通用接口。
行为型
- 责任链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。
- 观察者模式
定义对象之间的一对多依赖,当一个对象的状态改变时,它的所有依赖都会收到通知并且自动更新状态。
主题(Subject)是被观察的对象,而其所有依赖者(Observer)称为观察者。
主题(Subject)具有注册和移除观察者,并通知所有观察者的功能,主题是通过维护一张观察者列表来实现这些操作的。
观察者(Observer)的注册功能需要调用主题的registerObserver()方法。
- 策略模式
定义一系列算法,封装每个算法,并使它们可以互换。
策略模式可以让算法独立于使用它的客户端。
- 命令模式
将命令封装到对象中,具有以下作用:
1 | 1. 使用命令来参数化其它对象 |
结构型
- 代理模式
控制对其他对象的访问,可以用于增强一个类的方法。
应用场景:
- java.lang.reflect.Proxy
- RMI
- 适配器模式
把一个类的接口转换成另一个用户需要的接口。
- 装饰模式
为对象动态添加功能。
应用场景:
- java.io.BufferedInputStream(InputStream)
- java.io.DataInputStream(InputStream)
- java.io.BufferedOutputStream(OutputStream)
- java.util.ZipOutputStream(OutputStream)
- 组合模式
将对象组合成树形结构来表示”整体/部分”层次关系,允许用户以相同的方式单独处理对象和组合对象。