数据库管理-第258期 23ai:Oracle Data Redaction(20241104)
数据库管理258期 2024-11-04
- 数据库管理-第258期 23ai:Oracle Data Redaction(20241104)
- 1 简介
- 2 应用场景与有点
- 3 多租户环境
- 4 特性与能力
- 4.1 全数据编校
- 4.2 部分编校
- 4.3 正则表达式编校
- 4.4 随机编校
- 4.5 空值编校
- 4.6 无编校
- 4.7 不同数据类型上不同类型校验的对比
- 总结
数据库管理-第258期 23ai:Oracle Data Redaction(20241104)
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、年度墨力之星,ITPUB认证专家、专家百人团成员,数盟会长老会成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员,青学会MOP技术社区(青年数据库学习互助会)技术顾问
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

上周在整理Oracle DB 23.6新特性的时候,看到了一个不那么熟悉的特性,即本篇介绍的Oracle Data Redaction。本篇针对Oracle DB 23ai版本。
1 简介
Oracle Data Redaction,可以译作Oracle数据编校,能够隐藏查询返回的数据,而不会直接影响数据。这是通过在呈现结果之前对数据库查询的结果进行编校(有选择地删除或隐藏敏感或机密信息)来实现的。可以将数据编校策略应用于表、视图或物化视图。然后,将表上的策略应用于表中的特定列。
可以使用以下方法之一来编校列数据:
- Full redaction。全编校,编校了列数据的所有内容。返回给查询用户的编校值取决于列的数据类型和完整编校值的设置。默认情况下,NUMBER数据类型的列用零(0)编校,字符数据类型用单个空格编校。但是,这些值可以使用UPDATE_FULL_REDACTION_VALUES进行更改。
- Partial redaction。部分编校,编校列数据的一部分。例如,您可以用星号(*)编校社会保障号码,但最后4位数字除外。
- Regular expressions。正则表达式,可以使用正则表达式来查找要编校的数据模式。例如,您可以使用正则表达式来编校电子邮件地址,这些地址可以有不同的字符长度。它仅设计用于字符数据。
- Random redaction。随机编校,根据列的数据类型,每次显示时,呈现给查询用户的编校数据都会显示为随机生成的值。
- Nullify redation。空值编校,编校列中的所有数据,并将其替换为null值。
- No redaction。无编校类型选项使您能够测试编校策略的内部操作,而不会影响对定义了策略的表的查询结果。可以使用此选项在将编校策略定义应用于生产环境之前对其进行测试。
数据编校对最终用户是透明的,因为它保留了原始数据类型和(可选)格式。它对数据库是透明的,因为数据在缓冲区、缓存和存储中保持不变,只在SQL查询结果返回给调用者之前的最后一刻发生变化。使用编校策略访问表或视图的所有查询都会一致地执行编校。可以通过检查通过SYS_CONTEXT函数传递到数据库中的用户信息来指定哪些用户应该只看到经过编校的数据;您可以根据当前数据库的属性编校数据;您可以在给定的编校策略中实现多个逻辑条件。此外,数据编校的实现方式最大限度地降低了性能开销。这些特性使Oracle数据编校特别适合共享通用生产数据库的一系列应用程序、分析工具、报告工具和监控工具使用。
Oracle数据库在用户访问数据时(即在查询执行时)在运行时应用编校。该解决方案在生产系统中运行良好。在数据编校间,所有数据处理都正常执行,后端引用完整性约束也得到了保留。
数据编校可以根据需要限制对持卡人数据或个人身份信息的访问,从而帮助您遵守行业、政府和组织的要求。
2 应用场景与有点
与Data Masking不同,数据屏蔽通过用虚构但真实的数据永久替换敏感数据来屏蔽敏感数据,数据编校在从数据库接收数据时对其进行编校,使数据库中的数据保持不变。数据编校使能够使用多种不同的编校样式轻松伪装数据。
Oracle数据编校特别适用于呼叫中心应用程序、即席报告和分析工作负载,在这些工作负载中,数据仅以只读格式提供给最终用户。但是,在将Oracle数据编校与执行数据库更新的应用程序一起使用时要小心,因为编校后的数据可以写回此数据库。
当您使用Oracle数据编校来保护数据时,它提供了几个好处:
- 在运行时应用编校,对底层数据或存储要求没有影响
- 运行时对性能影响很小或没有影响
- 不需要更改应用程序
- 使您能够通过PL/SQL API或使用Oracle Enterprise Manager用户WEB界面指定和管理数据重做策略
- 既可用于本地数据库,也可用于云数据库
3 多租户环境
Oracle数据编校策略在PDB级别创建和应用,并且仅适用于该PDB中的对象。无法在CDB根目录中创建编校策略。
您无法为多租户容器数据库(CDB)创建数据重做策略;您只能在PDB级别创建数据重设策略。这是因为为其创建数据编校策略的对象通常位于PDB中。
4 特性与能力
使用DBMS_REDACT包创建并启用数据编校策略,指定编校策略的SCHEMA、对象(Object)和列(Column)。
- SCHEMA级别指定了指定需要被编校对象的一列或多列的确切SCHEMA。
- Object级别包括应用Orace数据编校作策略的表、视图和物化视图。每个对象最多可以应用一个策略。
- Column级别包括编校功能的操作位置。创建编校策略时,可以在一列上定义编校函数。然后,如果需要,您可以编校策略,使用不同的功能编校对象中的其他列。
下面是一个在HR.EMPLOYEES表中SALARY列的数据编校策略的示例:
BEGINDBMS_REDACT.ADD_POLICY(object_schema => 'hr', object_name => 'employees', column_name => 'salary',policy_name => 'hr_emp_redact_comp_pol', function_type => DBMS_REDACT.FULL,expression => '1=1');
END;
在该示例中,使用DBMS_REDACT包中的ADD_POLICY过程来定义一个名为hr_emp_redact_comp_pol的Oracle数据编校策略。函数类型DBMS_REDACT.FULL指定对薪资列中的检索值时执行所有的数据编校,这意味着默认情况下,数字数据类型在输出文本中替换为零(0)。表达式参数设置策略,以便在计算结果为TRUE (1=1)时执行编校。
4.1 全数据编校
全数据编校对表或视图的指定列的全部内容进行编校。
默认情况下,输出显示如下:
- 字符数据类型:输出为单个空格。
- 数字数据类型:输出为零(0)。
- 日期时间数据类型:输出设置为2001年1月的第一天,显示为01-JAN-2001。
在执行DBMS_REDACT.ADD_POLICY过程时通过设置function_type来指定全编校:
function_type => DBMS_REDACT.FULL
全编校是默认设置,只要数据编校策略指定了列但省略了function_type参数设置,就会使用全编校。
可以使用DBMS_REDACT.UPDATE_FULL_REDACION_VALUES过程,将完整的编校输出更改为不同的值。您可以通过查询REDACTION_VALUES_FOR_TYPE_FULL数据字典视图来查找当前值。
4.2 部分编校
在部分数据编校中,可以编校显示输出的部分内容。
可以设置实际数据中开始编校的位置、从该位置开始编校的字符数以及要使用的编校字符。(实际数据是受保护的表或视图中的数据。实际数据的一个示例可能是数字123456789,此数字的编校数据版本可能是999996789。)这种类型的编校对于希望查看数据的人明显看到它以某种方式被编校的情况非常有用。通常,您会对信用卡号码或身份证号码使用这种类型的编校。
请注意,部分数据编校要求您的数据宽度保持固定。如果要对包含可变长度字符串值的列进行编校,则必须使用正则表达式编校。
要指定部分编校,必须设置DBMS_REDACT.ADD_POLICY或DBMS_REDACT.ALTER_POLICY过程function_type参数到DBMS_REDACT.PARTIAL,并使用function_parameters参数定义部分编校行为。
部分数据编校的显示输出如下:
- 字符数据类型:当部分编校时,可以编校值为987-65-4320的社会保障号码(表示为字符数据类型中的连字符字符串),使其显示如以下示例所示。右侧的代码指定了如何编校字符数据:它指定了实际数据的预期输入格式、用于显示编校输出的格式、用于编校的字符、开始编校的起始位置以及要编校的字符数。第一个示例对字符数据类型社会保障号码使用预定义的格式(在以前的版本中称为快捷方式),第二个示例将前五个数字替换为星号(*),同时保留数字之间的连字符(-)。
- function_parameters => DBMS_REDACT.REDACT_US_SSN_F5 的结果为 XXX-XX-4320
- function_parameters => ‘VVVFVVFVVVV,VVV-VV-VVVV,*,1,5’ 的结果为 ****-**-4320
在这些示例中,V描述了每个可能被编校的字符,F描述了每个要使用格式化字符格式化的字符。
- 数字数据类型:部分编校的数字数据类型显示,一些数字被指定字符替换。例如,存储为987654321的社会安全号码可能显示如下。两者都对前五位数字进行了编校。第一个示例使用为NUMBER数据类型中的社会保障号码设计的预定义格式,第二个示例从第一个数字开始用数字9替换前五个数字。
- function_parameters => DBMS_REDACT.REDACT_NUM_US_SSN_F5 的结果为 XXXXX4321
- function_parameters => ‘9,1,5’ 的结果为 999994321
- 日期时间数据类型:部分编校的日期时间值可以简单地显示为不同的日期。例如,日期 29-AUG-11 10.20.50.000000 AM 可能显示如下。在第一个示例中,一个月中的某一天被编校为02(使用设置d02),在第二个示例中该月被编校为DEC(使用m12)。大写值显示实际日期(D)、实际月份(M)、实际年份(Y)、实际小时(H)、实际分钟(M)和实际秒(S)。
- function_parameters => ‘Md02YHMS’ 的结果为 02-AUG-11 10.20.50.000000 AM
- function_parameters => ‘m12DYHMS’ 的结果为 29-DEC-11 10.20.50.000000 AM
4.3 正则表达式编校
正则表达式根据模式搜索编校列数据值中的特定数据。您可以使用正则表达式来编校不同长度的字符串列。
例如,您可以编校电子邮件地址的用户名,以便只显示域(例如,替换电子邮件地址中的hprestonhpreston@example.com使用[redacted],使其显示为[redacte]@example.com)。要执行编校,请设置DBMS_REDACT.ADD_POLICY或DBMS_REDACT.ALTER_POLICY过程function_type参数到DBMS_REDACT.REGEXP或DBMS_REDACT.REGEXP_WIDTH,然后使用以下参数构建正则表达式:
- 字符串搜索模式(即要搜索的值),例如:
regexp_pattern => '(.+)@(.+\.[A-Za-z]{2,4})'
此设置查找以下形式的模式:
one_or_more_characters@one_or_more_characters.2-4_characters_in_range_A-Z_or_a-z
- 替换字符串,用于替换与regexp_pattern设置匹配的值。替换字符串可以包含对主正则表达式模式的子表达式的反向引用。以下示例将@符号之前的数据(来自regexp_pattern设置)替换为文本[redacted]。\2设置是指regexp_pattern设置中的第二个匹配组,即(.+.[A-Za-z]{2,4})。
regexp_replace_string => '[redacted]@\2'
- 字符串搜索字符串的起始位置,例如数据的第一个字符,例如:
regexp_position => DBMS_REDACT.RE_BEGINNING
如果未指定,则此值为默认值。
- 要执行的搜索和替换操作的类型,例如第一次出现、每五次出现或所有出现,例如:
regexp_occurrence => DBMS_REDACT.RE_ALL
如果未指定,则此值为默认值。
- 搜索和替换操作的默认匹配行为,例如搜索是否区分大小写(i将其设置为不区分大小写):
regexp_match_parameter => 'i'
除了默认参数外,您还可以使用一组预定义的格式,使您能够对电话号码、电子邮件地址和信用卡号码使用常用的正则表达式。
4.4 随机编校
在随机数据编校中,通过将其替换为随机值来编校整个值。
每次应用程序用户运行查询时,查询结果集中显示的编辑值都会随机更改。
这种类型的编校在您不希望数据被明显编校的情况下很有用。它尤其适用于数字和日期时间数据类型,在这些数据类型中很难区分随机数据和真实数据。
随机值的显示输出会根据编校列的数据类型而变化,如下所示:
- 字符数据类型:随机输出是字符的混合(例如,HTU[G{\pjkEWcK)。它对CHAR和VARCHAR2数据类型的行为不同,如下所示:
- CHAR数据类型:编校后的输出始终与列的字符集位于同一字符集中。编校输出的字节长度始终与列定义长度相同(即,在创建表时提供的列长度)。例如,如果列是CHAR(20),则在用户查询的编校输出中提供20个随机字符的字符串。
- VARCHAR2数据类型:对于VARCHAR数据类型的随机编校,编校后的输出始终与列的字符集位于同一字符集中。根据列中实际数据的长度,编校输出的长度是有限的。不显示超过实际数据长度的字符。例如,如果列是VARCHAR2(20),并且被编校的行包含长度为12的实际数据,则用户对该行的查询的编校输出中会提供一个由12个随机字符(不是20个)组成的字符串。
- 数字数据类型:每个实际数值都会被修改为随机的非负数。这种编校产生的随机数不会超过实际数据的精度。例如,可以通过将数字987654321替换为数字12345678、13579、0或987654320中的任何一个来编校它,但不能将其替换为数字98765432 1、99987654321或-1中的任何数字。数字-123可以通过用数字122、0或83替换它来编校,但不能用数字123、1123或-2中的任何一个替换它。
上述情况的唯一例外是实际值是-1到9之间的整数。在这种情况下,通过将实际数据替换为模为十(10)的随机非负整数来对其进行编校。 - 日期时间数据类型:当使用随机数据编校操作对日期数据类型的值进行编校时,Oracle数据库会使用始终与实际数据不同的随机日期显示它们。
通过下面配置实现随机编校:
function_type => DBMS_REDACT.RANDOM
4.5 空值编校
您可以创建Oracle数据编校策略,通过在查询结果中仅显示空值来编校列数据。
此功能使您能够使用DBMS_REDACT.NULLIFY函数用于隐藏表或视图列中的所有敏感数据,并将其替换为空值。您可以使用DBMS_REDACT的function_type参数设置此函数DBMS_REDACT.ADD_POLICY或DBMS_REDACT.ALTER_POLICY程序。
function_type => DBMS_REDACT.NULLIFY
4.6 无编校
可以创建不执行编校的数据编校策略。这使您能够在测试期间在应用程序中包含编校策略,然后在将应用程序移至生产环境时将这些策略应用于数据。
这对于您有一个经过编校的基表,但希望特定应用程序用户拥有一个始终显示实际数据的视图的情况非常有用。默认情况下,在已编校表上创建的视图将使用与基表相同的策略进行编校。但是,您可以为视图定义单独的编校策略。您可以创建已编校表的新视图,然后为此视图定义数据编校策略。当应用程序查询视图时,将应用在视图上定义的策略。该策略仍然存在于基表上,但只要DBMS_REDACT.NONE function_type设置用于在视图上创建策略,当应用程序使用视图进行查询时,就不会执行任何编校。
4.7 不同数据类型上不同类型校验的对比
这里可以通过以下网址中的列表进行查看:
https://docs.oracle.com/en/database/oracle/oracle-database/23/dbred/comparison-full_-partial_-and-random-redaction-based-data-types.html
总结
本期简单介绍了下Oracle数据编校,后面将在Oracle 23ai Free版本中进行实际测试。
老规矩,知道写了些啥。
相关文章:
数据库管理-第258期 23ai:Oracle Data Redaction(20241104)
数据库管理258期 2024-11-04 数据库管理-第258期 23ai:Oracle Data Redaction(20241104)1 简介2 应用场景与有点3 多租户环境4 特性与能力4.1 全数据编校4.2 部分编校4.3 正则表达式编校4.4 随机编校4.5 空值编校4.6 无编校4.7 不同数据类型上…...
运放进阶篇-多种波形可调信号发生器-产生方波-三角波-正弦波
引言:前几节我们已经说到硬件相关基础的电路,以及对于运放也讲到了初步的理解,特别是比较器的部分,但是放大器的部分我们对此并没有阐述,在这里通过实例进行理论结合实践的学习。而运放真正的核心,其实就是…...
CSS中的变量应用——:root,Sass变量,JavaScript中使用Sass变量
:root—— 原生CSS 自定义属性(变量) 在 SCSS 文件中定义 CSS 自定义属性。然后通过 JavaScript 读取这些属性。 // variables.scss :root { --login-bg-color: #293146;--left-menu-max-width: 200px;--left-menu-min-width: 64px;--left-menu-bg-…...
WPF+MVVM案例实战与特效(二十八)- 自定义WPF ComboBox样式:打造个性化下拉菜单
文章目录 1. 引言案例效果3. ComboBox 基础4. 自定义 ComboBox 样式4.1 定义 ComboBox 样式4.2 定义 ComboBoxItem 样式4.3 定义 ToggleButton 样式4.4 定义 Popup 样式5. 示例代码6. 结论1. 引言 在WPF应用程序中,ComboBox控件是一个常用的输入控件,用于从多个选项中选择一…...
速盾:怎么使用cdn加速?
CDN(Content Delivery Network)即内容分发网络,是一种通过在网络各处部署节点来缓存和传输网络内容的技术。通过使用CDN加速,可以提高网站的访问速度、减轻服务器负载、提供更好的用户体验。 使用CDN加速的步骤如下: …...
C++ 优先算法 —— 三数之和(双指针)
目录 题目:三数之和 1. 题目解析 2. 算法原理 ①. 暴力枚举 ②. 双指针算法 不漏的处理: 去重处理: 固定一个数 a 的优化: 3. 代码实现 Ⅰ. 暴力枚举(会超时 O(N)) Ⅱ.…...
YOLOv7-0.1部分代码阅读笔记-yolo.py
yolo.py models\yolo.py 目录 yolo.py 1.所需的库和模块 2.class Detect(nn.Module): 3.class IDetect(nn.Module): 4.class IAuxDetect(nn.Module): 5.class IBin(nn.Module): 6.class Model(nn.Module): 7.def parse_model(d, ch): 8.if __name__ __main__…...
【缓存与加速技术实践】Web缓存代理与CDN内容分发网络
文章目录 Web缓存代理Nginx配置缓存代理详细说明 CDN内容分发网络CDN的作用CDN的工作原理CDN内容的获取方式解决缓存集中过期的问题 Web缓存代理 作用: 缓存之前访问过的静态网页资源,以便在再次访问时能够直接从缓存代理服务器获取,减少源…...
MySQL的约束和三大范式
一.约束 什么是约束,为什么要用到约束? 约束就是用于创建表时,给对应的字段添加对应的约束 约束的作用就是当我们用insert into时,如果传入的数据有问题,不符合创建表时我们定的规定,这时MySQL就会自动帮…...
Unity网络通信(part7.分包和黏包)
目录 前言 概念 解决方案 具体代码 总结 分包黏包概念 分包 黏包 解决方案概述 前言 在探讨Unity网络通信的深入内容时,分包和黏包问题无疑是其中的关键环节。以下是对Unity网络通信中分包和黏包问题前言部分的详细解读。 概念 在网络通信中,…...
练习题 - DRF 3.x Overviewses 框架概述
Django REST Framework (DRF) 是一个强大的工具,用于构建 Web APIs。作为 Django 框架的扩展,DRF 提供了丰富的功能和简洁的 API,使得开发 RESTful Web 服务变得更加轻松。对于想要在 Django 环境中实现快速且灵活的 API 开发的开发者来说,DRF 是一个非常有吸引力的选择。学…...
Linux 经典面试八股文
快速鉴别十个题 1,你如何描述Linux文件系统的结构? 答案应包括对/, /etc, /var, /home, /bin, /lib, /usr, 和 /tmp等常见目录的功能和用途的描述。 2,在Linux中如何查看和终止正在运行的进程? 期望的答案应涵盖ps, top, htop, …...
Filter和Listener
一、Filter过滤器 1 概念 可以实现拦截功能,对于指定资源的限定进行拦截,替换,同时还可以提高程序的性能。在Web开发时,不同的Web资源中的过滤操作可以放在同一个Filter中完成,这样可以不用多次编写重复代码…...
Go 项目中实现类似 Java Shiro 的权限控制中间件?
序言: 要在 Go 项目中实现类似 Java Shiro 的权限控制中间件,我们可以分为几个步骤来实现用户的菜单访问权限和操作权限控制。以下是一个基本的实现框架步骤: 目录 一、数据库设计 二、中间件实现 三、使用中间件 四、用户权限管理 五…...
【Javascript】-一些原生的网页设计案例
JavaScript 网页设计案例 1. 动态时钟 功能描述:在网页上显示一个动态更新的时钟,包括小时、分钟和秒。实现思路: 使用 setInterval 函数每秒更新时间。获取当前时间并更新页面上的文本。 代码示例:<div id"clock"…...
SpringBoot开发——Spring Boot 3种定时任务方式
文章目录 一、什么是定时任务二、代码示例1、 @Scheduled 定时任务2、多线程定时任务3、基于接口(SchedulingConfigurer)实现动态更改定时任务3.1 数据库中存储cron信息3.2 pom.xml文件中增加mysql依赖3.3 application.yaml文件中增加mysql数据库配置:3.4 创建定时器3.5 启动…...
Flutter鸿蒙next 实现长按录音按钮及动画特效
在 Flutter 中实现长按录音按钮并且添加动画特效,是一个有趣且实用的功能。本文将通过实现一个具有动画效果的长按录音按钮,带领你一步步了解如何使用 Flutter 完成这个任务,并解释每一部分的实现。 一、功能需求 我们需要一个按钮…...
【计网】实现reactor反应堆模型 --- 框架搭建
没有一颗星, 会因为追求梦想而受伤, 当你真心渴望某样东西时, 整个宇宙都会来帮忙。 --- 保罗・戈埃罗 《牧羊少年奇幻之旅》--- 实现Reactor反应堆模型 1 前言2 框架搭建3 准备工作4 Reactor类的设计5 Connection连接接口6 回调方法 1 …...
力扣中等难度热题——长度为K的子数组的能量值
目录 题目链接:3255. 长度为 K 的子数组的能量值 II - 力扣(LeetCode) 题目描述 示例 提示: 解法一:通过连续上升的长度判断 Java写法: C写法: 相比与Java写法的差别 运行时间 时间复杂…...
JSON格式
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人和机器阅读和解析。它基于JavaScript的对象表示法,但被广泛用于多种编程语言。 JSON中的数据类型 字符串(String):用双引…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
