CCF-CSP认证考试 202305-3 解压缩 100分题解

news2024/9/21 9:17:36

更多 CSP 认证考试题目题解可以前往:CSP-CCF 认证考试真题题解


原题链接: 202305-3 解压缩

时间限制: 5.0s
内存限制: 512.0MB

题目背景

西西艾弗岛运营公司是一家负责维护和运营岛上基础设施的大型企业。在公司内,有许多分管不同业务的部门都需要使用到服务器设施。为了便于管理,同时降低公司运行成本,
西西艾弗岛运营公司建设了一套私有云系统。这套私有云系统除了能提供托管的虚拟机服务外,还能提供一些其他的服务。其中,最受好评的当属日志服务。此前,各个业务系统的日志都是分散存放在各自的服务器上的,
这样不仅不方便查看和分析而且也有丢失的风险。而日志服务则能够将各个业务系统的日志统一收集起来,方便查看和管理。

日志服务器收集到的日志都是纯文本,且高度格式化。这意味着日志数据可以被压缩得非常小。但是日志数据量非常大,且对处理效率的要求较高,因此可以牺牲一定的压缩率,使用高效的压缩算法来压缩日志数据。
小 C 被安排来实现解压缩日志的程序,给定一段被压缩的日志数据,他需要将其解压缩。

问题描述

这种压缩算法产生的数据流,可以被视为是一系列的元素。元素分为两种:字面量和回溯引用。字面量包含一系列的字节,对其进行解压缩时,直接将这些字节输出即可。
回溯引用则是将此前已经解压缩得到的数据流的一部分重复输出。回溯引用可以表示为 ⟨ o , l ⟩ \langle o, l\rangle o,l,包含两个数字,分别为偏移量 o o o 和长度 l l l
偏移量表示从当前位置向前回溯的距离,长度表示需要重复输出的字节数。其中要求 o , l > 0 o,l > 0 o,l>0。若已经解压缩了 p p p 字节,当 o ≥ l o \ge l ol 时,
表示重复输出自偏移量 ( p − o ) (p-o) (po)(首个字节偏移量为 0)开始的 l l l 个字节。例如,已经解压缩的数据流是 abcde,则回溯引用 ⟨ 3 , 2 ⟩ \langle 3, 2\rangle 3,2 表示输出 cd。
o < l o < l o<l 时,表示重复输出自偏移量 ( p − o ) (p-o) (po) 开始的的 o o o 个字节,然后继续反复输出这 o o o 个字节,直到共输出 l l l 个字节。例如,已经解压缩的数据流是 abcde,
则回溯引用 ⟨ 2 , 5 ⟩ \langle 2, 5\rangle 2,5 表示输出 deded。

被压缩的数据格式分为两部分:导引域和数据域。其中导引域保存了原始数据的长度。设原始数据长度为 n n n。则 n n n 可以表示为 ∑ k = 0 d c k × 12 8 k \sum_{k=0}^d c_k \times 128^k k=0dck×128k,其中 0 ≤ c k < 128 0 \le c_k < 128 0ck<128,且
c d ≠ 0 c_d \not=0 cd=0。导引域的长度为 ( d + 1 ) (d+1) (d+1) 字节,依次保存 c 0 + 128 , c 1 + 128 , ⋯   , c d − 1 + 128 , c d c_0 + 128, c_1 + 128, \cdots, c_{d-1} + 128, c_d c0+128,c1+128,,cd1+128,cd。即每个字节用低 7 位保存 c k c_k ck,除了最后一个字节的最高位为 0,
其余字节的最高位为 1。例如,原始数据的长度为 1324,那么 c k c_k ck 依次为:44、10,即 16 进制的 0x2C、0x0A。因此引导区的长度为 2,字节序列为 0xAC 0x0A。

1.png
被压缩的数据格式

