【Java架构师面试题】设计模式面试专题(共35题含答案)_设计模式面试题-程序员宅基地

技术标签: 面试  经验分享  架构  java  设计模式  开发语言  

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

1、什么是设计模式?
就是经过实践验证的用来解决特定环境下特定问题的解决方案

2、设计模式用来干什么?
寻找合适的对象
决定对象的粒度
指定对象的接口
描述对象的实现
运用复用机制
重复使用经过实践验证的正确的,用来解决某一类问题的解决方案来达到减少工作量、提高正确率等目的

3、什么是对象粒度?
对象中方法的多少就是粒度

4、基本的Java编程设计应遵循的规则?
面向接口编程,优先使用对象组合

5、设计模式的应用范围
所能解决的特定的一类问题中

6、简述什么是单例模式,以及他解决的问题,应用的环境,解决的方案,模式的本质
在任何时间内只有一个类实例存在的模式,需要有一个从中进行全局访问和维护某种类型数据的区域的环境下使用单例模式,解决方案就是保证一个类只有一个类实例存在,本质就是实例共用同一块内存区域

7、简述什么是工厂模式,以及他解决的问题,应用的环境,解决的方案,模式的本质
利用工厂来解决接口选择的问题的模式
应用环境:当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定
创建的对象时,就需要用到工厂模式
解决方案:定义一个创建对象的接口,让子类来决定具体实例化哪一个类
本质就是根据不同的情况来选择不同的接口

8、述什么是值对象模式,以及他解决的问题,应用的环境,解决的方案,模式的本质
用来把一组数据封装成一个对象的模式
解决问题:在远程方法的调用次数增加的时候,相关的应用程序性能将会有很大的下降
解决方案:使用值对象的时候,可以通过仅仅一次方法调用来取得整个对象,而不是使用多次方法调用以得到对象中每个域的数值
本质:就是把需要传递的多个值封装成一个对象一次性传过去

9、代码示例:值对象模式的实现方法

public class UserModel{
    private String userId;
    private String userName;
    public void setUserId(String id){
        this.userId = id;
    }
    public String getUserId(){
        return userId;
    }

    public void setUserName(String name){
        this.userName = name;
    }
    public String getUserName(){
        return userName;
    }
}

10、简述什么是DAO模式,以及他解决的问题,应用的环境,解决的方案,模式的本质
数据访问对象
解决问题:根据数据源不同,数据访问也不同。根据存储的类型(关系数据库、
面向对象数据库、纯文件等)和供应商实现不同,持久性存储(如数据库)的访问差别也很大。如何对存储层以外的模块屏蔽这些复杂性,以提供统一的调用存储实现。程序的分布式问题
解决方案:式将数据访问逻辑抽象为特殊的资源,也就是说将系统资源的接口从
其底层访问机制中隔离出来;通过将数据访问的调用打包,数据访问对象可以
促进对于不同数据库类型和模式的数据访问。
DAO的本质就是一层屏蔽一种变化
本质:分层,是系统组件和数据源中间的适配器。(一层屏蔽一种变化)

11、代码示例:DAO模式的实现方法

public interface CustomerDAO {
public int insertCustomer(...);
public Collection selectCustomersVO(...);
}

12、什么是开放-封闭法则(OCP)
可扩展但是不可以更改已有的模块
对扩展是开放的 对修改是封闭

13、什么是替换法则(LSP)
使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用

14、如何综合使用我们学过的设计模式来构建合理的应用程序结构

是采用接口进行隔离,然后同时暴露值对象和工厂类,如果是需要数据存储的功能,又会通过DAO 模式去与数据存储层交互。

15、请列举出在JDK中几个常用的设计模式?
单例模式(Singleton pattern)用于Runtime,Calendar和其他的一些类中;
工厂模式(Factory pattern)被用于各种不可变的类如 Boolean,像Boolean.valueOf;
观察者模式(Observer pattern)被用于 Swing 和很多的事件监听中;
装饰器设计模式(Decorator design pattern)被用于多个 Java IO 类中。

