PostgreSQL的学习心得和知识总结(一百四十二)|深入理解PostgreSQL数据库数据库之 Continuous Integration


注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:

1、参考书籍:《PostgreSQL数据库内核分析》
2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》
3、PostgreSQL数据库仓库链接,点击前往
4、日本著名PostgreSQL数据库专家 铃木启修 网站主页,点击前往
5、参考书籍:《PostgreSQL中文手册》
6、参考书籍:《PostgreSQL指南:内幕探索》,点击前往
7、参考书籍:《事务处理 概念与技术》


1、本文内容全部来源于开源社区 GitHub和以上博主的贡献,本文也免费开源(可能会存在问题,评论区等待大佬们的指正)
2、本文目的:开源共享 抛砖引玉 一起学习
3、本文不提供任何资源 不存在任何交易 与任何组织和机构无关
4、大家可以根据需要自行 复制粘贴以及作为其他个人用途,但是不允许转载 不允许商用 (写作不易,还请见谅 💖)
5、本文内容基于PostgreSQL master源码开发而成


PostgreSQL数据库数据库之 Continuous Integration

  • 文章快速说明索引
  • 功能使用背景说明
    • README
    • Wiki
  • How to Add More Environments to the Postgres CI



文章快速说明索引

学习目标:

做数据库内核开发久了就会有一种 少年得志,年少轻狂 的错觉,然鹅细细一品觉得自己其实不算特别优秀 远远没有达到自己想要的。也许光鲜的表面掩盖了空洞的内在,每每想到于此,皆有夜半临渊如履薄冰之感。为了睡上几个踏实觉,即日起 暂缓其他基于PostgreSQL数据库的兼容功能开发,近段时间 将着重于学习分享Postgres的基础知识和实践内幕。


学习内容:(详见目录)

1、PostgreSQL数据库数据库之 Continuous Integration


学习时间:

2024年05月09日 20:43:46


学习产出:

1、PostgreSQL数据库基础知识回顾 1个
2、CSDN 技术博客 1篇
3、PostgreSQL数据库内核深入学习


注:下面我们所有的学习环境是Centos8+PostgreSQL master +Oracle19C+MySQL8.0

postgres=# select version();
                                                  version                                                   
------------------------------------------------------------------------------------------------------------
 PostgreSQL 17devel on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-21), 64-bit
(1 row)

postgres=#

#-----------------------------------------------------------------------------#

SQL> select * from v$version;          

BANNER        Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production	
BANNER_FULL	  Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production Version 19.17.0.0.0	
BANNER_LEGACY Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production	
CON_ID 0


#-----------------------------------------------------------------------------#

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.27    |
+-----------+
1 row in set (0.06 sec)

mysql>

功能使用背景说明

README

下面是PostgreSQL的 https://github.com/postgres/postgres/blob/master/src/tools/ci/README 的内容,如下:

Postgres Continuous Integration (CI)

Postgres 有两种形式的 CI:

  1. main postgres 存储库中所有支持的分支都通过 buildfarm 进行持续测试。由于这仅涵盖主存储库,因此不能在功能开发过程中使用它。有关详细信息,请参阅 https://buildfarm.postgresql.org/

  2. 对于尚未合并的开发工作,可以为一些 git 托管提供商启用 CI。这使得开发人员可以在合并(甚至提交)补丁之前在多个平台上测试补丁。


Configuring CI on personal repositories

目前,postgres 包含利用 cirrus-ci 的 CI 支持。cirrus-ci 目前仅适用于 github。


Enabling cirrus-ci in a github repository

要在存储库上启用 cirrus-ci,请访问 https://github.com/marketplace/cirrus-ci:

  • 并选择"Public Repositories"
  • 然后"Install it for free""Complete order"
  • 下一页允许配置 cirrus-ci 可以访问的存储库。选择相关存储库并"Install"

See also https://cirrus-ci.org/guide/quick-start/

