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

如何减少极狐GitLab 容器镜像库存储?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有:

  • 极狐GitLab 中文文档
  • 极狐GitLab 中文论坛
  • 极狐GitLab 官网

减少容器镜像库存储 (BASIC ALL)


未清理的容器镜像库会随着时间的推移而变大。添加大量镜像或标签时:

  • 获取可用标签或镜像列表变得更慢。
  • 它们占用服务器上大量的存储空间。

我们建议删除不必要的镜像和标签,并设置清理策略,自动管理您的容器镜像库使用情况。

View container registry usage


DETAILS:
Tier: Free, Premium, Ultimate
Offering: GitLab.com

  • Introduced in GitLab 15.7

To view the storage usage for the container registry:

1.On the left sidebar, select Search or go to and find your project.
2.Select Settings > Usage Quotas.

You cannot view container registry usage for self-managed instances, but this is
proposed in epic 5521.

容器仓库使用率是如何计算的?


存储在容器镜像仓库中的镜像层在根命名空间级别中会被去重。
在如下情况下,镜像仅会被计算一次:

  • 您在同一仓库中标记同一镜像多次。
  • 您在同一根命名空间中的不同仓库中标记同一镜像。

在如下情况下,镜像层仅会被计算一次:

  • 您在相同的容器仓库、项目或群组中跨多个镜像共享镜像层。
  • 您在不同的容器仓库中跨多个镜像共享镜像层。

仅由被标签的镜像引用的镜像层会被计算出来。未标记的镜像和任何只由它们引用的镜像层都会受到在线垃圾收集的影响。未标记的镜像层会在 24 小时内未引用时自动删除。

存储在存储后端中的镜像层以源(通常是被压缩的)格式存储。这意味着任何给定的镜像层的测量大小应与相应的镜像清中显示的大小相匹配。

当命名空间中任何仓库中的任何标签被推送或删除时,命名空间使用率会在几分钟后刷新。

延迟刷新

没有办法实时精确计算大型命名空间下容器镜像仓库的使用。要想让这些命名空间的维护者看到容器仓库的使用率,有一个延迟回调机制。

如果命名空间的使用率无法精确计算,极狐GitLab 将回退到延迟方法。在延迟方法中,显示的使用量是命名空间中的所有唯一镜像层的 总和。未标记的镜像层不会被忽略。结果就是,显示的使用量可能不会在删除标签后大量变化。反之,大小值仅在以下情况下更改:

  • 会运行一个自动化的垃圾清理进程并删除未标记的镜像层。在用户删除标签后,垃圾收集进程将在 24 小时后开始运行。在该运行过程中,以前标记的镜像被分析,如果没有其他标记的镜像引用它,则删除它们的镜像层。如果任何层被删除,命名空间的使用量会更新。
  • 命名空间的容器镜像使用量缩小到可以精确测量时,极狐GitLab 会自动切换到延时使用量测量方法。

清理策略


  • 于 15.0 版本,所需权限从开发者更改为维护者。

清理策略是一项计划作业,可用于从 Container Registry 中删除标签。对于定义它的项目,匹配正则表达式 pattern 的标签将被删除。底层镜像层和镜像保留。

管理员可以使用垃圾收集与 -m 开关。

启用清理策略

WARNING:由于性能原因,启用的清理策略在 JihuLab.com 上为没有容器镜像的项目上自动禁用。

清理策略工作原理

清理策略会收集 Container Registry 中的所有标签并排除标签,直到只剩下要删除的标签为止。

清理策略根据标签名称搜索镜像。对完整路径的支持尚未实现,但允许您清理动态命名的标签。

清理策略:

1.在列表中收集给定仓库的所有标签。
2.从列表中排除名为 latest 的标签。
3.评估 name_regex(要过期的标签),从列表中排除不匹配的名称。
4.从列表中排除任何与 name_regex_keep 值匹配的标签(要保留的标签)。
5.排除任何没有 manifest 的标签(不是 UI 中选项的一部分)。
6.按 created_date 对剩余标签进行排序。
7.根据 keep_n 值(要保留的标签数)从列表中排除 N 个标签。
8.从列表中排除比 older_than 值(过期间隔)更新的标签。
9.最后,将列表中剩余的标签从 Container Registry 中删除。

WARNING:私有化部署实例支持符合 Docker Registry HTTP API V2 规范的第三方容器镜像库。但是,该规范不包括标签删除操作。

