设计模式相关面试
Posted 小杰IT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式相关面试相关的知识,希望对你有一定的参考价值。
1、说说你所熟悉或听说过的设计模式以及你对设计模式的看法
常用的有23 种设计模式包括:Abstract Factory(抽象工厂模式),Builder(建造者模式),Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式);Facade(门面模式),Adapter(适配器模式),Bridge(桥梁模式),Composite(合成模式),Decorator(装饰模式),Flyweight(享元模式),Proxy(代理模式);Command(命令模式),Interpreter(解释器模式),Visitor(访问者模式),Iterator(迭代子模式),Mediator(调停者模式),Memento(备忘录模式),Observer(观察者模式),State(状态模式),Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibility(责任链模式)。
看法:所谓设计模式,就是一套被反复使用的代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。
2、你在开发中都用到了那些设计模式?用在什么场合?
面试被问到关于设计模式的知识时,可以拣最常用的作答,例如:
1)工厂模式:工厂类可以根据条件生成不同的子类实例,这些子类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作(多态方法)。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
场景:比如在spring中的Bean工厂就是使用的工厂模式,Bean工厂有很多种,它们负责创建各种各样不同的Bean,比如Map类型的Bean,List类型的Bean,Web服务Bean,子类们不需要关心单例或非单例情况下是否需要额外操作,只需要关心如何创建Bean,并且创建出来的Bean是多种多样的。
而其中的Bean默认采取的是单例模式。每个bean定义只生成一个对象实例,每次getBean请求获得的都是此实例
2)代理模式:给一个对象提供一个代理对象,并由代理对象控制原对象的引用。实际开发中,按照使用目的的不同,代理可以分为:远程代理、虚拟代理、保护代理、Cache 代理、防火墙代理、同步化代理、智能引用代理。
场景:
1.保护代理,控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。
2.最经典的就是Spring AOP 就是对目标类和方法进行切面增强的功能,通过在目标类的基础上增加切面逻辑,完成一些和程序业务无关的内容。主要有两种实现模式: 一种是JDK的动态代理,一种是Cglib代理
JDK动态代理只能代理实现了接口的目标类,Cglib则不需要 Cglib是基于类的代理 原理是对目标类生成一个子类然后覆盖和实现它的所有方法并增强 所有Cglib不能对final修饰的类进行代理。
代码:
interface Subject{
public void give() ;
}
class RealSubject implements Subject{
public void give(){
System.out.println("真正的讨债者:还我的钱。") ;
}
};
class ProxySubject implements Subject {
private Subject sub ; // 设置代理人
public ProxySubject(Subject sub){
this.sub = sub ;
}
public void before(){
System.out.println("准备刀子,绳索,毒药。。。") ;
}
public void give(){
this.before() ;
this.sub.give() ; // 真实主题
this.after() ;
}
public void after(){
System.out.println("跑路了。。。") ;
}
};
public class CaseDemo07 {
public static void main(String args[]){
Subject s = new ProxySubject(new RealSubject()) ;
s.give() ;
}
};
3)适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起使用的类能够一起工作。
4)模板方法模式:提供一个抽象类,将部分逻辑以具体方法或构造器的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法(多态实现),从而实现不同的业务逻辑。
5)单例模式:单例模式重点在于在整个系统上共享一些创建时较耗资源的对象。整个应用中只维护一个特定类实例,它被所有组件共同使用。Java.lang.Runtime是单例模式的经典例子。
详细请参考另一篇文章
3、几个在JDK库中使用的设计模式
装饰器设计模式被用于多个Java IO类中。单例模式用于Runtime,Calendar和其他的一些类中。工厂模式被用于各种不可变的类如Boolean,像Boolean.valueOf,观察者模式被用于Swing和很多的事件监听中
4、什么叫观察者设计模式
观察者模式是基于对象的状态变化和观察者的通讯,以便他们作出相应的操作。简单的例子就是一个天气系统,当天气变化时必须在展示给公众的视图中进行反映。这个视图对象是一个主体,而不同的视图是观察者。还有监听器也是
5、举一个用Java实现的装饰模式
装饰模式增加强了单个对象的能力。Java IO到处都使用了装饰模式,经典的例子就是Buffered系列类如BufferedReader和BufferedWriter,它们增强了Reader和Writer对象,以实现提升性能的Buffer层次的读取和写入
以上是关于设计模式相关面试的主要内容,如果未能解决你的问题,请参考以下文章
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段
Java之String相关内容详解(字符串和字符串常量池)面试题
2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试