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

hevc编码芯片学习-VLSI实现

在Fan等工作中,根据特定算法设计了整像素运动估计引擎,最终的BD-Rate损失非常小,但是硬件开销比较大,搜索算法缺少灵活性,本次设计优化了硬件设计架构,

微代码 取像素

压缩

水平参考像素存储器

寻址控制 转置存储器

垂直参考像素存储器

解压缩 -> 参考像素寄存器阵列 原始像素寄存器阵列

低功耗SAD树

顶层

底层

优化后的硬件架构仍然将使用Fan等提出的4x4块的压缩和解压缩逻辑,水平-垂直参考像素存储器和低功耗32x32大小SAD引擎。本节提出的硬件设计的主要工作如下。

寻址空间逻辑支持微代码可编程

简化了参考像素更新逻辑,减少了该模块的硬件开销。

在转置逻辑中复用了参考像素阵列

引入了像素截位,减少了H-V SRAM,寄存器阵列和SAD引擎的硬件开销。

5.3.1 寻址控制逻辑

在Fan等的工作中,寻址控制逻辑是微特定整像素运动估计算法设计的,相较于其它硬件设计,BD-Rate 的损失较小,但是缺少灵活性,本节提出的IME架构重新设计了寻址控制逻辑,用以支持提出的微代码可编程的功能。支持的配置参考有搜索起始点,参考窗形状和降采样率等。当整像素运动估计的过程开始时,寻址控制模块从微代码存储器中依次读取微代码并执行。而微代码可以根据应用场景的特征提前配置好,或者根据编码过程实时更新。

5.3.2 水平-垂直参考像素存储器

为了支持二维数据复用,本次设计采用了水平-垂直参考像素存储器(H-V SRAM), 该存储器由两个SRAM组成,即水平参考像素存储器 HSRAM和垂直参考像素存储器 V SRAM。如图5-18所示。前者以行的方式存储参考像素,每一行像素存储在H SRAM的同一地址上;后者以列的方式存储参考像素,每一行像素存储在VSRAM 的同一地址上。

图5-18 水平-垂直参考像素存储器

在运动估计的过程中,如果搜索的候选点时垂直移动的,那么却是的参考像素就可以从水平参考像素存储器H SRAM中很方便的获得,相反的,如果搜索的候选点时水平移动的,那么缺失的参考像素就可以从垂直参考像素存储器V SRAM中很方便的获得。

5.3.3 参考像素阵列更新逻辑

在Fan等的设计中,参考像素寄存器阵列可以支持8个更新方向,如图5-19所示。图中的巨星代表参考像素寄存器阵列,灰色部分代表即将更新的像素,由于采用了水平-垂直参考像素存储器,无论搜索的候选点沿哪个方向移动,参考像素都能在一个周期内更新。对于Fan等设计中的参考像素更新逻辑,虽然更新候选点的参考像素时钟周期很少,特别体现在候选点沿对焦线方向移动的时候,但是这种设计会导致大量的硬件开销。

正如前面所述,本次硬件设计仍然采用了水平-垂直参考像素存储器,但是只支持3个候选点更新方向,即向上,向下和向右,如图5-19所示,因此可以大幅减少参考像素阵列更新逻辑的硬件开销。由于减少了支持的更新方向,对于带斜边的参考窗的搜索需要花费更多的时钟周期,但是同时也能搜索更多的候选点,如图5-19和图5-19所示。

5.3.4 转置寄存器

在Fan等的硬件设计中转置功能是基于SRAM实现的,设计转置时不必占用外存宽带,但是该设计仍然存在一些问题。

1 当使用ARM的Memory Compiler生成SRAM的时候,一个8bit,深度为32的SRAM需要2000左右的逻辑门数,而该转置单元需要3个尺寸的SRAM,因此总共的逻辑门数大于64k。

2 由于转置模块是基于SRAM实现的,因此该设计只能提供半双工数据传输。也就是说,从水平参考像素存储器中取像素的过程和向垂直参考像素存储器中写像素的过程是不能同时进行的。

