一文整理总结常见Java后端面试题系列——设计模式篇(2022最新版)

article/2025/8/28 6:54:44

关于作者
🐶 程序猿周周
⌨️ 短视频小厂BUG攻城狮
🤺 如果文章对你有帮助,记得关注、点赞、收藏,一键三连哦,你的支持将成为我最大的动力

本文是《后端面试小册子》系列的第 1️⃣2️⃣ 篇文章,该系列将整理和梳理笔者作为 Java 后端程序猿在日常工作以及面试中遇到的实际问题,通过这些问题的系统学习,也帮助笔者顺利拿到阿里、字节、华为、快手等多个大厂 Offer,也祝愿大家能够早日斩获自己心仪的 Offer。


PS:《后端面试小册子》已整理成册,目前共十三章节,总计约二十万字,欢迎👏🏻关注公众号【程序猿周周】获取电子版和更多学习资料(最新系列文章也会在此陆续更新)。公众号后台可以回复关键词「电⼦书」可获得这份面试小册子。文中所有内容都会在 Github 开源,项目地址 csnotes,如文中存在错误,欢迎指出。如果觉得文章还对你有所帮助,赶紧点个免费的 star 支持一下吧!

在这里插入图片描述

标题地址
MySQL数据库面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/122910606
Redis面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/122934938
计算机网络面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/122973684
操作系统面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/122994599
Linux面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/122994862
Spring面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/123016872
Java基础面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/123080189
Java集合面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/123171501
Java并发面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/123266624
Java虚拟机面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/123412605
Java异常面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/123462676
设计模式面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/123490442
Dubbo面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/123538243
Netty面试题总结(2022版)https://blog.csdn.net/adminpd/article/details/123564362

文章目录

  • 1 概念
      • 1、什么是设计模式?
      • 2、使用设计模式的好处?
      • 3、设计模式六大原则?
      • 4、设计模式如何分类?
  • 2 创建型模式
      • 2.1 单例模式
      • 2.2 工厂模式
      • 2.3 建造者模式
      • 2.4 原型模式
  • 3 结构型模式
      • 3.1 代理模式
      • 3.2 外观模式
  • 4 行为型模式
      • 4.1 策略模式
      • 4.2 模板方法模式
      • 4.3 观察者模式

1 概念

1、什么是设计模式?

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

2、使用设计模式的好处?

  • 设计模式可在多个项目中重用。

  • 设计模式提供了一个帮助定义系统架构的解决方案。

  • 设计模式吸收了软件工程的经验。

  • 设计模式为应用程序的设计提供了透明性。

  • 设计模式是被实践证明切实有效的,由于它们是建立在专家软件开发人员的知识和经验之上的。

3、设计模式六大原则?

1)单一责任原则(Principle of single responsibility):一个类或者一个方法只负责一项职责。

2)里氏替换原则(Liskov Substitution Principle):使用基类的任何地方可以使用继承的子类,完美的替换基类。

3)依赖倒转原则(Dependence Inversion Principle):其核心思想是面向接口编程。

4)接口隔离原则(Interface Segregation Principle):使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思。

5)迪米特法则(Demeter Principle):最少知道原则,一个对象应当对其他对象有尽可能少地了解,简称类间解耦。

6)开闭原则(Open Close Principle):尽量通过扩展软件实体来解决需求变化,而不是通过修改已有的代码来完成变化。

4、设计模式如何分类?

通常情况下,我们可以将常用的 23 种设计模式分为创建模式结构模式以及行为模式三种类型。

  • 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

  • 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

  • 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

2 创建型模式

2.1 单例模式

  • 什么是单例模式

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

  • 单例模式的应用

1)应用程序的日志应用,一般都可用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。

2)数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。

3)多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。

  • 单例模式的实现

单例模式的创建方式主要分为懒汉式饿汉式两种,并在次基础衍生出更多实现方式:

1)饿汉式:类初始化时会立即创建该类单例对象,线程天生安全,调用效率高。

2)懒汉式:类初始化时,不会立即实例化该对象,而是在真正需要使用的时候才会创建该对象,具备懒加载功能。

3)静态内部方式:结合了懒汉式和饿汉式各自的优点,真正需要对象的时候才会加载,加载类是线程安全的。

public class Demo3 {public static class SingletonClassInstance {private static final Demo3 DEMO_3 = new Demo3();}// 方法没有同步public static Demo3 getInstance() {return SingletonClassInstance.DEMO_3;}
}

4)枚举单例:使用枚举实现单例模式,其优点是实现简单、调用效率高,枚举本身就是单例,由 JVM 从根本上提供保障,避免通过反射和反序列化的漏洞,而缺点是没有延迟加载。

public class Demo4 {public static Demo4 getInstance() {return Demo.INSTANCE.getInstance();}//定义枚举private static enum Demo {INSTANCE;// 枚举元素为单例private Demo4 demo4;private Demo() {demo4 = new Demo4();}public Demo4 getInstance() {return demo4;}}
}