清理策略工作流示例

清除策略的保留和删除规则之间的交互可能很复杂。
例如,对于具有以下清理策略配置的项目:

  • 保留最新的:每个镜像名称 1 个标签

  • 保留匹配标签production-.*

  • 删除早于以下时间的标签:7 天

  • 删除匹配的标签.*

以及带有以下标签的容器仓库:

  • latest,2 小时前发布。

  • production-v44,3 天前发布。

  • production-v43,6 天前发布。

  • production-v42,11 天前发布。

  • dev-v44,2 天前发布。

  • dev-v43,5 天前发布。

  • dev-v42,10 天前发布。

  • v44,昨天发布。

  • v43,12 天前发布。

  • v42,20 天前发布。

在此示例中,将在下一次清理运行中删除的标签是 dev-v42v43v42

适用于此优先级规则的解释如下:

1.保留规则具有最高优先级。匹配 任何 规则时必须保留标签。

  • latest 标签一定会保留,因为 latest 标签总是被保留。

  • production-v44production-v43production-v42 标签一定会保留,因为它们符合 保持标签匹配 规则。

  • v44 标签一定会保留,因为它是最新的,符合 保留最新的 规则

2.删除规则的优先级较低,只有在 所有 规则匹配时才会删除标签。对于不匹配任何保留规则的标签(dev-44dev-v43dev-v42v43v42):

  • dev-44dev-43 匹配 删除早于以下时间的标签,并被保留。

  • dev-v42、v43 和 v42 同时匹配 删除早于以下时间的标签删除匹配的标签 规则,因此可以删除这三个标签。

创建清理策略

您可以在 API 或 UI 中创建清理策略。

要在 UI 中创建清理策略:

1.对于您的项目,转到 设置 > 软件包与镜像库

2.在 清理策略 部分中,选择 设置清理规则

3.填写字段。

字段描述
切换打开或关闭策略。
运行清理策略应该多久运行一次。
保留最近的总是为每个镜像保留多少标签。
保留匹配标签确定要保留哪些标签的正则表达式 pattern。latest 标签总是被保留。对于所有标签,使用 .*。请参阅其他 regex pattern 示例。
删除早于以下时间的标签仅删除早于 X 天的标签。
删除匹配的标签确定要删除哪些标签的正则表达式 pattern。该值不能为空。对于所有标签,使用 .*。请参阅其他 regex 模式示例。

4.点击 保存

根据您选择的时间间隔,策略将被安排运行。

NOTE:如果您编辑策略并再次单击 保存,则会重置间隔。

正则表达式 pattern 示例

清理策略使用正则表达式 pattern 来确定应在 UI 和 API 中保留或删除哪些标签。

正则表达式 pattern 会自动用 \A\Z 锚点包围。不要在正则表达式模式中包含任何 \A\Z^$ 标记,因为它们不是必需的。

以下是您可能想要使用的正则表达式 pattern 示例:

  • 匹配所有标签:
.*

这是到期正则表达式的默认值。

  • 匹配以 v 开头的标签:
v.+
  • 只匹配名为 main 的标签:
main
  • 匹配已命名或以 release 开头的标签:
release.*
  • 匹配以 v 开头、名为 main 或以 release 开头的标签:
(?:v.+|main|release.*)

设置清理限制以节约资源

  • 功能标志 container_registry_expiration_policies_throttling 移除于 15.0 版本。

清理策略作为后台进程执行。此过程很复杂,根据要删除的标签数量,该过程可能需要一些时间才能完成。

为了防止服务器资源匮乏,可以使用以下应用程序设置:

  • container_registry_expiration_policies_worker_capacity:同时运行的清理 worker 的最大数量,必须大于或等于 0。我们建议从一个较小的数字开始,并在监控后台 worker 使用的资源后增加它。要删除所有 worker 而不执行清理策略,请将其设置为 0。默认值为4

  • container_registry_delete_tags_service_timeout:清理过程删除一批标签可以花费的最长时间(以秒为单位)。默认值为 250

  • container_registry_cleanup_tags_service_max_list_size:一次执行中可以删除的最大标签数。 必须在另一次执行中删除附加标签。我们建议从一个较小的数字开始,并在监控容器镜像被正确删除后增加它。 默认值为 200

  • container_registry_expiration_policies_caching: 在执行策略期间启用或禁用标签创建时间戳缓存。缓存的时间戳存储在 Redis 中。默认启用。

