Java常见设计模式面试题及答案


前    言
本文仅收录了一些常见的设计模式面试题,如需查看其它java面试题可查看我另一篇博文:

JAVA | 2021最全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 中你不能继承两个类,但当你使用接口时,你的类就可以同时拥有多个不同的行为。

  • 在一些对时间要求比较高的应用中,倾向于使用抽象类,它会比接口稍快一点。
  • 如果希望把一系列行为都规范在类继承层次内,并且可以更好地在同一个地方进行编码,那么抽象类是一个更好的选择。

有时,接口和抽象类可以一起使用,接口中定义函数,而在抽象类中定义默认的实现


干货推荐

Java设计模式:23种设计模式全面解析(超级详细)
java中的7种单例模式

评论 2 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

JAVA6b

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值