一旦在存储库上启用,该存储库中未来的提交和拉取请求将自动触发 CI 构建。这些可以从提交历史记录/PR 中看到,也可以在 cirrus-ci UI 中查看:

https://cirrus-ci.com/github/<username>/<reponame>/

-- 例如本人的
-- https://cirrus-ci.com/github/TsinghuaLucky912/postgres

在这里插入图片描述

提示:所有构建日志文件都会上传到 cirrus-ci,并且可以在单击构建摘要页面上的特定任务后从 cirrus-ci UI 的"Artifacts"部分下载。


Images used for CI

为了保持 CI 时间可以忍受,大多数平台都使用预先生成的图像。一些平台使用容器,其他平台使用完整的虚拟机。两者的镜像都是从 CI 运行中单独生成的,否则每个正在测试的 git 存储库都需要构建自己的一组容器,这将是浪费(在空间和时间上)。

这些镜像是根据 https://github.com/anarazel/pg-vm-images/ 中的规范每天构建的。


Controlling CI via commit messages

CI 的行为可以通过提交消息中的特殊内容来控制。目前可以使用以下控件:

  • ci-os-only: {(freebsd|linux|macos|windows|mingw)}

仅在指定的操作系统上运行 CI。当解决仅影响平台子集的可移植性问题时,这非常有用。


Using custom compute resources for CI

在存储库中运行大量测试时,cirrus-ci 的免费积分是不够的。在这些情况下,可以将存储库配置为使用其他基础设施来运行测试。为此,可以在 cirrus-ci Web 界面中为存储库配置 REPO_CI_CONFIG_GIT_URL 变量,网址为 https://cirrus-ci.com/github/<用户或组织>。该变量引用的文件(参见 https://cirrus-ci.org/guide/programming-tasks/#fs )可以覆盖不同操作系统的默认执行方法,该方法定义在 .cirrus.yml 中(通过重新定义相关的yaml锚)

可以使用以下方式提供自定义计算资源:

  • https://cirrus-ci.org/guide/supported-computing-services/
  • https://cirrus-ci.org/guide/persistent-workers/

Wiki

wiki链接:https://wiki.postgresql.org/wiki/Continuous_Integration

这里有一些关于如何使用各种免费持续集成服务的信息,供 PostgreSQL 黑客使用。您需要一个 BitBucket、GitHub、GitLab 或其他公共源存储库帐户。然后,您需要选择一项或多项 CI 服务并告诉它监视您的帐户。对于流行的存储库主机,您不必在 CI 提供商网站上创建新帐户 - 您只需授予访问权限。最后,您必须告诉它如何使用源树中的一个或多个控制文件构建分支。您可以在仅存在于功能开发分支中的额外提交中添加控制文件。

非官方的 PostgreSQL Cfbot Patch Tester 使用其中的几个服务来测试发布到 -hackers 邮件列表的补丁,它创建的分支包含一些可能有用的示例控制文件。


Postgres CI on github

这是在各种环境上测试补丁的推荐方法,使用与非官方 commit fest 机器人相同的 CI。您可以按照 https://github.com/postgres/postgres/blob/master/src/tools/ci/README 中的说明在自己的 github 存储库上配置它。它非常简单,几分钟内即可完成配置。


AppVeyor

AppVeyor 在 Windows、Linux、macOS 上构建和测试代码。支持 GitHub、GitHub Enterprise、Bitbucket、GitLab、VSTS、Kiln 或自定义可公开访问的存储库。来自 Peter Eisentraut 的 讨论 的 MingGW、Cygwin、MSVC appveyor.yml 文件


Cirrus CI

Cirrus CI 至少支持 Windows、Linux、FreeBSD 和 macOS,因此它目前拥有 PostgreSQL 所针对的最广泛的操作系统(并且可能很快还会有更多)。它仅支持 Github 作为源,并且可以从 Github Marketplace 轻松地为您的帐户启用。对于开源项目来说它是免费的。

