CPU详细介绍
CPU(中央处理器,Central Processing Unit)是计算机系统的核心部件之一,被称为计算机的“大脑”。它负责执行计算机程序中的各种指令,并管理和协调计算机系统的各个硬件组件。以下是对 CPU 的详细介绍,包括其结构、功能和工作原理等方面。
一、CPU 的基本组成部分
CPU 通常由以下几个主要组成部分构成:
-
控制单元(Control Unit, CU)
- 控制单元负责解释指令,并向其他部件发出控制信号,以便协调 CPU 内部和整个计算机系统的操作。它决定了指令的执行顺序,并控制数据在 CPU 各个部分之间的流动。
-
算术逻辑单元(Arithmetic Logic Unit, ALU)
- ALU 是 CPU 的核心计算单元,负责执行各种算术运算(如加减乘除)和逻辑运算(如与、或、非、异或等)。它是处理计算和判断的地方,是 CPU 实现计算能力的主要组件。
-
寄存器(Registers)
- 寄存器是 CPU 内部的高速存储器,用于临时存储数据和指令。常见的寄存器包括:
- 指令寄存器(Instruction Register, IR):存储当前执行的指令。
- 程序计数器(Program Counter, PC):存储下一条将要执行的指令的内存地址。
- 累加器(Accumulator):用于算术和逻辑运算。
- 通用寄存器(General-purpose Registers):用于存储临时数据和操作数。
- 寄存器是 CPU 内部的高速存储器,用于临时存储数据和指令。常见的寄存器包括:
-
缓存(Cache)
- CPU 缓存是位于 CPU 和主内存之间的小容量高速缓存,用于临时存储经常访问的数据,以提高 CPU 的访问速度。缓存通常分为多级:
- 一级缓存(L1 Cache):通常集成在 CPU 内核中,速度最快但容量较小。
- 二级缓存(L2 Cache):容量更大一些,但速度稍慢。
- 三级缓存(L3 Cache):在多核 CPU 中常见,由所有内核共享,容量更大但速度最慢。
- CPU 缓存是位于 CPU 和主内存之间的小容量高速缓存,用于临时存储经常访问的数据,以提高 CPU 的访问速度。缓存通常分为多级:
-
总线接口单元(Bus Interface Unit, BIU)
- 负责 CPU 与其他系统组件(如内存、外设)之间的通信。总线包括数据总线、地址总线和控制总线。
二、CPU 的主要性能指标
-
时钟速度(Clock Speed)
- 时钟速度指 CPU 每秒钟可以执行的指令周期数,通常以 GHz(千兆赫兹)为单位。时钟速度越高,CPU 执行指令的速度通常越快。
-
核心数量(Cores)
- 现代 CPU 通常具有多个核心(如双核、四核、六核甚至更多),每个核心都能独立执行指令。多核 CPU 可以同时处理多个任务,从而提高并行处理能力。
-
线程(Threads)
- 线程是 CPU 执行的最小单位。支持超线程技术(Hyper-Threading)的 CPU 可以使一个物理核心处理两个线程,从而提高处理效率。
-
缓存大小(Cache Size)
- 缓存的容量对 CPU 的性能有重要影响。更大的缓存可以减少对主内存的访问频率,提高数据处理效率。
-
指令集(Instruction Set)
- 指令集是 CPU 可以执行的基本操作的集合。常见的指令集架构包括 x86、x86-64、ARM、RISC-V 等。
-
热设计功耗(Thermal Design Power, TDP)
- TDP 指 CPU 在正常工作条件下的最大功耗,通常以瓦特(W)为单位。较高的 TDP 意味着 CPU 需要更强的散热系统。
三、CPU 的工作原理
CPU 的工作原理可以概括为“取指(Fetch)- 解码(Decode)- 执行(Execute)- 写回(Write Back)”这四个步骤,称为 指令周期(Instruction Cycle)。
-
取指(Fetch)
- CPU 从内存中读取一条指令,并将其存储在指令寄存器中。程序计数器(PC)记录当前指令的地址,并在取指后自动加一,指向下一条指令的地址。
-
解码(Decode)
- CPU 将取到的指令进行译码(Decode),由控制单元解释该指令需要执行的操作,并确定操作数和目标寄存器。
-
执行(Execute)
- 根据解码的结果,ALU 进行相应的算术或逻辑运算。对于内存访问指令,CPU 会与内存交互读取或写入数据。
-
写回(Write Back)
- 执行完成后,CPU 将运算结果写回寄存器或内存中,以便后续指令使用。
四、CPU 的架构类型
-
CISC(复杂指令集计算机,Complex Instruction Set Computer)
- 具有大量复杂的指令,单条指令可以执行多个低级操作。CISC 设计注重减少程序的指令数,常见的 CISC 代表是 Intel 的 x86 架构。
-
RISC(精简指令集计算机,Reduced Instruction Set Computer)
- 采用较少的指令集,强调简单、快速的指令执行。RISC 架构的指令通常长度固定,执行时间短,常见的 RISC 代表是 ARM 架构。
-
MISC(最小指令集计算机,Minimal Instruction Set Computer)
- 只提供极少数指令的处理器架构,主要用于一些特定嵌入式系统。
五、现代 CPU 的高级技术
-
流水线(Pipeline)
- 流水线技术将指令执行分为多个阶段,每个阶段由不同的硬件单元负责,实现指令的并行处理。常见的流水线阶段包括取指、解码、执行、访存和写回。流水线的深度越深,理论上能提高性能,但会增加分支预测错误的开销。
-
分支预测(Branch Prediction)
- 分支预测器通过预测程序的分支走向,减少流水线的停顿,从而提高指令执行效率。
-
超标量(Superscalar)
- 超标量处理器能够在同一个时钟周期内同时执行多条指令。它通过多个 ALU 单元和并行数据路径实现并行处理。
-
多级缓存(Multi-level Cache)
- 使用 L1、L2 和 L3 缓存层级来减少内存延迟,提高数据访问速度。
-
多线程技术(Multithreading)
- 例如 Intel 的超线程技术(Hyper-Threading),可以在单个核心中同时处理多个线程,提高并行处理能力。
-
64 位处理(64-bit Processing)
- 64 位 CPU 能够处理更大的数据块,支持更大的内存寻址空间,从而显著提升性能。
六、CPU 的发展趋势
-
异构计算(Heterogeneous Computing)
- 通过将不同类型的处理器(如 CPU、GPU、NPU 等)组合在一个系统中,实现高效的任务分配和并行计算。
-
人工智能加速器(AI Accelerators)
- 现代 CPU 集成 AI 加速单元,以支持深度学习和机器学习任务的快速处理。
-
低功耗设计
- 特别是在移动设备和嵌入式系统中,低功耗 CPU 设计(如 ARM Cortex 系列)变得越来越重要。
-
量子计算(Quantum Computing)
- 尽管目前仍处于实验阶段,但量子计算被认为是未来处理器发展的一个重要方向。
七、常见 CPU 制造商
-
Intel
- 提供 x86 和 x86-64 架构的 CPU 产品,如 Core i3/i5/i7、Xeon 系列。
-
AMD
- 提供与 Intel 竞争的 x86-64 架构 CPU,如 Ryzen、Threadripper 和 EPYC 系列。
-
ARM
- 提供 RISC 架构的处理器,广泛应用于移动设备和嵌入式系统,如 Apple A 系列、Snapdragon 和 Exynos。
-
Apple
- 使用基于 ARM 架构的自研 CPU,如 M1、M2 系列。
-
IBM
- 提供 Power 系列 CPU,主要用于服务器和超级计算机领域。
八、总结
CPU 是计算机的核心处理单元,通过协调计算和控制各种硬件组件,支持各种复杂的计算任务。随着技术的进步,CPU 的性能和效率不断提升,从最初的单核心到多核心架构,从传统的 CISC 到现代的 RISC,再到集成 AI 加速器和低功耗设计,CPU 正在不断适应新的计算需求。未来,随着异构计算和量子计算的发展,CPU 仍将在技术前沿扮演重要角色。
相关文章:
CPU详细介绍
CPU(中央处理器,Central Processing Unit)是计算机系统的核心部件之一,被称为计算机的“大脑”。它负责执行计算机程序中的各种指令,并管理和协调计算机系统的各个硬件组件。以下是对 CPU 的详细介绍,包括其…...
kafka中的数据清理策略
Kafka 中的数据清理策略主要用于控制数据的保留时间和存储空间,确保系统不会因为数据积累过多而影响性能。Kafka 提供了两种主要的数据清理策略: 1、基于时间的清理策略: 配置参数:log.retention.hours 或 log.retention.ms工作…...
django基于Django的二手电子设备交易平台设计与开发
摘 要 科学技术日新月异,人们的生活都发生了翻天覆地的变化,二手电子设备交易平台管理当然也不例外。过去的信息管理都使用传统的方式实行,既花费了时间,又浪费了精力。在信息如此发达的今天,我们可以通过网络这个媒介…...
WPF如何全局应用黑白主题效果
灰白色很多时候用于纪念,哀悼等。那么使用 WPF如何来做到这种效果呢?要实现的这种效果,我们会发现,它其实不仅仅是要针对图片,而是要针对整个窗口来实现灰白色。 如果只是针对图片的话,我可以可以对图片进…...
软件测试之测试用例扩展
软件测试之测试用例扩展 1. 测试用例覆盖2. UI布局覆盖3. 兼容性覆盖4. 测试用例条数 1. 测试用例覆盖 规则覆盖UI布局兼容性 2. UI布局覆盖 2条用例即可 布局, 颜色与原型图一致图片和文字描述无误 3. 兼容性覆盖 测试5大浏览器 火狐谷歌ieEge苹果 4. 测试用例条数 使…...
【Apache Paimon】-- 2 -- 核心特性 (0.9.0)
目录 1、实时更新 1.1、实时大批量更新 1.2、支持定义合并引擎 1.3、支持定义更新日志生成器 2、海量数据追加处理 2.1、append table 2.2、快速查询 3、数据湖功能(类比:hudi、iceberg、delta) 3.1、支持 ACID 事务 3.2、支持 Time travel(时间旅行) 3.3、支持…...
Mybatis入门
在学习MyBatis之前先了解一下什么是Mybatis?它能解决什么问题? 什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。 Mybatis解决什么问题? MyBatis 免除了几乎所有的 JDBC…...
智能方法求解-圆环内传感器节点最大最小距离分布
本篇文章是博主在最优化、人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在最优化算…...
Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装
Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装 Matplotlib是Python最常用的数据可视化工具之一,结合Miniconda可以轻松管理安装和依赖项。在这篇文章中,我们将详细介绍如何使用Miniconda在Linux、mac…...
数学建模学习(137):使用Python进行频数分析
在数据科学的工作中,频数分析是一种用于描述变量值出现次数的重要统计方法。SPSS等工具提供了便捷的频数分析功能,而在Python中,我们同样可以通过灵活的库来实现相同的分析。在本文中,我们将介绍如何使用Python来完成频数分析,并演示如何用Pandas、Matplotlib等库来分析和…...
[Unity] 【游戏开发】Unity开发基础1-创建Unity项目:从Unity Hub选择合适的渲染管
创建一个新的Unity项目通常是开发过程中的第一步,而Unity为此提供了强大的工具和灵活的选项。本文将详细介绍如何使用Unity Hub创建项目、选择合适的Unity版本、模板和渲染管线,并阐述每种选项的优缺点和适用场景。 1. Unity Hub:统一管理项目和版本 Unity Hub是Unity提供…...
大型语言模型综述 A Survey of Large Language Models
文章源自 2303.18223 (arxiv.org) 如有侵权,请通知下线 这是一篇关于大语言模型(LLMs)的综述论文,主要介绍了 LLMs 的发展历程、技术架构、训练方法、应用领域以及面临的挑战等方面,具体内容如下: 摘要…...
基于MATLAB的混沌序列图像加密程序
设计目的 图像信息生动形象,它已成为人类表达信息的重要手段之一,网络上的图像数据很多是要求发送方和接受都要进行加密通信,信息的安全与保密显得尤为重要,因此我想运用异或运算将数据进行隐藏,连续使用同一数据对图…...
容器安全检测和渗透测试工具
《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect Docker-bench-…...
视频修复技术和实时在线处理
什么是视频修复? 视频修复技术的目标是填补视频中的缺失部分,使视频内容连贯合理。这项技术在对象移除、视频修复和视频补全等领域有着广泛的应用。传统方法通常需要处理整个视频,导致处理速度慢,难以满足实时处理的需求。 技术发…...
MyBatis——#{} 和 ${} 的区别和动态 SQL
1. #{} 和 ${} 的区别 为了方便,接下来使用注解方式来演示: #{} 的 SQL 语句中的参数是用过 ? 来起到类似于占位符的作用,而 ${} 是直接进行参数替换,这种直接替换的即时 SQL 就可能会出现一个问题 当传入一个字符串时ÿ…...
学习日志014--用python实现顺序表
之前我们用c语言实现顺序表,今天就然我们用python来复习一遍 一、创建顺序表 python的类可以代替c中的结构体作为复合数据类型。 创建学生类,并用装饰器将方法属性化,便于之后的修改。属性装饰器,可以在保护私有属性࿰…...
Android ConstraintLayout 基础
Android ConstraintLayout 基础 屏障线 Barrier设置水平和垂直方向的约束关系长宽比链式结构组站位辅助线 参考地址 屏障线 Barrier 以下是使用 ConstraintLayout 在 Android 中实现简单屏障线(Barrier)使用的示例代码,主要步骤如下…...
Ubuntu22.04LTS 部署前后端分离项目
一、安装mysql8.0 1. 安装mysql8.0 # 更新安装包管理工具 sudo apt-get update # 安装 mysql数据库,过程中的选项选择 y sudo apt-get install mysql-server # 启动mysql命令如下 (停止mysql的命令为:sudo service mysql stop࿰…...
【网站推荐】the top trending open-source startups, every quarter
每季度最热门的开源初创公司 我们根据 GitHub 存储库自 2020 年以来的明星增长情况发布热门开源项目,并将其称为 Runa 开源初创公司 (ROSS) 指数。 una Capital actively invests in open-source startups (like Nginx and MariaDB) and considers an active deve…...
Java通过calcite实时读取kafka中的数据
引入maven依赖 <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-kafka</artifactId> <version>1.28.0</version> </dependency> 测试代码 import java.sql.Connection; import java.sql.DriverMan…...
el-table 数据去重后合并表尾合计行,金额千分位分割并保留两位小数,表尾合计行表格合并
问题背景 最近在做后台管理项目el-table 时候需要进行表尾合计,修改合计后文字的样式,合并单元格。 想实现的效果 合并表尾单元格前三列为1格;对某些指定的单元格进行表尾合计;合计后的文本样式加粗;涉及到金额需要千…...
Flutter:RotationTransition旋转动画
配置vsync,需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationController late AnimationController _controller;overridevoid initState() {super…...
《Python浪漫的烟花表白特效》
一、背景介绍 烟花象征着浪漫与激情,将它与表白结合在一起,会创造出别具一格的惊喜效果。使用Python的turtle模块,我们可以轻松绘制出动态的烟花特效,再配合文字表白,打造一段专属的浪漫体验。 接下来,让…...
Java面试题分享
1、hashmap的底层设计原理以及扩容规则,是否线程安全,如何线程安全。 jdk1.7以前采用数组加链表结构通过键哈希确定数组下标存键值对。jdk1.8及以后采用数组加链表加红黑树,链表超阈值且数组满足条件会转红黑树,哈希函数先取键 h…...
定时器的小应用
第一个项目 第一步,RCC开启时钟,这个基本上每个代码都是第一步,不用多想,在这里打开时钟后,定时器的基准时钟和整个外设的工作时钟就都会同时打开了 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);第二步&…...
【计算机网络】UDP协议
一、UDP协议格式 1.报头的含义 ① 16位源端口号:自己的端口号 ② 16位目的端口号:对方的端口号 ③ 16位UDP长度:整个数据报(UDP报头UDP有效载荷)的长度,最大64KB 一个UDP最多传64KB的数据,如果要传的数据 > 64K…...
vulhub之log4j
Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645) 漏洞简介 Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。 Apache Log4j 在应用程序中添加日志记录最…...
[Unity] 关于引入Google SDK以及使用的方法
在Unity中接入谷歌SDK(如Google Play Games SDK或Firebase SDK等)通常涉及几个关键步骤,包括下载SDK、导入Unity项目、配置项目设置、编写必要的代码以及测试集成。以下是一个基于Firebase SDK接入Unity的示例,同时涵盖了Google P…...
集群聊天服务器(13)redis环境安装和发布订阅命令
目录 环境安装订阅redis发布-订阅的客户端编程环境配置客户端编程 功能测试 环境安装 sudo apt-get install redis-server 先启动redis服务 /etc/init.d/redis-server start默认在6379端口上 redis是存键值对的,还可以存链表、数组等等复杂数据结构 而且数据是在…...
第R4周:LSTM-火灾温度预测(pytorch版)
>- **🍨 本文为[🔗365天深度学习训练营]中的学习记录博客** >- **🍖 原作者:[K同学啊]** 往期文章可查阅: 深度学习总结 任务说明:数据集中提供了火灾温度(Tem1)、一氧化碳浓度…...
基于SpringBoot和uniapp开发的医护上门系统上门护理小程序
项目分析 一、市场需求分析 人口老龄化趋势:随着全球及中国人口老龄化的加剧,老年人口数量显著增加,对医疗护理服务的需求也随之增长。老年人由于身体机能下降,更需要便捷、高效的医护服务,而医护上门服务恰好满足了这…...
js批量输入地址获取经纬度
使用js调用高德地图的接口批量输入地址获取经纬度。 以下的请求接口的key请换成你的key。 创建key:我的应用 | 高德控制台 ,服务平台选择《Web服务》。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-…...
Python自动化测试实践中pytest用到的功能dependency和parametrize
Python自动化测试中pytest用到的功能 1、pytest之@pytest.mark.dependency装饰器设置测试用例之间的依赖关系 1.1说明: 1、这是一个pytest第三方插件,主要解决用例之间的依赖关系。如果依赖的上下文测试用例失败后续的用例会被标识为跳过执行,相当于执行了 pytest.mark.s…...
json-bigint处理前端精度丢失问题
问题描述:前后端调试过程中,有时候会遇到精度丢失的问题,比如后端给过来的id超过16位,就会出现精度丢失的情况,前端拿到的id与后端给过来的不一致。 解决方案: 1、安装 npm i json-bigint 2、在axios中配置…...
神经网络10-Temporal Fusion Transformer (TFT)
Temporal Fusion Transformer (TFT) 是一种专为时序数据建模而设计的深度学习模型,它结合了Transformer架构和其他技术,旨在有效地处理和预测时序数据中的复杂模式。TFT 于 2020 年由 Google Research 提出,旨在解决传统模型在时序预测中的一…...
django基于django的民族服饰数据分析系统的设计与实现
摘 要 随着网络科技的发展,利用大数据分析对民族服饰进行管理已势在必行;该平台将帮助企业更好地理解服饰市场的趋势,优化服装款式,提高服装的质量。 本文讲述了基于python语言开发,后台数据库选择MySQL进行数据的存储…...
html数据类型
数据类型是字面含义,表示各种数据的类型。在任何语言中都存在数据类型,因为数据是各式各样。 1.数值类型 number let a 1; let num 1.1; // 整数小数都是数字值 // 数字肯定有个范围 正无穷大和负无穷大 // Infinity 正无穷大 // -Infinity 负…...
Springboot启动异常 错误: 找不到或无法加载主类 xxx.Application异常
Springboot启动异常 错误: 找不到或无法加载主类 xxx.Application异常 报错提示 Connected to the target VM, address: 127.0.0.1:57210, transport: socket 错误:找不到或无法加载主类 global.hh.manage.HHMicroCloudProviderApplication Disconnected from the target VM, …...
哋它亢SEO技术分析:如何提升网站在搜索引擎中的可见性
文章目录 哋它亢SEO技术分析:如何提升网站在搜索引擎中的可见性网站的基本情况SEO优化分析与建议1. 元数据优化2. 关键词优化3. URL结构4. 图像优化5. 移动端优化6. 网站速度7. 结构化数据(Schema Markup)8. 内链与外链9. 社交分享 哋它亢SEO…...
web——upload-labs——第十一关——黑名单验证,双写绕过
还是查看源码, $file_name str_ireplace($deny_ext,"", $file_name); 该语句的作用是:从 $file_name 中去除所有出现在 $deny_ext 数组中的元素,替换为空字符串(即删除这些元素)。str_ireplace() 在处理时…...
ElasticSearch7.x入门教程之中文分词器 IK(二)
文章目录 前言一、内置分词器二、中文IK分词器(第三方)三、本地自定义四、远程词库总结 前言 ElasticSearch 核心功能就是数据检索,首先通过索引将文档写入 es。 查询分析则主要分为两个步骤: 1、词条化:分词器将输入…...
体积全息及平面全息图的衍射效率
一、体积全息 当记录材料的厚度是条纹间距的若干倍时,则在记录材料体积内将记录下干涉全息图的三维空间分布,就形成了体积全息。 按物光和参考光入射方向和再现方式的不同体积全息可以分为两种。 一种是物光和参考光在记录介质的同一侧入射,得…...
【常用组件整理】
xgplayer 字节开发的前端视频播放器 xgplayer是一个由字节跳动开发的强大的前端视频播放器,具有稳定性高、文档清晰、支持弹幕和移动端优化 等特点。相较于VideoJs,xgplayer的文档更简洁,自定义插件更为便捷。xgplayer还提供了丰富的插件来扩…...
用指针函数寻找数组中的最大值与次大值
#include <stdio.h>// 函数用于找出数组中的最大值和次大值 void LargestTow(int a[], int n, int *pfirst, int *psecond) {*pfirst a[0];*psecond a[1];if (*psecond > *pfirst) {// 如果初始的次大值大于最大值,交换它们int temp *pfirst;*pfirst *…...
原生微信小程序在顶部胶囊左侧水平设置自定义导航兼容各种手机模型
无论是在什么手机机型下,自定义的导航都和右侧的胶囊水平一条线上。如图下 以上图iphone12,13PRo 以上图是没有带黑色扇帘的机型 以下是调试器看的wxml的代码展示 注意:红色阔里的是自定义导航(或者其他的logo啊,返回之…...
Android Gradle自定义任务在打包任务执行完成后执行cmd命令
背景 在每次打包之后需要做某事,例如每次打包后我都会安装某个目录下的一个apk。这个apk是通过一堆shell命令过滤得到一个apk的地址,然后把执行的几个shell命令何必成一个alias指令,在打包后只需要执行alias指令实现功能。当然也可以直接写在…...
http自动发送请求工具(自动化测试http请求)
点击下载《http自动发送请求工具(自动化测试http请求)》 前言 在现代软件开发过程中,HTTP 请求的自动化测试是确保应用程序稳定性和可靠性的关键环节。为了满足这一需求,我开发了一款功能强大且易于使用的自动化 HTTP 请求发送工具。该工具基于 C# 开发…...
解决Docker环境变量的配置的通用方法
我们部署的很多服务都是以Docker容器的形式存在的。 在运行Docker容器前,除了设置网络、数据卷之外,还需要设置各种各样的环境变量。 有时候,由于容器版本的问题,一些文档没有及时更新,可能同时存在多个新旧版本的环…...
SpringBoot3整合Hutool-captcha实现图形验证码
文章目录 验证码需求分析:项目创建import方式的使用说明exclude方式定义接口:接口定义定义 CaptchaController前端代码在整合技术框架的时候,想找一个图形验证码相关的框架,看到很多验证码不在更新了或者是在中央仓库下载不下来,还需要多引入依赖。后面看到了Hutool **图形…...