对于私有化部署实例,可以在 Rails 控制台中更新这些设置:

ApplicationSetting.last.update(container_registry_expiration_policies_worker_capacity: 3)

或者,一旦限制被启用,它们在管理中心可用:

1.在左侧边栏中,选择 搜索或转到
2.选择 管理中心
3.进入 设置 > CI/CD > 容器镜像库

使用清理策略 API

您可以使用 GitLab API 设置、更新和禁用清理策略。

示例:

  • 选择所有标签,每个镜像至少保留 1 个标签,清理任何超过 14 天的标签,每月运行一次,保留名称为 main 的所有镜像并启用策略:
curl --request PUT --header 'Content-Type: application/json;charset=UTF-8' --header "PRIVATE-TOKEN: <your_access_token>" \--data-binary '{"container_expiration_policy_attributes":{"cadence":"1month","enabled":true,"keep_n":1,"older_than":"14d","name_regex":".*","name_regex_keep":".*-main"}}' \"https://gitlab.example.com/api/v4/projects/2"

使用 API 时 cadence 的有效值为:

  • 1d (每天)

  • 7d (每周)

  • 14d(每两周)

  • 1month(每月)

  • 3month(每季度)

使用 API 时 keep_n(每个镜像名称保留的标签数量)的有效值是:

  • 1
  • 5
  • 10
  • 25
  • 50
  • 100

使用 API 时 older_than 的有效值(距离自动删除标签的天数)为:

  • 7d

  • 14d

  • 30d

  • 90d 7

与外部容器镜像库一起使用

使用外部容器镜像库时,在项目上运行清理策略可能会有一些性能风险。

如果一个项目运行一项删除数千个标签的策略,则后台作业可能会被备份或完全失败。

如果您确信要清理的标签数量最少,建议您只为 12.8 之前创建的项目启用容器清理策略。

清理策略故障排查

Something went wrong while updating the cleanup policy.

如果您看到此错误消息,请检查正则表达式 pattern,确保它们有效。

极狐GitLab 在清理策略中使用 RE2 语法 作为正则表达式。您可以使用 regex101 regex tester 测试它们。
查看一些常见的 regex 模式示例。

清理策略不删除任何标签

这背后可能有不同的原因:

  • 在 13.6 及更早版本中,当您运行清理策略时,您可能希望它会删除标签,但事实并非如此。当清理策略被保存而不编辑 删除匹配的标签 字段中的值时,就会发生这种情况。该字段有一个灰色的 .* 值作为占位符。除非在字段中明确输入了 .*(或其他正则表达式模式),否则会提交一个 nil 值,此值可防止保存的清理策略匹配任何标签。作为解决方法,请编辑清理策略。在 删除匹配的标签 字段中,输入 .* 并保存,此值表示应删除所有标签。

  • 如果您在私有化部署实例上并且容器镜像库中有 1000 多个标签,您可能会遇到 Container Registry 令牌过期问题,并在日志中显示 error authorizing context: invalid token

要解决此问题,有两种解决方法:

  • 如果您使用的是 13.9 或更高版本,您可以为清理策略设置限制。这样可以及时限制清理执行,并避免过期令牌错误。

  • 延长 Container Registry 身份验证令牌的到期延迟。默认为 5 分钟。您可以通过在 Rails 控制台中运行 ApplicationSetting.last.update(container_registry_token_expire_delay: <integer>) 来设置自定义值,其中 <integer> 是所需的分钟数。请注意,通过扩展此值会增加撤销权限所需的时间。

如果以前的修复不起作用或者您使用的是早期版本,您可以生成要删除的标签列表,然后使用该列表删除标签。请按照下列步骤操作:

1.运行以下 shell 脚本。for 循环之前的命令确保在启动循环时始终重新初始化 list_o_tags.out。运行此命令后,所有标签的名称都将在 list_o_tags.out 文件中:

# Get a list of all tags in a certain container repository while considering [pagination](../../../api/index.md#pagination)
echo -n "" > list_o_tags.out; for i in {1..N}; do curl --header 'PRIVATE-TOKEN: <PAT>' "https://gitlab.example.com/api/v4/projects/<Project_id>/registry/repositories/<container_repo_id>/tags?per_page=100&page=${i}" | jq '.[].name' | sed 's:^.\(.*\).$:\1:' >> list_o_tags.out; done