这是一个正在进行的示例,说明如何使用它在这四个操作系统上构建 PostgreSQL 分支。单击绿色复选标记查看结果,然后查看该分支中的顶部提交以获取控制文件。.cirrus.yml 文件包含进一步工作的待办事项列表…


CodeCov

CodeCov 不是 CI 系统,但与之密切相关且值得一提。如果您配置 Travis CI 来构建和测试启用了覆盖率的分支,您可能还会有兴趣在 CodeCov 上漂亮的 Web 界面中查看代码覆盖率信息。


Travis CI

Travis CI 支持 Linux、macOS 甚至更多。仅适用于 GitHub。由 .travis.yml 文件控制。


How to Add More Environments to the Postgres CI

  • 原文链接:How to Add More Environments to the Postgres CI,点击前往

您是否曾经使用过 Postgres 源代码并且不确定是否破坏了任何东西?Postgres 有一个相当全面的回归测试套件,有助于确保没有任何问题。当然,您可以在您的计算机上运行这些测试并检查您的 Postgres 版本是否正常工作。但它总是可以在你的机器上运行,对吗? 其他环境呢?

在这篇博文中,您将根据我创建第一个 Postgres 补丁的经验和学习,了解如何启用和使用 Postgres CI(以及如何为其做出贡献!)。具体来说,您将学到:

  1. 如何为 GitHub 分支启用 PostgreSQL 的 CI
  2. 如何在 MinGW 环境中在 Windows 上构建和测试 Postgres
  3. 如何将新环境添加到 PostgreSQL CI 中

在这里插入图片描述

如何在 GitHub 分支中启用 PostgreSQL 的 CI

Postgres 因在多个不同平台上运行而享有盛誉。因此,验证您的代码是否可以跨这些不同的平台运行非常重要。这就是 CI 工具派上用场的地方。PostgreSQL 自带了自己推荐的 CI:Cirrus CI。您可以检查并了解 Postgres 的 CI 并在您的 fork 上运行 CI。Cirrus CI 支持 Windows、Linux、FreeBSD 和 macOS,并允许您在这些操作系统上测试您的更改。

要通过 Cirrus CI 运行测试,只需按照以下步骤操作:

  1. 在 GitHub 上分叉 PostgreSQL 存储库
  2. 在 GitHub 市场上搜索 Cirrus CI 应用程序并将该应用程序添加到您的帐户
    GitHub 市场上的 Cirrus CI 应用程序的屏幕截图。您可以轻松设置免费试用并开始使用 Cirrus
  3. 确保 Cirrus CI 应用程序可以访问您刚刚在步骤 1 中分叉的 Postgres 存储库
  4. Cirrus CI 现在已准备好运行。一旦您将提交推送到 Postgres 分支,Cirrus 将使用您最近的提交运行 CI 任务

随着您的新提交,GitHub 将向您显示 CI 检查已排队或正在运行。例如 我前几天写的一个功能的CI,如下:

设置具有存储库访问权限的 Cirrus CI 后,Cirrus CI 在 GitHub 上检查 Postgres 存储库中的提交的屏幕截图

在这里插入图片描述

您还可以通过导航到 Cirrus 查看更多详细信息。Cirrus CI 上的官方 Postgres 存储库如下所示:

官方 Postgres 存储库的概述类似于 Cirrus CI 上的内容。您可以查看提交的历史记录及其 CI 结果

Cirrus CI 将向您显示每次提交的构建结果,并在出现错误时上传日志文件。

现在您知道需要做什么才能从 Postgres 的 CI 中受益。即使 Cirrus CI 目前是其他 Postgres CI 中操作系统范围最广的一个,但支持的环境数量仍然有限。目前,Cirrus CI 上的 Postgres 只有四种操作系统可用。如果您需要更多,您当然可以通过以下两个步骤将环境添加到 PostgreSQL 的 CI 中:

  1. 在目标环境中成功构建 Postgres
  2. 将该环境添加到 Postgres 的 CI 中

如何在 MinGW 环境中在 Windows 上构建和测试 Postgres

本节介绍如何使用 MinGW 在 Windows 上构建 Postgres。MinGW 代表 Minimal GNU for Windows,我选择它作为添加到 Postgres CI 的新环境。如果您已经熟悉在 MinGW 上构建 Postgres 或者您的目标环境不同,则可以跳过本节。

如果您曾经研究过如何在 Windows 上构建 Postgres,您就会知道有不止一种方法可以做到这一点。

  • 使用 Visual Studio:构建 Postgres 的最 Windows 方式是使用 Microsoft Visual Studio。Postgres 已经有了 Visual Studio 的 CI 任务。
  • 使用 MinGW:另一种方法是在 Windows 上使用 MinGW。我个人喜欢在 Windows 上使用 MinGW for Postgres,因为它允许您使用 GNU 工具在 Windows 上构建 Postgres。既然如此,本文中添加到 Postgres CI 中的环境就是 MinGW。

将 MinGW 与 MSYS2 结合使用:如果您也决定使用 MinGW,我建议安装 MSYS2,这是一个提供 MinGW 环境等的工具。MSYS2 附带了您可能熟悉的 Unix 环境工具和包管理器,使我们能够获取为 Windows 原生构建的包。

MSYS2 并没有为我们提供单一的 MinGW 环境。MSYS2 上有两种 C 标准库变体:

  • Microsoft Visual C++ 运行时 (MSVCRT)。然而,即使 MSVCRT 在 Windows 上也可用,它也是一个较旧的库,不兼容 C99。
  • 通用 C 运行时 (UCRT)。UCRT 是最新版本,默认情况下由 Microsoft Visual Studio 使用,因此 UCRT 的构建行为就像本地构建一样。

如果您已准备好 MSYS2,则可以继续使用 MinGW 和 UCRT 环境来实际从源代码构建 Postgres。


通过 MinGW 和 UCRT 构建 PostgreSQL 的步骤

  1. 您可以通过在 Windows 上搜索 MSYS2 MinGW UCRT x64 或将名为 MSYSTEM 的环境变量设置为 UCRT64 来运行带有 UCRT shell 的 MinGW。默认的 MSYS2 环境由 MSYSTEM 变量(如果已设置)决定。
  2. 设置 MSYSTEM 后,您可以通过 PowerShell 运行以下命令,使用 UCRT shell 启动 MinGW:
$env:MSYSTEM = ‘UCRT64’
C:\<Path to MSYS installation>\usr\bin\bash.exe -l
  1. 如果您是第一次启动 MinGW,请首先更新基础包和数据库。
pacman -Suy
  1. 然后安装所需的软件包以在 MinGW 上构建 Postgres
pacman -S --needed git bison flex diffutils make ucrt64/mingw-w64-ucrt-x86_64-gcc 
  1. 现在您已完成 MinGW 环境设置。让我们继续查看 Postgres 文档中的安装说明。在此之后,该过程就像我们如何在基于 Unix 的环境中构建 Postgres 一样。您需要运行configure 和make 命令,它们将完成工作。
./configure --enable-cassert --enable-debug 
  1. 如果所有这些步骤都成功,您可以运行 make check 并查看新构建的 Postgres 是否一切正常。您可能还想启用一些附加配置选项。尽管 MinGW 中并非提供所有这些选项,但您可以尝试使用其中一些选项进行构建,例如 icu、lz4 等。以下是如何通过运行安装一小部分 Postgres 依赖项:
pacman -S ucrt64/mingw-w64-ucrt-x86_64-{icu,libxml2,libxslt,lz4}

## 然后相应地更改配置命令:
./configure --host=x86_64-w64-mingw32 --with-icu --with-libxml --with-libxslt --with-lz4 

如何将您的环境添加到 Postgres CI 中

现在您知道如何准备 MinGW 环境以及构建 Postgres 所需的步骤。如果 Cirrus CI 可以为我们完成所有这些工作,那不是很棒吗?令人高兴的是,您可以告诉 Cirrus 运行构建 Postgres 所需的命令。

首先要让 Cirrus 知道要在哪个环境上运行。此环境可以是 Cirrus CI 默认提供的环境之一,或者 Cirrus 也可以使用用户创建的 VM 或 Docker 容器映像。

您可以在 pg-vm-images 存储库中找到 Postgres 使用的 VM 和容器映像。尽管 Cirrus CI 已经提供了 Windows 容器,但您可能需要在映像上安装和配置许多不同的东西。在 MinGW 的情况下,需要一个 Windows Docker 映像,其中包含按本博客文章前面部分所述安装的 MinGW。您可以找到添加此类 Windows 映像的 PR。

合并准备 VM 或容器映像的 PR 后,您可以进入下一步:将脚本添加到 cirrus.yml 文件。我们已经有了用于 MinGW 构建的配置和构建命令。

首先,您需要创建一个新任务并指定新任务将使用您添加到 pg-vm-images 中的容器。

task:
  name: Windows - Server 2019, MinGW64
  windows_container:
    image: $CONTAINER_REPO/windows_ci_mingw64:latest 

Cirrus 有一个名为 CIRRUS_WORKING_DIR 的环境变量,它是 Cirrus 运行的目录。在此路径下,指定 BUILD_DIR 变量作为 Postgres 的构建目录。

env:
  BUILD_DIR: "%CIRRUS_WORKING_DIR%/build" 

然后,您可以将配置、构建和测试脚本添加到新任务中。

configure_script:
  - C:\msys64\usr\bin\dash.exe -lc "mkdir %BUILD_DIR% &&
    cd %BUILD_DIR% &&
    %CIRRUS_WORKING_DIR%/configure
      --enable-cassert
      --enable-debug
      --with-icu
      --with-libxml
      --with-libxslt
      --with-lz4

build_script:
  C:\msys64\usr\bin\dash.exe -lc "cd %BUILD_DIR% && make world-bin"

tests_script:
  - C:\msys64\usr\bin\dash.exe -lc "cd %BUILD_DIR% && make check-world TMPDIR=%BUILD_DIR%/tmp_install" 

最后,您可能需要添加 on_failure 指令来告诉发生故障时该怎么做。您可以简单地使用 Autoconf 调用任务的现有 on_failure_ac 配置。

on_failure:
  <<: *on_failure_ac 

完成所有这些步骤后,您现在可以提交并将更改推送到 cirrus.yml 文件上。Cirrus CI 将通过 MinGW 识别您的新任务。您应该看到新的 MinGW 任务将在 Cirrus CI 上运行。

在 Cirrus CI 上运行的 CI 任务,包括最近添加的 MinGW 任务


使用 Postgres CI 并为其做出贡献使我们所有 PG 开发人员的生活变得更轻松

将 MinGW 添加到 Postgres 的 CI 中的这项工作是我对 Postgres 的第一个补丁。(尚未提交,但正在接受审核。)您可以查看补丁以了解有关如何将新任务添加到 CI 中的更多信息。

这篇博文向您展示了如何使用 Postgres 的 CI 并为其做出贡献,以及如何使用 MinGW 构建 Postgres。为您的分支启用 Cirrus CI 将帮助您查看针对 Postgres 更改的测试结果。为 Postgres CI 做出贡献是让 Postgres 变得更好的好方法,特别是当您需要比现有更多的环境或操作系统时。

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

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

相关文章

办公技巧之合集文档 拆分_word

问题 如何将文档合集拆分为单独文档。 操作步骤 软件 word 365 原理简述&#xff1a; 在 word 大纲视图下&#xff0c;通过一级标题确定子文档范围&#xff0c;然后导出即可。 文档结构 从下图可见&#xff0c;文档结构为已建立大纲级别的文档&#xff0c;如果没有建立&a…

