当前位置: 首页 > news >正文

【八股必备】设计模式+常见技术场景

八股思维导图的集合--点击

设计模式

工厂方法模式

设计模式的问题?

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都是公司的测试环境,方便调试代码)

http://www.cnnetsun.cn/news/1287852.html

相关文章:

  • 算法专题--数组二分查找--Leetcode704题
  • ENSP USG6000v Web登录配置全流程详解
  • XSS在线平台实战指南:从创建项目到捕获Cookie
  • 华为云OBS实战配置:从基础创建到高级策略部署
  • Web安全实战:绕过__wakeup漏洞攻防解析
  • 调速器响应,0.05秒级延迟
  • 实战手记:基于STM32F407的SD卡Bootloader开发
  • 3.3 凹凸性与二阶导数判别法
  • 运算符和js语句
  • 提升安卓开发效率:用快马ai一键生成mvvm网络请求框架代码
  • 从零实现卡尔曼滤波:Arduino与MPU6050的传感器数据融合实战
  • 【Windows】Dify + Ollama/Xinference/GPUStack:一站式AI开发环境搭建指南
  • 零基础入门:Sambert多情感语音合成镜像部署指南,3步搭建Web服务
  • 基于Arduino的智能循迹小车设计与PID优化实战
  • 通义千问3-VL-Reranker-8B效果展示:图文视频混合检索,排序精准度实测
  • OpenHD轻量化移植:用Ubuntu笔记本替代树莓派打造低成本高清图传地面站
  • Codeforces Round 1082 (Div. 2) E
  • SpringBoot基于Web的智能家教服务平台
  • NVIDIA Profile Inspector 深度优化指南:从硬件潜力到极致体验
  • 【正点原子I.MX6U-MINI】从零到系统启动:uboot编译与EMMC固化的完整实践
  • 快马平台一键生成Spring Boot用户管理原型,5分钟搭建可运行后端服务
  • 基于立创地文星开发板的USB-Hub电压电流表DIY全解析:硬件选型、软件配置与外壳设计
  • 【数字电子技术课程设计】基于FPGA的高精度数字电子钟设计与实现
  • Allegro17.4异形焊盘实战:从DXF导入到Padstack的完整流程
  • 提升创作效率:用快马平台打造可实时迭代的旗博士口播智能体
  • 如何在遵守协议前提下实现高效内容访问:解锁信息价值的技术方案与合规指南
  • 快马平台五分钟搭建openclaw抓取原型,验证你的数据采集想法
  • 泰山派RK3576开发板Android 14系统ADB调试与投屏实战指南
  • ESP32双模通信实战:从Wi-Fi联网到蓝牙透传的物联网应用
  • Unity SLG战棋游戏开发实战:从源码解析到功能实现