前言程序员
前几天小伙伴告诉我他面试的时候面试官问到了设计模式相关的问题,有几道感受答的不太好,可能拿不到offer了;web
好在面试官仁慈,勉强拿到了offer,据说是看在他的态度比较好,给他加了点分,可是设计模式掌握不太好的问题仍是存在的;小编也是把最新整理的设计模式的视频给了他才解决的面试
小编把他被问到的设计模式相关的问题整理了一下,分享给你们,供你们参考设计模式
设计模式面试题安全
1. 请列举出在 JDK 中几个经常使用的设计模式?app
单例模式(Singleton pattern)用于 Runtime,Calendar 和其余的一些类中。工厂模式ide
(Factory pattern)被用于各类不可变的类如 Boolean,像 Boolean.valueOf,观察者模式函数
(Observer pattern)被用于 Swing 和不少的事件监听中。装饰器设计模式(Decorator性能
design pattern)被用于多个 Java IO 类中。测试
2. 什么是设计模式?你是否在你的代码里面使用过任 何设计模式?
设计模式是世界上各类各样程序员用来解决特定设计问题的尝试和测试的方法。设计模式
是代码可用性的延伸
3.Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
单例模式重点在于在整个系统上共享一些建立时较耗资源的对象。整个应用中只维护一个
特定类实例,它被全部组件共同使用。Java.lang.Runtime 是单例模式的经典例子。从 Java
5 开始你可使用枚举(enum)来实现线程安全的单例。
4. 在 Java 中,什么叫观察者设计模式(observer design pattern )?
观察者模式是基于对象的状态变化和观察者的通信,以便他们做出相应的操做。简单的例
子就是一个天气系统,当天气变化时必须在展现给公众的视图中进行反映。这个视图对象
是一个主体,而不一样的视图是观察者。
5. 使用工厂模式最主要的好处是什么?在哪里使用?
工厂模式的最大好处是增长了建立对象时的封装层次。若是你使用工厂来建立对象,以后
你可使用更高级和更高性能的实现来替换原始的产品实现或类,这不须要在调用层作任
何修改。
6. 举一个用 Java 实现的装饰模式(decorator design pattern) ?它是做用于对象层次仍是类
层次?
装饰模式增长强了单个对象的能力。Java IO 处处都使用了装饰模式,典型例子就是
Buffered 系列类如 BufferedReader 和 BufferedWriter,它们加强了 Reader 和 Writer 对象,
以实现提高性能的 Buffer 层次的读取和写入。
7. 在 Java 中,为何不容许从静态方法中访问非静态变量?
Java 中不能从静态上下文访问非静态数据只是由于非静态变量是跟具体的对象实例关联
的,而静态的却没有和任何实例关联。
8. 设计一个 ATM 机,请说出你的设计思路?
好比设计金融系统来讲,必须知道它们应该在任何状况下都可以正常工做。不论是断电还
是其余状况,ATM 应该保持正确的状态(事务) , 想一想 加锁(locking)、事务
(transaction)、错误条件(error condition)、边界条件(boundary condition) 等等。尽管
你不能想到具体的设计,但若是你能够指出非功能性需求,提出一些问题,想到关于边界
条件,这些都会是很好的。
9. 在 Java 中,何时用重载,何时用重写?
若是你看到一个类的不一样实现有着不一样的方式来作同一件事,那么就应该用重写
(overriding),而重载(overloading)是用不一样的输入作同一件事。在 Java 中,重载的方
法签名不一样,而重写并非。
10. 举例说明什么状况下会更倾向于使用抽象类而不是接口?
接口和抽象类都遵循”面向接口而不是实现编码”设计原则,它能够增长代码的灵活性,
能够适应不断变化的需求。下面有几个点能够帮助你回答这个问题:
在 Java 中,你只能继承一个类,但能够实现多个接口。因此一旦你继承了一个类,你就
失去了继承其余类的机会了。
接口一般被用来表示附属描述或行为如:Runnable、Clonable、Serializable 等等,所以当你
使用抽象类来表示行为时,你的类就不能同时是 Runnable 和 Clonable(注:这里的意思是指
若是把 Runnable 等实现为抽象类的状况),由于在 Java 中你不能继承两个类,但当你使用
接口时,你的类就能够同时拥有多个不一样的行为。
在一些对时间要求比较高的应用中,倾向于使用抽象类,它会比接口稍快一点。
若是但愿把一系列行为都规范在类继承层次内,而且能够更好地在同一个地方进行编码,
那么抽象类是一个更好的选择。有时,接口和抽象类能够一块儿使用,接口中定义函数,而
在抽象类中定义默认的实现。
小编最新整理的设计模式视频