企业场景篇

news2024/11/26 4:51:52

企业场景篇

设计模式

简单工厂模式

在这里插入图片描述
工厂(factory)处理创建对象的细节,一旦有了SimpleCoffeeFactory,CoffeeStore类中的orderCoffee()就变成此对象的客户,后期如果需要Coffee对象直接从工厂中获取即可。这样也就解除了和Coffee实现类的耦合,同时又产生了新的耦合,CoffeeStore对象和SimpleCoffeeFactory工厂对象的耦合,工厂对象和商品对象的耦合。

后期如果再加新品种的咖啡,我们势必要需求修改SimpleCoffeeFactory的代码,违反了开闭原则。工厂类的客户端可能有很多,比如创建美团外卖等,这样只需要修改工厂类的代码,省去其他的修改操作。

工厂方法模式

在这里插入图片描述
要增加产品类时也要相应地增加工厂类,不需要修改工厂类的代码了,这样就解决了简单工厂模式的缺点。

工厂方法模式是简单工厂模式的进一步抽象。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。

优点:

  • 用户只需要知道具体工厂的名称就可得到所要的产品,无需知道产品的具体创建过程;
  • 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;

缺点:

  • 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

抽象工厂模式

在这里插入图片描述
在这里插入图片描述
优点:

当一个产品族的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点:

当产品族中只需要增加一个新的产品时,所有的工厂类都需要进行修改。

使用场景

  • 当需要创建的对象是一系列相互关联或相互依赖的产品族时,如电器工厂中的电视机、洗衣机、空调等。
  • 系统中有多个产品族,但每次只使用其中的某一族产品。如有人只喜欢穿某一个品牌的衣服和鞋。
  • 系统中提供了产品的类库,且所有产品的接口相同,客户端不依赖产品实例的创建细节和内部结构。

如:输入法皮肤,一整套一起换。生成不同操作系统的程序。

策略模式

在这里插入图片描述
该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。


综合案例

在这里插入图片描述
如果后期有新的需求改动,比如加入了QQ登录,我们只需要添加对应的策略就可以,无需再改动业务层代码。

其实像这样的需求,在日常开发中非常,常见场景有很多,以下的情景都可以使用工厂模式+策略模式解决比如:

  • 订单的支付策略
    • 支付宝支付
    • 微信支付
    • 银行卡支付
    • 现金支付
  • 解析不同类型excel
    • xls格式
    • xlsx格式
  • 打折促销
    • 满300元9折
    • 满500元8折
    • 满1000元7折
  • 物流运费阶梯计算
    • 5kg以下
    • 5kg-10kg
    • 10kg-20kg
    • 20kg以上

一句话总结:只要代码中有冗长的 if-else 或 switch 分支判断都可以采用策略模式优化

责任链模式

在这里插入图片描述
优点

  • 降低了对象之间的耦合度

  • 增强了系统的可扩展性

  • 增强了给对象指派职责的灵活性

  • 责任链简化了对象之间的连接

  • 责任分担

缺点:

  • 不能保证每个请求一定被处理。由于一个请求没有明确的接收者,所以不能保证它一定会被处理,该请求可能一直传到链的末端都得不到处理。
  • 对比较长的职责链,请求的处理可能涉及多个处理对象,系统性能将受到一定影响。
  • 职责链建立的合理性要靠客户端来保证,增加了客户端的复杂性,可能会由于职责链的错误设置而导致系统出错,如可能会造成循环调用。
    在这里插入图片描述

技术场景

单点登录这块怎么实现的

面试官: 单点登录这块怎么实现的?