5)双重检测锁方式:因为 JVM 重排序的原因,可能会初始化多次,不推荐使用。

public class Demo5 {private volatile static Demo5 demo5;public static Demo5 getInstance() {if (demo5 == null) {synchronized (Demo5.class) {if (demo5 == null) {demo5 = new Demo5();}}}return demo5;}
}

2.2 工厂模式

工厂模式提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

  • 工厂模式的好处

1)工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。

2)利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。

3)将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。

  • 工厂模式的分类

实现了创建者和调用者分离,工厂模式又可以分为简单工厂工厂方法以及抽象工厂三种模式。

1)简单工厂:用来生产同一等级结构中的任意产品。(不支持拓展增加产品)

2)工厂方法:用来生产同一等级结构中的固定产品。(支持拓展增加产品)

3)抽象工厂:用来生产不同产品族的全部产品。(不支持拓展增加产品;支持增加产品族)

2.3 建造者模式

建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的方式进行创建。

  • 建造者模式和工厂模式区别

工厂类模式是提供的是创建单个类的产品,而建造者模式则是将各种产品集中起来进行管理,更加关注零件装配,用来具有不同的属性的产品。

  • 建造者模式的应用

1)Java 语言中的 StringBuilder。

2.4 原型模式

原型设计模式简单来说就是克隆。原型表明了有一个样板实例,这个原型是可定制的。

原型模式多用于创建复杂的或者构造耗时的实例,因为这种情况下,复制一个已经存在的实例可使程序运行更高效。

  • 原型模式的使用场景

1)类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。这时我们就可以通过原型拷贝避免这些消耗。

2)通过 new 产生的一个对象需要非常繁琐的数据准备或者权限,这时可以使用原型模式。

3)一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用,即保护性拷贝。

3 结构型模式

3.1 代理模式

代理模式通过代理控制对象的访问,可以在这个对象调用方法之前、调用方法之后去处理,甚至添加新的功能。(AOP 的实现原理)

  • 代理模式的应用

Spring AOP、日志打印、异常处理、事务控制、权限控制等。

  • 代理模式的分类

1)静态代理:简单代理模式,是动态代理的理论基础,也是常见使用在代理模式。

2)JDK 动态代理:使用反射完成代理,需要有顶层接口才能使用,常见是Mybatis 的 mapper 文件。

3)cglib 动态代理:也是使用反射完成代理,使用字节码技术,可以直接代理类,有个缺点就是不能对 final 类进行继承。

3.2 外观模式

也被叫做门面模式,用于隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。

4 行为型模式

4.1 策略模式

策略模式定义了一系列的算法或业务逻辑操作,并将每一个算法、逻辑、操作封装起来,而且使它们还可以相互替换。

4.2 模板方法模式

模板方法模式定义一个操作中的业务处理逻辑骨架(父类),而将一些步骤延迟到子类中。使得子类可以不改变一个操作的结构来重定义该操作逻辑的实现。

实现一些操作时,整体步骤很固定,但是其中一小部分需要改变,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。

举个例子,去餐厅吃饭时,餐厅给我们提供了一个模板就是:看菜单,点菜,吃饭,付款,走人。这里的点菜和付款是不确定的,需要由子类来完成的,其他的则是一个模板。

4.3 观察者模式

观察者模式是一种行为性模型,又叫发布-订阅模式。其定义对象之间一种一对多的依赖关系,使得当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。


http://chatgpt.dhexx.cn/article/4Q99ye9u.shtml

相关文章

C++面试题之设计模式及设计原则

六大设计原则 1)单一职责原则 类的职责单一,对外提供一个功能,函数也支持; 2)里氏替换原则 任何抽象类的出现都可以用他的实现类进行替换。 3)依赖倒置原则 依赖于抽象,不要依赖具体实现&#…

23种设计模式(常见面试题)

23种设计模式(常见面试题) 1.什么是设计模式? 答: 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。是一套用来提高代码可复用性、可维护性、可读性、稳健…

设计模式面试题(总结最全面的面试题!!!)