每日一题——力扣27. 移除元素(举一反三)

题目链接&#xff1a;https://leetcode.cn/problems/remove-element/description/ 菜鸡写法&#xff1a; // 函数定义&#xff0c;移除数组nums中所有值为val的元素&#xff0c;并返回新的数组长度 int removeElement(int* nums, int numsSize, int val) {// 如果数组长度为…

Steam游戏搬砖,不说破万,月入5K没问题

steam游戏搬砖项目的玩法就是打汇率差&#xff0c;在steam平台购买道具&#xff0c;挂在网易buff上出售&#xff0c;通过汇率差盈利。一天交易几百美金的道具&#xff0c;大概能搞到200块左右的利润&#xff0c;而且平台是支持这样交易的&#xff0c;还很稳定。目前最主流的游戏…

设计模式1——初步认识篇

设计模式1——初步认识篇 一、先让我们浅聊一下面向对象和设计模式。 说起设计模式&#xff0c;我第一次听到它&#xff0c;是在学习面向对象的时候。那么什么是面向对象&#xff0c;什么是设计模式&#xff0c;而且设计模式和面向对象又有什么关系呢&#xff1f; 1、什么是面…

im8mm 网络卡死 Rx packets:1037578 errors:66 dropped:0 overruns:66 frame:0

1&#xff1a;网络接收数据包异常 2&#xff1a;问题复现 问题在进行网络数据包同吞吐量测试的时候出现的。同时发现&#xff0c;在使用iperf2测试时&#xff0c;是不会出现网络中断卡死的情况&#xff0c;使用 iperf3时才会出现此问题 指令(下面的指令运行在PC2上面&#xff…

十二种网络威胁防护方案

一、SQL注入 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理员不知情的情况下实现非法操作&#xff0c;以此来实现欺骗数据库服务器执行非授权的任…

kali linux更新卡在libc6:amd64 (2.37-15)

适配于linux的windows子系统,wsl2,安装kali linux,运行 sudo apt update 卡在:Setting up libc6:amd64 (2.37-15) … 关机重启、重新修复执行也不行 解决办法:kill当前apt进程或者关机重启kali-linux,然后执行: ssudo mv /usr/sbin/telinit /usr/sbin/telinit.baksu…

安装docker镜像nginx1.26.0版本,与删除docker容器【灵异事件】

为了http3 的这个模块&#xff0c;所以需要升级nginx的版本&#xff0c;需要nginx1.26.0才有 –with-http_v3_module 这个模块 为什么记录一下&#xff1f;因为觉得奇怪 1&#xff1a;删除nginx镜像&#xff0c;显示镜像还被某个容器在使用 luichunluichun:~$ docker rmi ng…

数电——集成计数器

分析 &#xff08;1&#xff09;74161 4位同步&#xff08;cp相同&#xff09;二进制&#xff0c;模16&#xff08;2的4次方&#xff09; 逻辑符号 端口 D0,D1,D2,D3为输入信号 Q0,Q1,Q2,Q3为输出信号 RCO输出进位标志&#xff1a;记满16个数后&#xff0c;输出1 P,T 控…

番外篇 | 利用PyQt5+YOLOv5来搭建目标检测系统(附可视化界面+功能介绍+源代码)

前言:Hello大家好,我是小哥谈。PyQt5是一个Python绑定的Qt库,是用于创建图形用户界面(GUI)和其他应用程序组件的工具包。PyQt5提供了许多GUI元素,如按钮、文本框、标签等,也提供了许多Qt的功能,如网络、数据库、XML等。通过PyQt5可以在Python中使用Qt的丰富功能和强大的工…

远程桌面连接不上怎么连服务器,原因是什么?如何解决?

