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

java八股文之企业场景

1.说一说工厂模式

  1. 简单工厂
    – 所有的产品都共有一个工厂,如果新增产品,则需要修改代码,违反开闭原则
    – 是一种编程习惯,可以借鉴这种编程思路
  2. 工厂方法模式
    – 给每个产品都提供了一个工厂,让工厂专门负责对应的产品的生产,遵循开闭原则
    – 项目中用的最多
  3. 抽象工厂方法模式
    – 如果有多个纬度的产品需要配合生产时,优先建议采用抽象工厂(工厂的工厂)
    – 如果要新增维度需要改动所有工厂,工作量大。 一般的企业开发中的较少

2.说一说策略模式

策略模式是一种行为设计模式,核心思想是将一组算法封装成独立的类,并让它们彼此之间可以互换。它通过三个角色实现:

  1. 抽象策略(Strategy):定义算法的公共接口
  2. 具体策略(Concrete Strategy):实现具体的算法逻辑,例如不同的交通方式
  3. 环境类(Context):持有策略对象,并在运行时动态切换策略

3.说一说责任链模式

在责任链模式中,通常每个接收者都包含对下一个接收者的引用。如果一个接收者不能处理某个请求,它会把这个请求传给下一个接收者,以此类推。这种模式非常适合用于实现过滤器或拦截器等应用场景,也可以用来处理GUI事件、web请求预处理等。
组成部分

  1. Handler(抽象处理者):定义一个处理请求的接口。如果有需要,还可以实现后继处理器的属性。
  2. ConcreteHandler(具体处理者):处理它所负责的请求。可以访问它的后继者,以备请求需被转发时使用。
  3. Client(客户端):向链上的具体处理者提交请求。
    优点
  • **降低耦合度:**责任链中的对象只与自己的后继者有联系,这降低了系统的耦合度。
  • 增强灵活性: 可以根据条件动态地添加或修改责任链中的节点。
  • 简化职责分配: 通过设置不同的处理器来处理特定类型的请求,使得职责分配更加清晰。

缺点

  • 如果没有明确的责任链结构,可能会导致循环引用的问题。
  • 责任链过长可能会导致性能问题,因为每个请求都要遍历整个链条直到找到能够处理该请求的对象。

4.单点登录如何实现

单点登录的英文名叫做:Single Sign On(简称SSO)
实现单点登录以jwt为例:

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

5.权限认证如何实现

后台的管理系统,最常见的就是RBAC模型来指导实现权限,RBAC(Role-BasedAccessControl)就是基于角色的访问控制

  • 3个基础部分组成:用户、角色、权限
  • 具体实现一般是两种
    – 5张表(用户表、角色表、权限表、用户角色中间表、角色权限中间表)
    – 7张表(用户表、角色表、权限表、菜单表、用户角色中间表、角色权限中间表、权限菜单中间表)
  • 一般用Spring security框架实现

6.如何保证上传数据的安全

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

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

7.项目遇见哪些棘手问题,如何解决的

从四个大方面回答,选择其一即可

  1. 设计模式
    – 工厂
    – 策略
    – 责任链等等
  2. 线上bug
    – CPU彪高
    – 内存泄露
    – 线程死锁等等
  3. 调优
    – 慢接口
    – 慢SQL
    – 缓存方案
  4. 组件封装
    – 分布式锁
    – 接口幂等
    – 分布式事务
    – 支付通用等

8.如何采集项目中的日志

搭建ELK日志采集系统
ELK三个组件:

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

9.查看日志的命令

实时监控日志的变化

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

按照行号查询

  • 查询日志尾部最后100行日志
tail -n 100 xx.log
  • 查询日志头部开始100行日志
head -n 100 xx.log
  • 查询某一个日志行号区间(查询100行至200行的日志)
cat - n xx.log | tail -n +100 | head -n 100

按照关键字找日志的信息(查询日志文件中包含debugl的日志行号)

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

10.如何排查生产日志

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

11.怎么快速定位系统瓶颈

  • 压测(性能测试)
    – 压测目的:给出系统当前的性能状况;定位系统性能瓶颈或潜在性能瓶颈
    – 指标:响应时间、QPS、并发数、吞吐量、CPU利用率、内存使用率、磁盘IO、错误率
    – 压测工具:LoadRunner、Apache Jmeter.
    – 后端工程师:根据压测的结果进行解决或调优(接口慢、代码报错、并发达不到要求)
  • 监控工具、链路追踪工具
    – 监控工具:Prometheus+Grafana
    – 链路追踪工具:skywalking、Zipkin
  • 线上诊断工具Arthas(阿尔萨斯)
    – 实时监控(Dashboard):实时查看 JVM 的 CPU、内存、GC、线程等状态。支持定时刷新,提供系统运行的全局视角。
    – 线程分析:查看所有线程的堆栈信息,快速定位阻塞或死锁。自动检测线程死锁并输出详细堆栈。
    – 性能分析:监控指定方法的执行时间、调用次数及耗时分布。:通过 profiler 命令生成火焰图,定位性能瓶颈。
    – 动态代码修改:无需重启应用,可动态重新加载类(redefine 命令)。通过 JavaAgent 技术修改运行时字节码,支持在线调试。
    – 类与方法操作:查看类的加载路径、加载器及依赖的 JAR 包。反编译运行中的类(jad 命令),查看代码逻辑。监控方法入参、返回值及异常(watch、monitor 命令)。
    – 调试与日志:跟踪方法执行的输入输出(trace 命令)。实时捕获指定方法抛出的异常。在运行时动态修改日志级别(如 logger 命令)。
    – 内存与对象分析:查看堆内存使用情况、GC 日志。定位 JVM 中特定类的实例对象(sc 命令)。
    – 问题排查工具:快速定位类加载问题(如 class 命令查看类来源)。提供丰富的命令(如 thread、stack、sm 等),支持快速排查问题。

http://www.kler.cn/a/612740.html

相关文章:

  • Oracle数据库数据编程SQL<2.2 DDL 视图、序列>
  • 小白工具PDF转换 PDF转图片 超便捷软件 文件格式转换 简单好用效率高
  • RabbitMQ 核心组件及功能详解
  • 信息隐藏技术
  • Flutter_学习记录_get_cli的使用
  • nginx代理前端请求
  • Spring Boot旅游管理系统
  • 基于python爬虫:requests+BeautifulSoup+MySQL/MongoDB(或:CSV、JSON等格式的文件)+...
  • thinkphp漏洞再现
  • 《C++ 基石:筑牢编程巅峰根基》
  • Dynamic WallPaper-壁纸动态-Mac电脑-4K超高清
  • node-red
  • Ant Design Vue 中的table表格高度塌陷,造成行与行不齐的问题
  • 日记:实际开发中git的常用命令
  • 搭建私人对外git空间
  • 详细介绍Spring MVC的执行流程是怎么样的?
  • 基于物联网的新房甲醛浓度监测系统的设计(论文+源码)
  • 阿里云数据学习20250327
  • Unity 运行时更换Animator状态里的动画剪辑
  • SpringBoot集成kafka极简教程