在本节提出的硬件设计中转置模块将复用参考像素阵列,这不仅可以减少硬件代价,还可以提供双工 数据传输,为了简化转置过程的说明,我们用一个4x4块的转置过程来简单说明32x32块的转置过程。如图5-20所示。

图5-20 基于参考像素阵列的转置逻辑

在图5-20中,行序号数字表示,序列号用字母表示,不同块的像素用斜体和下划线标记,这些序号,序列号和块都从0开始计数。举例说明:1A~1D(1A,1B,1C和1D)代表第0个4x4块的第1行;0D ~3D(0D,1D,2D和3D)代表第1个4x4块的第3列;2A~2D (2A,2B,2C,2D)代表第2个4x4块的第2行。

转置的过程如下

(1)在时钟周期0,参考像素寄存器阵列下移动1行,同时i写入0个块的第0行,即像素0A~0D,接着写入第0个块的剩余3行

(2)在时钟周期3,第0个块的所有像素呗写入了寄存器阵列

(3)在时钟周期4,参考像素寄存器阵列右移1行,同时写入第1个块的0像素0A-0D, 接着写入1个块的剩余3

4) 同时01也就是像素0A-3A从寄存器阵列中读出接着读出0剩余3

5)时钟周期7,第一个所有像素都被写入寄存器阵列0所有像素都被转置

6)时钟周期8参考像素寄存器阵列移动1同时写入20像素0A-0D 接着写入2个块剩余3

7)同时11也就是像素0A-3A从寄存器阵列中读出接着是1个块声誉3

8)时钟周期112所有像素都被寄存器阵列并且1个块所有像素都被转置读出

5.3.5 像素截位

一个基于4x4压缩解压缩方案提出来用来减少片上参考像素存储器面积由于采用了技术每个像素相当于截位7bit引入BD-Rate损失非常小

本次设计测试了不同截位比特数对于最终BD-Rate硬编码代价影响

截位比特数

硬件

BD-Rate

0

210k

--

1

166k

-0.1%

2

145k

0.13%

3

124k

-0.01%

4

102k

0.51%

相关文章:

hevc编码芯片学习-VLSI实现

在Fan等工作中,根据特定算法设计了整像素运动估计引擎,最终的BD-Rate损失非常小,但是硬件开销比较大,搜索算法缺少灵活性,本次设计优化了硬件设计架构, 微代码 取像素 压缩 水平参考像素存储器 寻址控制 转…...

选导师原理

总述 一句话总结:是雷一定要避,好的一定要抢。方向契合最好,不契合适当取舍。 首先明确自身需求: 我要学东西!青年导师,好沟通,有冲劲,高压力。 我要摆烂!中老年男性教…...

2.5亿像素卷帘快门CMOS大幅面扫描相机

规格说明书 主要特征 ◎ 卷帘快门CMOS 传感器 ◎ 2.46 亿像素分辨率 ◎ 全分辨率最高帧率达5fps ◎ 高灵敏度及低噪声 ◎ ROI 区域设置 ◎ 曝光时间灵活控制(外触发,自由运行) ◎ 输出像素格式8/10/12bit 可选 ◎ 自动坏像素校正、平场校正…...

CD27.【C++ Dev】类和对象(18)友元和内部类

目录 1.友元 友元函数 几个特点 友元类 格式 代码示例 2.内部类(了解即可) 计算有内部类的类的大小 分析 注意:内部类不能直接定义 内部类是外部类的友元类 3.练习 承接CD21.【C Dev】类和对象(12) 流插入运算符的重载文章 1.友元 友元函数 在CD21.【C Dev】类和…...

企业级硬盘的测试流程

测试硬盘流程 找一个有Linux操作系统的服务器,配置好管理ip的接口,连接上linux服务器,执行lsblk命令来查看设备的情况 使用mkfs命令格式化要测试的硬盘,格式化之前务必把数据进行备份,可以使用blkid命令查看硬盘的文件…...

std::enable_shared_from_this 模板类的作用是什么?

