温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

2021最新版的设计模式面试题有哪些

发布时间:2021-10-12 14:23:57 来源:亿速云 阅读:156 作者:iii 栏目:编程语言

这篇文章主要介绍“2021最新版的设计模式面试题有哪些”,在日常操作中,相信很多人在2021最新版的设计模式面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”2021最新版的设计模式面试题有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1.什么是设计模式

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

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

  • 看懂源代码:如果你不懂设计模式去看Jdk、Spring、SpringMVC、IO等等等等的源码,你会很迷茫,你会寸步难行

  • 看看前辈的代码:你去个公司难道都是新项目让你接手?很有可能是接盘的,前辈的开发难道不用设计模式?

  • 编写自己的理想中的好代码:我个人反正是这样的,对于我自己开发的项目我会很认真,我对他比对我女朋友还好,把项目当成自己的儿子一样

3.设计模式分类

2021最新版的设计模式面试题有哪些

4.设计模式的六大原则

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

2021最新版的设计模式面试题有哪些

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

2021最新版的设计模式面试题有哪些

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

2021最新版的设计模式面试题有哪些

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

2021最新版的设计模式面试题有哪些

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

2021最新版的设计模式面试题有哪些

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

2021最新版的设计模式面试题有哪些

5.单例模式

5.1 什么是单例

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

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

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

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

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

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

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

5.3 单例优缺点

2021最新版的设计模式面试题有哪些

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 单例创建方式

2021最新版的设计模式面试题有哪些

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);
}
}

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

6.工厂模式

6.1 什么是工厂模式

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

6.2 工厂模式好处

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

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

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

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

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

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

2021最新版的设计模式面试题有哪些

6.5 工厂模式分类

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

7.代理模式

7.1 什么是代理模式

  • 通过代理控制对象的访问,可以在这个对象调用方法之前、调用方法之后去处理/添加新的功能。(也就是AO的P微实现)

  • 代理在原有代码乃至原业务流程都不修改的情况下,直接在业务流程中切入新代码,增加新功能,这也和Spring的(面向切面编程)很相似

7.2 代理模式应用场景

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

7.3 代理的分类

  • 静态代理(静态定义代理类)

  • 动态代理(动态生成代理类,也称为Jdk自带动态代理)

  • Cglib 、javaassist(字节码操作库)

7.4 三种代理的区别

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

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

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

7.5 用代码演示三种代理

7.5.1静态代理

什么是静态代理

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

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

8.建造者模式

8.1 什么是建造者模式

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

  • 工厂类模式是提供的是创建单个类的产品

  • 而建造者模式则是将各种产品集中起来进行管理,用来具有不同的属性的产品

2021最新版的设计模式面试题有哪些

8.2 建造者模式的使用场景

2021最新版的设计模式面试题有哪些

8.3 代码案例

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

9.模板方法模式

9.1 什么是模板方法

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

9.2 什么时候使用模板方法

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

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

  • 其实很多框架中都有用到了模板方法模式

  • 例如:数据库访问的封装、Junit单元测试、servlet中关于doGet/doPost方法的调用等等

9.4 现实生活中的模板方法

2021最新版的设计模式面试题有哪些

9.5 代码实现模板方法模式

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

10.外观模式

10.1 什么是外观模式

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

  • 它向现有的系统添加一个接口,用这一个接口来隐藏实际的系统的复杂性。

  • 使用外观模式,他外部看起来就是一个接口,其实他的内部有很多复杂的接口已经被实现

10.2 外观模式例子

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

11.原型模式

11.1 什么是原型模式

  • 原型设计模式简单来说就是克隆

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

11.2 原型模式的应用场景

2021最新版的设计模式面试题有哪些

11.3 原型模式的使用方式

2021最新版的设计模式面试题有哪些

11.4 代码演示

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

12.策略模式

12.1 什么是策略模式

  • 定义了一系列的算法 或 逻辑 或 相同意义的操作,并将每一个算法、逻辑、操作封装起来,而且使它们还可以相互替换。(其实策略模式Java中用的非常非常广泛)

  • 我觉得主要是为了 简化 if...else 所带来的复杂和难以维护

12.2 策略模式应用场景

2021最新版的设计模式面试题有哪些

12.3 策略模式的优点和缺点

优点:

1、算法可以自由切换。

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

3、扩展性非常良好。

缺点:

1、策略类会增多。

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

12.4 代码演示

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

  1. 定义抽象的公共方法

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

13.观察者模式

13.1 什么是观察者模式

  • 先讲什么是行为性模型,行为型模式关注的是系统中对象之间的相互交互,解决系统在运行时对象之间的相互通信和协作,进一步明确对象的职责。

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

13.2 模式的职责

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

实现有两种方式:

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

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

13.3 观察者模式应用场景

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

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

13.4 代码实现观察者模式

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

2021最新版的设计模式面试题有哪些

到此,关于“2021最新版的设计模式面试题有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI