Docker 与持续集成 / 持续部署(CI/CD)的集成(二)
五、代码示例与解释
(一)Dockerfile 示例
以下是一个简单的基于 Python Flask 应用的 Dockerfile 示例:
# 使用Python 3.10-slim作为基础镜像
FROM python:3.10-slim
# 设置工作目录
WORKDIR /app
# 复制项目文件到容器内的工作目录
COPY. /app
# 安装项目依赖
RUN pip install -r requirements.txt
# 暴露应用运行的端口
EXPOSE 5000
# 定义容器启动时执行的命令
CMD ["python", "app.py"]
- FROM:这是 Dockerfile 的第一条指令,用于指定基础镜像。python:3.10-slim是官方提供的 Python 3.10 版本的精简镜像,它包含了运行 Python 应用所需的基本环境,基于这个镜像可以大大减少我们构建镜像的工作量 。
- WORKDIR:设置容器内的工作目录为/app,后续的指令如COPY、RUN等如果没有指定绝对路径,都会在这个工作目录下执行。这样可以保证文件操作的一致性和可预测性 。
- COPY:将当前目录(即构建上下文)下的所有文件和目录复制到容器内的/app目录中。第一个.表示当前目录,第二个/app表示目标路径 。
- RUN:在镜像构建过程中执行命令。这里使用pip install -r requirements.txt来安装项目所需的依赖项,requirements.txt文件中列出了项目的所有 Python 依赖包 。
- EXPOSE:声明容器运行时会监听 5000 端口,这只是一个声明,并不会自动将容器端口映射到宿主机,主要用于提示用户和其他工具(如 Kubernetes)该容器的服务端口 。
- CMD:指定容器启动时要执行的命令。这里是运行python app.py来启动 Flask 应用,app.py是 Flask 应用的主程序文件 。如果在运行容器时指定了其他命令,将会覆盖CMD中的命令。
(二)CI/CD 脚本示例
假设我们使用 GitLab CI/CD 来实现自动化构建和部署,以下是一个简单的.gitlab-ci.yml文件示例:
stages:
- build
- test
- deploy
build:
stage: build
script:
- docker build -t my_flask_app:latest.
- docker tag my_flask_app:latest registry.example.com/my_flask_app:latest
- docker push registry.example.com/my_flask_app:latest
test:
stage: test
script:
- docker run -it --rm registry.example.com/my_flask_app:latest pytest
deploy:
stage: deploy
script:
- ssh user@production_server "docker pull registry.example.com/my_flask_app:latest && docker stop my_flask_container && docker rm my_flask_container && docker run -d --name my_flask_container -p 5000:5000 registry.example.com/my_flask_app:latest"
- stages:定义了 CI/CD 流程中的三个阶段,分别是build(构建)、test(测试)和deploy(部署),这些阶段会按照顺序依次执行 。
- build作业:
-
- stage指定该作业属于build阶段。
-
- script部分定义了构建镜像的步骤:首先使用docker build命令构建一个名为my_flask_app:latest的镜像;然后使用docker tag为镜像打标签,将其标记为registry.example.com/my_flask_app:latest,其中registry.example.com是私有镜像仓库地址;最后使用docker push将镜像推送到私有镜像仓库 。
- test作业:
-
- stage指定该作业属于test阶段。
-
- script部分使用docker run运行刚刚推送到仓库的镜像,并执行pytest测试命令,--rm参数表示容器在测试完成后自动删除 。
- deploy作业:
-
- stage指定该作业属于deploy阶段。
-
- script部分通过ssh连接到生产服务器,首先拉取最新的镜像,然后停止并删除正在运行的容器,最后使用新的镜像启动一个新的容器,并将容器的 5000 端口映射到服务器的 5000 端口 。
六、实际应用场景
(一)微服务架构
在微服务架构中,一个大型应用被拆分成多个小型的、独立的服务,每个服务都有自己独立的业务逻辑、数据存储和接口 。Docker 与 CI/CD 的集成在微服务架构中发挥着关键作用,实现了各服务的独立构建、测试和部署。
- 独立构建:每个微服务都可以有自己独立的 Dockerfile,定义该服务的镜像构建过程。例如,在一个电商系统中,订单服务、商品服务、用户服务等微服务各自拥有独立的代码仓库和 Dockerfile。订单服务的 Dockerfile 可以基于官方的 Node.js 镜像,安装订单服务所需的依赖包,如 Express 框架、数据库连接库等,然后将订单服务的代码复制到镜像中,构建出订单服务的 Docker 镜像 。这样,当订单服务的代码发生变更时,只需要重新构建该服务的镜像,而不会影响其他微服务。
- 独立测试:利用 Docker 的隔离性,每个微服务的测试可以在独立的容器环境中进行,避免了测试环境的相互干扰。以商品服务为例,在 CI/CD 流程中,当商品服务的代码提交后,CI 工具会自动拉取代码,根据 Dockerfile 构建商品服务的镜像,然后在容器中运行单元测试、集成测试等。如果测试失败,开发人员可以快速定位到问题所在,而不会因为其他服务的影响导致问题排查困难 。同时,通过在测试容器中模拟各种真实场景,如高并发访问、网络延迟等,可以更全面地测试微服务的性能和稳定性。
- 独立部署:在 CD 阶段,每个微服务的 Docker 镜像可以独立地部署到生产环境中。使用 Kubernetes 等容器编排工具,可以轻松地管理各个微服务的容器实例,实现服务的弹性扩展和负载均衡。例如,当电商系统的订单量突然增加时,可以通过 Kubernetes 快速增加订单服务的容器实例数量,以应对高并发请求;而商品服务的容器实例数量则可以根据实际业务需求保持不变 。这种独立部署的方式使得微服务架构更加灵活和可维护,一个微服务的更新和部署不会影响到其他微服务的正常运行。
(二)容器化部署
将应用打包成 Docker 容器进行部署,在不同环境中具有显著的优势和广泛的应用场景。
- 环境一致性优势:无论应用是部署在开发环境、测试环境还是生产环境,Docker 容器都能确保应用及其依赖的运行环境完全一致。例如,一个基于 Java Spring Boot 的 Web 应用,在开发环境中使用 Docker 容器进行开发和测试,开发人员可以在本地轻松搭建与生产环境相同的运行环境,包括 Java 版本、依赖的第三方库、数据库连接等 。当应用需要部署到测试环境或生产环境时,只需将相同的 Docker 镜像复制到目标环境中运行即可,避免了因环境差异导致的各种问题,大大提高了部署的成功率和效率。
- 应用场景:
-
- 云平台部署:在云计算环境中,如亚马逊的 AWS、微软的 Azure、谷歌的 GCP 等,Docker 容器可以方便地部署在各种云服务器上。以 AWS 为例,通过使用 ECS(Elastic Container Service)或 EKS(Elastic Kubernetes Service),可以轻松地将 Docker 容器部署到 AWS 的云基础设施中,利用云平台的弹性计算、存储和网络资源,实现应用的快速部署和扩展 。例如,一个初创的互联网公司可以将其 Web 应用以 Docker 容器的形式部署到 AWS ECS 上,根据业务流量的变化自动调整容器实例数量,降低运营成本。
-
- 混合云与多云部署:对于企业来说,可能会同时使用多个云平台或混合云架构(既有公有云又有私有云)。Docker 容器的可移植性使得应用可以在不同的云平台之间轻松迁移。例如,企业的核心业务应用在私有云中运行,而一些非核心的业务应用可以部署到公有云中。通过 Docker 容器,这些应用可以在不同的云环境中保持一致的运行状态,实现了混合云与多云部署的无缝衔接 。当企业需要将某个应用从一个公有云平台迁移到另一个公有云平台时,只需将 Docker 镜像复制到目标云平台并运行即可,无需重新配置和部署整个应用。
(三)持续集成与持续部署
通过 Docker 与 CI/CD 的集成,能够实现代码的快速交付,显著提高开发效率,以下是一些实际的例子。
- 快速反馈与问题修复:在一个大型的软件开发项目中,可能有多个开发人员同时进行开发。每次开发人员提交代码到代码仓库时,CI/CD 流程会自动触发。以一个基于 Python Django 的 Web 应用为例,CI 工具会拉取最新的代码,根据 Dockerfile 构建 Docker 镜像,然后运行单元测试、集成测试等 。如果测试失败,CI 工具会立即通知开发人员,开发人员可以快速定位和修复问题。这种快速反馈机制使得问题能够在早期被发现和解决,避免了问题在后续阶段的积累和放大,大大提高了开发效率。例如,开发人员在提交代码后几分钟内就能收到测试结果通知,及时修复代码中的语法错误或逻辑问题,而不需要等到整个项目集成阶段才发现问题,从而节省了大量的时间和精力。
- 频繁迭代与快速交付:在互联网产品开发中,业务需求变化频繁,需要快速迭代产品。通过 Docker 与 CI/CD 的集成,当开发人员完成新功能的开发并提交代码后,CI/CD 流程会自动构建、测试和部署新的版本。例如,一个在线教育平台,为了满足用户的学习需求,可能需要频繁更新课程内容、优化用户界面等 。借助 Docker 与 CI/CD,开发团队可以快速将新功能部署到生产环境中,用户可以及时体验到新的功能和改进。这种频繁迭代和快速交付的能力使得产品能够更好地满足市场需求,提高用户满意度和产品竞争力。
七、工具与资源推荐
(一)Docker 相关工具
- Docker Desktop:是一款用于在本地开发环境中轻松管理和运行 Docker 容器的工具,支持 Windows、Mac 和 Linux 系统。它提供了直观的图形界面,方便用户进行镜像拉取、容器创建与管理等操作,同时也集成了 Kubernetes,便于在本地进行容器编排的测试和开发。对于开发人员来说,Docker Desktop 是快速上手 Docker 的必备工具,可大大提高开发效率。
- Docker Compose:用于定义和运行多容器的 Docker 应用程序。通过一个 YAML 文件,就可以配置应用程序的各个服务,包括每个服务使用的镜像、环境变量、端口映射等。使用docker-compose up命令,即可一键启动整个多容器应用,非常适合在开发和测试环境中部署复杂的分布式应用。例如,一个包含 Web 服务、数据库服务和缓存服务的应用,就可以使用 Docker Compose 进行快速部署和管理。
(二)常见 CI/CD 工具
- Jenkins:是一款开源的自动化服务器,具有丰富的插件生态系统,能够与各种版本控制系统(如 Git、SVN)和构建工具(如 Maven、Gradle)集成,实现自动化的构建、测试和部署流程。其可视化的 Web 界面便于用户进行配置和管理,支持多种触发方式,如代码提交触发、定时触发等,适用于各种规模的项目和团队。
- GitLab CI/CD:是 GitLab 平台内置的 CI/CD 工具,与 GitLab 代码仓库紧密集成。使用 YAML 文件来定义 CI/CD 流水线,配置简洁明了,且具有实时的构建日志和良好的 UI 交互体验。对于使用 GitLab 进行代码管理的团队而言,GitLab CI/CD 是一个便捷且高效的选择,能够无缝地融入团队的开发工作流程。
- Travis CI:是一款托管的 CI/CD 服务,主要用于构建和测试托管在 GitHub 和 Bitbucket 上的软件项目。它支持多种编程语言和框架,配置简单易懂,容易上手。Travis CI 提供了免费的服务,对于开源项目来说是一个经济实惠且功能强大的选择,能够帮助开源项目快速实现自动化的构建和测试。
(三)学习资源
- 书籍:
-
- 《Docker 技术入门与实战 第 3 版》:全面系统地介绍了 Docker 的基本原理、构建与操作,涵盖了从基础入门到实战案例、进阶技能以及开源项目等多个方面的内容,适合不同层次的读者学习 Docker 技术。
-
- 《持续交付:发布可靠软件的系统方法》:深入阐述了持续交付的理念、流程和实践方法,对于理解和实施 CI/CD 具有重要的指导意义,帮助读者掌握如何将软件可靠且快速地交付到生产环境。
- 在线课程:
-
- Coursera 上的 “Docker and Kubernetes: The Complete Guide”:详细讲解了 Docker 和 Kubernetes 的核心概念与实践操作,通过实际案例和动手实验,帮助学习者深入理解和掌握这两项技术,提升在容器化和容器编排方面的技能。
-
- 网易云课堂的 “Jenkins 持续集成与持续部署实战”:专注于 Jenkins 的使用,通过实际项目案例,全面介绍了 Jenkins 在 CI/CD 流程中的配置、使用和优化,帮助学习者快速掌握 Jenkins 的应用技巧,实现自动化的软件开发流程。
- 官方文档:
-
- Docker 官方文档:提供了全面且详细的 Docker 使用指南、API 文档等,是学习 Docker 最权威的资料来源,能够帮助用户深入了解 Docker 的各项功能和使用方法。
-
- 各个 CI/CD 工具的官方文档:如 Jenkins、GitLab CI/CD、Travis CI 等,详细介绍了工具的安装、配置、使用方法以及各种高级特性,是学习和使用这些工具的重要参考资料 。
八、总结与展望
(一)总结
Docker 与 CI/CD 的集成,为软件开发和部署带来了前所未有的变革。通过将应用程序及其依赖项打包成容器镜像,Docker 实现了环境的一致性和隔离性,有效解决了传统软件开发中环境差异导致的各种问题。而 CI/CD 流程的自动化特性,则使得代码的构建、测试和部署过程更加高效、可靠,大大缩短了软件的交付周期,提高了开发团队的工作效率。
在集成步骤方面,我们首先需要准备好 Docker 镜像,通过选择合适的基础镜像和编写 Dockerfile,将应用程序及其依赖项打包成可移植的镜像。接着,编写 CI 脚本,实现从代码仓库拉取代码、构建镜像、运行测试和生成报告等功能。然后,选择合适的 CI/CD 工具,如 Jenkins、GitLab CI/CD、Travis CI 等,并将 CI 脚本集成到工具中,实现自动化的构建和部署流程。在自动化构建与部署过程中,通过配置触发器和使用容器编排工具,实现代码变更时的自动构建和部署。最后,配置应用监控和日志管理系统,实时了解应用的运行状态,及时发现和解决问题。
从实际应用场景来看,Docker 与 CI/CD 的集成在微服务架构、容器化部署和持续集成与持续部署等方面都发挥着重要作用。在微服务架构中,每个微服务都可以独立构建、测试和部署,提高了开发效率和系统的可维护性;在容器化部署中,Docker 容器的可移植性和环境一致性优势,使得应用可以在不同的环境中轻松部署和运行;在持续集成与持续部署中,通过自动化的构建、测试和部署流程,实现了代码的快速交付和迭代。
(二)未来发展趋势
展望未来,Docker 与 CI/CD 的集成将在多个方面持续发展。在多云和混合云环境方面,随着企业对云计算的依赖不断增加,多云和混合云架构将成为主流。Docker 容器的可移植性将使其在不同云平台之间的迁移更加便捷,CI/CD 流程也需要适应这种复杂的云环境,实现跨云平台的自动化构建和部署。例如,企业可能会同时使用 AWS、Azure 和 Google Cloud 等多个云平台,Docker 与 CI/CD 的集成需要确保应用在不同云平台上的一致性和稳定性。
在 AI 和机器学习领域,随着 AI 和机器学习技术的快速发展,越来越多的应用将集成 AI 和机器学习功能。Docker 与 CI/CD 的集成将有助于实现 AI 模型的快速部署和迭代,通过自动化的流程,将训练好的模型打包成容器镜像,并快速部署到生产环境中。同时,CI/CD 流程也可以利用 AI 和机器学习技术,实现自动化的测试和部署策略,提高软件的质量和交付效率。例如,通过机器学习算法预测代码变更可能带来的风险,提前进行测试和验证。
安全性和隐私保护将是未来发展的重要关注点。随着数据安全和隐私问题的日益突出,Docker 与 CI/CD 流程需要加强安全性和隐私保护措施。在镜像构建过程中,需要确保基础镜像的安全性,避免引入安全漏洞;在部署过程中,需要加强对容器的安全管理,如限制容器的权限、加密数据传输等。同时,CI/CD 流程也需要加强对代码和镜像的安全扫描,及时发现和修复安全问题。
然而,这些发展趋势也带来了一些挑战。技术复杂性的增加,要求开发人员掌握更多的技术知识和技能,包括 Docker、CI/CD 工具、云平台、AI 和机器学习等方面的知识。集成和兼容性问题也需要解决,Docker 与 CI/CD 流程需要与其他工具和技术相兼容,如各种云平台的服务、安全工具、监控工具等。此外,随着容器化应用的规模不断扩大,容器的管理和运维也将面临更大的挑战,需要更加高效的容器编排和管理工具。
总之,Docker 与 CI/CD 的集成已经成为现代软件开发的重要趋势,未来将在多云、AI、安全等方面持续发展,为企业带来更高的效率和竞争力。但在发展过程中,也需要不断应对各种挑战,推动技术的不断进步和创新。
相关文章:
Docker 与持续集成 / 持续部署(CI/CD)的集成(二)
五、代码示例与解释 (一)Dockerfile 示例 以下是一个简单的基于 Python Flask 应用的 Dockerfile 示例: # 使用Python 3.10-slim作为基础镜像 FROM python:3.10-slim # 设置工作目录 WORKDIR /app # 复制项目文件到容器内的工作目录 C…...

SQL Server的安装和简单使用
目录 一、SQL Server 1.1、简介 1.2、安装包 二、安装SQL Server 2.1、双击安装包 2.2、选择自己想要安装的位置 2.3、点击安装 2.4、安装完成之后会出现以下页面,按照序号依次点击 2.5、不用管密钥,点击下一步 2.6、选择【我接受】 2.7、是否…...
c/c++蓝桥杯经典编程题100道(19)汉诺塔问题
汉诺塔问题 ->返回c/c蓝桥杯经典编程题100道-目录 目录 汉诺塔问题 一、题型解释 二、例题问题描述 三、C语言实现 解法1:递归法(难度★) 解法2:迭代法(难度★★★) 四、C实现 解法1࿱…...
Linux 信号量
Linux 信号量 一、信号量基础概念1.1 同步机制的核心需求1.2 信号量的核心原理1.3 信号量类型对比 二、实战代码解析2.1 共享内存与信号量结合示例2.2 信号量类实现要点 三、关键实现细节分析3.1 初始化三步骤3.2 SEM_UNDO机制3.3 原子操作保证 四、进阶应用场景4.1 生产者-消费…...

Qt开发①Qt的概念+发展+优点+应用+使用
目录 1. Qt的概念和发展 1.1 Qt的概念 1.2 Qt 的发展史: 1.3 Qt 的版本 2. Qt 的优点和应用 2.1 Qt 的优点: 2.2 Qt 的应用场景 2.3 Qt 的应用案例 3. 搭建 Qt 开发环境 3.1 Qt 的开发工具 3.2 Qt SDK 的下载和安装 3.3 Qt 环境变量配置和使…...