我们以Connection类的shared智能指针为例说明&#xff0c;std::enable_shared_from_this<Connection> 是一个标准库模板类&#xff0c;它的作用是让一个类的对象能够安全地生成指向自身的 std::shared_ptr&#xff0c;即使该对象最初是通过普通指针或其他方式创建的。 作…...

鸿蒙开发-ArkUi控件使用

2.0控件-按钮 2.1.控件-文本框 Text(this.message).fontSize(40) // 设置文本的文字大小.fontWeight(FontWeight.Bolder) // 设置文本的粗细.fontColor(Color.Red) // 设置文本的颜色------------------------------------------------------------------------- //设置边框Tex…...

大数据学习栈记——MongoDB编程

本文介绍NoSQL技术&#xff1a;MongoDB用Java来连接数据库&#xff0c;执行常见的数据库操作&#xff0c;使用环境&#xff1a;IntelliJ IDEA、Ubuntu24.04。 配置Maven 我们需要使用“MongoDB Driver”&#xff0c;所以先打开“MongoDB Java Driver”项目&#xff0c;但是提…...

体系结构论文(六十七):A Machine-Learning-Guided Framework for Fault-Tolerant DNNs

A Machine-Learning-Guided Framework for Fault-Tolerant DNNs DATE 2024 研究动机 深度神经网络&#xff08;DNN&#xff09;虽然对某些扰动具有天然的容错性&#xff0c;但在面对硬件故障&#xff08;如软错误、老化、环境干扰等&#xff09;时&#xff0c;仍会出现输出错…...

qt designer 创建窗体选择哪种屏幕大小

1. 新建窗体时选择QVGA还是VGA 下面这个图展示了区别 这里我还是选择默认&#xff0c;因为没有特殊需求&#xff0c;只是在PC端使用...

游戏引擎学习第225天

只能说太难了 回顾当前的进度 我们正在进行一个完整游戏的开发&#xff0c;并在直播中同步推进。上周我们刚刚完成了过场动画系统的初步实现&#xff0c;把开场动画基本拼接完成&#xff0c;整体效果非常流畅。看到动画顺利呈现&#xff0c;令人十分满意&#xff0c;整个系统…...

sql工具怎么选最适合自己的?

sql工具怎么选&#xff1f; 为什么大多数主流工具又贵又难用&#xff1f;有没有一款免费好用的sql工具&#xff1f;像大多数朋友经常用的sql工具应该都遇到过这种情况&#xff0c;用着用着收到了来自品牌方的律师函&#xff0c;或者处理数据时经常卡死&#xff0c;再或者不支持…...

css实现一键换肤

实现一键换肤的时候&#xff0c;我们除了动态替换引用的css文件&#xff0c;还可以通过使用css变量的方式&#xff0c;达到所需效果。 首先我们来了解css变量&#xff0c;css变量以--开头&#xff0c;引用时va(--变量名)&#xff0c;例 :root{--default-color: #fff; } .box{b…...

波束形成(BF)从算法仿真到工程源码实现-第八节-波束图

