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.rhkb.cn/news/42314.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医疗智能体通信整合-大模型训练中沟通优化策略研究

一、引言:医疗模型训练的沟通困境 1.1 医疗 AI 发展背景 在数智化浪潮的推动下,医疗 AI 正以前所未有的速度融入现代医疗体系。从智能影像诊断助力医生精准识别病灶,到基于大数据分析的个性化药物研发,医疗 AI 在提升医疗效率、改善医疗质量方面展现出巨大潜力。据相关数据…

存储管理(一)

目录 一、存储管理的功能 1.地址映射(地址重定位) 2.主存分配和回收 3.存储保护 4.主存扩充(虚拟存储) 二、程序的装入与链接 程序的装入: 程序的链接 三、连续分配方式 单一连续分配 固定分区分配 动态分…

SpringBoot学习笔记3.27

目录 实战篇第二课 1.注册参数的校验: 学习过程中遇到的问题: 1.什么是正则表达式 2.怎么自定义异常? 1. 创建全局异常处理类 2. 定义响应对象 3. 使用 ExceptionHandler 4. 设置响应状态码 5. 返回统一响应 6. 测试全局异常处理 …

基于springboot+vue的游戏账号交易系统的设计与实现

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

小测验——合并多个网格文件调用相机参数进行适配

文章目录 一、前言1.1 对于rule1.2 对于ask、agent、edit1.3 对于没有notepad二、代码展示一、前言 1.1 对于rule 对于.cursorrules里面的文件内容,就是从提示词、项目简介、技术架构、目录结构、代码规范这几方面进行介绍 1.2 对于ask、agent、edit 切换模式在聊天框下方…

敏捷测试(Agile Testing)

敏捷测试(Agile Testing) 敏捷测试是在敏捷开发(Agile Development)环境下进行的软件测试方法,强调快速反馈、持续测试、团队协作,以确保软件质量贯穿整个开发周期。与传统瀑布模型不同,敏捷测…

FreeRTOS内核实现与应用学习之6——多优先级

在FreeRTOS中,数字优先级越小,逻辑优先级也越小;在任务创建时,会根据任务的优先级将任务插入就绪列表不同的位置。 相同优先级的任务插入就绪列表中的同一条链表中。 要想任务支持优先级,即只要实现在任务切换&#xf…

【C++篇】C++入门基础(二)

💬 欢迎讨论:在阅读过程中有任何疑问,欢迎在评论区留言,我们一起交流学习! 👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏,并分享给更多对C感兴趣的…

Mysql架构之日志讲解:redo log,undo log,bin log 日志

一、buffer pool缓冲区 讲日志之前,我们要先认识一下buffer pool缓冲区。 mysql想完成数据的修改,会先从存储引擎层读取数据,把数据读取到服务层进行数据的修改,再通过存储引擎层把数据更新到数据库中。 mysql每次读取数据都会…

容器主机CPU使用率突增问题一则

关键词 LINUX、文件系统crontab 、mlocate根目录使用率 There are many things that can not be broken! 如果觉得本文对你有帮助,欢迎点赞、收藏、评论! 一、问题现象 业务一台容器服务器,近期经常收到cpu不定期抖动告警&#x…

simpleITK - Setup - matplotlib‘s imshow

使用 matplotlib 显示内联图像 在此笔记本中,我们将探索使用 matplotlib 显示笔记本中的图像,并致力于开发可重复使用的函数来显示 SimpleITK 图像的 2D、3D、颜色和标签叠加层。 我们还将研究使用需要输入图像重叠的图像过滤器的微妙之处。 %matplot…

Github 热点项目 awesome-mcp-servers MCP 服务器合集,3分钟实现AI模型自由操控万物!

【今日推荐】超强AI工具库"awesome-mcp-servers"星数破万! ① 百宝箱式服务模块:AI能直接操作浏览器、读文件、连数据库,比如让AI助手自动整理Excel表格,三分钟搞定全天报表; ② 跨领域实战利器:…

硬件老化测试方案的设计误区

硬件老化测试方案设计中的常见误区主要包括测试周期不足、测试条件过于单一、样品选择不当等方面。其中,测试周期不足尤为突出,容易导致潜在缺陷未被完全暴露。老化测试本质上是通过加速产品老化来模拟长期使用状况,因此测试周期不足会严重削…

CSS学习笔记5——渐变属性+盒子模型阶段案例

目录 通俗易懂的解释 渐变的类型 1、线性渐变 渐变过程 2、径向渐变 如何理解CSS的径向渐变,以及其渐变属性 通俗易懂的解释 渐变属性 1. 形状(Shape) 2. 大小(Size) 3. 颜色停靠点(Color Sto…

Java StringUtils工具类常用方法详解

StringUtils是Apache Commons Lang库中一个极其常用的工具类,它提供了大量处理字符串的静态方法,能够简化我们的日常开发工作,提高代码的可读性和健壮性。下面我将详细介绍StringUtils类中最常用的方法及其使用场景。 一、StringUtils的基本…

设计模式(创建型)- 原型模式

目录 定义 类图 角色 优缺点 优点 缺点 应用场景 案例展示 浅克隆 深克隆 定义 原型模式旨在创建重复的对象,同时确保良好的性能表现。它通过复制现有对象(原型)来创建新对象,而非使用传统的构造函数创建方式。这种设计…

MQ的数据一致性,如何保证?

1 数据一致性问题的原因 这些年在Kafka、RabbitMQ、RocketMQ踩过的坑,总结成四类致命原因: 生产者悲剧:消息成功进Broker,却没写入磁盘就断电。消费者悲剧:消息消费成功,但业务执行失败。轮盘赌局&#x…

Angular由一个bug说起之十五:自定义基于Overlay的Tooltip

背景 工具提示(tooltip)是一个常见的 UI 组件,用于在用户与页面元素交互时提供额外的信息。由于angular/material/tooltip的matTooltip只能显示纯文本,所以我们可以通过自定义Directive来实现一个灵活且功能丰富的tooltip Overlay…

简单介绍一下Unity中的ScriptableObject

ScriptableObject的本质 ScriptableObject是Unity引擎中的一个特殊基类,允许你创建不依附于游戏对象的数据容器,以资产(Asset)形式存储在项目中。这些资产: 可在编辑器中创建和配置 在构建后作为资产打包 可通过Resources或AssetBundle加…

ubuntu24.04.2 NVIDIA GeForce RTX 4060笔记本安装驱动

https://www.nvidia.cn/drivers/details/242281/ 上面是下载地址 sudo chmod x NVIDIA-Linux-x86_64-570.133.07.run # 赋予执行权限把下载的驱动复制到家目录下,基本工具准备,如下 sudo apt update sudo apt install build-essential libglvnd-dev …