【金三银四】设计模式面试题(2021最新版)

article/2025/8/28 10:42:06

目录

前言

1.什么是设计模式

2.为什么要学习设计模式

3.设计模式分类

4.设计模式的六大原则

5.单例模式

5.1 什么是单例

5.2 哪些地方用到了单例模式

5.3 单例优缺点

5.4 单例模式使用注意事项:

5.5 单例防止反射漏洞攻击

5.6 如何选择单例创建方式

5.7 单例创建方式

6.工厂模式

6.1 什么是工厂模式

6.2 工厂模式好处

6.3 为什么要学习工厂设计模式

6.4 Spring开发中的工厂设计模式

6.5 工厂模式分类

7.代理模式

7.1 什么是代理模式

7.2 代理模式应用场景

7.3 代理的分类

7.4 三种代理的区别

7.5 用代码演示三种代理

8.建造者模式

8.1 什么是建造者模式

8.2 建造者模式的使用场景

8.3 代码案例

9.模板方法模式

9.1 什么是模板方法

9.2 什么时候使用模板方法

9.3 实际开发中应用场景哪里用到了模板方法

9.4 现实生活中的模板方法

9.5 代码实现模板方法模式

10.外观模式

10.1 什么是外观模式

10.2 外观模式例子

11.原型模式

11.1 什么是原型模式

11.2 原型模式的应用场景

11.3 原型模式的使用方式

11.4 代码演示

12.策略模式

12.1 什么是策略模式

12.2 策略模式应用场景

12.3 策略模式的优点和缺点

12.4 代码演示

13.观察者模式

13.1 什么是观察者模式

13.2 模式的职责

13.3 观察者模式应用场景

13.4 代码实现观察者模式

最后

前言

设计模式在日常的工作中,是非常重要的一项技能,使用设计模式可以重构整体架构代码、提交代码复用性、扩展性、减少代码冗余问题。这是每个 Java 工程师必备的技能!今日小编主要讲的是设计模式之一的策略模式,小编会通过案例和面试题,带你一步步由浅入深对策略模式进行解析。

小编分享的这份金三银四Java后端开发面试总结包含了JavaOOP、Java集合容器、Java异常、并发编程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL数据库、消息中间件MQ、Dubbo、Linux、ZooKeeper、 分布式&数据结构与算法等26个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有很多粉丝靠这份PDF拿下众多大厂的offer,今天在这里总结分享给到大家!【持续更新中!】

完整版Java面试题地址:2021最新面试题合集集锦。

序号专题内容链接地址
1中间件【金三银四】Java中间件面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/114002362
2微服务【金三银四】Java微服务面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/113923549
3并发编程【金三银四】Java并发编程面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/113895576
4 Java基础【金三银四】Java基础知识面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115146056
5Spring Boot【金三银四】Spring Boot面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115186811
6 Redis【金三银四】Redis面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115188010
7 Spring MVC【金三银四】Spring MVC面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115220638
8Spring Cloud【金三银四】Spring Cloud面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115220987
9MySQL优化【金三银四】MySQL优化面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115254620
10JVM【金三银四】JVM性能调优面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115283079
11Linux【金三银四】Linux面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115283583
12Mybatis【金三银四】Mybatis面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115285732
13网络编程【金三银四】TCP,UDP,Socket,Http网络编程面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115464896
14设计模式【金三银四】设计模式面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115466449
15大数据金三银四】大数据面试题100道(2021最新版)https://blog.csdn.net/SQY0809/article/details/115484939
16Tomcat【金三银四】Tomcat面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115486648
17多线程【金三银四】多线程面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115487212
18Nginx【金三银四】Nginx_BIO_NIO_AIO面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115488446
19memcache【金三银四】memcache面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115494213
20java异常【金三银四】java异常面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115530401
21Java虚拟机【金三银四】Java虚拟机面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115532365
22Java集合【金三银四】Java集合面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115599284
23Git常用命令【金三银四】Git常用命令(2021最新版)https://blog.csdn.net/SQY0809/article/details/115602390
24Elasticsearch【金三银四】Elasticsearch面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115604293
25Dubbo【金三银四】Dubbo面试题(2021最新版)https://blog.csdn.net/SQY0809/article/details/115605560


1.什么是设计模式

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