数据域保存了被压缩后的数据,是连续存储的元素的序列。每个元素的第一个字节的最低两位表示了元素的类型。当最低两位为 0 时,表示这是一个字面量。如果字面量包含的字节个数为 l l l,且 l ≤ 60 l \le 60 l60
那么第一个字节的高 6 位表示 ( l − 1 ) (l - 1) (l1)。随后的 l l l 字节即为字面量所包含的原始字节。例如字节 0xE8,其二进制为 1110 1000,低二位是 0,表示这是一个字面量。高六位是 111010,表示数字 58,
即表示该字面量包含 59 个字节。因此,该字节后面的 59 个字节即为字面量所包含的原始字节。如果 l > 60 l > 60 l>60,那么则将 ( l − 1 ) (l - 1) (l1) 用小端序的 1 至 4 个字节表示,存储于第一个字节的后面。
第一个字节的高六位存储的值为 60、61、62 或 63 时,分别代表 ( l − 1 ) (l - 1) (l1) 用 1、2、3 或 4 个字节表示。例如,字节序列 0xF4 0x01 0x0A 中,首字节的二进制为 1111 0100,低二位是 0,表示这是一个字面量。
高 6 位是 111101,表示数字 61,即表示随后有两个字节存储了字面量的长度。随后的两个字节 0x01 0x0A,按小端序组成了十六进制数 0x0A01,即十进制 2561,表示该字面量包含 2562 个字节。
随后的 2562 个字节即为字面量所包含的原始字节。

2.png
字面量,长度不超过 60 字节

3.png
字面量,长度超过 60 字节

当元素首字节的最低两位是 01 时,表示这是一个回溯引用 ⟨ o , l ⟩ \langle o, l\rangle o,l,且 4 ≤ l ≤ 11 , 0 < o ≤ 2047 4 \le l \le 11, 0 < o \le 2047 4l11,0<o2047。此时, o o o 占 11 位,其低 8 位存储于随后的字节中,
高 3 位存储于首字节的高 3 位中。 ( l − 4 ) (l-4) (l4) 占 3 位,存储于首字节的 2 至 4 位中。如下图所示:

 7 6 5 4 3 2 1 0   7 6 5 4 3 2 1 0
+-----+-----+-+-+ +----------------+
|o(h3)| l-4 |0|1| |o (lower 8 bits)|
+-----+-----+-+-+ +----------------+

例如,字节 0x2D 0x1A,其首字节的二进制为 001 011 01,其最低两位为 01,表示这是一个回溯引用,其中 2 至 4 位是 011,表示数字 3,意味着 ( l − 4 ) = 3 (l-4) = 3 (l4)=3,即 l = 7 l = 7 l=7
其高 3 位是 001,与随后的字节 0x1A 组成了十六进制数 0x11A,即十进制 282,表示 o = 282 o = 282 o=282。因此,该回溯引用是 ⟨ 282 , 7 ⟩ \langle 282, 7\rangle 282,7

4.png
回溯引用,形式 1

当元素首字节的最低两位是 10 时,表示这是一个回溯引用 ⟨ o , l ⟩ \langle o, l\rangle o,l,且 1 ≤ l ≤ 64 , 0 < o ≤ 65535 1 \le l \le 64, 0 < o \le 65535 1l64,0<o65535。此时, o o o 占 16 位,以小端序存储于随后的两个字节中。
( l − 1 ) (l-1) (l1) 占 6 位,存储于首字节的高 6 位中。例如,字节 0x3E 0x1A 0x01,其首字节的二进制为 0011 1110,其最低两位为 10,表示这是一个回溯引用,其中高 6 位是 001111,表示数字 15,
( l − 1 ) = 15 (l-1) = 15 (l1)=15,即 l = 16 l = 16 l=16。随后的两个字节 0x1A 0x01,按小端序组成了十六进制数 0x011A,即十进制 282,表示 o = 282 o = 282 o=282。因此,该回溯引用是 ⟨ 282 , 16 ⟩ \langle 282, 16\rangle 282,16

5.png
回溯引用,形式 2

我们规定,元素的首字节的最低两位不允许是 11。如果出现了这种情况,那么这个数据域就是非法的。

压缩后的数据为合法的,当且仅当以下条件都满足:

  1. 引导区的长度不超过 4 字节;
  2. 引导区能被正确恢复为原始数据的长度;
  3. 每个元素的首字节的最低两位不是 11;
  4. 每个元素都能按照规则被恢复为原始数据;
  5. 得到的原始数据长度恰好等于引导区中编码的原始数据长度。

输入格式

从标准输入读入数据。

输入包含有若干行,第一行是一个正整数 s s s,表示输入被解压缩数据的字节数。

接下来有 ⌈ s 8 ⌉ \lceil \frac{s}{8} \rceil 8s 行,表示输入的被解压缩的数据。每行只含有数字或字母 a 至 f,
每两个字符组成一个十六进制数字,表示一个字节。除了最后一行,每行都恰有 8 个字节。输入数据保证是合法的。

输出格式

输出到标准输出中。

输出解压缩后的数据,每行连续输出 8 个字节,每个字节由两位十六进制数字(数字或字母 a 至 f)表示;但最后一行可以不满 8 个字节。

样例输入

81
8001240102030405
060708090af03c00
0102030405060708
090a0b0c0d0e0f01
0203040506070809
0a0b0c0d0e0f0102
030405060708090a
0b0c0d0e0f010203
0405060708090a0b
0c0d0e0fc603000d
78

样例输出

0102030405060708
090a000102030405
060708090a0b0c0d
0e0f010203040506
0708090a0b0c0d0e
0f01020304050607
08090a0b0c0d0e0f
0102030405060708
090a0b0c0d0e0f0d
0e0f0d0e0f0d0e0f
0d0e0f0d0e0f0d0e
0f0d0e0f0d0e0f0d
0e0f0d0e0f0d0e0f
0d0e0f0d0e0f0d0e
0f0d0e0f0d0e0f0d
0e02030405060708

样例说明

上述输入数据可以整理为:

80 01
24 0102030405060708090a
f0 3c
    000102030405060708090a0b0c0d0e0f
      0102030405060708090a0b0c0d0e0f
      0102030405060708090a0b0c0d0e0f
      0102030405060708090a0b0c0d0e0f
c6 0300
0d 78

首先读入第一字节 80,其最高位为 1,于是继续读入第二字节 01,其最高位为 0,因此读入引导区结束。得到 c 0 = 0 c_0 = 0 c0=0 c 1 = 1 c_1 = 1 c1=1
原始数据长度为: 0 × 12 8 0 + 1 × 12 8 1 = 128 0 \times 128^0 + 1 \times 128^1 = 128 0×1280+1×1281=128

然后继续读入字节 24,其二进制是 0010 0100,最低两位为 00,表示这是一个字面量,取其高六位,是十进制数字 9,
表示这个字面量的长度为 10。接下来读入 10 个字节,得到字面量 0102030405060708090a。

然后继续读入字节 f0,其二进制是 1111 0000,最低两位为 00,表示这是一个字面量,取其高六位,是十进制数字 60,表示此后的一个字节是字面量的长度减 1。
继续读入字节 3c,得到数字 60,表示这个字面量的长度是 61,接下来读入 61 个字节。

然后继续读入字节 c6,其二进制是 1100 0110,最低两位为 10,表示这是一个回溯引用,取其高六位,是十进制数字 49,表示回溯引用的长度 l l l 是 50。
随后继续读入两个字节 0300,按小端序组成十六进制数 0x0003,即十进制 3,表示回溯引用的偏移量 o o o 是 3。因此,这个回溯引用是 ⟨ 3 , 50 ⟩ \langle 3, 50\rangle 3,50
由于 50 = 16 × 3 + 2 50 = 16 \times 3 + 2 50=16×3+2,将此时缓冲区中最后三个字节 0d 0e 0f 重复输出 16 次,然后继续输出 0d 0e,补足共 50 个字节。

然后继续读入字节 0d,其二进制是 0000 1101,最低两位为 01,表示这是一个回溯引用,取其位 2 至 4,是 011,是十进制数字 3,表示回溯引用的长度 l l l 是 7。
随后读入一个字节 78,其二进制是 0111 1000,与本元素首字节 0d 的最高三位 000 拼合得到 000 0111 1000,是十进制数字 120,表示回溯引用的偏移量 o o o 是 120。
因此,这个回溯引用是 ⟨ 120 , 7 ⟩ \langle 120, 7\rangle 120,7。此前已经输出了 121 字节,此时从缓冲区开始的偏移量 121 − 120 = 1 121-120 = 1 121120=1 的位置开始输出 7 个字节,即 02030405060708。

此时,输入已经处理完成,共输出了 10 + 61 + 50 + 7 = 128 10 + 61 + 50 + 7 = 128 10+61+50+7=128 字节,与从引导区中读入的原始数据长度一致,因此解压缩成功。

子任务

对于 10% 的输入,解压缩后的数据长度不超过 127 字节,且仅含有字面量,每个字面量元素所含数据的长度不超过 60 字节;

对于 20% 的输入,解压缩后的数据长度不超过 1024 字节,且仅含有字面量,每个字面量元素所含数据的长度不超过 60 字节;

对于 40% 的输入,解压缩后的数据长度不超过 1024 字节,且仅含有字面量;

对于 60% 的输入,解压缩后的数据长度不超过 1024 字节,且包含的回溯引用的首字节的最低两位都是 01;