如果您有 Rails 控制台访问权限,则可以输入以下命令来检索受日期限制的标签列表:

output = File.open( "/tmp/list_o_tags.out","w" )
Project.find(<Project_id>).container_repositories.find(<container_repo_id>).tags.each do |tag|output << tag.name + "\n" if tag.created_at < 1.month.ago
end;nil
output.close

这组命令创建了一个 /tmp/list_o_tags.out 文件,其中列出了 created_at 日期超过一个月的所有标签。

2.从 list_o_tags.out 文件中删除您要保留的所有标签。例如,您可以使用 sed 来解析文件并删除标签。

# Remove the `latest` tag from the file
sed -i '/latest/d' list_o_tags.out# Remove the first N tags from the file
sed -i '1,Nd' list_o_tags.out# Remove the tags starting with `Av` from the file
sed -i '/^Av/d' list_o_tags.out# Remove the tags ending with `_v3` from the file
sed -i '/_v3$/d' list_o_tags.out

如果您运行的是 macOS,则必须将 .bak 添加到命令中。 例如:

# Remove the `latest` tag from the file
sed -i .bak '/latest/d' list_o_tags.out# Remove the first N tags from the file
sed -i .bak '1,Nd' list_o_tags.out# Remove the tags starting with `Av` from the file
sed -i .bak '/^Av/d' list_o_tags.out# Remove the tags ending with `_v3` from the file
sed -i .bak '/_v3$/d' list_o_tags.out

3.仔细检查 list_o_tags.out 文件以确保它只包含您要删除的标签。

4.运行此 shell 脚本,删除 list_o_tags.out 文件中的标签:

# loop over list_o_tags.out to delete a single tag at a time
while read -r LINE || [[ -n $LINE ]]; do echo ${LINE}; curl --request DELETE --header 'PRIVATE-TOKEN: <PAT>' "https://gitlab.

相关文章:

如何减少极狐GitLab 容器镜像库存储?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 减少容器镜像库存储 (BASIC ALL) 未清理的容器镜像库会随着时间的推移而变大。添加大量镜像或标签时&#xff1a; 获取可用标…...

怎么用idea打jar包

背景 前端使用vue开发&#xff0c;打包生成dist文件&#xff0c;需要打包成jar包 步骤 前端的dict文件放到后端的src\main\resources目录下dict文件夹改名为staticidea打开后端代码&#xff0c;依次点击右侧maven下的clean 、package最后会在项目的target目录下生成jar&…...

03 mysql 连接

安装 MySQL 后,我们就需要连接它。 使用命令行方式连接使用图形化工具连接一、使用命令行客户端连接 在上一节内容02 mysql 管理(Windows版)-CSDN博客 我们采用的就是这个连接方法,这种方法直接连接的是root用户,找到该命令行属性,打开可以看到里面的参数是root: 这种…...

Jenkins集成Maven

一、概述 Jenkins是一个开源的持续集成工具&#xff0c;用于自动化各种开发任务。Maven是一个项目管理和构建自动化工具&#xff0c;主要用于Java项目。通过将Jenkins和Maven集成&#xff0c;可以实现自动化构建、测试和部署&#xff0c;提高开发效率和代码质量。 二、前提条…...

Qwen智能体qwen_agent与Assistant功能初探

Qwen智能体qwen_agent与Assistant功能初探 一、Qwen智能体框架概述 Qwen&#xff08;通义千问&#xff09;智能体框架是阿里云推出的新一代AI智能体开发平台&#xff0c;其核心模块qwen_agent.agent提供了一套完整的智能体构建解决方案。该框架通过模块化设计&#xff0c;将L…...

Linux——MySQL基础

基础知识 连接服务器 mysql -h 127.0.0.1 -P 3306 -u root -p -h 指明登录部署了myqsl服务的主机 -P 指明访问的端口号 -u 指明用户 -p 指明登录密码&#xff08;可以不填写&#xff09; 什么是数据库 首先&#xff0c;数据库是分为服务端和客户端的&#xff1a; mysql是客户…...

k8s监控方案实践(二):集成Alertmanager告警与钉钉Webhook通知

