如何应对黑产进行验证图片资源遍历

第一期,我们分享的攻防点是:验证图片资源遍历。

“遍历”指黑产通过穷举法获得所有验证码图片的答案,以便能在未来彻底无视验证码。由于验证码主要是通过图片语义答案来识别人机,因此攻破这层防御最有效的方式就是遍历该验证码图片库,从而实现一劳永逸的破解。

本文,我们将从该攻防点的背景与简介聊起,接着从攻击方(黑产)、被攻防(客户)和防守方(极验)的三方视角深度剖析,全面地理解该攻防点。

一、攻防点

为什么第一期从验证图片资源遍历这个攻防点开始?因为它是黑产最常用的攻击手段之一。数据显示,超过68%的黑产攻击案例都与验证图片资源遍历有关。

1.黑产的“效率”

让我们先从成本博弈的角度来分析,为什么黑产热衷于验证图片资源遍历?

黑产的核心目标永远是赚钱,赚钱的主要方法主要通过在更短时间内、花更少的成本抢夺企业提供给正常用户的资源,并从中变现。黑产能否赚钱取决于获取资源的“效率”是否远高于正常用户。

据极验统计,大部分黑产获取资源的能力超正常用户至少800倍以上。“效率高”是黑产的核心能力,因此防御黑产靠的也就是“限制效率”。当黑产的“效率”被限制到正常用户的水平时,就无法掠夺更多资源变现,也就失去了盈利空间,从而在根源上防御了黑产。因此,黑产攻防点的背后都是围绕“效率”与“盈利空间”展开的。

当被攻方(客户)发现攻击方(黑产)存在时,如何在限制黑产“效率”的同时又不影响正常用户的访问?

验证码是当前证明最有效的处理方案。当下主流的图片验证码,是安全系数与用户体验综合最佳的人机验证形式,无论是通过更新验证形式,还是模糊语义,模糊图片,都能有效限制黑产的“效率”。

2.黑产提高“效率”的手段

同时,攻击方(黑产)也开始研究如何能在被限制时进一步提高“效率”,扩大自身的“盈利空间”。这其中就包括了本期的攻防点——验证图片资源遍历

验证码本质上自带一层答案的语义,这是天然的区分人和自动程序的地方。黑产利用遍历验证图库这一攻击手段,能够大批量穷举识别图片答案,提高通过的“效率”。不论是在早期2012年字符验证码时代,还是在如今智能无感的第四代变化型验证时代,都会涉及到各式各样的图片元素变化。因此,只要验证码中存在图片元素,黑产需要通过图片答案的验证,那么验证图片资源遍历这一攻防点就会始终存在。

二、攻防道视角一:从黑产视角看图片资源遍历的收益

任何验证码的图库都是有限的,只要验证码中存在图片元素,黑产就能用验证图片资源遍历的方法爬取所有的验证图片,通过人工打码或算法获取每张图片的答案。

那么,在验证图片库不更新的前提下,黑产是如何利用穷举法破解所有包含这类图片的验证码的?

1.攻击方式

站在黑产的视角完整地体验一次验证图片资源遍历的流程:Step 1:针对某电商公司的短信登录场景发起攻击。

Step 2:通过频繁向页面接口发送请求来获取验证图片地址。

Step 3:获取到30万张验证图片地址,黑产开始批量下载存储这批验证图片,下载速度为10张/秒,共耗时8.33小时

该电商公司使用的30万张图库(节选)

Step 4:通过低成本的人工打码获取验证图片答案,打码成本约为1.4分/张,打码速度为2.5s/张,共耗时208.33小时,花费4200元

黑产向打码平台发送批量操作请求 

打码平台返回的答案(节选)

以1、2、3标注了顺序及坐标答案

Step 5:将打码平台返回的所有验证图片答案构建成图片答案数据库,包括图片名称、图片答案坐标、图片版本和类型、存储地址和下载时间;

 黑产图片答案数据库(节选)

Step 6:后续破解验证码时,对照图片答案数据库搜索并输入当前验证图片对应的答案信息,即可成功通过验证,完成对该电商公司短信登录场景的攻击。虽然整个遍历图片的流程较为耗时,需要黑产在前期投入一定的时间与成本,但一旦完成,就能彻底突破验证码对黑产的限制。所以,从黑产的视角来看,验证图片资源遍历是一个前期稍作投入、后期一劳永逸的方案,也是黑产最常用的手段之一。

2.牟利方式

黑产利润=黑产收入-黑产成本

目前,市面上验证厂商的平均更新频率在1个月以上,每次只能更新几百到几千张图片。而黑产利用低成本的人工打码,破解验证码的成本仅需1.4分/次,以图库每个月更新6000张为例,黑产构建这批答案数据库的成本仅需不到一万元。也就是说,只要黑产遍历了一批验证码答案,在之后一个多月的时间里都能迅速破解这批验证码。就算一个月后厂商更新了图库,黑产重新寻找人工打码的费用也不到0.03元/次。

 某验证码破解厂商人工打码成本

因此,黑产平均每天只需花费约466的人工打码费用,9天就能完全搞定一个包含30万图片的电商公司图库并生成自己的图片答案数据库,而在后续图库未作更新的一个月时间里都是畅通无阻的。

 

同时,黑产在这一个月通过薅羊毛赚取的收益已经远远超出了付出的成本。这个从投入到产出的过程对他们而言是一笔利润极高的买卖,也是他们周而复始地进行验证图片资源遍历的原因。

三、攻防道视角二:企业如何应对黑产进行图片资源遍历

当黑产在频繁地进行验证图片资源遍历时,被攻击的客户会又遭遇什么样的问题呢?让我们切换到客户视角,来看看他们被黑产攻击的过程。

1.问题发生

H公司是一个刚成立了两年的电商公司,在用户登录场景经常遇到短信恶意消耗的问题。在今年“618”大促期间,H公司的安全人员提前部署了某第三方厂商的验证码来预防黑产。从5月19日到6月3日近半个月的时间,各项数据都趋于平稳,并未发现任何异常,可以看出该验证码能够有效防住黑产攻击。但6月3日晚上,验证请求量、验证交互量和验证通过量突然急剧上升。H公司的验证码此时已形同虚设,大量无效短信被发送,短信余额也被大量消耗,最高时每小时损失竟超过了2万元!H公司的安全负责人紧急联系了第三方厂商处理,该厂商开始切换部分验证图片的形式,调高了验证难度,从6月4日到6月7日验证通过量略有下降,但效果甚微。6月7日,数据再次陡增。直到6月13日,黑产的攻击已经持续了10天,数据仍然无法恢复正常。

5月19日-6月13日使用第三方验证厂商的后台数据

2.问题定位

无奈之下,H公司的安全负责人在6月13日晚紧急找到了极验销售寻求帮助。在极验服务介入后,逐步从客户的视角剖析问题,更深地理解了本次黑产攻击。极验安全专家对本次黑产攻击的方式及特征进行了分析。迅速定位到H公司突发的数据异常情况是因为受到了黑产验证图片资源遍历的攻击:

第一,极验安全专家对黑产的业务流程十分了解,从经济成本考虑,遍历资源构建答案数据库后可以反复使用,对于黑产而言获取图片答案的成本非常低,绝大多数黑产都乐于采用这种方式攻击;

第二,极验对比资源更新前后的数据发现:同一素材和样式的图片在更新上线后,由于黑产原先的答案数据库会失效,导致通过量比例大幅下降;

第三,极验通过对验证码日志的分析发现:同一张图片从大量的不同客户端发送过来的答案坐标是完全一样的,如果是真人操作一定会存在误差,而这些答案坐标就是来自于黑产构建的答案数据库;

第四,极验还伪装成黑产与真实的黑产人员进行了沟通交流。在与部分黑产人员的交流过程中确认了他们的确是通过遍历图片构建答案数据库的方式来通过验证码。

3.难点剖析

既然能够定位到是黑产验证图片资源遍历的问题,那为什么之前第三方厂商花了十天的时间也无法解决呢?背后的关键就在于:验证码图片的更新频率和黑产攻击是一个动态博弈的过程,若想要验证码防御再度有效,则需要再次更新验证图片。然而,提高图片的更新频率十分有难度。

(1)需要保证图片的唯一性与正确性,高效的生成算法与核准算法,否则很容易出现一些错误图片。例如:

①图标重叠

②图片中图标缺失

③图片超出范围

④提示框部分缺失

(2)需要核准图片元素的匹配度。为了避免人眼看到的元素与系统储存的元素不符而导致验证失败,每张图片生成出来后,都需要根据图片元数据中的答案坐标在图片中对目标元素进行截取,再将目标元素和对应的提示标签通过相似度识别模型来进行匹配,只有满足预设定阈值标准的图片才能上线使用。

(3)在图片生成和审核后,还需要确保更新后图片库在分发到各个节点上有平台架构的支持。需要将图片和元数据分别上传至全球的静态资源服务器和服务端服务器,并进行上传状态的检测,以确保各服务端能准确找到可使用的图片。当上传任务失败时,在控制管理后台需要手动执行再次上传或者回滚到上批次图片,避免因图片上传失败而导致图片不可用的风险。

除了上述技术难度外,更新图库也存在能够与黑产抗衡的防御标准。我们知道验证码图片更新的速率与图库大小决定了黑产能否成功牟利,当黑产的收入小于成本时就会自动放弃攻击。那么当图片更新频率达到多快、更新的图库达到多大规模时,才能让黑产的收入小于成本呢?

黑产成本 = 图库大小× 图片单次人工打码费用    黑产收益 = 图库大小× 图片单张单次人工打码费用

假设黑产当前收益为1000元,图片单张单次人工打码费为0.014元,那么

图库大小 = 黑产收益 ÷ 图片单张单次人工打码费

即1000 ÷ 0.014 = 71,428张当黑产收益=黑产成本时,将1000元收益都用来成本投入,刚好可以打码71,428张图片。黑产必须在图集更新前将该图集内容全部更新完,否则将白做功。假设单次打码时间为10s,那么

图库更新时间 =图片大小 × 单人单次打码时间

即71,428 × 10 = 714280s = 198h因此,我们得出结论:在黑产收益为1000元、单次打码时间为10s 的前提下,每次更新的图库大小最少需要7,1428,且需要198小时(约8天)更新一次图库,才能刚好让黑产收益和黑产成本趋于对等平衡。此时黑产将不会有收益,被攻方刚好能够和攻击方抗衡。

然而,因为更新图库存在很大难度,生成验证图片库往往需要一定周期。根据调研,市场上验证厂商的平均更新频率在1个月/次,更新速度远远低于黑产遍历的速度(约8天/次),无法让验证码再度生效。并且,市面上验证厂商平均每次更新图库的大小仅仅只有几百到几千张,黑产仅需花费几百元的成本,1个小时内就能轻松攻破。

由于该第三方验证厂商无法做到短时间内快速更新验证图库,所以即使能够在6月3日前成功防御一段时间,一旦黑产利用图片遍历生成了图片答案数据库,验证码就会变得形同虚设。

四、攻防道视角三:极验如何应对黑产进行图片资源遍历

那么,作为头部客户市占率第一的业务安全服务商,极验是如何应对黑产图片资源遍历的呢?

1.有效防御

经过一上午的部署,H公司发现,极验利用验证图库动态更新能够十分有效地解决黑产攻击的问题。


H公司6月14日使用极验的后台数据

6月14日下午,极验在 16:28 帮助该客户进行了图集的动态更新,16:31 图集在线上各节点开始生效,验证失败量迅速上升。可以推断原本黑产遍历图库的数据在此刻失效,但验证请求量变化不大,黑产的攻击脚本依然在运行。17:06 黑产发现之前的攻击脚本失效,随即暂停了脚本。在 17:10 再次启动攻击脚本,但依然无法通过验证码流程。验证成功量在图集动态更新后一直处于平稳的状态,可以推断出这些成功量全部都是由正常用户发出。17:16 后,黑产彻底放弃攻击,数据开始恢复正常。在整个防御过程中,H公司并没有收到任何用户的报障,图集自动更新不仅能有效防御黑产,还不会对正常用户造成任何打扰。和之前更新频率为每月一次且防御失败的第三方验证码厂商相比,极验自动更新验证图库的频率是每小时一次,帮客户挽回了数万元的损失一个月和一小时,看上去只是数字的差别,却决定了能否防御住黑产验证图片资源遍历的关键。

2.防御思路与核心指标

在长达十一年与黑产破解者的博弈对抗的过程中,极验发现,从限制黑产获取验证码图片答案这个方向来进行防御黑产攻击,不仅能减少客户的运营成本、降低对客户的打扰率,还能掌握我们在攻防博弈对抗中的主动权。限制黑产获取验证码图片答案的核心就在于图库的更新速率及大小。目前,行业内图片更新的平均速率为一个月更新几百到几千张,并且往往是等被黑产破解后再更新验证码图像资源,这种方式太过于被动。黑产会对这批图片进行集中爬取,获取图片答案,将获取到的答案构建成一个答案数据库,只要防御方不更新,这个数据库可以完全满足这批验证码图片的答案需求。

与市场一般验证厂商不同的是,在6月13日H公司找到我们时,我们的第四代适应型验证码恰好具有图库高频高效更新的能力。极验的第四代适应型验证,首次开发了一套图集自动更新系统,通过制作生成模板,做到了每小时更新三十万张图片,高效高频地更新验证资源,使得黑产无法再通过穷举法破解验证码。该系统可以根据不同的攻击场景制定不同的定时策略,从图集更新任务创建到全新图片在全球服务节点使用,仅仅只需要几分钟,就能实现每小时生成5万张、200个类别的自动化更新。同时,针对正在被攻击的紧急客户,可以单独以10分钟1万张、50个类别的速率进行自动化更新。我们在达成这一指标后,大大增加了黑产的攻击成本。现在,黑产想要再次构建一个有效的答案数据库,仍需要花费0.03元/次的人工打码费用,但一小时后数据库就失效了,需要重新通过人工打码构建新的数据库,实际收益大大降低。因此,采用图片动态更新的方案能够有效解决黑产针对验证图片资源遍历的核心问题。

3.突破核心指标的技术难点

为了实现验证图片动态更新,达到每小时更新三十万张图片的指标,我们主要突破了以下技术难点

(1)图片的生成与审核

极验的第四代适应型验证具备高效的生成算法与核准算法,在行业内首次开发了一套图集自动更新系统,能够通过制作生成模板高效高频地更新验证资源。

图片生成效果示例

同时,我们在验证码领域率先完成了AIGC技术的建设和应用。基于 ray.serve 和 stable-diffusion 框架构建了一系列的图集相关功能接口,用于提示词库的管理和图片流水线式自动化生成。在利用文生图大模型进一步加快图片更新速率的同时,保障图片的准确性、可控性和规模性。

利用AIGC技术自动生成图库

(2)保障图集资源同步全球的一致性

①图片资源制作将图片二进制上传oss与元数据存储pg进行原子操作,保证图片资源上传以后才落库,保证db文件获取到图片访问路径,必定能在静态资源服务器找到对应资源;

②负责同步的xxl-job任务操作幂等,允许重复性操作,在同步失败的时候,可手动触发,并且在xxl-job服务失效时,仍有全量同步功能进行资源复制同步;

③在制作图集资源db文件时,先进行xxl-job的同步结果校验,确保图集资源已同步全球节点后,再进行db文件的制作上传及全球分发;

④在我们的gtmaanger后台定时更新任务与手动执行操作并行,在定时任务更新失效时,仍有手动操作平台实现图集资源制作、同步的功能可用。

点击查看大图

(3)解决图片资源复用、加载、资源竞态问题

①图片资源制作全球同步、热更图集资源一处制作,秒级别同步到国内以及国外的对象储存  ,实现资源复用;

②图片资源加载缓存预热、异地多活、全球静态服务资源多节点,图片加载就近回源,显著提升资源加载速度;

③图片资源元信息采用嵌入式数据库存储,进程级别资源加载,微秒级别资源响应,去中心化数据库设计解决高并发问题;

④图片资源元信息利用Inode节点检测机制实现资源信息毫秒级替换,解决资源竞态问题。

数据显示,6月14日下午,H公司在部署了极验的第四代适应型验证并进行了图集动态更新后,验证请求量、验证交互量和验证成功量均持续趋于平稳,数据恢复正常,“618大促”活动最终得以照常进行,有效限制了黑产的薅羊毛行为。

 H公司数据最终恢复正常

4.突破带来的附属价值

通过极验的第四代适应型验证,我们在行业内首次做到了使用更简洁高效的技术手段来快速准确的生成验证图片;利用自检模块对每张生成的图片按照预定标准进行核准校验;并凭借稳定可靠的内部运营平台,可实现对单独用户或全网用户的秒级别全球更新。同时,还为我们的客户带来了以下额外附属价值:

(1)验证效果可论证。过去,安全效果无法客观论证是市场上验证产品最大的问题,在未遭到黑产攻击前,后台数据都是十分平稳的,因没有异常而不会被人察觉。而现在,当我们的验证图片能动态秒级更新时,通过我方快速变化、而黑产来不及变化,就能在报表中看到清晰的数据变化差异。通过这种变化对比就能立刻知道动态更新策略对防御黑产是有效的,从而实现验证效果可论证的价值突破。

 实时秒级数据变化

“极验人机行为识别验证短期内有效的帮助我们降低了面临的业务安全风险,并且在提升业务安全防护能力的同时保证了用户体验。”——VIPKID/安全负责人 

(2)更新后让黑产亏本,用经济根源上反制黑产。过去,常规的防御方式是等被黑产破解后再更新验证码图像资源,使黑产有限的样本集无法识别出新的图像。但这种方式过于被动,验证码时效很短。而现在,极验通过验证图库的动态更新,有效限制了黑产获取验证码图片答案,首次掌握了攻防博弈对抗过程中的主动权。当黑产的攻击不再有效,付出了成本却没有得到应有的收益,就会自动放弃攻击。

 黑产两次失败后彻底放弃攻击,数据恢复正常

“微博用户进入流程接入极验后,有效拦截异常请求,降低真实用户二次验证门槛,极大提升了用户登录体验及登录效率。”—— 微博/产品经理

(3)个性化服务更新更快。针对有特殊安全需求的客户,极验在行业内首次提供全套的私有化解决方案。例如,对于有出海业务的客户,极验能帮助客户实现海外私有化、海外数据合规性、收集数据定制、海外功能性定制、UI 皮肤、品牌个性化定制、模块、风控融合定制、多国语言、语音验证等定制化等高难度功能;对于有紧急运营活动的客户,极验提供界面定制接口,迅速定制高难度的风格化图库,以极致的个性化服务帮助客户解决燃眉之急。

 个性化定制,不影响其他客户使用

“极验能够很好地提供国际化支持,在有效期内高质量的完成任务,定制的高难度的风格化图库帮助我们增强了 distil 的整体安全能力。”——Distil Networks

五、结语

黑产攻防就像是矛和盾的关系,没有不会生锈的矛,也没有永远牢不可破的盾只有不断在攻防过程中打磨,寻求创新与突破,才能始终在“矛”和“盾”的博弈中领先对方一步。极验始终秉承着创新的理念,才能在与黑产的动态博弈中,寻到人机区分的本质差异。针对“验证图片资源遍历”这一攻防点,我们还在进一步提高更新效率。预期在2024年,极验会进一步优化运营平台架构和服务平台架构,实现通过运营平台调度全球各服务节点本地图集制作更新,无需网络传输同步。这就能有效避免因网络问题而导致无法更新,影响服务稳定性的情况。在和黑产抗衡的过程中,实现从“防不住”到“防住”的关键就在于极验在技术细节上的极致追求,而这些往往是在产品介绍中很难看到的。极验坚持“为世所想,为世所用”的理念,正是因为总能防住黑产,目前服务已得到全球36万家企业认可,市场头部客户占有率稳居行业内第一。我们不断追求细节、突破技术,都是为了能够帮助客户更好地防御黑产。

极验专利墙

下一期,我们将带来攻防点——图像识别对抗。我们将带你详细地了解黑产在破解验证码时,如何建立学习的破解模型,并且防守方是应该如何对抗。

《黑产攻防道》,站在上帝视角看与黑产的攻防博弈。如果您还有其他感兴趣的黑产攻防点,欢迎给我们留言~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/38625.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】二叉树的前中后序遍历(C语言)

文章目录 什么是二叉树树相关的概念树的表示形式特殊的二叉树如何创造出一棵二叉树二叉树的遍历先序遍历(前序遍历)中序遍历后序遍历 总结 什么是二叉树 [二叉树] 顾名思义就是有两个分支节点的树,不仅如此,除了叶子外的所有节点都具有两个分支节点&…

matlab入门

命名规则: clc:清除命令行的所有命令 clear all:清除所有工作区的内容 注释:两个% 空格 %% matlab的数据类型 1、数字 3 3 * 5 3 / 5 3 5 3 - 52、字符与字符串 s a %% 求s的ascill码 abs(s) char(97) num2str(65) str I…

curl: (56) Recv failure : Connection reset by peer

文章目录 背景原因可能如下1. 服务器端关闭了连接2. 网络问题3. 防火墙或代理问题4. 服务器负载过高 解决办法 背景 docker容器里有http服务,今天在docker容器重启时,去调用http接口,出现了以下错误: curl: (56) Recv failure :…

记一次ruoyi中使用Quartz实现定时任务

一、首先了解一下Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标…

Deepin/UOS Linux 桌面自定义 IDEA/DataGrip 应用程序图标

在 $HOME/Desktop目录下编辑 vim jetbrains.intelij.idea.desktop [Desktop Entry] TypeApplication NameIntelij IDEA Icon/opt/module/idea-IU-203.8084.24/bin/idea.png Exec/opt/module/idea-IU-203.8084.24/bin/idea.sh Terminalfalse CategoriesDevelopment;IDE;vim je…

自动化运维工具——Ansible学习(二)

目录 一、handlers和notify结合使用触发条件 1.新建httpd.yml文件 2.复制配置文件到ansible的files目录中 3.卸载被控机已安装的httpd 4.执行httpd.yml脚本 5.更改httpd.conf配置文件 6.使用handlers 7.重新执行httpd.yml脚本 8.检查被控机的端口号是否改变 9.handle…

Block

文章目录 前言Block本质Block循环引用解决循环引用1.__weak __strong协作2.__block3.参数传递 Block中对象的引用计数Block Copy__blockBlock的分类 前言 之前学过Block了,那就在学学 之前学习Block的博客 参考 提示:以下是本篇文章正文内容&#xff…

AtcoderABC249场

A - JoggingA - Jogging 题目大意 高桥和青木一起慢跑,高桥每隔 ACAC 秒钟走 BB 米,然后休息 CC 秒钟,青木每隔 DFDF 秒钟走 EE 米,然后休息 FF 秒钟。现在已经过去了 XX 秒钟,问谁跑得更远。 思路分析 模拟来解决这…