对于 80% 的输入,解压缩后的数据长度不超过 4096 字节;

对于 100% 的输入,解压缩后的数据长度不超过 2MiB( 2 × 2 20 2\times 2^{20} 2×220 字节),且 s ≤ 2 × 1 0 6 s \le 2 \times 10^6 s2×106,且保证是合法的压缩数据。


题解

按照题目的描述一步步操作即可,没有什么难点。

可以考虑将每个 byte 转换成对应的 10 10 10 进制数字,然后通过位运算来进行判断是字面量还是回溯引用。

写的时候注意一个字节是 2 2 2 个十六进制数字,尤其实在回溯引用的时候,如果当字符串来处理的话,要把 o , l o,l o,l 都变成原来的 2 2 2 倍。

时间复杂度: O ( l e n ( s ) ) \mathcal{O}(\mathrm{len}(s)) O(len(s))

参考代码(78ms,10.92MB)

/*
    Created by Pujx on 2024/3/16.
*/
#pragma GCC optimize(2, 3, "Ofast", "inline")
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
//#define int long long
//#define double long double
using i64 = long long;
using ui64 = unsigned long long;
using i128 = __int128;
#define inf (int)0x3f3f3f3f3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define yn(x) cout << (x ? "yes" : "no") << endl
#define Yn(x) cout << (x ? "Yes" : "No") << endl
#define YN(x) cout << (x ? "YES" : "NO") << endl
#define mem(x, i) memset(x, i, sizeof(x))
#define cinarr(a, n) for (int i = 1; i <= n; i++) cin >> a[i]
#define cinstl(a) for (auto& x : a) cin >> x;
#define coutarr(a, n) for (int i = 1; i <= n; i++) cout << a[i] << " \n"[i == n]
#define coutstl(a) for (const auto& x : a) cout << x << ' '; cout << endl
#define all(x) (x).begin(), (x).end()
#define md(x) (((x) % mod + mod) % mod)
#define ls (s << 1)
#define rs (s << 1 | 1)
#define ft first
#define se second
#define pii pair<int, int>
#ifdef DEBUG
    #include "debug.h"
#else
    #define dbg(...) void(0)
#endif

const int N = 2e5 + 5;
//const int M = 1e5 + 5;
const int mod = 998244353;
//const int mod = 1e9 + 7;
//template <typename T> T ksm(T a, i64 b) { T ans = 1; for (; b; a = 1ll * a * a, b >>= 1) if (b & 1) ans = 1ll * ans * a; return ans; }
//template <typename T> T ksm(T a, i64 b, T m = mod) { T ans = 1; for (; b; a = 1ll * a * a % m, b >>= 1) if (b & 1) ans = 1ll * ans * a % m; return ans; }

int a[N];
int n, m, t, k, q;