候选人:

  1. 先解释什么是单点登录—单点登录的英文名叫做:Single Sign Sn(简称SSO

  2. 介绍自己项目中涉及到的单点登录(即使没涉及过,也可以说实现的思路)

  3. 介绍单点登录的解决方案,以JWT为例

    I.用户访问其他系统,会在网关判断token是否有效
    II.如果token无效则会返回401(认证失败),前端跳转到登录页面
    III.用户发送登录请求,返回浏览器一个token,浏览器把token保存到cookie
    IV. 再去访问其他服务的时候,都需要携带token,由网关统一验证后路由到目标服务


权限认证是如何实现的

面试官: 权限认证是如何实现的?

候选人:

  • 后台管理系统的开发经验
  • 介绍RBAC权限模型5张表的关系(用户、角色、权限)
  • 权限框架:Spring security(推荐)、Apache Shiro

上传数据的安全性你们怎么控制

面试官: 上传数据的安全性你们怎么控制?

候选人:

使用非对称加密(或对称加密),给前端一个公钥让他把数据加密后传到后台,后台负责解密后处理数据

  • 文件很大建议使用对称加密,不过不能保存敏感信息
  • 文件较小,要求安全性较高,建议使用非对称加密

遇到了哪些棘手的问题,怎么解决的

面试官: 你负责项目的时候遇到了哪些棘手的问题,怎么解决的?

候选人:

在这里插入图片描述
01举例:

①:介绍登录业务(一开始没有用设计模式,所有的登录方式都柔和在一个业务类中,不过,发现需求经常改)
②:登录方式经常会增加或更换,每次都要修改业务层代码,所以,经过我的设计,使用了工厂设计模式和策略模式,解决了经常修改业务层代码的问题
③:详细介绍一下工厂模式和策略模式(参考前面设计模式的课程)

02举例:

回答方式参考上面的回答思路,具体问题可以参考前面的课程(JVM和多线程相关的面试题)

你们项目中日志怎么采集的

面试官: 你们项目中日志怎么采集的?

候选人:

我们搭建了ELK日志采集系统:

  • Elasticsearch是全文搜索分析引擎,可以对数据存储、搜索、分析
  • Logstash是一个数据收集引擎,可以动态收集数据,可以对数据进行过滤、分析,将数据存储到指定的位置
  • Kibana是一个数据分析和可视化平台,配合Elasticsearch对数据进行搜索,分析,图表化展示

常见日志的命令

面试官: 常见日志的命令?

候选人:

  • 实时监控日志的变化

    实时监控某一个日志文件的变化:tail -f xx.log;实时监控日志最后100行日志: tail –n 100 -f xx.log

  • 按照行号查询

    • 查询日志尾部最后100行日志:tail – n 100 xx.log

    • 查询日志头部开始100行日志:head –n 100 xx.log

    • 查询某一个日志行号区间:cat -n xx.log | tail -n +100 | head -n 100 (查询100行至200行的日志)

  • 按照关键字找日志的信息

    查询日志文件中包含debug的日志行号:cat -n xx.log | grep “debug”

  • 按照日期查询

    sed -n '/2023-05-18 14:22:31.070/,/ 2023-05-18 14:27:14.158/p’xx.log

  • 日志太多,处理方式

    • 分页查询日志信息:cat -n xx.log |grep “debug” | more

    • 筛选过滤以后,输出到一个文件:cat -n xx.log | grep “debug” >debug.txt


生产问题怎么排查

面试官: 生产问题怎么排查?

候选人:

已经上线的bug排查的思路:

  1. 先分析日志,通常在业务中都会有日志的记录,或者查看系统日志,或者查看日志文件,然后定位问题
  2. 远程debug(通常公司的正式环境(生产环境)是不允许远程debug的。一般远程debug都是公司的测试环境,方便调试代码)

怎么快速定位系统的瓶颈

面试官: 怎么快速定位系统的瓶颈?

候选人:

  • 压测(性能测试),项目上线之前测评系统的压力
    • 压测目的:给出系统当前的性能状况;定位系统性能瓶颈或潜在性能瓶颈
    • 指标:响应时间、 QPS、并发数、吞吐量、 CPU利用率、内存使用率、磁盘IO、错误率
    • 压测工具:LoadRunner、Apache Jmeter …
    • 后端工程师:根据压测的结果进行解决或调优(接口慢、代码报错、并发达不到要求…)
  • 监控工具、链路追踪工具,项目上线之后监控
    • 监控工具: Prometheus+Grafana
    • 链路追踪工具:skywalking、Zipkin
  • 线上诊断工具Arthas(阿尔萨斯),项目上线之后监控、排查
    • 官网:https://arthas.aliyun.com/
    • 核心功能:
      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/969701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【javaweb】学习日记Day9 - Mybatis 基础操作

目录 一、删除 (1)在mapper接口执行sql删除语句 ① 注解后sql语句没有提示怎么办? (2)测试层 (3)开启mybatis日志 (4)预编译SQL 二、新增 (1&#…

深入探讨Java虚拟机(JVM):执行流程、内存管理和垃圾回收机制

目录 什么是JVM? JVM 执行流程 JVM 运行时数据区 堆(线程共享) Java虚拟机栈(线程私有) 什么是线程私有? 程序计数器(线程私有) 方法区(线程共享) JDK 1.8 元空…

Linux下 Socket服务器和客户端文件互传

目录 1.项目描述 2.函数准备 2.1 gets函数 2.2 popen函数、fread函数 2.3 access 函数 2.4 exit 函数 2.5 strtok 函数 2.6 chdir函数 3.项目代码 3.1服务器代码 3.2客户端代码 4.问题总结 1.项目描述 基于Soket聊天服务器,实现服务器和客户端的文件传输。…

机器学习——线性回归/岭回归/Lasso回归

0、前言: 线性回归会用到python第三方库:sklearn.linear_model中的LinearRegression导入第三方库的方法:from sklearn.linear_model import LinearRegression使用LinearRegression(二维数据,一维数据)进行预测,其中数…

YOLOv5,v8中文标签显示问题

本人使用的是YOLOv5-7.0,YOLOv8的最新版本 1. 训练YOLOv5时matplotlib无法显示中文标签 数据集中的标签是中文,在训练YOLOv5,v8算法时,matplotlib库无法显示中文 2 解决方法 在yolov5/utils/plots.py文件中手动添加黑体字体&a…

flutter Could not get unknown property ‘ndkVersion’

使用的 flutter 版本为 3.7.2 ,编译运行 如下 Could not get unknown property ‘ndkVersion’ for object of type com.android.build.gradle.internal.dsl.BaseAppModuleExtension 解决方法是 在flutter-3.7.2\packages\flutter_tools\gradle\flutter.gradle配置…

Java特性之设计模式【抽象工厂模式】

一、抽象工厂模式 概述 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式 在抽象工厂模式中,接口是…

2001-2021年上市公司数字化转型(年报词频统计)

2001-2021年上市公司数字化转型(年报词频统计) 1、时间:2001-2021年 2、来源:上市公司年报、巨潮资讯网 3、方法说明:参考管理世界中吴非(2021)的做法,对人工智能技术、大数据技术…

警告:Provides transitive vulnerable dependency maven:org.yaml:snakeyaml:1.30

1. 警告 SpringBoot 的 validation 依赖包含有易受攻击的依赖 snakeyaml。 警告信息如下: Provides transitive vulnerable dependency maven:org.yaml:snakeyaml:1.30 意思是:提供了可传递的易受攻击依赖 maven:org.yaml:snakeyaml:1.30 2. 警告示例 …

networkX-03-连通度、全局网络效率、局部网络效率、聚类系数计算

文章目录 1.连通度1.1 检查图是否连通1.2 检查有向图是否为强连通1.3 点连通度、边连通度: 2.网络效率2.1全局效率2.2 局部效率2.2.1 查找子图2.2.3 局部效率源码分析 3.聚类系数(Clustering Coefficient)3.1 聚类系统源码分析 教程仓库地址&…

【开学作业考试层出不穷】Python自动答题脚本,在线答题,零基础可学!!(附源码)

前言 大家好 我是小曼呐~ 9月份想必大部分同学已经开学啦,开学少不了老师会布置一些 软件上面的作业 今天教大家用python制作自动答题脚本,100%准确率哦~ 喜欢的同学记得关注 收藏哦~ 环境使用 Python 3.8Pycharm 模块使用 import requests —>…

MySQL表的内连和外连

文章目录 MySQL表的内连和外连1. 内连接(1) 显示SMITH的名字和部门名称 2. 外连接2.1 左外连接(1) 查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来 2.2 右外连接(1) 对stu表和exam表联合查询,把所有的成绩都显示出来…

【Apollo学习笔记】——规划模块TASK之SPEED_BOUNDS_PRIORI_DECIDERSPEED_BOUNDS_FINAL_DECIDER

文章目录 前言SPEED_BOUNDS_PRIORI_DECIDER功能简介SPEED_BOUNDS_FINAL_DECIDER功能简介SPEED_BOUNDS_PRIORI_DECIDER相关配置SPEED_BOUNDS_FINAL_DECIDER相关配置SPEED_BOUNDS_DECIDER流程将障碍物映射到ST图中ComputeSTBoundary(PathDecision* path_decision)ComputeSTBounda…

MybatisPlus 快速入门 常见注解 配置

var code "81563903-534d-4850-9d6a-a9fb0318f593" 本课程全面讲解了Mybatis框架的使用,从快速入门到原理分析再到实战应用。每一个知识点都有案例进行演示学习,最终通过学习你将全面掌握,从而使Mybatis的开发更加的高效&#xff…

网络编程 day 6

1、基于UDP聊天室 服务器 #define ERR_MSG(msg) do{\fprintf(stderr,"__%d__",__LINE__);\perror(msg);\ }while(0) #define IP "127.0.0.1" #define PORT 6666 //创建链表 Linklistptr list_create(); Linklistptr node_buy(datatype e); int list_insert…

You must install at least one postgresql-client-<version> package

使用主机上的映射端口来连接到 PostgreSQL 数据库。例如,使用以下命令连接到数据库: psql -h localhost -p 5432 -U postgres出现下面的问题: 分析: 如果您在运行 psql 命令时遇到错误消息 You must install at least one pos…

flex布局轻而易举实现页面布局;超详细解析轻松掌握

我们曾如此渴望命运的波澜,到最后才发现,人生最曼妙的风景,竟是内心的淡定和从容。我们曾如此期盼外界的认可,到最后才知道,世界是自己的,与他人毫无关系。——杨绛 开始 痛点 网页布局(layout…

数据分析因子评分学习

当多个因素影响一个结果时,我们需要综合考虑这些因素分别对结果德影响。因子评分就是用于比较其对结果德影响程度。 文章目录 前言一、案例背景二、解决方案(一)分析思路(二)剔除无关数据(三)求…

role、user、schema在Oracle、MySQL、PostgreSQL的区别

0.先上结论 数据库逻辑可以细分为:角色、用户、数据库、模式PostgreSQL和MySQL合并了角色和用户,MySQL还合并了数据库、模式Oracle合并了用户、数据库、模式 1.图 1.1.架构 1.2.用户和角色 1.2.1.PostgreSQL 1.2.2.MySQL 1.2.3.Oracle 参考文章 数据…

安卓绘制原理概览

绘制原理 Android 程序员都知道 Android 的绘制流程分为 Measure、Layout、Draw 三步骤,其中 Measure 负责测量 View 的大小Layout 负责确定 View 的位置Draw 负责将 View 画在屏幕上 由 ViewRootImpl 实现的 performTraversal 方法是 Measure、layout、draw 的真正…