k8s监控方案实践&#xff08;二&#xff09;&#xff1a; 集成Alertmanager告警与钉钉Webhook通知 文章目录 k8s监控方案实践&#xff08;二&#xff09;&#xff1a; 集成Alertmanager告警与钉钉Webhook通知一、Alertmanager简介1. 什么是Alertmanager&#xff1f;2. Promethe…...

学习threejs,使用Physijs物理引擎

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Physijs 物理引擎1.1.1 ☘️…...

UG471 之 SelectIO 逻辑资源

背景 《ug471》介绍了Xilinx 7 系列 SelectIO 的输入/输出特性及逻辑资源的相关内容。 第 1 章《SelectIO Resources》介绍了输出驱动器和输入接收器的电气特性&#xff0c;并通过大量实例解析了各类标准接口的实现。 第 2 章《SelectIO Logic Resources》介绍了输入输出数据…...

基于HISI3519dv500的yolov8-obb车位检测

1. 数据标注 标注软件&#xff1a;roLabelImg 安装方式&#xff1a;见 https://github.com/cgvict/roLabelImg.git 操作指南&#xff1a; 标注后的数据格式如下&#xff1a; <annotation verified"no"><folder>4800</folder><filename>fr…...

Prometheus生产实战全流程详解(存储/负载/调度篇)

一、存储架构实战&#xff08;TSDB深度优化&#xff09; 1. 存储拓扑设计 2. 关键参数调优 4. 性能压测对照表 二、负载治理实战&#xff08;百万级Series管控&#xff09; 三、调度优化实战&#xff08;精准采集控制&#xff09; 2. 优先级调度配置 3. 自适应抓取调整 4…...

Mac电脑远程连接window系统服务器

1.下载 首先需要下载Microsoft Remote Desktop软件&#xff0c;下载链接如下&#xff1a; https://go.microsoft.com/fwlink/?linkid868963 2、软件下载成功后&#xff0c;可按照引导程序进行安装&#xff0c;成功后进入软件&#xff0c;可看到如下界面&#xff1a;...

【Qt】编译 Qt 5.15.x For Windows 基础教程 Visual Studio 2019 MSVC142 x64

【Qt】编译 Qt 5.15.x For Windows 基础教程 Visual Studio 2019 MSVC142 x64 目录 【Qt】编译 Qt 5.15.x For Windows 基础教程 Visual Studio 2019 MSVC142 x64准备工作&#xff1a;&#xff08;必须&#xff09;第一步&#xff1a;第二步&#xff1a;第三步&#xff1a; 建议…...

【Qt】之【Bug】点击按钮(ui->pushButton)触发非本类设置的槽函数

解决 先说解决办法&#xff0c;按钮在ui为默认命名ui->pushButton,后面改了下按钮名为该按钮的功能相关&#xff0c;就不会随意触发其他槽函数了。 没想到是这个原因。。。 可能是之前默认的objectName与旧的槽函数自动连接了 记录一下&#xff0c;找了好久其他的原因。 以…...

buck和boost总结

目录 1. 基本概念与原理 2. 工作模式 3. 典型应用场景 4. Buck-Boost电路&#xff1a;升降压结合 5. 核心区别与选择 1. 基本概念与原理 Buck电路&#xff08;降压电路&#xff09; 通过开关器件&#xff08;如MOSFET&#xff09;周期性地导通和关断&#xff0c;控制电感充…...

rtsp,。。。。

下面是基于 FFmpeg H.264 RTSP GStreamer 的低延时视频传输方案的详细搭建指南。此方案可将延迟控制在 <100ms&#xff0c;适合远程驾驶、监控等实时性要求较高的应用场景。 &#x1f4e6; 方案架构 摄像头&#xff08;OpenCV&#xff09;→ FFmpeg&#xff08;H.264编码…...

微信小程序地图缩放scale隐性bug

bug1 在真机环境下通过this.mapCtx.getScale获取当前地图的缩放等级带小数&#xff0c; 当设置scale带小数时&#xff0c;地图会先执行到缩放到带小数的缩放等级&#xff0c;然后会再次缩放取整的缩放等级&#xff08;具体向上取整还是向下取整未知&#xff0c;两种情况都观察…...

Java中关于多态的总结

多态是面向对象编程的三大特性之一&#xff08;封装、继承、多态&#xff09;&#xff0c;它允许不同类的对象对同一消息做出不同的响应。 多态的基本概念 1、定义 多态(Polymorphism)指同一操作作用于不同的对象&#xff0c;可以有不同的解释&#xff0c;产生不同的执行结果…...

