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

深入理解UML动态图:系统行为建模全景指南

目录

  • 前言
  • 1. 动态图概述
  • 2. 用例图(Use Case Diagram)
    • 2.1 定义与作用
    • 2.2 应用价值
    • 2.3 实践建议
  • 3. 顺序图(Sequence Diagram)
    • 3.1 定义与特征
    • 3.2 应用优势
    • 3.3 建模建议
  • 4. 活动图(Activity Diagram)
    • 4.1 定义与用途
    • 4.2 优势体现
    • 4.3 应用建议
  • 5. 状态图(State Machine Diagram)
    • 5.1 图形概述
    • 5.2 实用价值
    • 5.3 建模建议
  • 6. 通信图(Communication Diagram)
    • 6.1 图形解析
    • 6.2 使用场景
    • 6.3 建模要点
  • 7. 定时图(Timing Diagram)
    • 7.1 图形特点
    • 7.2 应用优势
    • 7.3 实践建议
  • 结语

前言

在现代软件开发过程中,建模是连接需求与实现的桥梁。统一建模语言(UML)为开发者提供了一套系统化的图形工具,用于从不同角度刻画软件系统的结构与行为。其中,动态图(Dynamic Diagrams)尤为关键,它们聚焦于系统在运行时的行为、交互和状态变迁,是需求分析与系统设计阶段不可或缺的一部分。

本篇文章将系统梳理UML中的各类动态图,包括用例图、顺序图、活动图、状态图、通信图与定时图。通过详实的说明与应用场景分析,帮助读者全面掌握动态图的建模技巧,为实际开发中的需求提炼、逻辑设计与系统验证打下坚实基础。

1. 动态图概述

动态图不同于静态图,它们关注的是“变化”而非“结构”。在系统的生命周期中,尤其是在运行过程中,对象的行为、交互和状态会随时间不断演变,动态图正是用来捕捉这种动态特征。

UML中主要的动态图类型包括:

  • 用例图(Use Case Diagram)
  • 顺序图(Sequence Diagram)
  • 活动图(Activity Diagram)
  • 状态图(State Machine Diagram)
  • 通信图(Communication Diagram)
  • 定时图(Timing Diagram)

接下来,我们将逐一对上述图形进行深入讲解,结合其在实际开发中的应用场景,帮助读者理解每种图的本质与价值。

2. 用例图(Use Case Diagram)

2.1 定义与作用

用例图是系统建模中最基础、最直观的图形之一,主要展示系统的功能点以及用户如何与这些功能进行交互。虽然传统上用例图被视为静态图的一部分,但其本质上更关注系统与外部参与者之间的行为关系,因此本文将其归为动态图。

通过“角色 + 用例”的组合方式,用例图可以清晰地表达系统的功能边界和业务需求。例如,在一个在线购物系统中,用户可以“浏览商品”、“添加购物车”、“提交订单”,而管理员则可以“管理商品”、“处理订单”等。
在这里插入图片描述

2.2 应用价值

  • 明确系统的功能点与用户角色之间的关系
  • 作为需求分析的基础,便于开发与测试人员理解系统预期行为
  • 有助于识别功能用例之间的继承、包含、扩展关系,提高建模灵活性

2.3 实践建议

在绘制用例图时,建议优先识别出系统的主要参与者(人、系统、设备等),然后逐步列出他们与系统交互的场景。避免将实现细节引入图中,保持用例图的抽象性与通用性。

3. 顺序图(Sequence Diagram)

3.1 定义与特征

顺序图是一种时序图,它描述了对象之间在特定时间顺序下的信息交换过程,是建模交互行为的核心图形之一。顺序图以纵向时间线和横向对象划分界面,通过消息箭头表示方法调用或事件响应。

顺序图特别适合用于建模某个用例的实现流程,如“用户注册”场景中的各个子系统(前端页面、验证服务、数据库等)之间的调用关系。
在这里插入图片描述

3.2 应用优势

  • 精确展示对象之间的消息传递顺序
  • 有助于分析协作模式与系统职责分工
  • 可用于生成测试用例、验证业务逻辑完整性

3.3 建模建议

在使用顺序图时,建议关注以下几点:

  • 保持消息流程的连贯性,避免过度冗杂
  • 对关键消息标注返回值、条件与循环信息
  • 配合用例图,增强用例的实现可视化程度