16、什么是设计模式?你是否在你的代码里面使用过任何设计模式?
设计模式是世界上各种各样程序员用来解决特定设计问题的尝试和测试的方法。设计模式是代码可用性的延伸。

17、Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式
单例模式重点在于在整个系统上共享一些创建时较耗资源的对象。整个应用中只维护一个特定类实例,它被所有组件共同使用。Java.lang.Runtime是单例模式的经典例子。从 Java 5 开始你可以使用枚举(enum)来实现线程安全的单例。

18、在 Java 中,什么叫观察者设计模式(observer design pattern)?
观察者模式是基于对象的状态变化和观察者的通讯,以便他们作出相应的操作。简单的例子就是一个天气系统,当天气变化时必须在展示给公众的视图中进行

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_67322837/article/details/123443035

智能推荐

Android Studio模拟器如何运行apk文件_android stodio怎么打开一个apk文件目录-程序员宅基地

文章浏览阅读2.1w次,点赞12次,收藏73次。Android手机软件都是以apk为后缀的,而apk文件在电脑中是无法直接运行的,需要在模拟器中安装和打开。如果使用Android Studio中的模拟器,首先需要打开自己的AVD模拟器。将apk文件复制到android studio安装目录里的androidsdk\platform-tools文件夹下(如下图所示文件夹)win+R运行cmd终端,运用指令cd切换到adb.exe所在文件夹下C:\Users\Lenovo>d:D:\>cd andriodD:\andriod&g_android stodio怎么打开一个apk文件目录

整数转换成固定位数的字符串_java固定位数字符串-程序员宅基地

文章浏览阅读3.6k次,点赞2次,收藏4次。int youNumber = 1; // 0 代表前面补充0 // 4 代表长度为4 // d 代表参数为正数型 String str = String.format("%04d", youNumber); System.out.println(str); // 0001_java固定位数字符串

elementUI树形组件el-tree添加层级虚线,指示线_element-plus tree前边的层级线展示-程序员宅基地

文章浏览阅读3.5k次。看实现效果element的官网由提供一个属性 indent ,该属性可以控制相邻级节点间的水平缩进,单位为像素。我们可以将该属性设置为0,然后我们在css中为所有 el-tree-node 设置 padding-left ,就可以达到缩进的效果了!由于每一层 el-tree-node 都被上一层的 el-tree-node 包裹着,上一层的padding会影响到下层的div位置,所以每一层的节点就不会撑满整个树形大盒子了,现在就可以直接根据 el-tree-node 定位伪元素了。实现代码<_element-plus tree前边的层级线展示

Windows下超详细安装Anaconda3以及jupyter notebook_下载anaconda后还要下载jupyter-程序员宅基地

文章浏览阅读3.3k次。1.下载Anaconda安装包Anaconda官网网站:https://www.anaconda.com/products/individual下载安装包速度比较慢,国内小伙伴不建议尝试。我们可以使用清华大学开源软件镜像站:清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/,请选择适合自己系统自行下载。下载完成后如下图:1.安装Anaconda安装包1.打开安装包,点击Next2.点击I Agre_下载anaconda后还要下载jupyter

chromium源码下载并编译_chromium git仓库下载-程序员宅基地

文章浏览阅读1.7w次。目前,chromium的源代码已经全部迁移到了git管理,所以本文主要梳理一下下载chromium源代码的过程。一、概况chromium现在分为四个大分支:canary:最前沿的版本,每天都发布,bug一堆,不适合新人dev:每两个星期发布,比较稳定,可以体验新功能和新特性deta:每周小版本更新,六周大版本更新。比dev稳定,比同期dev版小1个版本号,基本上是stable的待发版本sta_chromium git仓库下载

AXI4协议详解(一)_关于axi4描述正确的是-程序员宅基地