突破跨界传输瓶颈:Zynq OCM与DDR核间数据共享性能深度调优

一、当硬件加速遇上内存墙:Zynq数据共享的终极挑战 在某军工雷达信号处理项目中,工程师小王遇到了棘手难题——通过Zynq的ARM核与FPGA协同处理雷达回波数据时,系统吞吐量始终无法突破200MB/s的瓶颈。经过三天三夜的排查,发现问题的根源竟是OCM与DDR之间的数据传输效率不足…...

基于 Ubuntu 24.04 部署 WebDAV

无域名&#xff0c;HTTP 1. 简介 WebDAV&#xff08;Web Distributed Authoring and Versioning&#xff09;是一种基于 HTTP 的协议&#xff0c;允许用户通过网络直接编辑和管理服务器上的文件。本教程介绍如何在 Ubuntu 24.04 上使用 Apache2 搭建 WebDAV 服务&#xff0c;无…...

JVM、JRE、JDK的区别

JVM JVM全称Java虚拟机(Java Virtual Machine, JVM),它是运行java字节码的虚拟机&#xff0c;JVM针对不同的系统有不同的实现&#xff0c;目的运行相同的字节码有同样的结果&#xff0c;JVM是“一次编译&#xff0c;到处运行”实现的关键。如下不同的编程语言编译生成字节码文…...

解密火星文:LeetCode 269 题详解与 Swift 实现

文章目录 摘要描述题解答案题解代码分析构建图&#xff08;Graph&#xff09;拓扑排序&#xff08;Topological Sort&#xff09; 示例测试及结果时间复杂度空间复杂度实际场景类比总结 摘要 这篇文章我们来聊聊 LeetCode 269 题&#xff1a;火星词典&#xff08;Alien Dictio…...

系统思考:短期困境与长期收益

最近在项目中&#xff0c;一直有学员会提到一个议题&#xff0c;如何平衡当前困境和长期收益&#xff1f; 我的思考是在商业和人生的路上&#xff0c;我们常常听到“鱼和熊掌不可兼得”的说法&#xff0c;似乎短期利益和长期目标注定是对立的。但事实上&#xff0c;鱼与熊掌是…...

K8S - Harbor 镜像仓库部署与 GitLab CI 集成实战

引言 在 Kubernetes 环境中&#xff0c;容器镜像的存储与管理至关重要。企业级镜像仓库&#xff08;如 Harbor&#xff09;为团队提供了安全、稳定、可扩展的镜像管理解决方案。 一、Harbor 安装与配置 Harbor 是由 VMware 开源的企业级云原生镜像仓库&#xff0c;它不仅支持…...

2025-05-10-FFmepg库裁切有水印的视频

裁后 代码 import subprocess# 文件路径 input_video_path "bg_video.mp4" output_video_path "output_video_cropped.mp4"# 裁剪视频下方的水印 def crop_video(input_video_path, output_video_path, crop_height):# 获取视频的分辨率def get_video…...

通信协议选型篇:如何根据项目需求选择合适的通信协议?

🧭 本文为《嵌入式通信协议全解析》第七篇,面向系统架构师、嵌入式开发者与技术决策者,提供一套实用的通信协议选型方法论,结合性能对比表、使用案例与决策树,助你在“带宽、功耗、距离、可靠性、生态”之间做出最优权衡。 🔍 一、为什么通信协议的选型很关键? 在嵌入…...

Altera系列FPGA纯verilog视频图像去雾,基于暗通道先验算法实现,提供4套Quartus工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目Altera系列FPGA相关方案推荐本博主已有的图像处理方案 3、设计思路框架工程设计原理框图输入Sensor之-->OV7725摄像头输入Sensor之-->OV5640摄像头输入Sensor之…...

大模型的实践应用39-Qwen3(72B)+langchain框架+MCP(大模型上下文协议)+RAG+传统算法等研发数学教学管理与成绩提升系统

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用39-Qwen3(72B)+langchain框架+MCP(大模型上下文协议)+RAG+传统算法等研发数学教学管理与成绩提升系统。 在2025年AI技术快速发展的背景下,大模型已展现出在教育领域的巨大潜力。通义千问Qwen3作为阿里云推出的最新一代…...

【强化学习】动态规划(Dynamic Programming, DP)算法