2.为什么要学习设计模式

  • 看懂源代码:如果你不懂设计模式去看JdkSpringSpringMVCIO等等等等的源码,你会很迷茫,你会寸步难行
  • 看看前辈的代码:你去个公司难道都是新项目让你接手?很有可能是接盘的,前辈的开发难道不用设计模式?
  • 编写自己的理想中的好代码:我个人反正是这样的,对于我自己开发的项目我会很认真,我对他比对我女朋友还好,把项目当成自己的儿子一样

3.设计模式分类

4.设计模式的六大原则

  • 开放封闭原则(Open Close Principle)

  • 里氏代换原则(Liskov Substitution Principle)

  • 依赖倒转原则(Dependence Inversion Principle)

  • 接口隔离原则(Interface Segregation Principle)

  • 迪米特法则(最少知道原则)(Demeter Principle)

  • 单一职责原则(Principle of single responsibility)

5.单例模式

5.1 什么是单例

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

5.2 哪些地方用到了单例模式

1. 网站的计数器,一般也是采用单例模式实现,否则难以同步。

2. 应用程序的日志应用,一般都是单例模式实现,只有一个实例去操作才好,否则内容不好追加显示。

3. 多线程的线程池的设计一般也是采用单例模式,因为线程池要方便对池中的线程进行控制

4. Windows的(任务管理器)就是很典型的单例模式,他不能打开俩个

5. windows的(回收站)也是典型的单例应用。在整个系统运行过程中,回收站只维护一个实例。

5.3 单例优缺点

5.4 单例模式使用注意事项:

1. 使用时不能用反射模式创建单例,否则会实例化一个新的对象

2. 使用懒单例模式时注意线程安全问题

3. 饿单例模式和懒单例模式构造方法都是私有的,因而是不能被继承的,有些单例模式可以被继承(如登记式模式)

5.5 单例防止反射漏洞攻击

private static boolean flag = false;
private Singleton() {
if (flag == false) {
flag = !flag;
} else {
throw new RuntimeException("单例模式被侵犯!");
}
}
public static void main(String[] args) {
}

5.6 如何选择单例创建方式

如果不需要延迟加载单例,可以使用枚举或者饿汉式,相对来说枚举性好于饿汉式。 如果需要延 迟加载,可以使用静态内部类或者懒汉式,相对来说静态内部类好于懒韩式。 最好使用饿汉式

5.7 单例创建方式

1.饿汉式

1. 饿汉式:类初始化时,会立即加载该对象,线程天生安全,调用效率高。

package com.lijie;
//饿汉式
public class Demo1 {
// 类初始化时,会立即加载该对象,线程安全,调用效率高
private static Demo1 demo1 = new Demo1();
private Demo1() {
System.out.println("私有Demo1构造参数初始化");
}
public static Demo1 getInstance() {
return demo1;
}
public static void main(String[] args) {
Demo1 s1 = Demo1.getInstance();
Demo1 s2 = Demo1.getInstance();
System.out.println(s1 == s2);
}
}

6.工厂模式

6.1 什么是工厂模式

它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法、抽象工厂模式

6.2 工厂模式好处

  • 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。
  • 利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。
  • 将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。

6.3 为什么要学习工厂设计模式

不知道你们面试题问到过源码没有,你知道Spring的源码吗,MyBatis的源码吗,等等等 如果你想学习很多框架的源码,或者你想自己开发自己的框架,就必须先掌握设计模式(工厂设计模式用的是非常非常广泛的)

6.4 Spring开发中的工厂设计模式

6.5 工厂模式分类

7.代理模式

7.1 什么是代理模式

  • 通过代理控制对象的访问,可以在这个对象调用方法之前、调用方法之后去处理/添加新的功能。(也就是AOP微实现)
  • 代理在原有代码乃至原业务流程都不修改的情况下,直接在业务流程中切入新代码,增加新功能,这也和Spring的(面向切面编程)很相似

7.2 代理模式应用场景

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

7.3 代理的分类

  • 静态代理(静态定义代理类)
  • 动态代理(动态生成代理类,也称为Jdk自带动态代理)
  • Cglib javaassist(字节码操作库)

7.4 三种代理的区别

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

2. jdk动态代理:使用反射完成代理。需要有顶层接口才能使用,常见是mybatismapper文件是代理。