4. 活动图(Activity Diagram)

4.1 定义与用途

活动图是UML中用于描述控制流与数据流的图形工具,它类似传统的流程图,但具备更强的抽象能力和建模表达力。活动图特别适合用于展示业务逻辑流程、算法步骤、用户行为路径等。

例如,在一个工作流系统中,从“任务创建”到“审批处理”再到“归档完成”,整个流程都可以通过活动图来直观地展示。
在这里插入图片描述

4.2 优势体现

  • 支持并发流程与条件分支的建模
  • 有助于需求分析中用例细化
  • 可用于验证操作流程的合理性与完备性

4.3 应用建议

绘制活动图时,应清晰标明起始节点、动作节点、判断节点与合并节点。特别是在涉及多个分支与并行操作的场景中,活动图能够有效提升流程建模的清晰度与可维护性。

5. 状态图(State Machine Diagram)

5.1 图形概述

状态图(也称状态机图)用于刻画对象在生命周期中所经历的各种状态及其之间的转移条件。适用于那些行为受状态驱动的对象,例如订单、交易、设备、协议等。

一个“订单”对象可能经历“已创建”、“已支付”、“已发货”、“已完成”多个状态,每个状态的转移由特定事件或条件触发,状态图正是用来捕捉这种动态行为的工具。
在这里插入图片描述

5.2 实用价值

  • 建模状态驱动对象的生命周期变化
  • 提高系统对事件响应的清晰度与一致性
  • 特别适用于嵌入式系统、物联网、控制系统等

5.3 建模建议

状态图中需明确初始状态、终止状态、各状态之间的转换逻辑及触发条件。合理地组织复合状态和并发状态,可提升模型的表达力和可扩展性。

6. 通信图(Communication Diagram)

6.1 图形解析

通信图(原名协作图)与顺序图有相似之处,也用于表示对象之间的交互。但与顺序图强调“时间顺序”不同,通信图更侧重于展示对象之间的结构关系与交互路径。

它以对象为节点,以带编号的消息箭头表示交互流程,适用于分析系统中组件的协作结构。
在这里插入图片描述

6.2 使用场景

  • 强调对象间的协作关系而非时间
  • 适合从结构角度审视系统设计
  • 可与顺序图互补使用,提供双重视角

6.3 建模要点

在建模通信图时,应注意消息编号的顺序合理性,避免在复杂系统中产生混乱。同时,清晰标注各个对象的职责与交互路径,有助于系统架构的优化。

7. 定时图(Timing Diagram)

7.1 图形特点

定时图是UML中用于描述时间敏感行为的图形,它详细展示对象状态或属性值随时间变化的轨迹。特别适合用于实时系统、硬件建模、通信协议等领域。

定时图中的横轴表示时间,纵轴表示对象状态,通过状态变化曲线明确标示对象在时间维度上的响应行为。
在这里插入图片描述

7.2 应用优势

  • 可视化系统状态与时间之间的精确映射
  • 有助于发现潜在的时序性冲突或性能瓶颈
  • 提供对系统响应时效的验证基础

7.3 实践建议

绘制定时图时,应保证时间轴刻度统一、状态切换清晰,必要时可标注事件触发点或延迟周期,提升图形的可读性与实用性。

结语

UML动态图是理解系统运行机制的强大工具。从用例图的需求梳理到顺序图、活动图的流程建模,再到状态图与定时图的精细控制,它们各自承担着不同建模任务,但又相辅相成,共同构建出一幅完整的系统行为图景。

掌握这些图形不仅有助于开发人员更好地理解系统逻辑,也能促进团队成员之间的沟通协作。随着系统复杂度的提高,动态图的重要性将愈加凸显,建议读者结合实际项目多加练习,灵活运用各类图形,以模型驱动开发的方式提升软件工程效率与质量。

相关文章:

深入理解UML动态图:系统行为建模全景指南

目录 前言1. 动态图概述2. 用例图(Use Case Diagram)2.1 定义与作用2.2 应用价值2.3 实践建议 3. 顺序图(Sequence Diagram)3.1 定义与特征3.2 应用优势3.3 建模建议 4. 活动图(Activity Diagram)4.1 定义与…...