文章浏览阅读6.2k次,点赞12次,收藏81次。写在前面:AMBA总线协议在SOC设计中的地位是不言而喻的,从本篇文章开始,将会依托于官方手册详解AXI4、AXI4-LITE、AHB、APB等目前最常见的AMBA总线协议,梳理一下其中常用的知识点。本篇为AXI4协议的开篇,更多解析将会在之后继续分享给大家。AXI4协议是amba协议中比较新的一个协议,目前应用的也很广泛。例如在ZYNQ核的ARM与FPGA部分信息交互中就大量应用了AXI4总线协议,官方手册给出了以下几点的AXI协议特点:地址/控制信号与数据处于不同阶段支持非对齐数据传输支持._关于axi4描述正确的是

随便推点

vue路由URL拼接全局参数_vue 在路由拦截里,给url加参数-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏6次。vue-router地址栏URL拼接全局参数业务需求:vue单页面项目,需要在URL地址栏拼接固定的参数,在所有页面使用。默认采用vue路由的history模式;hash模式也可以同样适用。主要是在 vue-router 导航守卫的全局前置守卫中实现。即 vue-router 生命周期钩子函数 router.beforeEach 中进行路由拦截处理。主要代码:router.beforeEach((to, from, next) => { if (Object.keys(to.quer_vue 在路由拦截里,给url加参数

区块链学习笔记:DAY05 如何使用公有云区块链服务-程序员宅基地

文章浏览阅读1.3k次。这是最后一节课了,主要讲华为云在云区块链提供的服务,如何基于华为云BCS来构建应用先来个简单的比喻:1.有关BaaS的范围定义包含物理主机、虚拟主机、容器服务、区块链、智能合约和服务2.华为云区块链服务BCS3.华为云BCS特点:1)易用:一键部署,区块链系统全生命周期管理2.易用:可视化智能合约生命周期管理,多语言支持3)高可用:成员动态准入,..._公有云区块链服务

C语言-利用泰勒公式计算sinx的值 (不调用库函数,自己定义函数)_利用泰勒级数sinxc语言-程序员宅基地

文章浏览阅读5.1k次,点赞5次,收藏37次。#include<stdio.h>#include <math.h>//先定义一个阶乘函数double fac(double n){ double f=0; if(n == 1 || n==0) f =1; else f = fac(n-1)*n; return f;}//一个指数函数(次方)double kvat(double n,double ci){ double chengf=1; _利用泰勒级数sinxc语言

GCN-tensorflow2.0代码实现_keras gcn tensorflow2-程序员宅基地

文章浏览阅读1.2k次。文章目录代码代码定义图卷积层import tensorflow as tffrom tensorflow.keras import activations, regularizers, constraints, initializersclass GCNConv(tf.keras.layers.Layer): def __init__(self, units, activation=lambda x: x, _keras gcn tensorflow2

k30s刷鸿蒙系统,Redmi K30S至尊版喜提MIUI 12.5稳定版-程序员宅基地

文章浏览阅读3.3k次。Redmi K30S至尊版喜提MIUI 12.5稳定版2021-05-07 13:20:0516点赞18收藏104评论进入5月,第二批升级MIUI 12.5的机型也陆续开启推送,在五一小长假期间包括Redmi K40标准版、小米CC9等机型均已收到MIUI 12.5稳定版的推送升级。今日,根据网友反馈,号称Redmi唯一的骁龙865 LCD旗舰——Redmi K30S至尊纪念版也在今日下午收到了M..._k30s刷鸿蒙

如何使用Hyper-V Manager和Powershell合并Hyper-V检查点-程序员宅基地

文章浏览阅读5.9k次,点赞2次,收藏4次。如何使用Hyper-V Manager和Powershell合并Hyper-V检查点Hyper-V检查点在Hyper-V虚拟机的整个生命周期管理中起着关键作用,因为它们可以在出现问题时通过有效的回滚机制有效地管理和执行软件更新,升级和安装。在最新版本的Hyper-V中,Microsoft增强了检查点功能并将其添加到更强大的功能中,包括生产检查点以及利用了ReFS文件系统的优势..._hyper-v manager

推荐文章

热门文章

相关标签