远程桌面连接不上怎么连服务器&#xff0c;原因是什么&#xff1f;如何解决&#xff1f; 面对远程桌面连接不上的困境&#xff0c;我们有办法&#xff01; 当你尝试通过远程桌面连接服务器&#xff0c;但遭遇连接失败的挫折时&#xff0c;不要慌张。这种情况可能由多种原因引起…

Python运维之协程

目录 一、定义协程 二、并发 三、异步请求 协程是一种轻量级的线程&#xff0c;它通过保存和恢复寄存器上下文和栈来实现调度切换&#xff0c;从而保留函数执行的状态。 这种机制使得协程在处理I/O密集型任务时效率较高&#xff0c;因为它们可以在I/O操作期间让出CPU&#…

【触摸案例-手势解锁案例-错误的样式 Objective-C语言】

一、然后呢,我们再来说一下这个错误的样式 1.首先,在我们的示例程序里边,我现在来连一条线,一撒手的时候, 它先出来一个,红色的按钮的样式,那么这个时候呢,实际上,是在设置另外一种状态,给按钮的另外一种状态,再去设置另外一张红色的图片,然后呢,再去切换成那一种…

C++青少年简明教程:C++中的常量、变量、表达式和语句

C青少年简明教程&#xff1a;C中的常量、变量、表达式和语句 在C编程中&#xff0c;常量、变量、表达式和语句是基本的编程概念。 常量&#xff08;Constants&#xff09;&#xff1a;在程序中具有固定值的数据称为常量。常量可以是字面值&#xff0c;如整数、浮点数、字符或…

信息系统项目管理基础

目录 一、项目管理概论 1、定义 2、项目管理的十二原则 3、SMART原则 4、项目经理 5、项目的生命周期 二、项目立项管理 1、项目启动过程 三、项目整合管理 1、管理基础 2、项目整合管理过程 ①制定项目章程 ②制定项目管理计划 ③指导与管理项目工作 ④管理项目…

河南大学大礼堂火灾事故引发安防监控对智能分析技术应用的思考

一、方案背景 2024年5月2日&#xff0c;在修缮施工期间的河南大学河南留学欧美预备学校旧址大礼堂发生火情。现场航拍画面显示&#xff0c;大礼堂经过火灾&#xff0c;房顶已经基本坍塌&#xff0c;被火烧过的建筑呈焦黑状。 公开资料显示&#xff0c;大礼堂属河南留学欧美预…

【栈】Leetcode 比较含退格的字符串

题目讲解 844. 比较含退格的字符串 算法讲解 使用栈模拟&#xff0c;但遇到#字符就让栈顶元素出栈&#xff0c;但是在写的过程中有两点需要注意&#xff1a;当#出现在第一个位置&#xff0c;需要特殊处理一下&#xff1b;当栈为空的时候&#xff0c;还出现#字符需要特殊处理…

FFmpeg常用API与示例(二)—— 解封装与转封装

封装层 封装格式(container format)可以看作是编码流(音频流、视频流等)数据的一层外壳&#xff0c;将编码后的数据存储于此封装格式的文件之内。 封装又称容器&#xff0c;容器的称法更为形象&#xff0c;所谓容器&#xff0c;就是存放内容的器具&#xff0c;饮料是内容&…

【操作系统】处理机调度

处理机调度 处理机调度概念调度概念调度时机 调度原则调度算法实时调度优先级翻转 处理机调度概念 调度概念 进程切换&#xff1a; CPU资源的当前占用者切换 保存当前进程在PCB中的执行上下文(CPU状态)恢复下一个进程的执行上下文 处理机调度: 从就绪队列中挑选下一个占用…

在哪里打印资料比较便宜

在数字时代&#xff0c;我们常常需要在各种文档、资料之间穿梭&#xff0c;然而&#xff0c;有时候我们需要的并不是数字版&#xff0c;而是纸质版。那么&#xff0c;在哪里打印资料比较便宜呢&#xff1f; 琢贝云打印以其超低的价格&#xff0c;优质的打印服务&#xff0c;赢…
最新文章