向量库(Vector Database)
向量库 1. 向量库发展史 早期阶段(2000s) 基于关系型数据库的扩展(如 PostgreSQL 的向量插件)。简单相似度计算(如欧氏距离、余弦相似度)。 专用向量库的兴起(2010s) FAISS…...
torchsparse安装过程的问题
1、项目要求torchsparse githttps://github.com/mit-han-lab/torchsparse.gitv1.4.0 2、torch1.8.1cu111 nvcc--version:11.1 这个版本的cuda匹配的gcc、g经常是7.5。设置为7.5. (这个gcc、g版本修改不一定,可以先进行后面的,…...

【核心算法篇七】《DeepSeek异常检测:孤立森林与AutoEncoder对比》
大家好,今天我们来深入探讨一下《DeepSeek异常检测:孤立森林与AutoEncoder对比》这篇技术博客。我们将从核心内容、原理、应用场景等多个方面进行详细解析,力求让大家对这两种异常检测方法有一个全面而深入的理解。 一、引言 在数据科学和机器学习领域,异常检测(Anomaly…...

Win10环境使用零讯ZeroNews内网穿透实现Deepseek对外服务
Win10环境使用零讯ZeroNews内网穿透实现Deepseek对外服务 前言 之前笔者已经在Win10环境搭建好了Ollama、DeepSeek、Open WebUI、Dify等组件,成功实现了私有化部署及内网访问: https://lizhiyong.blog.csdn.net/article/details/145505686 https://l…...

CUDA 安装 一直卡在Installing Nsight Visual Studio Edition
最近在安装CUDA的时候,CUDA 安装 一直卡在Installing Nsight Visual Studio Edition,莫名的一直卡在安装进行中这儿,过很久都没进度,如图 后面重新下载了12.6的进行安装也是如此 无论是local还是network,都是这样。度…...

Softing线上研讨会 | 自研还是购买——用于自动化产品的工业以太网
| 线上研讨会时间:2025年1月27日 16:00~16:30 / 23:00~23:30 基于以太网的通信在工业自动化网络中的重要性日益增加。设备制造商正面临着一大挑战——如何快速、有效且经济地将工业以太网协议集成到其产品中。其中的关键问题包括:是否只需集成单一的工…...

STM32 定时器产生定周期方法
目录 背景 程序 第一步、使能PCLK1外设时钟编辑 第二步、时基单元配置 第三步、配置NVIC(设置定时中断优先级)编辑 第四步、使能溢出中断 第五步、使能定时器 第六步、填写中断处理函数(ISR) 背景 在单片机开发当中&…...

解锁机器学习核心算法 | 支持向量机:机器学习中的分类利刃
一、引言 在机器学习的庞大算法体系中,有十种算法被广泛认为是最具代表性和实用性的,它们犹如机器学习领域的 “十大神器”,各自发挥着独特的作用。这十大算法包括线性回归、逻辑回归、决策树、随机森林、K - 近邻算法、K - 平均算法、支持向…...
青少年编程与数学 02-009 Django 5 Web 编程 21课题、部署
青少年编程与数学 02-009 Django 5 Web 编程 21课题、部署 一、软件开发部署部署的主要内容部署的步骤部署的方式部署的环境 二、Django项目部署1. 准备工作2. 代码部署3. 配置Django项目4. Web服务器和应用服务器配置5. 安全和性能优化6. 监控和日志管理7. 测试和上线 三、在U…...

ARM系统源码编译OpenCV 4.10.0(包含opencv_contrib)
因项目部署在ARM系统上,需要编译一个arm版本的opencv-4.10.0(带opencv_contrib)版本。 若需要Linux系统下源码安装OpenCV,可参考:https://blog.csdn.net/qq_45445740/article/details/142770493?spm1001.2014.3001.55…...

cmake:定位Qt的ui文件
如题。在工程中,将h,cpp,ui文件放置到不同文件夹下,会存在cmake找不到ui文件,导致编译报错情况。 cmake通过指定文件路径,确保工程找到ui文件。 标识1:ui文件保存路径。 标识2:添加…...
(leetcode 1749 前缀和)1749. 任意子数组和的绝对值的最大值
核心题意 任意子数组和 的绝对值的最大值实际上是前缀和之间的差的最大值 建立前缀和数组 如果我们只考虑前缀和的最大值和最小值之差,那么就能够获得一个最大的子数组和的绝对值。因为任意一个子数组的和 prefix[j1] - prefix[i],它的绝对值是最大当…...

下载安装运行测试开源vision-language-action(VLA)模型OpenVLA
1. 安装 项目官网OpenVLA 首先按照官网提示的以下代码,执行创建环境->安装最小依赖->git克隆项目等 # Create and activate conda environment conda create -n openvla python3.10 -y conda activate openvla# Install PyTorch. Below is a sample comma…...
【网络安全 | 漏洞挖掘】我如何通过Cookie Manipulation发现主域上的关键PII?
未经许可,不得转载。 文章目录 正文正文 在分析 Example.com 的认证机制时,我注意到一个特定的 cookie,USER_ID,包含了一个具有预测性的会话标识符,其格式为: USER_ID="VYCVCDs-TZBI:XXXX-random-data"其中,XXXX 是由四个大写字母组成的部分,我使用 Burp S…...

【操作系统】操作系统概述
操作系统概述 1.1 操作系统的概念1.1.1 操作系统定义——什么是OS?1.1.2 操作系统作用——OS有什么用?1.1.3 操作系统地位——计算机系统中,OS处于什么地位?1.1.4 为什么学操作系统? 1.2 操作系统的历史1.2.1 操作系统…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...