1、动态规划算法解题 LeetCode 931. 下降路径最小和 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元素。在下一行选择的元素和当前行所选…...

【Linux】深入拆解Ext文件系统:从磁盘物理结构到Linux文件管理

目录 1、理解硬件 &#xff08;1&#xff09;磁盘 &#xff08;2&#xff09;磁盘的物理结构 &#xff08;3&#xff09;磁盘的存储结构 &#xff08;4&#xff09;磁盘的逻辑结构 &#xff08;5&#xff09;CHS && LBA地址 2、引入文件系统 &#xff08;1&…...

linux ptrace 图文详解(八) gdb跟踪被调试程序的子线程、子进程

目录 一、gdb跟踪被调试程序的fork、pthread_create操作 二、实现原理 三、代码实现 四、总结 &#xff08;代码&#xff1a;linux 6.3.1&#xff0c;架构&#xff1a;arm64&#xff09; One look is worth a thousand words. —— Tess Flanders 相关链接&#xff1a; …...

【列表类型】

1、按索引取值 索引可正向存取&#xff0c;也可反向存取 l [111, paipai, cat] # 正向取值 print(l[1]) # 方向取值 print(l[-1]) # 通过索引给列表重新赋值,前提&#xff1a;索引存在 l[0] ccat print(l) # 索引不存在的情况下&#xff0c;取值or重新赋值的情况下都会报错 …...

MySQL 8.0 OCP 英文题库解析(二)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到2025.07.31 之前。所有人均可以免费考取 原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题6~15。 试题6: …...

数据分析与逻辑思维:六步解决业务难题;参考书籍《数据分析原理:6步解决业务分析难题 (周文全, 黄怡媛, 马炯雄)》

文章目录 一、懂业务&#xff1a;业务背景与逻辑前提1.1 明确业务目标与问题定义1.2 培养批判性思维与高于业务视角 二、定指标&#xff1a;构建科学的指标体系2.1 指标拆解与维度分析2.2 典型指标体系案例&#xff1a;用户与业务视角 三、选方法&#xff1a;匹配业务需求的分析…...

人力资源管理系统如何有效提高招聘效率?

在传统招聘模式下&#xff0c;企业招聘常常陷入 “泥潭”。HR 每天需要花费大量时间在海量简历中 “大海捞针”&#xff0c;手动筛选、电话沟通、安排面试&#xff0c;流程繁琐且效率低下。好不容易邀约到候选人&#xff0c;却因面试安排冲突、信息传递不及时等问题&#xff0c…...

FAISS 与机器学习、NLP 的关系

FAISS&#xff08;Facebook AI Similarity Search&#xff09;是一个用于高效相似性搜索和密集向量聚类的开源库&#xff0c;由 Facebook AI Research 开发。它在机器学习&#xff08;特别是自然语言处理&#xff0c;NLP&#xff09;领域中扮演着重要角色&#xff0c;主要解决大…...

文件包含2

远程文件包含与本地文件包含的区别 对比 对比项本地文件包含&#xff08;LFI&#xff09;远程文件包含&#xff08;RFI&#xff09;定义攻击者包含服务器本地的文件攻击者包含远程服务器&#xff08;如HTTP/FTP&#xff09;上的文件依赖条件不需要特殊配置需要allow_url_incl…...

嵌入式系统架构验证工具:AADL Inspector v1.10 全新升级

软件架构建模与早期验证是嵌入式应用的关键环节。架构分析与设计语言&#xff08;AADL&#xff09;是专为应用软件及执行平台架构模型设计的语言&#xff0c;兼具文本与图形化的双重特性。AADL Inspector是一款轻量级的独立工具&#xff1a; 核心处理能力包括 √ 支持处理AA…...

软考高级系统架构设计师备考分享:操作系统核心知识点整理

在备战软考高级系统架构设计师的过程中&#xff0c;操作系统作为核心考点之一&#xff0c;需要系统性地掌握其核心原理。本文将从操作系统分类、进程状态模型、同步互斥机制、死锁问题及存储管理五大模块展开梳理&#xff0c;结合考试高频考点和实际案例进行解析。 一、操作系统…...

22、城堡防御工事——React 19 错误边界与监控

一、魔法护盾&#xff1a;错误边界机制 1. 城墙结界&#xff08;Error Boundary&#xff09; // 客户端错误边界use client function useErrorBoundary() {const [error, setError] useState(null);​const handleError useCallback((error, errorInfo) > {setError(erro…...

