java面试(企业场景)

news/2024/12/22 21:34:01/

设计模式

工厂方法模式

简单工厂模式

简单工厂包括以下角色:

  1. 抽象产品:定义了产品的规范,描述了产品的主要特性和功能
  2. 具体产品:实现或者继承抽象产品的子类
  3. 具体工厂:提供了创建产品的机会,调用者通过该方法来获取产品

工厂方法模式

工厂方法模式的主要角色:

  1. 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品
  2. 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建
  3. 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能
  4. 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应
    在这里插入图片描述
    在这里插入图片描述
    优点:
    1. 用户只需要知道具体工厂的名称就可以得到所要的产品,无需知道产品的具体创建过程
    2. 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无需对原工厂进行任何修改,满足开闭原则
      缺点:
    3. 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,增加了系统的复杂度

抽象工厂模式

工厂方法模式只考虑生产同等级的产品,抽象工厂可以处理多等级产品的生产
在这里插入图片描述
产品族:一个品牌下面的所有产品;例如华为下面的电脑,手机称为华为的产品族
产品等级:多个品牌下面的同种产品;例如华为和小米都有手机电脑为同一个等级

抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象方法工厂可生产多个等级的产品。一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂

优点:当一个产品族中的多个对象被设计成一起工作时,他能保证客户端始终只能使用同一个产品族中的对象
缺点:当产品族中需要增加一个新的单品时,所有的工厂类都需要进行修改

策略模式

  1. 该模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响使用算法的客户
  2. 他通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理

策略模式的主要角色

  1. 抽象策略(Stateegy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口
  2. 具体策略(Concrete Strategy)类:实现了抽象策略定义的最终接口,提供具体的算法实现或行为
  3. 环境(Context)类:持有一个策略类的引用,最终给客户端调用
    在这里插入图片描述
    优点:
    1. 策略类之间可以自由切换
    2. 易于扩展
    3. 避免使用多重条件语句(if else),充分体现面对对象的设计思想
      缺点:
    4. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类
    5. 策略模式将造成产生很多策略类

责任链设计模式

责任链模式:为了避免请求发送者与多个请求处理这耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,知道有对象处理它为止

  1. 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后续连接
  2. 具体处理者(Concrete Handler)角色:实现抽象处理者的具体方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给他的后继者
  3. 客户端(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,他不关心处理细节和请求的传递过程

责任链优缺点

优点:
1. 降低了对象之间的耦合度
2. 增强了系统的可扩展性
3. 增强了给对象指派职责的灵活性
4. 责任链简化了对象之间的连接
5. 责任分担
缺点:
1. 对比较长的职责链,请求的处理可能涉及多个处理对象,系统性能将受到一定影响
2. 职责链建立的合理性要靠客户端来保证,增加了客户端的复杂性,可能会由于职责链的错误设置而导致系统出错,如可能会造成循环调用

单点登录

单点登录的英文名叫做:Single Sign On(SSO),只需要登录一次,就可以访问所有信任的应用系统

JWT解决单点登录

在这里插入图片描述


http://www.ppmy.cn/news/1470777.html

相关文章

工业用焦炉集气管压力控制状态远程预警方法

工业用焦炉集气管压力控制状态远程预警方法 一、项目提出前状况: 焦化厂焦炉集气管压力是炼焦生产过程中重要的工艺参数(其控制目标80~120Pa),焦炉集气管压力的稳定是焦炉正常生产的重要保证。集气管压力过高会造成焦炉炉体冒烟冒火,污染环境,对操作人员的人身安全构成…

Flink nc -l -p 监听端口测试

1、9999端口未占用 netstat -apn|grep 99992、消息发送端 nc -l -k -p 9999 {"user":"ming","url":"www.baidu1.com", "timestamp":1200L, "score":1} {"user":"xiaohu","url":…

设置 Windows 7 任务栏图标的最佳方法是在 `PyQt4` 中设定应用程序的任务栏图标。

许多开发人员遇到使用 setWindowIcon 仅更改窗口左上角图标而未影响任务栏图标的问题。以下是解决方案,以及相关背景和步骤。 背景 在 Windows 7 中,任务栏图标关联的是“应用程序用户模型”,而不是单个应用程序窗口。Windows 会使用一些启…

vue中的自定义指令

第1部分:引言 在Vue.js中,自定义指令提供了一种非常灵活的方式来扩展Vue的功能。它们允许开发者直接对DOM进行操作,响应数据变化,甚至与其他组件或库集成。 第2部分:Vue自定义指令概述 2.1 什么是Vue自定义指令 Vu…

第四章分类问题

目录 第五题 线性判别分析 (LDA) 概述 假设 公式 优点 缺点 二次判别分析 (QDA) 概述 假设 公式 优点 缺点 比较 第六题 ​编辑 ​编辑 第八题 逻辑回归 1-最近邻 比较与结论 第九题 第十二题 第五题 LDA(线性判别分析)和QDA&…

Docker run命令(3续)

命令格式: docker run [选项] 镜像 运行的容器名称 1.创建运行容器 #简单操作 docker run 镜像标识|镜像名称[:tag] #常用的参数 docker run -d -p 80:80 --name 自定义容器名称 镜像标识|镜像名称[:tag] 选项: -d 代表后台运行 -p 宿主机端口:容器…

面试突击:Java 中的泛型

本文已收录于:https://github.com/danmuking/all-in-one(持续更新) 前言 哈喽,大家好,我是 DanMu。今天想和大家聊聊 Java 中的泛型。 什么是泛型? Java 泛型(Generics) 是 JDK 5…

【docker】docker启动neo4j,并配置内存

注意下:--volume宿主机目录:/data 和 --publish宿主机port:7474 --publish宿主机port:7687 docker run -d \ --publish9801:7474 --publish9802:7687 \ --env NEO4J_AUTHneo4j/passwd \ --volume/opt/docker/data/vol-data/neo4j4.2:/data \ --restart always \ --…