文章目录 设计模式什么是设计模式为什么要学习设计模式设计模式分类设计模式的六大原则开放封闭原则(Open Close Principle)里氏代换原则(Liskov Substitution Principle)依赖倒转原则(Dependence Inversion Principle…

【2022最新Java面试宝典】—— 设计模式面试题(14道含答案)

目录 1.什么是设计模式2.为什么要学习设计模式3.设计模式分类4.设计模式的六大原则5.单例模式1.什么是单例2.那些地方用到了单例模式3.单例优缺点4.单例模式使用注意事项:5.单例防止反射漏洞攻击6.如何选择单例创建方式7.单例创建方式 6.工厂模式1.什么是工厂模式2.…

java高频面试题-设计模式

1 你所知道的设计模式有哪些? Java 中一般认为有 23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。下面列出了所有的设计模式。需要掌握的设计模式我单独列出来了,当然能掌握的越多越好。 总体来说设…

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

文章目录 1.设计模式是什么?你是否在代码中使用过?2. JDK 中常用的设计模式有哪些?3.单例模式是什么?请用 Java 写出线程安全的单例模式4.在 Java 中,什么叫观察者模式(observer design pattern&#xff09…

JAVA常见设计模式面试题

一、单例模式 java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、双重检查锁定 1.单例模式有以下特点:   a、单例类只能有一个实例。   b、单例类必须自己创建自己的唯一…

设计模式面试题

设计模式 详解 设计模式 参考: https://www.jianshu.com/p/fc4b2e679a1e 单例模式 整个应用中保证只有一个类的实例存在 参考: https://mp.weixin.qq.com/s/dlVXW6aW4wLcLpey9NxPig 饿汉式单例类 懒汉式单例类 instance new SingletonClas…

设计模式面试题(设计模式速成版)

文章目录 说明名词解释UML基础面向对象编程中,都有哪些设计原则开闭原则里氏替换原则(Liskov Substitution Principle)依赖转置(依赖倒置)原则单一职责原则接口隔离原则迪米特法则合成复用原则 设计模式的分类创建型模…

【前端面试题】06—16道设计模式面试题(附答案)

设计模式不是针对某个框架的,而是针对某类问题或某类需求提出的,因此有广泛的适用性。 我们学习设计模式不仅要学习理论,还要学习如何解决实际工作中的问题,所以在面试中,设计模式通常是结合某类需求考察的。 1、什么是…

❤️设计模式肝完了,还挺全!腾讯和阿里的offer已拿!❤️

设计模式肝完了,还挺全!腾讯和阿里的offer已拿! 金九银十已经来了,挺近大厂最好的机会已经来了!如果你是要找工作的,一定要抓住这个机会! 前面已经整理了很多的面试资料: 1&#x…

「面试必背」设计模式面试题(收藏)

前言 设计模式在日常的工作中,是非常重要的一项技能,使用设计模式可以重构整体架构代码、提交代码复用性、扩展性、减少代码冗余问题。这是每个 Java 工程师必备的技能!今日小编主要讲的是设计模式之一的策略模式,小编会通过案例…

textRank杂谈

转自:这些文章 1. PageRank算法概述 PageRank,即网页排名,又称网页级别、Google左侧排名或佩奇排名。 是Google创始人拉里佩奇和谢尔盖布林于1997年构建早期的搜索系统原型时提出的链接分析算法,自从Google在商业上获得空前的成功后&#xff…

人工智能自然语言处理—PageRank算法和TextRank算法详解

人工智能自然语言处理—PageRank算法和TextRank算法详解 一、PageRank算法 PageRank算法最初被用作互联网页面重要性的计算方法。它由佩奇和布林于1996年提出,并被用于谷歌搜索引擎的页面排名。事实上,PageRank可以在任何有向图上定义,然后…

TextRank算法学习及使用

文章目录 一、算法思想二、python代码实现三、TextRank算法使用1、textrank4zh模块的安装2、实例介绍 总结 参考资料: 文本关键词抽取、文本摘要生成是自然语言处理(NLP)的应用之一,一定会对我们的生活产生巨大影响。随着数字媒体…

自然语言处理NLP--TextRank算法

文本摘要方法 早在20世纪50年代,自动文本摘要已经吸引了人们的关注。在20世纪50年代后期,Hans Peter Luhn发表了一篇名为《The automatic creation of literature abstract》的研究论文,它利用词频和词组频率等特征从文本中提取重要句子&…

【自然语言处理】基于TextRank算法的文本摘要

基于TextRank算法的文本摘要 文本摘要是自然语言处理(NLP)的应用之一,一定会对我们的生活产生巨大影响。随着数字媒体的发展和出版业的不断增长,谁还会有时间完整地浏览整篇文章、文档、书籍来决定它们是否有用呢? 利…

【自然语言处理】利用TextRank算法提取关键词

利用TextRank提取关键词 TextRank 是一种基于 PageRank 的算法,常用于关键词提取和文本摘要。在本文中,我将通过一个关键字提取示例帮助您了解 TextRank 如何工作,并展示 Python 的实现。 使用 TextRank、NER 等进行关键词提取 1.PageRank简…

【NLP】关键词提取:TFIDF、TextRank

前两天看到论文《Chinese Poetry Generation with Planning based Neural Network》中使用TextRank进行关键词提取。在阅读文章时也想到了除了TextRank之外,经常还使用TFIDF进行关键词提取。 一些算法的使用取决于业务场景和算法的特性。关键词提取是干什么的呢&am…

TF-IDF算法和TextRank算法的分析比较

TF-IDF算法 TF-IDF(词频-逆文档频率)算法是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降…