企业场景篇

2023-11-02

企业场景篇

设计模式

简单工厂模式

在这里插入图片描述
工厂(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/
    • 核心功能:
      在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

企业场景篇 的相关文章

随机推荐

  • 华为OD机试(Java,JS,Python,C++)-Excel单元格数值统计

    Excel单元格数值统计 时间限制 2s 空间限制 256MB 限定语言 不限 题目描述 Excel工作表中对选定区域的数值进行统计的功能非常实用 仿照Excel的这个功能 请对给定表格中选中区域中的单元格进行求和统计 并输出统计结果 为简
  • innodb事务实现

    事务的特性 ACID 事务的类别 事务实现 redo redoLog buffer 的格式 undo 更新主键 purge group commit 因为上层的binlog和底层的redolog要保持一致 所以 事务控制语句 事务隔离级别
  • C++11标准模板(STL)- 算法(std::rotate)

    定义于头文件
  • logistics回归之sklearn中的LogisticRegressionCV

    一 Logistic回归的认知与应用场景 Logistic回归为概率型非线性回归模型 是研究二分类观察结果与一些影响因素之间关系的 一种多变量分析方法 通常的问题是 研究某些因素条件下某个结果是否发生 比如医学中根据病人的一些症状 来判断它
  • Android-打包AAR步骤以及最为关键的注意事项

    转自 https www jianshu com p f391d0a6691e 简介 最近因为项目的要求 需要把开发的模块打包成aar 供其他项目调用 在搞了一段时间后 发现这里还是有很多需要注意的地方 所以记录一下 帮助大家不要走弯路 首
  • 调试for循环的技巧

    今天用IDEA调试for循环时 断点打在了for的左边 不小心按了F9 跳到下一个断点 意外发现原来可以通过这种方式对for循环的每次循环进行调试 不必自己手动一行行调试才到下一次for循环 这对于一种场景特别适用 假设你需要查看第 5 次
  • 并发编程系列之重入锁VS读写锁

    前言 上节我们介绍了Java中的锁基础篇 也算是对锁有了个基本的认识 对锁底层的一些原理有所掌握 那么今天我们就来看看2个最常见的锁的实例应用 重入锁和读写锁 这是今天旅途最美的两大景点 是不是有点迫不及待了 OK 那就让我们一起开启今天的
  • 电磁式继电器使用注意事项

    电磁继电器的使用 1 触点通断时线圈两端会感应出较大的电动势 如果不加隔离 便很容易通过地电势将干扰引入板上其它电路 导致单片机复位 线圈控制端加光耦隔离 线圈的电源与板子的电源隔离 另外线圈两端要加续流二极管 见后说明 可选常用的1N40
  • 【计算机组成原理】16-定点数与浮点数

    一 定点数的表示方法 1 纯小数 乘以比例因子以满足定点数保存格式 2 纯整数 小数点在后面 二 浮点数的表示方法 计算机处理的很大程度上不是纯小数或纯整数 数据范围很大 定点数难以表达 1 浮点数的表示格式 科学计数法 j S 尾数 r
  • 华为人才在线--华为认证进阶路径

    华为人才在线 华为认证进阶路径网址 网址 https e huawei com cn talent cert roadmap 在这个网址可以学习华为的各类技术方向 能下载到培训教程和实验手册 以及在线学习 如学习路由交换的HCIA点击红色的
  • Numpy数组

    NumPy 最重要的一个特点是其 N 维数组对象 ndarray 它是一系列同类型数据的集合 以 0 下标为开始进行集合中元素的索引 ndarray 对象是用于存放同类型元素的多维数组 ndarray 中的每个元素在内存中都有相同存储大小的
  • 预装载功能探究一:比较/捕获寄存器预装载使能的意义

    以沁恒CH32V307VCT6芯片测试为基准 测试开发板 CH32V307V R1 1V0 以下内容均为解析调用此句代码的意义 TIM OC1PreloadConfig TIM1 TIM OCPreload Enable 第一层 解析底层代
  • 使用 Git Extensions 简单入门 Git

    使用 Git Extensions 简单入门 Git 独立观察员 2015 11 25 前言 关于这个主题 之前我录了段视频教程 在本地看清晰度还可以 但传到优酷上就很不清晰了 即使是后来重制后还是一样不清晰 所以现在想整理成文字版 当然
  • 计算机网络基础学习 --- 第四章--网络层(ipv4概述)

    1 网络层 1 1 网络层概述 1 2 网络层提供的2种服务 1 3 IPV4 1 3 1 IPV4概述 1 3 2 分类编址的IPV4地址 1 3 3 划分子网的IPV4地址 1 3 4 无分类编制的IPV4地址 1 3 5 IPV4地址
  • jvm分析工具简介

    根据开源谷粒商城学习总结的笔记 觉得是个很好用的工具 推荐 因为jdk自带不用单独安装且很好用不像jprofiler还得安装和破解 1 jconsole 安装jdk配置好环境变量 win R输入cmd进入dos命令行 启动应用 想要分析的项
  • Go语言面试题--基础语法(26)

    文章目录 1 下面这段代码能否正常结束 2 下面这段代码输出什么 为什么 3 下面代码是否能编译通过 如果通过 输出什么 1 下面这段代码能否正常结束 func main v int 1 2 3 for i range v v append
  • 安装nvm管理node版本详细步骤

    安装nvm管理node版本详细步骤 首先需要把已经安装的node进行卸载 注 卸载node之前 最好把node的版本记录一下 方便安装nvm之后可以下载你需要的node版本 具体卸载步骤如下 打开电脑的控制面板 gt 点击程序 gt 点击程
  • win7+nfs文件服务器,win7如何挂载nfs服务器

    在linux下面 除了samba 一种在局域网内的不同计算机之间提供文件及打印机等资源的共享服务 服务之外 我们还可以通过nfs服务共享文件 以达到跨本台访问的需求 下面是学习啦小编收集整理的win7如何挂载nfs服务器 希望对大家有帮助
  • 学 Rust 最好的图书之一,原版豆瓣 9.7分“封神之作”

    1 瓜王 争霸赛总冠军 开发者版图同步飞涨 Rust 大概是世界上 瓜 最多的编程语言了 最近的一个 瓜 来自微软 用 Rust 重写 Windows 内核 一边是不断有大厂使用 Rust 重构某个版块的老旧代码 一边是 Rust 内部传出
  • 企业场景篇

    企业场景篇 设计模式 简单工厂模式 工厂 factory 处理创建对象的细节 一旦有了SimpleCoffeeFactory CoffeeStore类中的orderCoffee 就变成此对象的客户 后期如果需要Coffee对象直接从工厂中获