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

007.Gitlab CICD缓存与附件

文章目录

    • 缓存与产物
      • 缓存与产物概述
    • 同分支不同job数据共享
      • 默认数据共享
      • 不同 Job 数据共享
    • 不同分支相同job数据共享
      • 跨分支同job数据共享
    • 不同分支不同job数据共享
      • 跨分支跨job数据共享
    • 将文件/夹保存为附件
      • 产物介绍
      • 创建产物
      • 跨job共享产物

缓存与产物

缓存与产物概述

缓存是一种 临时存储机制,用于在流水线的不同运行之间保留可复用的中间文件或依赖项(如第三方库、编译中间产物)。
其核心目标是 减少重复性任务的执行时间,通过重用已生成的内容来提升作业执行效率。

缓存是作业下载和保存的一个或多个文件。
使用相同缓存的后续作业不必再次下载文件,因此可以加快作业的执行。
缓存主要有如下特性:

  • 使用 cache 关键字定义每个作业的缓存。否则它被禁用。
  • 后续流水线可以复用缓存。
  • 如果依赖项相同,同一流水线中的后续作业可以使用缓存。
  • 不同的项目不能共享缓存。
  • 默认情况下,受保护和非受保护分支不会共享缓存,除非人为改变此行为。

产物主要有如下特性:

  • 定义每个作业的产物。
  • 同一流水线后期的后续作业可以使用产物。
  • 不同的项目不能共享产物。
  • 默认情况下,产物会在 30 天后过期,除非人为自定义到期时间。
  • 如果启用了保留最新产物,则最新的产物不会过期。
  • 使用依赖来控制哪些作业获取工件

缓存通常存储在Runner本地,可以被同一流水线的不同作业重用,但不同 Runner 之间无法共享。
而产物上传到GitLab服务器,可以在不同作业和阶段之间传递,甚至可以保留一段时间供下载。

总结如下:

维度缓存(Cache)产物(Artifacts)
存储目的加速重复性任务传递构建结果
数据性质临时性、可丢弃持久性、需保留
共享方向向后传递(供未来作业复用)向前传递(供后续阶段使用)
依赖管理隐式依赖(通过 key 匹配)显式依赖(通过 dependencies 声明)

同分支不同job数据共享

默认数据共享

在没有配置数据共享之前,默认流水线中,不同 job 之间的数据是无法共享的。

  • 创建流水线
    如下创建一个项目背景,创建两个阶段,一个编译 compile ,一个构建 build ,在 compile 阶段对文件进行追加内容,然后在 build 模拟查看文件,观察文件是否实现更改。

首先在 back/demo.txt 文件写入原始内容,如 hello world 。

[root@gitclient myapp]# echo 'hello world' >> back/demo.txt[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compile- buildcompile_back:stage: compileonly:- mainscript:- cat back/demo.txt- echo "do compile back" >> back/demo.txt- cat back/demo.txttags:- study-runnerbuild_back:stage: buildonly:- mainscript:- cat back/demo.txttags:- study-runner
  • 提交流水线
