【八股必备】设计模式+常见技术场景
八股思维导图的集合--点击
设计模式
工厂方法模式
设计模式的问题?
1.简单工厂 所有的产品都共有一个工厂,如果新增产品,则需要修改代码,违反开闭原则是一种编程习惯,可以借鉴这种编程思路。
简单工厂包含如下角色: 抽象产品 :定义了产品的规范,描述了产品的主要特性和功能。 具体产品 :实现或者继承抽象产品的子类 具体工厂 :提供了创建产品的方法,调用者通过该方法来获取产品。
2.工厂方法模式 给每个产品都提供了一个工厂,让工厂专门负责对应的产品的生产,遵循开闭原则项目中用的最多。
工厂方法模式的主要角色: 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
3.抽象工厂方法模式 如果有多个纬度的产品需要配合生产时,优先建议采用抽象工厂(工厂的工厂)一般的企业开发中的较少
策略模式
1.什么是策略模式
策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户 一个系统需要动态地在几种算法中选择一种时,可将每个算法封装:到策略类中
2.案例(工厂方法+策略)
介绍业务(登录、支付、解析excel、优惠等级..)提供了很多种策略,都让spring容器管理提供一个工厂:准备策略对象,根据参数提供对象
责任链设计模型
责任链模式
责任链模式:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。 客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。
责任链优缺点
优点: 降低了对象之间的耦合度 增强了系统的可扩展性 增强了给对象指派职责的灵活性 责任链简化了对象之间的连接 责任分担 缺点: 对比较长的职责链,请求的处理可能涉及多个处理对象,系统性能将受到一定影响。 职责链建立的合理性要靠客户端来保证,增加了客户端的复杂性,可能会由于职责链的错误设置而导致系统出错,如可能会造成循环调用。
常见技术场景
单点登录这块怎么实现的?
1,先解释什么是单点登录 单点登录的英文名叫做:Single Sign On(简称SSO) 2,介绍自己项目中涉及到的单点登录(即使没涉及过,也可以说实现的思路) 3,介绍单点登录的解决方案,以JWT为例 用户访问其他系统,会在网关判断token是否有效 如果token无效则会返回401(认证失败)前端跳转到登录页面 用户发送登录请求,返回浏览器一个token,浏览器把token保存到cookie 再去访问其他服务的时候,都需要携带token,由网关统一验证后路由到目标服务
权限认证是如何实现的?
后台的管理系统,更注重权限控制,最常见的就是RBAC模型来指导实现权限 RBAC(Role-BasedAccess Control)基于角色的访问控制 3个基础部分组成:用户、角色、权限 具体实现 5张表(用户表、角色表、权限表、用户角色中间表、角色权限中间表) 7张表(用户表、角色表、权限表、菜单表、用户角色中间表、角色权限中间表、权限菜单中间表)
后台管理系统的开发经验 介绍RBAC权限模型5张表的关系(用户、角色、权限) 权限框架:Spring security
上传数据的安全性你们怎么控制?
使用非对称加密(或对称加密),给前端一个公钥让他把数据加密后传到后台,后台负责解密后处理数据 文件很大建议使用对称加密,不过不能保存敏感信息 文件较小,要求安全性高,建议采用非对称加密
你负责项目的时候遇到了哪些比较棘手的问题?
你们是怎么做压测(性能测试)的?
压测(性能测试)
压测目的:给出系统当前的性能状况;定位系统性能瓶颈或潜在性能瓶颈 指标:响应时间、 QPS、并发数、吞吐量、 CPU利用率、内存使用率、磁盘IO、错误率 压测工具:LoadRunner、Apache Jmeter … 后端工程师:根据压测的结果进行解决或调优(接口慢、代码报错、并发达不到要求…)
监控工具、链路追踪工具
监控工具:Prometheus+Grafana 链路追踪工具:skywalking、Zipkin
线上诊断工具Arthas(阿尔萨斯)
官网:https://arthas.aliyun.com/ 核心功能:
你们项目中日志怎么采集的?
1,为什么要采集日志? 日志是定位系统问题的重要手段,可以根据日志信息快速定位系统中的问题 2,采集日志的方式有哪些? ELK:即Elasticsearch、Logstash和Kibana三个软件的首字母 常规采集:按天保存到一个日志文件
查看日志的命令?
SHOW VARIABLES LIKE 'log_error'; -- 错误日志路径 SHOW VARIABLES LIKE 'slow_query_log_file'; -- 慢查询日志路径 SHOW VARIABLES LIKE 'general_log_file'; -- 通用查询日志路径 SHOW VARIABLES LIKE 'log_bin_basename'; -- 二进制日志基础路径(如果有)
怎么快速定位系统的瓶颈?
压测(性能测试),项目上线之前测评系统的压力 监控工具、链路追踪工具,项目上线之后监控 线上诊断工具Arthas(阿尔萨斯),项目上线之后监控、排查
生产问题怎么排查?
已经上线的bug排查的思路: 1,先分析日志,通常在业务中都会有日志的记录,或者查看系统日志,或者查看日志文件,然后定位问题 2,远程debug(通常公司的正式环境(生产环境)是不允许远程debug的。一般远程debug都是公司的测试环境,方便调试代码)