一、概述 本节对MVDR、LCMV、LMS等算法的波束图进行仿真。 二、MVDR代码仿真 2.1 mvdr代码 clc; clear; M 18; % 天线数 lambda 10; d lambda / 2; L 100; %快拍数 thetas [10]; % 期望信号入射角度 thetai [-30 30]; % 干扰入射角度 n [0:M-1]; vs exp(-1j * 2…...

静态代码深度扫描详解

静态代码深度扫描是一种通过分析源代码结构、语法、语义及潜在逻辑&#xff0c;在不运行程序的情况下全面检测代码缺陷、安全漏洞和质量问题的技术。它通过结合数据流分析、控制流分析、符号执行等高级技术&#xff0c;实现对代码的深度理解&#xff0c;帮助开发团队在早期发现…...

LC25. K 个一组翻转链表(自己用)

25. K 个一组翻转链表 Java代码&#xff1a; 思路&#xff1a;利用虚拟头节点结合反转链表实现 Code&#xff1a; class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode dummy new ListNode(0);if (head null || k 1)return head;ListNode…...

Spring事务同步器在金融系统中的应用:从风控计算到交易投递

一句话总结 通过 TransactionSynchronization 机制,成功将投行交易系统的可靠性提升至金融级要求,并在对公贷款风控中实现高效资源管理。未来,事务管理将不仅仅是“提交”与“回滚”的二元选择,而是向智能化、实时化演进的核心基础设施。 1. 架构设计 1.1 整体架构图 2.…...

sealos跳转到cusor安装出错

第一次打开cursor安装出错怎么办 我出现这个问题的解决方式是重新下载并且切换目录解决...

【CUDA 】第3章 CUDA执行模型——3.5循环展开(1)

CUDA C编程笔记 第三章 CUDA执行模型3.5 循环展开3.5.1 展开的规约 待解决的问题&#xff1a; 第三章 CUDA执行模型 3.5 循环展开 循环展开是一种循环优化的技术&#xff0c;通过减少分支出现频率循环维护指令。 循环主体代码被多次编写&#xff0c;任何封闭的循环可以把迭代…...

AndroidStudio编译报错 Duplicate class kotlin

具体的编译报错信息如下&#xff1a; Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21) D…...

LeetCode hot 100—搜索二维矩阵

题目 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 fa…...

栈与队列习题分享(精写)

最小栈 题解 一、题目描述 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素 val 推入堆栈。 void pop() 删除堆栈顶部的元素。 int…...

Kotlin 集合过滤全指南:all、any、filter 及高级用法

在 Kotlin 中&#xff0c;集合过滤是数据处理的核心操作之一。无论是简单的条件筛选&#xff0c;还是复杂的多条件组合&#xff0c;Kotlin 都提供了丰富的 API。本文将详细介绍 filter、all、any、none 等操作符的用法&#xff0c;并展示如何在实际开发中灵活运用它们。 1. 基础…...

【lerobot】3-开源SO-100 主从臂的舵机位置校正、遥控操作(ubuntu系统)

官方从零教程&#xff1a;https://github.com/huggingface/lerobot/blob/main/examples/10_use_so100.md 8-lerobot aloha装配完毕如何进行遥操作 需要先完成的 组装好了so-100 2个机械臂下载安装了lerobot的代码环境&#xff1a;固定好主从臂&#xff0c;通过usb链接到同一个…...

影刀RPA证书题库包含初级、中级、高级和AP初级

影刀rpa初级证书选择题答案&#xff0c;影刀证书答案&#xff0c;影刀rpa考试&#xff0c;影刀初级考试&#xff0c;影刀初级考试选择题 原因 以前的在线题库https://exam.ezrpa.store/是为了方便更新题目和使用的&#xff0c;但经过实际使用发现大部分人“不会用”&#xff1…...

LR(0)

LR0就是当我处在自动机为红色这些结束状态的时候&#xff0c;这些红色状态就代表我们识别到了一个句柄&#xff0c;那现在的问题就是识别到了句柄&#xff0c;那要不要对他进行归约&#xff1f;LR0就是我不管当前指针指向的终结符是什么&#xff0c;我都拿它做规约 这里的二号状…...

基于 Python 和 OpenCV 技术的疲劳驾驶检测系统(2.0 全新升级,附源码)

大家好&#xff0c;我是徐师兄&#xff0c;一个有着7年大厂经验的程序员&#xff0c;也是一名热衷于分享干货的技术爱好者。平时我在 CSDN、掘金、华为云、阿里云和 InfoQ 等平台分享我的心得体会。 &#x1f345;文末获取源码联系&#x1f345; 2025年最全的计算机软件毕业设计…...

Matplotlib库详解

Matplotlib 是 Python 里一个特别常用的绘图库&#xff0c;它能帮你创建各种各样的可视化图形&#xff0c;像折线图、柱状图、散点图等。对于数据可视化、数据分析和科学研究而言&#xff0c;它是非常重要的工具。接下来我会以初学者的视角&#xff0c;为你详细介绍 Matplotlib…...

daz dForce to UE 的原理分析

dForce是物理模拟&#xff0c;不是关键帧动画&#xff1a; dForce是一个物理引擎。当你运行模拟时&#xff0c;Daz Studio会根据你设置的物理属性&#xff08;如裙子的重量、布料的硬度、摩擦力&#xff09;、环境因素&#xff08;如重力、风力&#xff09;以及与角色的碰撞&am…...

速卖通商品详情API接口:功能、应用与开发指南

前言 在全球跨境电商蓬勃发展的背景下&#xff0c;速卖通&#xff08;AliExpress&#xff09;作为阿里巴巴旗下的国际电商平台&#xff0c;凭借丰富的商品种类和庞大的用户群体&#xff0c;成为众多商家和开发者拓展海外市场的首选平台。为了满足商家和开发者对商品数据的深度…...

4月14日星期一今日早报简报微语报早读

4月14日星期一&#xff0c;农历三月十七&#xff0c;早报#微语早读。 1、全国田径大奖赛接力摘金&#xff0c;苏炳添的传奇将延续至全运会&#xff1b; 2、中国红基会&#xff1a;2024年全年总收支12.85亿元&#xff1b; 3、我国2025年电影总票房已突破250亿 位居全球第一&a…...

快速排序(非递归版本)

引言 在排序算法的世界里&#xff0c;快速排序以其高效的性能脱颖而出。它采用分治法的思想&#xff0c;通过选择基准元素将数组分为两部分&#xff0c;递归地对左右两部分进行排序。然而&#xff0c;递归实现的快速排序在处理大规模数据时可能会导致栈溢出的问题。为了解决这…...

Ubuntu20.04 设置开机自启

参考&#xff1a; Ubuntu20.04 设置开机自启_ubuntu进bos系统-CSDN博客...

添加登录和注册功能

先写前端再写后端 前提&#xff1a;ideavue3mybatisspringBoot3前后端分离实现对一张表的增删改查&#xff08;完整代码版&#xff09;-CSDN博客 项目地址 1.添加一个Login.vue视图 <template><div class"login_container"><div class"login…...

弱口令爆破

1.简单介绍 弱口令是指一些简单易猜的密码&#xff0c;可通过社工方式和一些爆破工具进行破解&#xff0c;以下介绍一款爆破工具的用法。burpsuite简称BP&#xff0c;一款可以利用字典破解账户密码的工具。 2.部署网站 可以使用PHPstudy的Apache服务&#xff0c;也可以使用I…...

springboot调用python文件,在ubuntu上部署,踩坑之旅(已部署成功)

项目介绍 springboot 调用python文件&#xff0c;python调用另一个数据文件&#xff0c;然后计算出结果&#xff0c;看似简单&#xff0c;实际上有很多坑&#xff0c;因为涉及到python的三方库&#xff0c;有时候下载不下来&#xff0c;有时候版本不匹配&#xff0c;折腾了好久…...

Android studio消息同步机制:消息本地存储,服务器交互减压

文章目录 后端&#xff08;Flask&#xff09;代码前端&#xff08;Android Studio Java&#xff09;代码 消息同步机制: 手机端可以将消息存储在本地数据库中&#xff0c;减少与服务器的交互压力。同时&#xff0c;通过序列号机制&#xff0c;手机端可以与服务器同步消息&#…...

前端常用组件库全览与推荐

&#x1f4cc; 一、组件库生态全景图 &#x1f680; 二、React 生态组件库推荐 名称简介官网Ant Design阿里出品&#xff0c;企业级 UI 系统&#xff0c;设计规范完整&#xff0c;适合后台系统https://ant.designMaterial UIGoogle Material Design 实现&#xff0c;样式响应式…...

视觉算法+雾炮联动:开创智能降尘新时代

在许多工业环境中&#xff0c;尤其是那些涉及大量物料搬运和处理的地方&#xff0c;如工厂或仓库&#xff0c;扬尘问题是一个普遍存在的挑战。这不仅影响了工作人员的工作条件&#xff0c;还可能构成健康和安全隐患。为了改善这一状况&#xff0c;不少业主采用了物理方法来减少…...

【Pandas】pandas DataFrame items

Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签&#xff08;行标签和列标签&#…...

易境通WMS系统代理仓解决方案:让代理仓管理无后顾之忧!

易境通WMS系统代理仓解决方案&#xff1a;让代理仓管理无后顾之忧&#xff01; 对于海外仓企业而言&#xff0c;除了自有仓库外&#xff0c;为了业务发展还会同时代理其他仓库&#xff0c;于是经常会面临主仓代理仓数据同步问题及费用问题。此外&#xff0c;由于个仓库分布较广…...

【智驾中的大模型 -2】VLM 在自动驾驶中的应用

1. 前言 随着端到端 AI 和多模态学习的迅猛发展&#xff0c;VLM&#xff08;视觉-语言模型&#xff09;在自动驾驶领域中的应用正逐渐成为一个备受瞩目的重要研究方向。VLM 凭借其强大的融合能力&#xff0c;将视觉&#xff08;如高清晰度的摄像头图像、精准的雷达数据&#x…...

L1-104 九宫格

L1-104 九宫格 - 团体程序设计天梯赛-练习集 九宫格是一款数字游戏&#xff0c;传说起源于河图洛书&#xff0c;现代数学中称之为三阶幻方。游戏规则是&#xff1a;将一个 99 的正方形区域划分为 9 个 33 的正方形宫位&#xff0c;要求 1 到 9 这九个数字中的每个数字在每一行…...

图像预处理(OpenCV)-part2

4 边缘填充 为什么要填充边缘呢&#xff1f;我们以下图为例。 原图旋转后的图 可以看到&#xff0c;左图在逆时针旋转45度之后原图的四个顶点在右图中已经看不到了&#xff0c;同时&#xff0c;右图的四个顶点区域其实是什么都没有的&#xff0c;因此我们需要对空出来的区域进…...

SpringAI-ollama

SpringAi主要依赖 System Prompt &#xff1a;设置提示词 用来预设角色 ConversationMemory: 对话集 RAG: 检索增强生成 将业务数据存储在向量数据库中&#xff08;做相似性检索&#xff09;通过RAG进行链接 Function Calling 用来调用自己的api <dependencyManagement>&…...

如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡

如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡 通过系统设置查看 点击屏幕左下角的“开始”按钮&#xff0c;打开“设置”应用。在“设置”应用中&#xff0c;点击“网络和 Internet”。在“网络和 Internet”页面中&#xff0c;点击“WLAN”&#xff0c;…...

蓝耘赋能通义万相 2.1:用 C++ 构建高效 AI 视频生成生态

开篇&#xff1a;AI 视频生成新时代的号角 通义万相 2.1&#xff1a;AI 视频生成的领军者 核心技术揭秘 功能特点展示 与其他模型的全面对比 C&#xff1a;高效编程的基石 C 的发展历程与特性 C 在 AI 领域的广泛应用 通义万相 2.1 与 C 的完美融合 融合的意义与价值 …...

tmpfs的监控筛选/dev/shm下的shmem创建

一、背景 在一个比较注重性能的系统上&#xff0c;共享内存的使用肯定非常普遍。为了能更好的了解系统里共享内存的使用&#xff0c;比如创建、删除等操作&#xff0c;我们是可以对其进行监控的。 这篇博客以共享内存的创建监控为例来介绍如何监控共享内存。 这里有一个概念…...

如果你在使用 Ubuntu/Debian:使用 apt 安装 OpenSSH

情况 1&#xff1a;如果你在使用 Ubuntu/Debian&#xff1a; 使用 apt 安装 OpenSSH&#xff1a; bash 复制 sudo apt update sudo apt install openssh-server 完成后检查 SSH 服务状态&#xff1a; bash 复制 sudo systemctl status ssh 情况 2&#xff1a;如果你在使用 Ce…...

设计模式每日硬核训练 Day 11:适配器模式(Adapter Pattern)完整讲解与实战应用

&#x1f504; 回顾 Day 10&#xff1a;模板方法模式小结 在 Day 10 中&#xff0c;我们学习了模板方法模式&#xff1a; 它用于定义流程的“骨架”&#xff0c;将固定步骤放在父类&#xff0c;具体实现交给子类完成。实现了“统一流程 差异化行为”的复用范式。 而今天&am…...