vector<char> _{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
string in, out, tem;
int pin, pout;
int nextByte() {
    int ans = (lower_bound(all(_), in[pin]) - _.begin()) * 16 + (lower_bound(all(_), in[pin + 1]) - _.begin());
    pin += 2;
    return ans;
}

void work() {
    cin >> n;
    for (int i = 1; i <= (n + 7) / 8; i++) cin >> tem, in += tem;

    vector<int> c{nextByte()};
    while (c.back() & 128) c.back() -= 128, c.emplace_back(nextByte());
    for (int i = c.size() - 1; ~i; i--) m = m * 128 + c[i];

    while (pin < n << 1) {
        int byte = nextByte();
        if ((byte & 3) == 0) {
            int l = (byte >> 2) + 1;
            if (l == 61) l = nextByte() + 1;
            else if (l == 62) l = nextByte() + nextByte() * 256 + 1;
            else if (l == 63) l = nextByte() + nextByte() * 256 + nextByte() * 256 * 256 + 1;
            else if (l == 64) l = nextByte() + nextByte() * 256 + nextByte() * 256 * 256 + nextByte() * 256 * 256 * 256 + 1;
            while (l--) out += in[pin++], out += in[pin++];
        }
        else {
            int o, l;
            if ((byte & 3) == 1) {
                o = (byte >> 5 << 8) + nextByte();
                l = (byte >> 2 & 7) + 4;
            }
            else {
                o = nextByte() + nextByte() * 256;
                l = (byte >> 2) + 1;
            }
            o <<= 1, l <<= 1;
            string cpy = out.substr(out.size() - o, min(o, l));
            while (l) {
                if (cpy.size() <= l) out += cpy, l -= cpy.size();
                else out += cpy.substr(0, l), l = 0;
            }
        }
    }
    assert(pin == in.size() && out.size() == m << 1);
    for (int i = 0; i < m << 1; i += 16)
        cout << out.substr(i, min(16, (m << 1) - i)) << endl;
}

signed main() {
#ifdef LOCAL
    freopen("C:\\Users\\admin\\CLionProjects\\Practice\\data.in", "r", stdin);
    freopen("C:\\Users\\admin\\CLionProjects\\Practice\\data.out", "w", stdout);
#endif
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int Case = 1;
    //cin >> Case;
    while (Case--) work();
    return 0;
}
/*
     _____   _   _       _  __    __
    |  _  \ | | | |     | | \ \  / /
    | |_| | | | | |     | |  \ \/ /
    |  ___/ | | | |  _  | |   }  {
    | |     | |_| | | |_| |  / /\ \
    |_|     \_____/ \_____/ /_/  \_\
*/

关于代码的亿点点说明:

  1. 代码的主体部分位于 void work() 函数中,另外会有部分变量申明、结构体定义、函数定义在上方。
  2. #pragma ... 是用来开启 O2、O3 等优化加快代码速度。
  3. 中间一大堆 #define ... 是我习惯上的一些宏定义,用来加快代码编写的速度。
  4. "debug.h" 头文件是我用于调试输出的代码,没有这个头文件也可以正常运行(前提是没定义 DEBUG 宏),在程序中如果看到 dbg(...) 是我中途调试的输出的语句,可能没删干净,但是没有提交上去没有任何影响。
  5. ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); 这三句话是用于解除流同步,加快输入 cin 输出 cout 速度(这个输入输出流的速度很慢)。在小数据量无所谓,但是在比较大的读入时建议加这句话,避免读入输出超时。如果记不下来可以换用 scanfprintf,但使用了这句话后,cinscanfcoutprintf 不能混用。
  6. main 函数和 work 函数分开写纯属个人习惯,主要是为了多组数据。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

戳-考察C++基础的两道小题

昨天分享了一天本来是考察unique_ptr禁止拷贝行为的&#xff0c;但是粘贴的时候贴成正确代码了&#xff0c;于是&#xff0c;今天继续找两道小题来练练手。 今天这两道小题&#xff0c;你能回答上来不&#xff0c;题目1有至少6处错误&#xff0c;你能找到几个&#xff1f;题目2…

旅游小程序开发的费用及功能

随着科技的发展和智能手机的普及&#xff0c;越来越多的行业开始利用小程序来进行线上服务。旅游业作为一个重要的服务业&#xff0c;也纷纷推出了自己的旅游小程序&#xff0c;以方便游客在线预订、查询景点信息等。那么&#xff0c;旅游小程序开发的费用是多少&#xff1f;功…

Flask项目中使用蓝湖实现启动项配置——多个controller项

项目结构 # controller1-__init__.py from flask import Blueprintcont2_sale_blueprint Blueprint(cont2_sale_blueprint, __name__) cont2_user_blueprint Blueprint(cont2_user_blueprint, __name__) from . import user_controller from . import sale_controller# contr…

哨兵位及用哨兵位实现链表的链接

哨兵位&#xff1a; 通俗的话讲就是额外开辟一块空间&#xff0c;指向链表的头部。 合并两个有序链表 已解答 简单 相关标签 相关企业 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#…

思腾合力受邀出席文化和旅游虚拟现实应用推广交流活动并作主题演讲

3月21日&#xff0c;由文化和旅游部产业发展司主办&#xff0c;中国信息通信研究院、北京市石景山区文化和旅游局、中国动漫集团有限公司承办的“数字赋能文旅场景建设行动——文化和旅游虚拟现实应用推广交流活动”在北京首钢一高炉SoReal科幻乐园成功举办。 思腾合力CMO徐莉受…

北斗卫星在公路养护中的应用

北斗卫星在公路养护中的应用 北斗卫星是我国自主研发的一款卫星导航系统&#xff0c;它为公路养护工作提供了新的解决方案。通过使用北斗卫星技术&#xff0c;公路养护部门可以实时获取道路状况&#xff0c;提高工作效率&#xff0c;为交通安全保驾护航。 首先&#xff0c;北斗…

海边游艇港口迈入智能新纪元:数字孪生系统引领未来趋势