【广州华锐互动】智慧交通3D可视化交互平台

智慧交通3D可视化交互平台由广州华锐互动开发,是一种基于现代科技的智能交通管理系统,它能够实现对车站内部人员和车辆的实时监控和管理。该平台采用了先进的三维可视化技术,将车站内部的结构和设备以立体、直观的方式呈现在用户面前&#xf…

【云原生】Docker网络Overlay搭建Consul实现跨主机通信

目录 1.overlay网络是什么? 实现overlay环境 1.overlay网络是什么? 在Docker中,Overlay网络是一种容器网络驱动程序,它允许在多个Docker主机上创建一个虚拟网络,使得容器可以通过这个网络相互通信。 Overlay网络使用…

echarts 横向柱状图 刻度标签

echarts 横向柱状图 刻度标签 怎么调试都不左对齐 将width去掉固定宽度 echarts会自适应

tql!一款Go编写的RAT主机管理工具

工具介绍 这是一款使用go编写的RAT主机群管理工具,已具备命令控制台、文件管理、屏幕截屏、开机启动服务、NPS代理等功能。 流量:支持TCP,UDP/KCP协议,通讯默认使用tls证明书进行加密 关注【Hack分享吧】公众号,回复…

数据结构初阶--排序2

目录 前言快速排序思路hoare版本代码实现挖坑法代码实现前后指针法代码实现 快排优化三项取中法代码实现三指针代码实现 快排非递归代码实现 归并排序思路代码实现归并非递归代码实现 计数排序思路代码实现 前言 本篇文章将继续介绍快排,归并等排序算法以及其变式。…

Docker本地镜像发布到阿里云

我们构建了自己的镜像后,可以发布到远程镜像提供给其他人使用,比如发布到阿里云 使用build/commit生成新的镜像,并生成自己镜像的版本标签tag,此新的镜像在自己的本地库中,使用push可以将镜像提交到阿里云公有库/私有库…

FPGA——pwm呼吸灯

文章目录 一、实验环境二、实验任务三、实验过程3.1 verilog代码3.2 引脚配置 四、仿真4.1 仿真代码4.2 仿真结果 五、实验结果六、总结 一、实验环境 quartus 18.1 modelsim vscode Cyclone IV开发板 二、实验任务 呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化…

数据结构顺序表,实现增删改查

一、顺序表结构体定义 #define MAXSIZE 8 //定义常量MAXSIZE,表示数据元素的最大个数为8 typedef int datatype; //重定义int类型,分别后期修改顺序表中存储的数据类型 typedef struct {int len; //顺序表长度datatype data[MAXSIZE…

考研线性代数考点总结

一.行列式 1.数字型行列式 数字行列式的计算含零子式的分块计算 2.行列式的性质 |A||A^T|交换行列,行列式的值变号含公因子的提出或乘进去把某行的K倍加到另一行,行列式的值不变。行列式可以根据某一行或某一列分拆 3.抽象行列式 n阶或高阶行列式 常…

自动驾驶MCU 软件架构说明

目录 1 文档... 2 1.1.1 变更历史... 2 1.1.2 Term.. 2 1.1.3 引用文档... 2 2 MCU软件框架图... 3 3 模块介绍... 3 文档 变更历史 版本Version 状态 Status 内容 Contents 日期 Date 撰写 Editor 批准 Approver V0.1 …

Spring Boot单元测试

前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 Spring Boot 中进行单元测试是一个常见的做法,可以帮助你验证…

opencv -13 掩模

什么是掩膜? 在OpenCV中,掩模(mask)是一个与图像具有相同大小的二进制图像,用于指定哪些像素需要进行操作或被考虑。掩模通常用于选择特定区域或进行像素级别的过滤操作。 OpenCV 中的很多函数都会指定一个掩模&…