[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "Test job share file"[root@gitclient myapp]# git push origin main

观察流水线作业。
106

查看 compile 的作业:
107

查看 build 的作业:
108

结论:如上所示,默认情况下在 compile 阶段对文件内容的操作,并不会传递到 build 阶段。

不同 Job 数据共享

对于研发日常工作,经常存在后续的不同 job ,需要使用前一个阶段对文件的修改或者所产生的新文件。
当需要在流水线中不同的 job 之间实现数据共享时,需要使用缓存技术,通过关键字 cache 实现。

提示:不同runner之间的数据是无法共享的,因此需要在流水线不同 job 之间指定 runner 。

在编译和构建等不同 job 中都使用 cache 关键字,两个 job 之间通过 key 关键字实现数据共享。
key 关键字通过指定一个预定义的变量,即 CI_COMMIT_REF_SLUG ,在同一个分支中, CI_COMMIT_REF_SLUG 变量是相同的。

[root@gitclient myapp]# cat back/demo.txt[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compile- buildcompile_back:stage: compileonly:- maincache:key: $CI_COMMIT_REF_SLUGpaths:- back/script:- cat back/demo.txt- echo "do compile back" >> back/demo.txt- cat back/demo.txttags:- study-runnerbuild_back:stage: buildonly:- maincache:key: $CI_COMMIT_REF_SLUGpaths:- back/script:- cat back/demo.txttags:- study-runner
  • 提交流水线
[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "Test two job share file"[root@gitclient myapp]# git push origin main

观察流水线作业。
109
查看 compile 的作业:
110

查看 build 的作业:
111

结论:如上所示,通过 cache 实现在 compile 阶段对文件内容的操作,传递到 build 阶段。即在 cache 中使用相同的 key 的 job 之间是数据共享的。

不同分支相同job数据共享

跨分支同job数据共享

数据共享的本质是 key 值相同,因此若需要在不同分支的相同的 job 之间实现数据共享,只需要保证 key 值在不同的分支相同的 job 中保持一致,在相同的分支不同的 job 之间 key 又保持不同。
即不同分支,相同 job 保持一直,相同分支,不同 job 保持不同。
因此直接把 key 值定义采用 job 名称的变量名即可。

key 值等于 job 名称,就实现了相同分支不同 job 数据不共享,不同分支,相同 job 数据共享。

通常对于 main 分支的编译阶段和 dev 分支的编译阶段的数据共享非常实用。

  • 创建流水线
[root@gitclient myapp]# git checkout -b test[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compile- buildcompile_web:stage: compileonly:- test- devcache:key: $CI_JOB_NAMEpolicy: pull-pushpaths:- web/script:- mkdir -p web/- echo "do compile web tow branch" >> web/mytest.txt- cat web/mytest.txttags:- study-runnerbuild_web:stage: buildonly:- test- devcache:key: $CI_JOB_NAMEpaths:- web/script:- mkdir -p web/- echo "do build web tow branch" >> web/mytest.txt- cat web/mytest.txttags:- study-runner
  • 提交流水线
[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "Test two branch share file for test"[root@gitclient myapp]# git push origin test

观察流水线作业。
112
查看 compile 的作业:
113

查看 build 的作业:
114

结论:如上所示,基于 cache 中的 key 实现数据共享,但 key 是使用了作业名变量,因此 compile 作业和 build 作业名不同,因此数据没有实现共享。

  • 切换分支推送
[root@gitclient myapp]# git checkout dev[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compile- buildcompile_web:stage: compileonly:- test- devcache:key: $CI_JOB_NAMEpolicy: pull-pushpaths:- web/script:- mkdir -p web/- echo "do compile web tow branch" >> web/mytest.txt- cat web/mytest.txttags:- study-runnerbuild_web:stage: buildonly:- test- devcache:key: $CI_JOB_NAMEpaths:- web/script:- mkdir -p web/- echo "do build web tow branch" >> web/mytest.txt- cat web/mytest.txttags:- study-runner
  • 提交流水线
[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "Test two branch share file for dev"[root@gitclient myapp]# git push origin dev

观察流水线作业。
115
查看 compile 的作业:
116

查看 build 的作业:
117

查看两个分支的提交。
117

结论:如上所示,基于 cache 中的 key 实现数据共享, key 是使用了作业名变量,因此即使不同分支,其跨分支的相同 compile 作业内容都实现了共享,跨内置 相同的 build 也一样实现了数据共享。

不同分支不同job数据共享

跨分支跨job数据共享

数据共享的本质是 key 值相同,因此若需要在不同分支的不相同的 job 之间实现数据共享,本质上就是所有场景下都能共享数据,值只需要保证 key 值在不同的分支不同 job 中保持一致,设置一个固定的 key 即可。

  • 创建流水线
[root@gitclient myapp]# git checkout test[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compile- buildcompile_web:stage: compileonly:- test- devcache:key: all_share_filepolicy: pull-pushpaths:- web/script:- mkdir -p web/- echo "do compile web all branch" >> web/mytest.txt- cat web/mytest.txttags:- study-runnerbuild_web:stage: buildonly:- test- devcache:key: all_share_filepaths:- web/script:- mkdir -p web/- echo "do build web all branch" >> web/mytest.txt- cat web/mytest.txttags:- study-runner
  • 提交流水线
[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "Test all branch share file for test"[root@gitclient myapp]# git push origin test

观察流水线作业。
119

查看 compile 的作业:
120

查看 build 的作业:
121

结论:如上所示,基于 cache 中的固定 key 实现数据共享,因此 compile 作业和 build 作业名都会共享数据,build 的内容包括了 compile 。

  • 切换分支推送
[root@gitclient myapp]# git checkout dev[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compile- buildcompile_web:stage: compileonly:- test- devcache:key: all_share_filepolicy: pull-pushpaths:- web/script:- mkdir -p web/- echo "do compile web tow branch" >> web/mytest.txt- cat web/mytest.txttags:- study-runnerbuild_web:stage: buildonly:- test- devcache:key: all_share_filepaths:- web/script:- mkdir -p web/- echo "do build web tow branch" >> web/mytest.txt- cat web/mytest.txttags:- study-runner
  • 提交流水线
[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "Test all branch share file for dev"[root@gitclient myapp]# git push origin dev

观察流水线作业。
115

查看 compile 的作业:
116

查看 build 的作业:
117

查看两个分支的提交。
117

结论:如上所示,基于 cache 中的固定 key 实现数据共享,因此 dev 分支会继续继承 test 分支的所有数据,因此 compile 作业和 build 作业文件都会叠加更新 。

将文件/夹保存为附件

产物介绍

在 gitlab 中作业可以输出文件和目录的存档,此输出称为作业产物,或简称产物。

已创建的产物可以使用 UI 或 API 下载。

产物的主要核心场景:

  1. 跨作业/阶段传递数据
    将当前作业生成的文件传递给后续作业(如下载编译后的二进制文件、测试报告等)。
    例如:编译作业生成 dist/ 目录,部署作业使用该目录中的文件。
  2. 提供用户手动下载
    用户可以直接在 GitLab Pipeline 界面下载产物文件(如发布包、日志等)。
  3. 自动化报告集成
    将产物标记为特定类型的报告(如单元测试报告、覆盖率报告),GitLab 会解析并展示在UI中。

GitLab 中的可以使用 artifacts 关键字来持久化存储作业生成的产物(如构建结果、测试报告、日志等)。

与 cache 的主要区别:

特性artifactscache
用途传递作业生成的最终结果(如二进制文件、报告)缓存中间依赖(如 node_modules )以加速构建
存储持久性长期保留(默认30天,可配置 expire_in )临时存储(可能被清理,无严格保留时间)
作用范围同一 Pipeline 的后续作业同一 Runner 的多个 Pipeline (跨分支、项目)
是否可下载用户可直接下载用于自动化构建流程

创建产物

  • 创建流水线
[root@gitclient myapp]# git checkout main[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile_web:stage: compileonly:- main- devartifacts:paths:- webscript:- mkdir -p web/- echo "do compile web save file" >> web/mytest.txt- cat web/mytest.txttags:- study-runner
  • 提交流水线
[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "Do compile web save file"[root@gitclient myapp]# git push origin main

观察流水线作业。

125

浏览产物,也可以将产物进行下载。

126

  • 定义产物名字
    可以为产物定义名字。
[root@gitclient myapp]# git checkout main[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile_web:stage: compileonly:- main- devartifacts:name: webtestpaths:- webscript:- mkdir -p web/- echo "do compile webtest save file" >> web/mytest.txt- cat web/mytest.txttags:- study-runner[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "Do compile webtest save file to webtest"[root@gitclient myapp]# git push origin main

观察流水线作业。

127

浏览产物,也可以将产物进行下载。

128

  • 设置产物过期时间
    支持将产物设置特定的过期时间。
[root@gitclient myapp]# git checkout main[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compilecompile_web:stage: compileonly:- main- devartifacts:name: webtestexpire_in: 30 dayspaths:- webscript:- mkdir -p web/- echo "do compile webtest file expire time" >> web/mytest.txt- cat web/mytest.txttags:- study-runner[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "Do compile webtest file expire time"[root@gitclient myapp]# git push origin main

观察流水线作业。

129

浏览产物,也可以将产物进行下载。

130

跨job共享产物

产物可以在两个不同 job 之间共享,后一个 job 使用前一个 job 的产物。

  • 创建流水线
[root@gitclient myapp]# git checkout main[root@gitclient myapp]# git rm .gitlab-ci.yml[root@gitclient myapp]# vim .gitlab-ci.yml
stages:- compile- buildcompile_web:stage: compileonly:- main- devartifacts:paths:- webscript:- mkdir -p web/- echo "do compile first file" >> web/firstest.txt- echo "do compile second file" >> web/secondtest.txt- echo "do compile third file" >> web/thirdtest.txttags:- study-runnerbuild_web:stage: builddependencies:- compile_webonly:- main- devscript:- ls -l web/
  • 提交流水线
[root@gitclient myapp]# git add .
[root@gitclient myapp]# git commit -m "Do web share file"[root@gitclient myapp]# git push origin main

观察流水线作业。

131

查看作业,后续job能查看前一个job的产物。

132

相关文章:

007.Gitlab CICD缓存与附件

文章目录 缓存与产物缓存与产物概述 同分支不同job数据共享默认数据共享不同 Job 数据共享 不同分支相同job数据共享跨分支同job数据共享 不同分支不同job数据共享跨分支跨job数据共享 将文件/夹保存为附件产物介绍创建产物跨job共享产物 缓存与产物 缓存与产物概述 缓存是一…...

A006-基于Selenium和JMeter的吉屋web端的自动化测试设计与实现

产出:自动测试脚本测试用例开题报告自动化测试报告论文jmeter性能测试 --------------------**论文主要内容***----- 第1章 吉屋web端需求分析 1.1 吉屋web端功能需求分析 由于社会对知识获取的需求不断增长,海量繁多的房屋信息已难以依靠传统人工高效…...

图像预处理-边缘填充,透视变换和色彩空间基础

一.边缘填充 一般来图片操作之后会有空区域,就是对空出来的区域进行了像素值的填充,(0,0,0)也就是黑色像素值的填充。 # 默认黑色填充 import cv2 as cvimg cv.imread(../images/lena.png) # 先让原图旋转45度 M cv.getRotatio…...

数字化赋能,众趣科技助力智慧园区深化管理运营能力

数字化、网络化和智能化,被公认为是未来社会发展的大趋势。随着全球物联网、云计算等新一代信息技术不断成熟,传统的招商管理运营模式难以满足园区当下所需,以“园区互联网”为理念的“智慧园区”应运而生,同时融入社交、移动、物…...

《AI大模型应知应会100篇》 第16篇:AI安全与对齐:大模型的灵魂工程

第16篇:AI安全与对齐:大模型的灵魂工程 摘要 在人工智能技术飞速发展的今天,大型语言模型(LLM)已经成为推动社会进步的重要工具。然而,随着这些模型能力的增强,如何确保它们的行为符合人类的期…...

MCP的另一面

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

Golang|锁相关

文章目录 并发安全性与原子操作读写锁分布式锁 并发安全性与原子操作 普通数据类型在并发读写中是会出现问题的,有时候操作会被吞,导致脏写,比如上面n加了两次应该为2,但是由于并发,n最后还是只加了一次 读写锁 sync.…...

大模型面经 | 介绍一下大模型微调方法Prefix Tuning、Prompt Tuning、P-Tuning和P-Tuning v2

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...

JMeter的高并发和高频率和分布式

性能测试 模拟各种正常的、峰值的测试环境,检测程序的各项性能指标是否能够达标 高并发 JMeter中内置了定时器,可以实现时间模式相关的性能测试 需求1:同一时刻100个同学去访问学生管理系统的查询所有学院信息功能,统计高并发情况下平均响…...

设计模式-模板模式

设计模式-模板模式,不用重复写大的逻辑,父类定义好不变的模板方法,子类使用,当框架是父类的框架时可以继承...

手机端可部署的开源大模型; 通义千问2.5训练和推理需要的内存和外存

手机端可部署的开源大模型 目录 手机端可部署的开源大模型Qwen2.5 0.5B 7b 推理采用手机内存需要多少Qwen2.5 0.5B不同量化精度下的内存需求Qwen2.5 7B不同量化精度下的内存需求通义千问2.5训练和推理需要的内存和外存推理阶段1. Qwen2.5 - 7B2. Qwen2.5 - 14B3. Qwen2.5 - 72B…...

记录学习的第二十五天

今天终于又开始更新了。实在是星期六的蓝桥杯给了我一个大大的打击,今天终于好不容易缓过来了,可以好好学算法了。 还是老规划,力扣的每日一题。不过今天的每日一题我之前做过了,就又提交了一次来签到。 之后三道哈希表题目。 我一…...

leetcode03 -- 武汉旅游查询系统

武汉旅游查询系统 1 界面展示 1.首页地图界面 2.查找功能 在查找框内输入查找的景点名称 查找到的景点在地图上进行定位,右侧展示景点的详细信息。 3.添加景点功能 在地图上点击某个位置,系统弹出一个输入框供用户填写景点的名称和描述。 在弹出的输入框中输入景点名…...

R 语言科研绘图第 39 期 --- 饼状图-旭日

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

R语言操作练习2

加载tidyr包,探索table1,table2,table3,table4a, table4b维度和结构 将table4a进行宽转长操作,列名为country,year,population 基于题2,以country为横坐标,population为纵坐标,fillyear,采用dodge形式作柱…...

【秣厉科技】LabVIEW工具包——OpenCV 教程(19):拾遗 - imgproc 基础操作(上)

文章目录 前言imgproc 基础操作(上)1. 颜色空间2. 直方图3. 二值化4. 腐蚀、膨胀、开闭运算5. 梯度与轮廓6. 简易绘图7. 重映射 总结 前言 需要下载安装OpenCV工具包的朋友,请前往 此处 ;系统要求:Windows系统&#x…...

python中,sort(reverse=True)与列表.reverse的区别

python中,sort(reverseTrue)与列表.reverse的区别 在 Python 中,sort(reverseTrue) 和 列表.reverse() 是两种不同的操作,主要区别如下: 1. sort(reverseTrue) 作用: 对列表进行降序排序(即从大到小排列…...

Java【多线程】(8)CAS与JUC组件

目录 1.前言 2.正文 2.1CAS概念 2.2CAS两种用途 2.2.1实现原子类 2.2.2实现自旋锁 2.3缺陷:ABA问题 2.4JUC组件 2.4.1Callable接口 2.4.2ReentrantLock(与synchronized对比) 2.4.3Semaphore信号量 2.4.4CountDownLatch 3.小结 1…...

MATLAB仿真多相滤波抽取与插值的频谱变化(可视化混叠和镜像)

MATLAB画图仿真多相滤波抽取与插值的频谱变化 可视化多速率信号处理抽取与插值的频谱变化 实信号/复信号 可视化混叠和镜像 目录 前言 一、抽取的基本原理 二、MATLAB仿真抽取运算 三、内插的基本原理 四、MATLAB仿真内插运算 总结 前言 在多速率系统中增加信号采样率的运…...

Docker 与 Podman常用知识汇总

一、常用命令的对比汇总 1、基础说明 Docker:传统的容器引擎,使用 dockerd 守护进程。 Podman:无守护进程、无root容器引擎,兼容 Docker CLI。 Podman 命令几乎完全兼容 Docker 命令,只需将 docker 替换为 podman。…...

Spark-SQL简介

Spark-SQL: Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。 Hive and SparkSQL: Drill,Impala.Shark Shark 是伯克利实验室 Spark 生态环境的组件之一. Shark 的出现,使得 SQL-on-Hadoop 的性能比 Hive 有了 10-100 倍的提高。 Spark-S…...

第十八讲 | 支持向量机(SVM):在地类识别与遥感影像分类中的应用

在遥感影像分类与地类识别中,我们经常面临高维特征、多样地表类型以及样本噪声等挑战。**支持向量机(Support Vector Machine,SVM)**作为一种强大的监督分类方法,因其在小样本、高维特征下依然保持良好泛化能力,被广泛用于遥感影像分析、地类判别及环境监测等领域。 📌…...

5.6 GitHub PR分析爆款方案:分层提示工程+LangChain实战,准确率飙升22%

GitHub Sentinel 分析报告核心模块:Pull Request 提示工程设计与实现 关键词:Pull Request 分析、大模型提示工程、分层结构设计、动态参数注入、LangChain 集成 1. PR 分析需求与技术挑战 在 GitHub 开源项目管理中,Pull Request 分析需满足三个核心需求: #mermaid-svg-…...

centos yum install environment-modules

在 CentOS 系统中,environment-modules 是一个非常有用的包,它允许用户管理和动态地加载环境变量,这对于使用特定模块(例如软件库或编译器工具链的路径)非常方便。如果你想通过 yum 安装 environment-modules&#xff…...

Spring Boot + ShardingSphere 分库分表实战:电商订单场景案例

摘要:本文通过电商系统中订单表分库分表的实际案例,结合Spring Boot和ShardingSphere框架,详细讲解如何实现水平分库分表,解决海量数据存储与查询性能问题。 一、场景分析 在电商系统中,订单表随着业务增长可能面临以…...

C++ 指针从入门到精通实战:全面掌握指针的概念与应用

C 指针从入门到精通实战:全面掌握指针的概念与应用 指针(Pointer)是C中一个极其重要且强大的概念,它赋予了程序员直接操作内存的能力,从而实现高效的代码和复杂的数据结构。然而,指针的使用也伴随着诸多挑…...

C++ 智能指针底层逻辑揭秘:优化内存管理的核心技术解读

目录 0.为什么需要智能指针? 1.智能指针的使用及原理 RAII: 智能指针的原理: 2.智能指针有哪些? std::auto_ptr std::unique_ptr std::shared_ptr std::weak_ptr 0.为什么需要智能指针? 想要回答这个问题&…...

Android基础入门、Android常见界面布局基础练习

第1章 Android基础入门、第2章Android常见界面布局 一. 填空题 1. (填空题)如果希望在XML布局文件中调用颜色资源,可以使用_____调用。 正确答案: (1) color 2. (填空题)Android程序入口的Activity是在_____文件中注册的。 正确答案: (1…...

Spring Cloud主要组件介绍

一、Spring Cloud 1、Spring Cloud技术概览 分为:服务治理,链路追踪,消息组件,配置中心,安全控制,分布式任务管理、调度,Cluster工具,Spring Cloud CLI,测试 2、注册中心:常用注册中心(Euerka[AP]、Zookeeper[CP]) 1)Euerka Client(服务提供者)=》注册=》Eue…...

【7】深入学习Buffer缓冲区-Nodejs开发入门

深入学习Buffer缓冲区 前言ASCII码GBK/GB2312UnicodeJavascript转换 BufferBuffer的作用Buffer的创建Buffer.allocBuffer.allocUnsafe(size)Buffer.allocUnsafeSlow(size)Buffer.from(array)Buffer.from(arrayBuffer[, byteOffset[, length]])Buffer.from(buffer)Buffer.from(s…...

酶动力学参数预测,瓶颈识别……中科院深圳先进技术研究院罗小舟分享AI在酶领域的创新应用

蛋白质,作为生命的基石,在生命活动中发挥着关键作用,其结构和功能的研究,对创新药物研发、合成生物学、酶制剂生产等领域,有着极其重要的意义。但传统蛋白质设计面临诸多难题,蛋白质结构复杂,序…...

Dockerfile

Dockerfile Dockerfile 是一个文本文件,其内包含了一条条指令,每一条指令构建镜像的一层,因此每一条指令的内容,就是描述该层应当如何构建。 定制镜像,可以将镜像制作的每一层的修改、安装、构建、操作的命令&#xf…...

Redis高频面试题(含答案)

当然可以,Redis 是面试中非常常见的高频考点,尤其在后台开发、分布式系统、缓存设计等方向,面试官常常通过 Redis 来考察你的高并发处理能力、系统设计能力和对缓存一致性理解。 以下是一些典型 Redis 的面试场景题目类型和你可以如何回答的…...

#3 物联网 的标准

商业化的技术都有标准, 标准的本质就是 可以重复多次实现的方法。而这些方法都是设定物联网的那些人布局的,当然在保证按方法操作的结果是属于物联网这个基本的操作里面,藏着的是对某些利益团队的维护,这里大家知道就可以了。 除 …...

Moviepy 视频编辑的Python库,可调整视频分辨率、格式

MoviePy简介 MoviePy 是一个用于视频编辑的Python库,支持视频剪辑、和合成、转码等多种操作,主要有点: 基于 FFmpeg:能够处理几乎所有常见的视频格式。 修改视频分辨率 方法一:指定新的宽度和高度 from moviepy.editor import V…...

【LeetCode 热题 100】哈希 系列

📁1. 两数之和 本题就是将通过两层遍历优化而成的,为什么需要两层遍历,因为遍历 i 位置时,不知道i-1之前的元素是多少,如果我们知道了,就可以通过两数相加和target比较即可。 因为本题要求返回下标&#xf…...

蓝光三维扫描:汽车冲压模具与钣金件全尺寸检测的精准解决方案

随着汽车市场竞争日趋激烈,新车型开发周期缩短,安全性能要求提高,车身结构愈加复杂。白车身由多达上百个具有复杂空间型面的钣金件,通过一系列工装装配、焊接而成。 钣金件尺寸精度是白车身装配精度的基础。采用新拓三维XTOM蓝光…...

鲲鹏+昇腾部署集群管理软件GPUStack,两台服务器搭建双节点集群【实战详细踩坑篇】

前期说明 配置:2台鲲鹏32C2 2Atlas300I duo,之前看网上文档,目前GPUstack只支持910B芯片,想尝试一下能不能310P也部署试试,毕竟华为的集群软件要收费。 系统:openEuler22.03-LTS 驱动:24.1.rc…...

面试篇 - GPT-1(Generative Pre-Training 1)

GPT-1(Generative Pre-Training 1) ⭐模型结构 Transformer only-decoder:GPT-1模型使用了一个12层的Transformer解码器。具体细节与标准的Transformer相同,但位置编码是可训练的。 注意力机制: 原始Transformer的解…...

探索机器人创新技术基座,傅利叶开源人形机器人 Fourier N1

一.傅利叶为什么要开源? 2025年3月17日,傅利叶正式开源全尺寸人形机器人数据集Fourier ActionNet。 2025年4月11日,傅利叶正式发布首款开源人形机器人 Fourier N1。 傅利叶为什么要做这些开源工作呢?4月11日&#x…...

正则表达式和excel文件保存(python)

正则表达式 import re data """ <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8" /> <title>测试页面</title> </head> <body> <h1>《人工智能的发展趋势分析报…...

无人船 | 图解基于视线引导(LOS)的无人艇制导算法

目录 1 视线引导法介绍2 LOS制导原理推导3 Lyapunov稳定性分析4 LOS制导效果 1 视线引导法介绍 视线引导法&#xff08;Line of Sight, LOS&#xff09;作为无人水面艇&#xff08;USV&#xff09;自主导航领域的核心技术&#xff0c;通过几何制导与动态控制深度融合的机制&am…...

大腾智能获邀出席华为云2025生态大会,携全栈工业软件助力产业智能升级

4月10日-4月11日&#xff0c;以“聚力共创&#xff0c;加速行业智能跃迁”为主题的华为云生态大会2025在安徽芜湖召开。大腾智能受邀出席此次盛会&#xff0c;与众多行业精英、生态伙伴齐聚一堂&#xff0c;深度参与前沿技术演示、生态伙伴签约及商业场景共创&#xff0c;与行业…...

Java基础关键_037_Java 常见新特性

目 录 一、新语法 1.JShell 2.try-with-resources &#xff08;1&#xff09;jdk 7 之前 &#xff08;2&#xff09;jdk 7 之后 &#xff08;3&#xff09;jdk 9 之后 3.局部变量类型判断&#xff08;不推荐&#xff09; 4.instanceof 的模式匹配 &#xff08;1&a…...

鸿蒙公共通用组件封装实战指南:从基础到进阶

一、鸿蒙组件封装核心原则 1.1 高内聚低耦合设计 在鸿蒙应用开发中&#xff0c;高内聚低耦合是组件封装的关键准则&#xff0c;它能极大提升代码的可维护性与复用性。 从原子化拆分的角度来看&#xff0c;我们要把复杂的 UI 界面拆分为基础组件和复合组件。像按钮、输入框这…...

IntelliJ 配置(二)配置相关类库(2)LineMarkerProvider

一、介绍 LineMarkerProvider 是 IntelliJ 平台插件开发中的一个接口&#xff0c;它的作用是在编辑器左侧的“行标记区域”&#xff08;就是代码行号左边那一栏&#xff09;添加各种图标、标记或导航链接。比如Java 类中看到的&#xff1a; 小绿色三角形&#xff08;可以点击运…...

红宝书第四十二讲:Angular核心特性精讲:依赖注入 RxJS整合

红宝书第四十二讲&#xff1a;Angular核心特性精讲&#xff1a;依赖注入 & RxJS整合 资料取自《JavaScript高级程序设计&#xff08;第5版&#xff09;》。 查看总目录&#xff1a;红宝书学习大纲 一、依赖注入&#xff08;Dependency Injection&#xff09;&#xff1a;快…...

AD917X系列JESD204B MODE7使用

MODE7特殊在F8&#xff0c;M4使用2个复数通道 CH0_NCO10MHz CH1_NCO30MHZ DP_NCO50MHz DDS1偏移20MHz DDS2偏移40MHz...

软考高级系统架构设计师-第11章 系统架构设计

【本章学习建议】 根据考试大纲&#xff0c;本章不仅考查系统架构设计师单选题&#xff0c;预计考12分左右&#xff0c;而且案例分析和论文写作也是必考&#xff0c;对应第二版教材第7章&#xff0c;属于重点学习的章节。 软考高级系统架构设计师VIP课程https://edu.csdn.net/…...

中和农信的“三农”服务密码:科技+标准化助力乡村振兴

作为中国农村市场最大的专注服务农村小微客户的“三农”综合服务机构&#xff0c;中和农信凭借多年积累的农村服务经验&#xff0c;成功从单一小额信贷机构转型为覆盖金融、生产、生活及生态服务的综合型“三农”服务平台。近期&#xff0c;中和农信在由中保保险资产登记交易系…...