文章目录
前 言 |
本文仅收录了一些常见的设计模式面试题,如需查看其它java面试题可查看我另一篇博文:
正 文 |
1.设计模式是什么?你是否在代码中使用过?
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
设计模式就是程序员总结出来的一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。,
2. JDK 中常用的设计模式有哪些?
3.单例模式是什么?请用 Java 写出线程安全的单例模式
单例(Singleton)模式:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。Java.lang.Runtime 是单例模式的经典例子。
public class Singleton5 {
private Singleton5(){}
private static class InstanceHolder{
private static Singleton5 instance = new Singleton5();
}
public static Singleton5 getInstance(){
return InstanceHolder.instance;
}
}
就是套了一个私有的静态内部类。java语言规范保证了,一个类或者接口的静态成员在被赋值的时候,这个类会初始化(有个初始化锁,每个线程都会至少获取一次初始化锁保证初始化),这个过程比较复杂,结果就是对任意线程,内部可以重排序,但是这种重排序对其他线程不可见。这个也是Google推荐的写法。
4.在 Java 中,什么叫观察者模式(observer design pattern)?
观察者(Observer)模式: 指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。
观察者模式是一种对象行为型模式,其主要优点如下:
- 降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。
- 目标与观察者之间建立了一套触发机制。
它的主要缺点如下:
- 目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。
- 当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。
5.使用工厂模式有哪些好处?说说它的应用场景?
6.举一个 Java中 实现装饰模式的例子?
7.在 Java 中,什么时候用重载,什么时候用重写?
8. Java 是否可以从静态方法中访问非静态变量?为什么?
9.什么情况下更倾向于使用抽象类而非接口?
接口和抽象类都遵循”面向接口而不是实现编码”设计原则,它可以增加代码的灵活性,可以适应不断变化的需求。下面有几个点可以帮助你回答这个问题:
在 Java 中,你只能继承一个类,但可以实现多个接口。所以一旦你继承了一个类,你就失去了继承其他类的机会了。
接口通常被用来表示附属描述或行为如:Runnable、Clonable、Serializable
等等,因此当你使用抽象类来表示行为时,你的类就不能同时是 Runnable 和 Clonable(注:这里的意思是指如果把 Runnable
等实现为抽象类的情况),因为在 Java 中你不能继承两个类,但当你使用接口时,你的类就可以同时拥有多个不同的行为。
- 在一些对时间要求比较高的应用中,倾向于使用抽象类,它会比接口稍快一点。
- 如果希望把一系列行为都规范在类继承层次内,并且可以更好地在同一个地方进行编码,那么抽象类是一个更好的选择。
有时,接口和抽象类可以一起使用,接口中定义函数,而在抽象类中定义默认的实现
干货推荐 |