在浩瀚的海洋边&#xff0c;游艇港口不仅是停泊游艇的港湾&#xff0c;更是展现城市风貌与智慧科技的窗口。如今&#xff0c;随着数字化技术的飞速发展&#xff0c;海边游艇港口也迎来了前所未有的变革——数字孪生系统的应用&#xff0c;正悄然改变着传统游艇港口的运营模式&a…

【书生·浦语大模型实战营】学习笔记2

Lagent&#xff1a;智能体框架&#xff0c;实现将一个大语言模型转化为多种类型的智能体&#xff0c;更好地发挥InternLM的性能 浦语灵笔&#xff1a;视觉语言大模型 InternLM-Chat-7B智能对话Demo 环境准备 使用复制的internlm-demo环境 # 执行该脚本文件来安装项目实验环境…

GPT-5可能会在今年夏天作为对ChatGPT的“实质性改进”而到来

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

明明有这个字段但是又一直说不存在,完美解决 Unknown column ‘xxx ‘ in ‘where clause‘

一、情景再现 二、排查错因&#xff1a;仔细看多了空格&#xff0c;映射的时候就有问题 三、去看映射&#xff0c;果然多了空格&#xff0c;去掉空格&#xff0c;重启 四、完美解决

PyTorch深度学习:遥感影像地物分类的高效工具

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

《数字集成电路物理设计》学习笔记(持续更新中)

参考书籍&#xff1a; 《数字集成电路物理设计》pdf下载百度云链接&#xff1a; 链接: https://pan.baidu.com/s/1jOD54q_f9KLhfX6InabTRA?pwd8888 提取码: 8888 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 --来自百度网盘超级会员v8的分享 目录 第1章 集…

Swift 中的 Sequence 是什么 ?

在 Swift 中&#xff0c;Sequence 是一个协议&#xff0c;它表示一个可以遍历其元素的集合类型。任何遵循 Sequence 协议的类型都必须提供一个迭代器&#xff0c;用于按顺序访问其元素。迭代器是通过 makeIterator() 方法获取的&#xff0c;该方法返回一个遵循 IteratorProtoco…

进程控制 | 认识fork函数 | 进程终止 | 进程等待

进程创建 初始fork函数 fork函数是为了创建子进程而生的&#xff0c;通过fork函数之后&#xff0c;我们的父进程的代码和数据是共享的&#xff0c;我们这里是可以通过man手册进行查询的&#xff0c;查询之后是可以发现fork函数是会返回两个值的至于为什么会返回两个值&#x…

备考ICA----Istio实验1---Istio部署和Bookinfo

备考ICA----Istio实验1—Istio部署和Bookinfo 打算2024年4月份考Istio的ICA认证,系统的再把Istio相关功能的实验再摸排一遍 本套实验环境如下 序号软件版本1UbuntuUbuntu 20.04.6 LTS2Kubernetesv1.29.23kubeadmv1.29.24Istio1.20.35Envoy1.20.3 candidatemaster:~$ kubectl…

opengl两个光源下的球体

定义一个红色聚光灯源&#xff0c;一个漫反射的蓝色点光源 //light0 为漫反射的蓝色点光源glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);glLightfv(GL_LIGHT0, GL_POSITION, light0_position); //light1 为红色聚光光源glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient…

AI智能分析网关V4养老院视频智能监控方案

随着科技的快速发展&#xff0c;智能监控技术已经广泛应用于各个领域&#xff0c;尤其在养老院这一特定场景中&#xff0c;智能监控方案更是发挥着不可或缺的作用。尤其是伴随着社会老龄化趋势的加剧&#xff0c;养老院的安全管理问题也日益凸显。为了确保老人的生活安全&#…

[HackMyVM]靶场 XMAS

kali:192.168.56.104 靶机:192.168.56.126 注意在/etc/hosts 添加 192.168.56.126 christmas.hmv # cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 kali2 192.168.223.131 dc-2 192.168.223.134 wordy 192.168.56.105 midn…

CSDN个人简介优化 html font属性

CSDN个人简介优化 html font属性 个人简介个人简介优化字体21种样式选择字体大小设置4号字体 字体颜色设计渐变色&#xff08;可惜不能显示&#xff09; 字体加粗设置 <b>标签 个人简介 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光…

element的el-table自定义最后一行

场景&#xff1a; 最后一行要显示一些其他结果&#xff0c;用的是element ui 自带的数据总计的属性&#xff1b;返回一个数组&#xff0c;会按下标进行展示。 代码&#xff1a; <el-table :summary-method"getSummaries"show-summary :data"tableData"…