文章图片
设计模式通常是在软件开发行业中使用的一组标准化实践。设计模式代表社区提供的解决方案, 用于解决与软件开发相关的日常任务中遇到的一般问题。
让我们看一下最常见的设计模式访谈问题和答案。这些问题将帮助你进行编码面试和竞争性考试。
1)分类Java设计模式?
基于问题分析, 我们可以将设计模式分为以下几类。
创作模式
- 工厂方法/模板
- 抽象工厂
- 建造者
- 原型
- 辛格尔顿
- 适配器
- 桥
- 过滤
- 综合
- 装饰器
- 正面
- 飞行重量
- 代理
- 口译员
- 模板方法/图案
- 责任链
- 命令模式
- 迭代器模式
- 策略模式
- 访客模式
- MVC模式
- 数据访问对象模式
- 前控制器模式
- 拦截滤镜模式
- 转移对象图案
- 设计模式可在多个项目中重复使用。
- 设计模式提供了有助于定义系统体系结构的解决方案。
- 设计模式记录了软件工程经验。
- 设计模式为应用程序的设计提供了透明度。
- 由于它们是建立在专家软件开发人员的知识和经验之上的, 因此它们得到了验证和充分证明。
1994年, 四位作者Erich Gamma, Ralph Johnson, Richard Hel和John Vlissides出版了一本书, 标题为” 可重用的面向对象软件的设计模式元素” 。本书介绍了软件开发中设计模式的概念。
这四位作者被称为” 四个GOF的帮派” 。
4)什么是创作模式?
创新设计模式与创建对象的方式有关。在实例化类时做出决定时, 将使用创建设计模式。
EmpRecord e1 =新的EmpRecord();
由于new关键字用于在Java中创建对象, 因此, 这里我们使用new关键字创建实例。在某些情况下, 必须根据程序的性质更改对象的性质。在这种情况下, 我们应该使用创新的设计模式来提供更通用, 更灵活的方法。
5)什么是工厂模式?
- 它是Java中最常用的设计模式。
- 这些设计模式属于创建模式, 因为该模式提供了创建对象的最佳方法之一。
- 在Factory模式中, 我们不向客户端公开创建逻辑, 而不会使用标准接口引用创建的对象。
- 工厂模式允许子类选择要创建的对象的类型。
- 工厂模式也称为虚拟构造函数。
抽象工厂模式状态定义了用于创建相关对象族的抽象类或接口, 但未指定其具体子类。这意味着Abstract Factory允许类返回类的工厂。这就是为什么抽象工厂模式比工厂模式高一级的原因。
- 抽象工厂模式围绕超类工作, 超类创建其他类。
- 抽象工厂模式属于创建模式, 因为该模式提供了创建对象的最佳方法之一。
- 在” 抽象工厂” 模式中, 接口可用于创建相关对象的工厂, 而无需显式标识其类。
- 每个生成的工厂都可以根据Factory模式提供对象。
结构模式用于提供有关类组成和对象结构的解决方案和有效标准。它们依赖于继承和接口的概念, 以允许多个对象或类一起工作并形成单个工作整体。
结构设计模式负责如何组合类和对象以形成较大的结构。
8)解释单例模式?
Java中的单例模式是一种允许在应用程序内使用单个实例的模式。单例模式的一个很好的例子是java.lang.Runtime。
单例模式状态定义了一个只有一个实例并提供对其全局访问点的类。
换句话说, 类的责任是只能创建单个实例, 而所有其他类都可以使用单个对象。
9)描述你可以通过几种方式创建单例模式?
有两种创建Singleton模式的方法。
1.早期实例化
它负责在加载时创建实例。
2.延迟实例化
需要时, 它负责创建实例。
10)什么是适配器模式?
【最新推荐!Java设计模式面试题及其答案汇总】适配器模式根据需要将类的接口转换为另一个接口。
换句话说, 它使你可以根据需要转换接口, 同时将类服务与其他接口一起使用。
它也被称为包装器。
11)说明适配器模式的用法?
在以下情况下使用它:
- 当对象需要利用具有不兼容接口的现有类时。
- 如果我们想创建一个可重用的类, 该类与不具有兼容接口的类协作。
描述设计模式时应注意以下几点。
- 模式名称和分类。
- 问题与解决方案。
- 后果:变体和与语言有关的替代方法也应解决。
- 用途:确定实际系统中的用途及其效率。
装饰器模式是流行的Java设计模式之一。由于它在java.io(程序包)中的大量使用, 因此很常见。装饰器模式使用合成代替继承来扩展对象在运行时的功能。
BufferedReader和BufferedWriter是Java中装饰器模式的一些出色示例。
14)Java中的策略和状态设计模式之间的区别?
由于策略和状态模式具有相同的结构, 因此该问题是Java设计模式访谈的常见问题。两种模式的UML类图看起来完全相同, 但是它们的意图不同。
状态设计模式用于管理和定义对象的状态, 而策略模式用于描述一组可互换算法。
15)Java中的Composite Design Pattern有什么优点?
组合设计模式允许客户对可能表示对象层次结构的对象进行集体操作。
复合设计模式的优点如下。
- 它描述了包含原始对象和复杂对象的类层次结构。
- 它使添加新种类的组件变得容易。
- 它具有可管理的类或接口, 从而具有结构上的灵活性。
在以下情况下使用它:
- 当我们要表示对象的部分或全部层次时。
- 万一我们需要将职责动态添加到单个对象而又不影响其他对象。
JDK库中使用的一些设计模式如下。
- 包装器类使用装饰器模式。
- Calendar类(运行时)使用Singleton模式。
- 包装器类使用工厂模式, 例如Integer.valueOf。
- 事件处理框架使用观察者模式, 例如swing, awt。
构建器设计模式的优点如下。
- 它有助于在对象的构造和表示之间明确区分。
- 它提供了对施工过程的改进控制。
- 构造函数参数减少了, 并在高度可读的方法调用中提供。
- 在设计模式中, 对象始终以完整状态实例化。
- 在Builder设计模式中, 可以在对象构建过程中快速构建不可变对象。
有很多方法可以用Java编写线程安全的单例。
- 可以通过使用双重检查的锁定编写单例来编写线程安全的单例。
- 另一种方法是, 使用在类加载期间初始化的静态Singleton实例。
- 通过使用Java枚举创建线程安全的单例, 这是最直接的方法。
是的, 可以创建单例对象的克隆。
21)什么是代理模式, 它有什么作用?
术语代理代表代表另一个对象的对象。代理模式为另一个目的提供了替代或占位符, 以控制对其的访问。
根据四个人的帮派, 代理模式” 为访问原始对象提供了控制” 。
我们可以执行许多安全操作, 例如隐藏原始对象的信息, 按需加载等。
也称为占位符或替代。
22)解释一些不同类型的代理?
在许多情况下, 代理模式是有益的。让我们看看一些不同的代理。
保护代理
它根据某些条件控制对真实主题的访问。
虚拟代理
虚拟代理用于实例化昂贵的对象。代理管理实现中实际主题的生存期。
它决定了实例创建的必要性以及何时重新使用它。虚拟代理可优化性能。
缓存代理
缓存代理用于缓存对真实主题的昂贵调用。代理可以使用许多缓存策略。
其中一些是直读, 直写, 备用缓存和基于时间的。缓存代理用于增强性能。
远程代理
远程代理用于分布式对象通信。远程代理通过调用本地对象方法导致在远程对象上执行。
智能代理
智能代理用于实现日志调用和对对象的引用计数。
23)解释责任链模式吗?
在责任链模式中, 发件人将请求发送到对象链, 链中的任何对象都可以处理该请求。
责任链模式可避免将请求的发送方与其接收方耦合。例如, ATM服务在货币交易中使用” 责任链” 设计模式。
而且, 我们可以解释一下, 通常, 每个接收者都包含另一个接收者的参考。如果一个对象可能无法处理该请求, 则它将其发送给下一个接收者, 依此类推。
24)解释责任链模式的优势以及何时使用?
- 它使耦合最小化。
- 它在将责任分配给对象时提供了灵活性。
- 它允许一组类充当一个类。在一个类中产生的事件可以在组合的帮助下发送到其他处理程序类。
在以下情况下使用它:
- 当多个对象准备好处理请求, 并且处理程序未知时。
- 如果必须动态指定可以处理请求的集合或一组对象。
适配器模式的目的是使一个或多个类的接口看起来相似。
Bridge模式旨在将类的接口与其实现隔离, 因此我们可以在不更改客户端代码的情况下更改或替换实现。
26)依赖注入和服务定位器模式之间有什么区别?
服务定位器用于创建类依赖关系。无论是否使用服务定位器, 该类仍然负责创建其依赖项。
服务定位器还用于隐藏依赖项。我们不能通过查看对象从定位器获得连接时是否与数据库连接来说。
使用依赖注入, 包含其依赖的类既不知道也不在乎它们的来源。
一个重要的区别是, 依赖注入更容易进行单元测试, 因为我们可以在其中注入其依赖对象的模拟实现。我们可以结合两个对象并应用服务定位器。
27)MVC模式是什么?
此模式是J2EE Design模式类别中最常用的模式之一。它与Model-View-Controller的概念非常相似。缩写MVC来自” 模型视图控制器” 概念。
模型是对象, 用作将在应用程序中使用的所有对象的蓝图。
视图包含模型中数据和信息的表示形式。
控制器控制模型和视图, 因为它们充当两个对象之间的连接。控制器充当View和Model之间的接口, 还拦截所有传入的请求。
28)解释拦截滤波器的设计模式, 并提及其好处?
拦截过滤器设计模式用于拦截和处理请求处理之前和之后的请求和响应。筛选器执行请求的身份验证/授权/记录或跟踪, 然后将请求转发到相应的处理程序。让我们看一下Intercepting设计模式的一些基本实体。
过滤
它在请求处理程序执行请求之前或之后执行特定任务。
过滤链
它包含多个过滤器, 有助于在目标上按定义的顺序执行它们。
目标
目标对象是请求处理程序
过滤管理器
它管理过滤器和过滤器链。
客户
客户端对象是向目标对象发送请求的对象。
拦截滤波器设计模式的好处
- 过滤器模式通过松散耦合的处理程序提供集中控制。
- 它扩展了可重用性。
- 可以随时添加新的过滤器, 而不会影响客户端的代码。
- 可以在程序执行期间动态选择过滤器。
数据访问对象模式用于将低级数据访问API或操作与高级业务服务隔离。以下是DAO模式中的组件。
数据访问对象接口
DAO界面描述了要在模型对象上执行的标准动作。
数据访问对象具体类
此类实现DAO接口。此类负责从可为Xml /数据库或任何其他存储机制的数据源获取数据。
模型对象或值对象
该对象是一个普通的旧Java对象, 其中包含用于存储使用DAO类检索到的数据的get / set方法。
30)提到VO和JDO有什么区别?
VO和JDO之间的区别在于JDO是一种持久性技术, 可与实体bean竞争。它允许创建POJO(普通的旧Java对象)并将其持久化到数据库中。
VO(值对象)代表一种抽象设计模式, 它与实体bean, JDBC和JDO结合使用。
工作/人力资源面试问题 |
jQuery面试问题 |
Java OOP面试问题 |
JSP面试问题 |
休眠面试问题 |
SQL面试题 |
Android面试题 |
MySQL面试问题 |
JavaScript面试问题
Java基础面试问题
Servlet面试问题
春季面试问题
PL / SQL面试问题
Oracle面试问题
SQL Server面试问题
推荐阅读
- 最新机器学习面试题及其答案详细汇总
- 推荐!最新算法面试题及其答案精华汇总
- API测试面试题及其答案合集推荐
- Java|【数据结构与算法】——必知必会的排序算法你会几种
- 数据结构与算法|数据结构与算法 | 用Java语言实现顺序表真的不难
- Java|Java基础——面向基础模块
- Java|阿里云——Java实现手机短信验证码功能
- Java|Java实现短信验证码
- 进阶之路|大聪明教你学Java | 面试官(请你说说 Redis 为什么这么快())