Linux驱动开发进阶(九)- SPI子系统BSP驱动

文章目录 1、前言2、SPI总线注册3、SPI设备注册4、SPI驱动注册5、SPI BSP驱动 1、前言 学习参考书籍以及本文涉及的示例程序:李山文的《Linux驱动开发进阶》本文属于个人学习后的总结,不太具备教学功能。 2、SPI总线注册 驱动源码文件:dri…...

wabpack学习记录

wabpack学习记录 前言 项目写了不少 对webpack了解甚少 只记住一些 必要的概念以及指令 所以像深究一下具体是什么 可以做什么 如何做等 package.json 文件详解 name: 项目的名称。 version: 项目的版本号。 description: 项目的描述。 author: 项目的作者或维护者信息。 l…...

计算机视觉——基于 Yolov8 目标检测与 OpenCV 光流实现目标追踪

1. 概述 目标检测(Object Detection)和目标追踪(Object Tracking)是计算机视觉中的两个关键技术,它们在多种实际应用场景中发挥着重要作用。 目标检测指的是在静态图像或视频帧中识别出特定类别的目标对象&#xff0…...

React 更新 state 中的数组

更新 state 中的数组 数组是另外一种可以存储在 state 中的 JavaScript 对象,它虽然是可变的,但是却应该被视为不可变。同对象一样,当你想要更新存储于 state 中的数组时,你需要创建一个新的数组(或者创建一份已有数组…...

[250415] OpenAI 推出 GPT-4.1 系列,支持 1M token

目录 OpenAI 推出 GPT-4.1 系列 OpenAI 推出 GPT-4.1 系列 OpenAI 宣布,新一代 GPT-4.1 模型系列正式发布,包括 GPT-4.1, GPT-4.1 mini 和 GPT-4.1 nano 三款模型,该系列模型在各项性能指标上全面超越 GPT-4o 和 GPT-4o mini,尤其…...

分布式锁+秒杀异步优化

文章目录 问题思路setnx实现锁误删问题和解决方案Redis Lua脚本问题引出解决方案 setnx实现的问题Redission快速入门redission可重入锁原理 秒杀优化(异步优化)异步秒杀思路秒杀资格判断Redis消息队列 问题 比如我们两个机器都部署了我们项目,这里nginx使用轮询的方…...

数据服务化 VS 数据中台:战略演进中的价值重构

在企业数据战略的演进历程中,数据中台曾被视为解决数据孤岛的 “万能钥匙”,而数据服务化的兴起则标志着企业从 “数据资源囤积” 向 “数据价值释放” 的深刻转型。两者的核心差异不仅在于技术架构,更在于对数据资产的定位与使用理念的根本分…...

PL/SQL登录慢,程序连接Oracle 提示无法连接或无监听

PL/SQL登录慢,程序连接Oracle 提示无法连接或无监听 错误提示:ORA-12541: TNS: 无监听程序 的解决办法, 现象:PL/SQL登录慢,程序连接Oracle 提示无法连接或无监听 监听已经正常开起,但还是PL/SQL登录慢或…...

【JAVAFX】自定义FXML 文件存放的位置以及使用

情况 1:FXML 文件与调用类在同一个包中(推荐) 假设类 MainApp 的包是 com.example,且 FXML 文件放在 resources/com/example 下: 项目根目录 ├── src │ └── sample │ └── Main.java ├── src/s…...

DDoS(分布式拒绝服务)攻击

DDoS(分布式拒绝服务)攻击 这是一份全面系统的 DDoS(分布式拒绝服务攻击)知识总结,适合用于学习、报告、讲稿或者面试准备。内容涵盖定义、原理、危害、利用、工具、防护策略等。 一、什么是DDoS DDoS(Distributed Denial of Se…...

scikit-learn初探

KFold k交叉验证,k-1个作为训练集,剩下的作为测试集 split split(X, yNone, groupsNone)X: (n_samples, n_features)的矩阵,行数为n_samples,列数为n_features y:(n_samples,)为列向量,表示监…...

深入解析 sklearn 中的多种特征编码方式:功能、适用场景与选择建议

标题:深入解析 sklearn 中的多种特征编码方式:功能、适用场景与选择建议 摘要: 在机器学习中,特征编码是数据预处理的重要环节,直接影响模型的性能和效果。本文详细介绍了 sklearn 及其生态中(含第三方库…...

windows10 wsl2 安装ubuntu和docker

见 弃用Docker Desktop:在WSL2中玩转Docker之Docker Engine 部署与WSL入门-阿里云开发者社区 如果启动docker时报下面这个错, 那是因为systemctl没有启用 sudo systemctl start docker System has not been booted with systemd as init system (PID 1)…...

一文读懂WPF系列之依赖属性与附加属性

依赖属性与附加属性 依赖属性对比C#属性WPF依赖属性(Dependency Properties)优先级计算与值决策​​回调与验证机制​​WPF 自带的依赖属性自定义依赖属性 附加属性本质与定义​​与依赖属性的区别​​附加属性的典型应用场景自定义附加属性注意事项 属性…...

1×1卷积与GoogleNet

11卷积 卷积核的尺寸等于1的卷积核 11卷积有什么用 1. 通道混合与特征转换 背景:在卷积神经网络中,输入数据通常有多个通道(例如RGB图像有3个通道,经过卷积层后通道数可能会增加)。不同通道的特征图可能包含了不同的…...

Handsontable 表格组件的使用

文章目录 1. 安装 Handsontable2. 创建一个基本表格3. 主要配置3.1、 data 数据3.2、 columns 指定列配置 4. Handsontable 高级功能4.1、 添加排序4.2、 过滤数据4.3、 选中行高亮4.4、 只读单元格4.5、 校验数据 5. Handsontable 与 Vue结合6. 总结 Handsontable 是一个强大的…...

消息中间件面试题

前言 本章内容来自B站黑马程序员java大厂面试题与小林coding 如有侵权立即删除 博主学习笔记,如果有不对的地方,海涵。 如果这篇文章对你有帮助,可以点点关注,点点赞,谢谢你! 1.通用篇 1.1 什么是消息…...

数据结构与算法--1.判断数组中元素是否有重复

在C语言中,我们可以使用类似的方法来实现判断数组中是否有重复值的功能。由于C语言没有内置的哈希集合(如Python的set或C的unordered_set),我们需要自己实现一个简单的哈希表或使用其他方法。 方法一:暴力法&#xff…...

硬件工程师面试常见问题(1)

第一问:单片机上电后没有运转,首先要检查什么? (1)单片机供电是否正常& 电路焊接检查 用万用表测量对应引脚的供电电压,检查对不对。 (2)单片机复位是否释放 用万用表测量复位引…...

测试100问:web测试和APP测试的区别

哈喽,大家好,我是十二,那今天要为大家分享的是高频面试题:web测试和 App测试的区别。 从功能测试方面来讲,web测试和 App测试在测试的流程以及测试用例的设计上是没有区别的,那主要的区别包含以下三个方面&…...

Leetcode 3518. Smallest Palindromic Rearrangement II

Leetcode 3518. Smallest Palindromic Rearrangement II 1. 解题思路2. 代码实现 题目链接:Leetcode 3518. Smallest Palindromic Rearrangement II 1. 解题思路 这一题是题目Leetcode 3517. Smallest Palindromic Rearrangement I的升级版本,其主要的…...

Golang|订单相关

文章目录 秒杀写库策略确保缓存的订单数据不丢失 秒杀写库策略 在我们的抽奖函数中,抽中奖品、减库存成功返回给前端后就应该生成订单写入数据库 但是这里有问题,我们的抽奖函数是支持高并发的,并发量大的情况下mysql无法支持这么大并发量的写…...

Python+Playwright:编写自动化测试的避坑策略

PythonPlaywright:编写自动化测试的避坑策略 前言一、告别 time.sleep(),拥抱 Playwright 的智能等待二、选择健壮、面向用户的选择器,优先使用 data-testid三、严格管理环境与依赖,确保一致性四、分离测试数据与逻辑,…...

P12130 [蓝桥杯 2025 省 B] 移动距离

P12130 [蓝桥杯 2025 省 B] 移动距离 - 洛谷 题目描述 小明初始在二维平面的原点,他想前往坐标 (233, 666)。在移动过程中,他只能采用以下两种移动方式,并且这两种移动方式可以交替、不限次数地使用: 水平向右移动,…...

关于 人工智能(AI)发展简史 的详细梳理,按时间阶段划分,涵盖关键里程碑、技术突破、重要人物及挑战

以下是关于 人工智能(AI)发展简史 的详细梳理,按时间阶段划分,涵盖关键里程碑、技术突破、重要人物及挑战: 字数:约2500字 逻辑结构:时间线清晰,分阶段描述技术突破、关键事件与挑战…...

Formality:Bug记录

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 本文记录博主在使用Synopsys的形式验证工具Formality中遇到的几个Bug。 Bug复现 情况一 // 例1 module dff (input clk, input d_in, output d_out …...

react-07React提交表单数据调用同一方法(高阶函数,函数柯里化概念)

1.高阶函数与函数柯里化概念 高阶函数:符合其中之一,那该函数为高阶函数 1.A函数,接收的参数是一个函数,那么A就是高阶函数2.A函数,调用的返回值是一个函数,那么A就是高阶函数 常见的高阶函数&#xff1a…...

js ES6箭头函数的作用

前置知识 1、箭头函数语法简洁,相较于传统的函数表达式,箭头函数的语法更为简洁,尤其适用于简单的函数。 2、解决this取向问题,在传统函数中,this 的值取决于函数的调用方式,这可能会导致一些难以理解和调…...

淘宝商品数据高并发采集方案:API 接口限流机制与分布式调用实战

一、引言 在电商领域,对淘宝商品数据进行采集是一项常见且重要的任务。随着业务规模的扩大,高并发采集需求日益凸显。然而,淘宝 API 接口存在限流机制,为了高效且合规地完成数据采集,需要采用分布式调用的策略。本文将…...

python爬虫 线程,进程,协程

0x00 线程 线程是一个执行单位,是在一个进程里面的,是共享进程里面的提供的内存等资源,使用多个线程时和使用多个进程相比,多个线程使用的内存等资源较少。进程像一座“房子”(独立资源),线程是…...

《忘尘谷》音阶与调性解析

一、音高与音名的对应关系 根据搜索结果及音乐理论,结合《忘尘谷》的曲谱信息,其音阶与调性分析如下: 调性判定 原曲调性为 D调(原曲标注为D调),但曲谱编配时采用 C调指法,通过变调夹夹2品&…...

实验一 HDFS的Shell操作

一、实验目的 熟悉HDFS Shell的语法格式,完成对HDFS上文件和目录的一系列操作 二、实验要求 2.1 练习dfs常用的子命令 ① -ls ② -du ③ -mv ④ -cp ⑤ -rm ⑥ -put ⑦ -cat ⑧ -help ⑨ -mkdir ⑩ -get 2.2通过Shell脚本定时采集数据到HDFS 三、实…...

安装SQLServer管理工具

1.回到安装SQLServer的页面,选择安装SQLServer的管理工具2.跳转官网下载 3.安装SSMS 4.安装中5.安装成功以后打开软件,输入信息连接数据库 也可以在本机通过证书链接选择Windows身份验证,就不需要输入账号密码,但只能在安装sql…...

从JSON到SQL:基于业务场景的SQL生成器实战

引言 在数据驱动的业务场景中,将业务需求快速转化为SQL查询是常见需求。本文将通过一个轻量级的sql_json_to_sql函数,展示如何将JSON格式的查询描述转换为标准SQL语句,并结合实际业务场景验证其功能。 核心代码解析 1. 代码实现 def sql_j…...

记录鸿蒙应用上架应用未配置图标的前景图和后景图标准要求尺寸1024px*1024px和标准要求尺寸1024px*1024px

审核报错【①应用未配置图标的前景图和后景图,标准要求尺寸1024px*1024px且需下载HUAWEI DevEco Studio 5.0.5.315或以上版本进行图标再处理、②应用在展开状态下存在页面左边距过大的问题, 应用在展开状态下存在页面右边距过大的问题, 当前页面左边距: 504 px, 当前页面右边距…...

蓝桥杯嵌入式十六届赛前复习总结与准备

一.软件使用 赛点是没有网络的,要自己下载原件与数据包,这里给大家一个演示 在updater Settings这里设置文件存放位置,为了方便查找和提交文件,建议在桌面建立一个文件夹来存放。 把赛点的芯片包复制到创建的文件夹然后解压缩 之…...

了解一下Unity的RenderQueue

在Unity中,场景里的每个物体都需要通过渲染管线绘制到屏幕上。渲染管线处理光照、材质、纹理等信息,最终决定物体的显示效果。但当场景中有多个物体时,它们的绘制顺序会直接影响画面结果,尤其是在涉及透明物体或特效时。这时&…...

使用CS Roofline Toolkit测量带宽

使用CS Roofline Toolkit测量带宽 工程下载:使用CS Roofline Toolkit测量带宽-案例工程文件,也可以按照下面的说明使用git clone下载 目录 使用CS Roofline Toolkit测量带宽0、Roofline模型理解1、CS Roofline Toolkit下载1.1、设置代理1.2、git clone下…...

第三篇:深入 Framer Motion Variants:掌握组件动画编排的艺术

🎯 前言 在动态交互主导的现代前端开发中,优雅的动画效果已成为提升用户体验的重要元素。Framer Motion 的 Variants(动画变体)功能,通过状态化管理和动画编排能力,让复杂动效的实现变得前所未有的高效。本…...

狂神SQL学习笔记四:基本的命令行操作

注:所有语句用 ; 结尾,– 单行注释,/* 多行注释 */ 连接数据库 mysql -uroot -p123456 --连接数据库查看所有的数据库 切换数据库 查看数据库中所有的表 显示数据库中所有表的信息 创建一个数据库 退出连接...

架构思维:缓存层场景实战_读缓存(下)

文章目录 Pre业务场景缓存存储数据的时机与常见问题解决方案1. 缓存读取与存储逻辑2. 高并发下的缓存问题及解决方案3. 缓存预热(减少冷启动问题) 缓存更新策略(双写问题)1. 先更新缓存,再更新数据库(不推荐…...

软件架构设计:MVC、MVP、MVVM、RIA 四大风格优劣剖析

MVC、MVP、MVVM 和 RIA 都是软件架构中常见的设计风格,以下是对它们的详细介绍: 一、MVC 架构风格(Model - View - Controller) 1.简介:MVC 架构风格将软件应用程序分为三个核心部分,通过这种划分来分离不…...

java基础课程-springmvc课程

一. 回顾MVC: tomcat是servlet容器, servlet实现方式: xml中配置: 二. 回顾servlet: 三. SpringMvc学习 3.1 springMvc搭建和讲解: jar包引入spring-webmvc即可。 核心:DispatcherServlet Spring的web…...

NLP高频面试题(四十二)——RAG系统评估:方法、指标与实践指南

1. 引言:RAG系统概述与评估挑战 检索增强生成(Retrieval-Augmented Generation,简称 RAG)是近年来自然语言处理领域的一个重要进展。RAG系统在大型语言模型生成文本的过程中引入了外部检索模块,从外部知识库获取相关信息,以缓解纯生成模型可能出现的幻觉和知识盲点。通过…...

Flutter学习 滚动组件(1):ListView基本使用

目录 一、ListView构造方法1.1 常规方法1.2 ListView.builder1.3 ListView.separated 二、自定义ListView样式和布局:三、ListView性能优化:总结: 一、ListView构造方法 主要以下几种方法: 常规方法,直接使用默认的构…...

处理 Flutter 没有反应

现象 有以下几种 VS Code 中 Initializing the Flutter SDK. This may take a few minutes. 会一直维持在这个右下角提示窗, 但是无后续动作 Flutter CMD flutter_console.bat 执行 --version 或者 doctor [-v] 没有任何输出, 命令卡住 解决办法 参考官方说明 管理员身份…...

java面向对象06:封装

封装 该露的露,该藏的藏 我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。 封装(数据的隐藏) 通常&#x…...

测试定时发布

测试定时发布 测试定时发布 测试定时发布 测试定时发布 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我…...

2025年4月15日 百度一面 面经

目录 1. 代理相关 从静态代理到动态代理 2. cglib可以代理被final修饰的类吗,为什么 3. JVM 体系结构 4. 垃圾回收算法 5. 什么是注解 如何使用 底层原理 6. synchronized和reentrantlock 7. 讲一下你项目中 redis的分布式锁 与java自带的锁有啥区别 8. post 请求和 ge…...