有关SOA和SpringCloud的区别

目录 1. 定义 2. 架构风格 3. 技术栈 4. 服务交互 5. 适用场景 前言 面向服务架构&#xff08;SOA&#xff09;是一种软件设计风格&#xff0c;它将应用程序的功能划分为一系列松散耦合的服务。这些服务可以通过标准的通信协议进行交互&#xff0c;通常是HTTP或其他消息传…...

大数据——Mac环境DataSpell集成Jupyter

1、设置 2、添加新的解释器 3、解释器类型选择Conda 4、进入选中全部&#xff0c;然后重启 5、dataspell右下角会显示当前项目的运行环境 6、创建Jupyter Notebook文件 7、测试 8、查看当前配置 &#xff08;1&#xff09;本地模式安装使用 &#xff08;2&#xff09;…...

解锁健康养生新境界

在追求高品质生活的当下&#xff0c;健康养生早已超越 “治未病” 的传统认知&#xff0c;成为贯穿全生命周期的生活艺术。它如同精密的交响乐&#xff0c;需饮食、运动、心理与生活习惯多维度协奏&#xff0c;方能奏响生命的强音。 饮食养生讲究 “顺时、适性”。遵循二十四节…...

WORD压缩两个免费方法

日常办公和学习中&#xff0c;Word文档常常因为包含大量图片、图表或复杂格式而导致文件体积过大&#xff0c;带来诸多不便&#xff0c;比如 邮件发送受限&#xff1a;许多邮箱附件限制在10-25MB&#xff0c;大文件无法直接发送 存储空间占用&#xff1a;大量文档占用硬盘或云…...

Zabbix监控 RabbitMQ 指定消息队列名称(pull_alarms )的消费者

✅ 1. 编写 RabbitMQ 队列监控脚本 创建脚本文件 /usr/local/bin/zbx_rabbitmq_metric.sh 并写入以下内容&#xff1a; #!/bin/bash # /usr/local/bin/zbx_rabbitmq_metric.shQUEUE$1 METRIC$2 USER$3 PASS$4if [[ -z "$QUEUE" || -z "$METRIC" || -z &q…...

RabbitMQ ②-工作模式

RabbitMQ 工作模式 官方提供了七种工作模式 Simple&#xff08;简单模式&#xff09; P&#xff1a;生产者&#xff0c;发布消息到队列C&#xff1a;消费者&#xff0c;从队列中获取消息并消费Queue&#xff1a;消息队列&#xff0c;存储消息。 一个生产者&#xff0c;一个…...

《探索React Native社交应用中WebRTC实现低延迟音视频通话的奥秘》

WebRTC&#xff0c;全称为Web Real-Time Communication&#xff0c;是一项开创性的开源技术&#xff0c;为Web和移动应用开启了实时通信的大门。它打破了传统通信的束缚&#xff0c;使得应用之间无需依赖繁琐的中间服务器&#xff0c;就能实现直接的点对点通信&#xff0c;这是…...

UI设计公司兰亭妙微分享:汽车 MHI 设计的界面布局创新法则

在汽车人机界面&#xff08;MHI&#xff09;设计中&#xff0c;界面布局犹如建筑蓝图&#xff0c;奠定了用户与汽车交互体验的基础。合理创新的布局能提升驾驶安全性与便捷性&#xff0c;融合极简美学与高效操作则成为现代汽车 MHI 界面布局设计的核心追求。​ 驾驶场景中&…...

【递归,搜索与回溯算法篇】专题(一) - 递归

文章目录 面试题 08.06. 汉诺塔问题21. 合并两个有序链表206. 反转链表24. 两两交换链表中的节点50. Pow(x, n) 面试题 08.06. 汉诺塔问题 题目链接&#xff1a; 面试题 08.06. 汉诺塔问题 题目描述&#xff1a; 在经典汉诺塔问题中&#xff0c;有 3 根柱子及 N 个不同大小的…...

B站pwn教程笔记-9

前言&#xff1a;可以去一些开源镜像站下载libc老的乌班图镜像&#xff0c;因为堆题的libc可能比较老&#xff0c;没有新的一些保护措施和机制。 格式化字符串漏洞 归根结底&#xff0c;可以读写任意地址内存。 泄露栈数据/任意地址数据 主要问题就是printf不知道自己有没有…...