3. cglib动态代理:也是使用反射完成代理,可以直接代理类(jdk动态代理不行),使用字节码技术,不能对 fifinal类进行继承。(需要导入jar包)

7.5 用代码演示三种代理

7.5.1静态代理

什么是静态代理

由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。

8.建造者模式

8.1 什么是建造者模式

  • 建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的方 式进行创建。
  • 工厂类模式是提供的是创建单个类的产品
  • 而建造者模式则是将各种产品集中起来进行管理,用来具有不同的属性的产品

8.2 建造者模式的使用场景

8.3 代码案例

9.模板方法模式

9.1 什么是模板方法

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

9.2 什么时候使用模板方法

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

9.3 实际开发中应用场景哪里用到了模板方法

  • 其实很多框架中都有用到了模板方法模式
  • 例如:数据库访问的封装、Junit单元测试、servlet中关于doGet/doPost方法的调用等等

9.4 现实生活中的模板方法

9.5 代码实现模板方法模式

10.外观模式

10.1 什么是外观模式

  • 外观模式:也叫门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。
  • 它向现有的系统添加一个接口,用这一个接口来隐藏实际的系统的复杂性。
  • 使用外观模式,他外部看起来就是一个接口,其实他的内部有很多复杂的接口已经被实现

10.2 外观模式例子

11.原型模式

11.1 什么是原型模式

  • 原型设计模式简单来说就是克隆
  • 原型表明了有一个样板实例,这个原型是可定制的。原型模式多用于创建复杂的或者构造耗时的实 例,因为这种情况下,复制一个已经存在的实例可使程序运行更高效。

11.2 原型模式的应用场景

11.3 原型模式的使用方式

11.4 代码演示

12.策略模式

12.1 什么是策略模式

  • 定义了一系列的算法 或 逻辑 或 相同意义的操作,并将每一个算法、逻辑、操作封装起来,而且使它们还可以相互替换。(其实策略模式Java中用的非常非常广泛)
  • 我觉得主要是为了 简化 if...else 所带来的复杂和难以维护

12.2 策略模式应用场景

12.3 策略模式的优点和缺点

优点:

1、算法可以自由切换。

2、避免使用多重条件判断。

3、扩展性非常良好。

缺点:

1、策略类会增多。

2、所有策略类都需要对外暴露。

12.4 代码演示

模拟支付模块有微信支付、支付宝支付、银联支付

1. 定义抽象的公共方法

13.观察者模式

13.1 什么是观察者模式

  • 先讲什么是行为性模型,行为型模式关注的是系统中对象之间的相互交互,解决系统在运行时对象之间的相互通信和协作,进一步明确对象的职责。
  • 观察者模式,是一种行为性模型,又叫发布-订阅模式,他定义对象之间一种一对多的依赖关系,使得当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。

13.2 模式的职责

观察者模式主要用于1N的通知。当一个对象的状态变化时,他需要及时告知一系列对象,令他们做出相应。

实现有两种方式:

1. 推:每次都会把通知以广播的方式发送给所有观察者,所有的观察者只能被动接收。

2. 拉:观察者只要知道有情况即可,至于什么时候获取内容,获取什么内容,都可以自主决定。

13.3 观察者模式应用场景

1. 关联行为场景,需要注意的是,关联行为是可拆分的,而不是组合关系。事件多级触发场景。

2. 跨系统的消息交换场景,如消息队列、事件总线的处理机制。

13.4 代码实现观察者模式

面试题答案解析完整文档:【设计模式面试题【附答案解析】】

最后

小编分享的文章到这里就结束了,整理不易,欢迎大家一起交流,喜欢小编分享的文章记得关注我点赞哟,感谢支持!


http://chatgpt.dhexx.cn/article/NV88VY3E.shtml

相关文章

【Java架构师面试题】设计模式面试专题(共35题含答案)

设计模式(DesignPattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 本篇为设计模式面试专题,总共收…

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

关于作者 🐶 程序猿周周 ⌨️ 短视频小厂BUG攻城狮 🤺 如果文章对你有帮助,记得关注、点赞、收藏,一键三连哦,你的支持将成为我最大的动力 本文是《后端面试小册子》系列的第 1️⃣2️⃣ 篇文章,该系列将整…

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简…