【华为OD-E卷 - 最优资源分配 100分(python、java、c++、js、c)】
【华为OD-E卷 - 最优资源分配 100分(python、java、c++、js、c)】
题目
某块业务芯片最小容量单位为1.25G,总容量为M*1.25G,对该芯片资源编号为1,2,…,M。该芯片支持3种不同的配置,分别为A、B、C。
配置A:占用容量为 1.25 * 1 = 1.25G 配置B:占用容量为 1.25 * 2 = 2.5G 配置C:占用容量为 1.25 * 8 = 10G 某块板卡上集成了N块上述芯片,对芯片编号为1,2,…,N,各个芯片之间彼此独立,不能跨芯片占用资源。 给定板卡上芯片数量N、每块芯片容量M、用户按次序配置后,请输出芯片资源占用情况,保证消耗的芯片数量最少。
资源分配规则:按照芯片编号从小到大分配所需资源,芯片上资源如果被占用标记为1,没有被占用标记为0.
用户配置序列:用户配置是按次序依次配置到芯片中,如果用户配置序列种某个配置超过了芯片总容量,丢弃该配置,继续遍历用户后续配置
输入描述
- M:每块芯片容量为 M * 1.25G,取值范围为:1~256
N:每块板卡包含芯片数量,取值范围为1~32
用户配置序列:例如ACABA,长度不超过1000
输出描述
- 板卡上每块芯片的占用情况
备注
- 用户配置是按次序依次配置到芯片中,如果用户配置序列种某个配置超过了芯片总容量,丢弃该配置,继续遍历用户后续配置
用例
用例一:
输入:
8
2
ACABA
输出:
11111000
11111111
用例二:
输入:
8
2
ACBCB
输出:
11111000
11111111
python解法
- 解题思路:
- 这个问题的目标是将一系列配置(由字符表示)分配到多个芯片上,每个芯片有一个固定的初始容量,然后根据配置所需的单位数,依次为芯片分配资源。分配完后,输出每个芯片的剩余状态,用“1”表示已分配的资源,用“0”表示剩余的资源。
输入参数解析:
m 是每个芯片的初始容量。
n 是芯片的数量。
configs 是一个字符串,包含了多个配置,配置是字符(‘A’, ‘B’, ‘C’)组成的,每个字符代表不同的资源需求。
资源分配:
先建立一个与芯片数量 n 相同大小的列表 chips,每个元素初始化为 m,代表每个芯片的剩余资源。
使用 config_map 字典,将每种配置字符映射到其对应的资源需求值:‘A’ 对应 1 单位,‘B’ 对应 2 单位,‘C’ 对应 8 单位。
遍历每个配置字符,在 chips 列表中找到第一个可以满足该资源需求的芯片,将资源从该芯片上减去。如果找到合适的芯片,则跳出当前配置的循环,处理下一个配置。
在所有配置分配完后,输出每个芯片的状态。已分配的资源用“1”表示,剩余的资源用“0”表示。
输出格式:
每个芯片的状态通过字符串输出,字符串的长度为 m,有 m - chip 个“1”,其余为“0”,表示已分配的资源和剩余的资源
def allocate_resources(m, n, configs):# 初始化每个芯片的资源量,假设每个芯片的初始容量是 mchips = [m] * n# 定义一个字典,映射配置字符到需要的资源单位config_map = {'A': 1, 'B': 2, 'C': 8}# 遍历配置字符串,逐一处理每个配置for config in configs:required_units = config_map[config] # 获取当前配置需要的资源单位数for i in range(n):if chips[i] >= required_units: # 如果当前芯片资源足够chips[i] -= required_units # 从该芯片扣除所需资源break # 分配完资源后跳出当前配置的循环,处理下一个配置# 输出每个芯片的资源分配情况for chip in chips:used_units = m - chip # 已经使用的资源单位数# 输出芯片的资源状态,已使用部分为 "1",剩余部分为 "0"print("1" * used_units + "0" * chip)# 主程序入口,获取输入并调用函数
if __name__ == "__main__":m = int(input()) # 读取每个芯片的初始容量n = int(input()) # 读取芯片的数量configs = input() # 读取配置字符串allocate_resources(m, n, configs) # 调用资源分配函数
java解法
- 解题思路
- 这个问题的目标是模拟资源分配的过程,给定一组芯片,每个芯片有 m 个单元(可以是 0 或 1,0 表示未分配资源,1 表示已分配资源),并根据提供的配置字符串(‘A’、‘B’、‘C’)依次为芯片分配资源。资源分配的规则如下:
‘A’ 需要 1 单元资源。
‘B’ 需要 2 单元资源。
‘C’ 需要 8 单元资源。
每个配置字符会尽量从空闲的芯片上分配资源。如果一个芯片有足够的空闲单元,它会被占用,直到该配置的资源分配完成。
代码逻辑:
输入解析:
m 表示每个芯片的资源单元数。
n 表示芯片的数量。
sequence 是一个字符串,每个字符代表需要多少资源单位(‘A’ 为 1,‘B’ 为 2,‘C’ 为 8)。
分配资源:
使用一个大数组 chips 来表示所有芯片的资源状态。数组的长度为 n * m,每个元素代表一个资源单元,初始值为 0(表示该资源单元空闲)。
遍历 sequence 中的每个配置,分配资源。每次分配资源时,遍历 chips 数组中的资源单元,直到该配置所需的资源分配完毕。
输出结果:
输出每个芯片的资源分配情况。每个芯片对应一行,输出该芯片的每个资源单元的状态(0 表示未分配,1 表示已分配)。
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);// 输入每个芯片的资源单元数 m 和芯片的数量 nint m = input.nextInt(); int n = input.nextInt();// 输入资源配置序列String sequence = input.next();// 调用资源分配函数allocateResources(m, n, sequence);}public static void allocateResources(int m, int n, String sequence) {// 创建一个数组 chips,用来表示所有芯片的资源分配情况// 数组的长度是 n * m,表示所有芯片的所有资源单元int[] chips = new int[n * m]; // 初始化所有单元为 0(表示未分配)// 初始化资源索引int index = 0;// 遍历资源配置序列,逐个分配资源for (char config : sequence.toCharArray()) {int needed = 0;// 根据配置字符确定所需资源数量if (config == 'A') needed = 1;else if (config == 'B') needed = 2;else if (config == 'C') needed = 8;// 从空闲资源单元开始分配,直到配置所需资源分配完while (index < chips.length && needed > 0) {int chipIndex = index % m; // 计算当前是哪个芯片的第几个资源单元if (chips[index] == 0) { // 如果该单元未分配资源chips[index] = 1; // 分配该资源单元needed--; // 减少剩余需要的资源单位数}index++; // 移动到下一个资源单元}}// 输出每个芯片的资源使用情况for (int i = 0; i < n; i++) {// 输出当前芯片的所有资源单元的分配情况for (int j = 0; j < m; j++) {System.out.print(chips[i * m + j]); // 输出每个单元的状态}System.out.println(); // 换行,表示一个芯片的输出结束}}
}
C++解法
- 解题思路
- 这个问题的目标是根据给定的资源配置序列,在多个芯片上分配资源,并输出每个芯片的资源使用情况。每个芯片有 m 个资源单元,资源配置序列中的字符(‘A’、‘B’、‘C’)分别代表不同的资源需求,且每个字符对应的资源需求数是不同的:
‘A’ 需要 1 单元资源。
‘B’ 需要 2 单元资源。
‘C’ 需要 8 单元资源。
每个芯片的资源单元数为 m,且每个单元的资源量是固定的,实际分配资源时将资源需求乘以 1.25 来模拟资源的消耗。资源分配过程尽量从空闲芯片中分配资源,直到资源配置所需的全部资源被分配完。
代码逻辑:
初始化阶段:
boardCard 数组表示 n 个芯片,每个芯片的初始资源容量为 m * 1.25(因为资源单元数与 m 的关系是 m * 1.25)。
dict 数组定义了配置字符对应的资源需求,其中 dict[0] 对应 ‘A’ 需要 1 单元资源,dict[1] 对应 ‘B’ 需要 2 单元资源,dict[2] 对应 ‘C’ 需要 8 单元资源。
资源分配:
遍历配置字符串 sequence 中的每个配置(‘A’、‘B’、‘C’),根据配置的需求,计算所需的资源量 need。
遍历所有芯片,找到第一个资源足够的芯片,将资源从该芯片中分配出去。资源分配完成后跳出当前配置的循环,处理下一个配置。
输出结果:
输出每个芯片的资源状态。如果芯片资源被分配了,就输出 “1”,如果未分配,则输出 “0”。每个芯片输出一行,每个芯片的资源状态由若干 “1” 和 “0” 组成
#include <iostream>
#include <vector>
#include <string>using namespace std;// 获取分配结果的函数
void getResult(int m, int n, const string& sequence) {// boardCard 数组表示所有芯片的资源,初始化为每个芯片 m * 1.25vector<double> boardCard(n, m * 1.25);// dict 数组记录不同配置所需的资源单位:'A' 对应 1,'B' 对应 2,'C' 对应 8int dict[3] = { 1, 2, 8 };// 遍历配置序列,依次为芯片分配资源for (char config : sequence) {// 计算当前配置所需的资源数量,乘以 1.25 来模拟每个单元的资源量double need = 1.25 * dict[config - 'A']; // 根据 'A'、'B'、'C' 计算需要的资源量// 遍历所有芯片,寻找第一个能够分配足够资源的芯片for (int j = 0; j < n; j++) {if (boardCard[j] >= need) { // 如果当前芯片有足够的资源boardCard[j] -= need; // 从该芯片分配资源break; // 分配完后跳出当前配置的循环,处理下一个配置}}}// 输出每个芯片的资源使用情况for (int i = 0; i < n; i++) {// 计算当前芯片未使用的资源单元数,除以 1.25 来得到原始单元数int unUsed = static_cast<int>(boardCard[i] / 1.25);// 计算已使用的资源单元数int used = m - unUsed;// 输出当前芯片的已使用资源单元,输出 1for (int j = 0; j < used; j++) {cout << "1";}// 输出当前芯片的未使用资源单元,输出 0for (int j = 0; j < unUsed; j++) {cout << "0";}cout << endl; // 换行,输出一个芯片的资源使用状态}
}// 主函数入口
int main() {int m, n; // m 是每个芯片的资源单元数,n 是芯片的数量string sequence; // 配置序列,包含需要分配的资源配置// 读取输入cin >> m >> n;cin >> sequence;// 调用 getResult 函数,获取并输出资源分配结果getResult(m, n, sequence);return 0;
}
C解法
-
解题思路
-
该问题要求模拟资源的分配,给定多个芯片,每个芯片有 m 个资源单元,并且每个单元可以按需分配资源。每个资源配置字符(‘A’、‘B’、‘C’)需要不同的资源单元。根据配置序列依次为芯片分配资源。分配完成后,我们需要输出每个芯片的资源使用情况。
资源配置:
每个芯片有 m 个资源单元。
配置字符:
‘A’ 需要 1 单元资源。
‘B’ 需要 2 单元资源。
‘C’ 需要 8 单元资源。
每个资源单元的容量是 1.25(用浮点数表示)。因此,每个芯片的初始资源容量是 m * 1.25。
资源分配:
每个配置字符按照资源需求顺序依次处理。对于每个配置,查找第一个有足够资源的芯片并分配资源。如果找到了合适的芯片,就为该芯片分配所需的资源。
输出:
输出每个芯片的资源使用情况:已分配的资源用 “1” 表示,未分配的资源用 “0” 表示。
每个芯片输出一行。
代码逻辑:
输入:
输入每个芯片的资源单元数 m 和芯片的数量 n。
输入一个字符串 sequence,该字符串包含了配置序列。
资源分配:
初始化一个 boardCard 数组,表示每个芯片的资源容量。每个芯片的初始容量为 m * 1.25。
遍历配置序列 sequence,根据配置要求从芯片中找到资源足够的芯片,进行资源分配。
输出每个芯片的使用情况:
根据分配后的 boardCard 数组,计算每个芯片的已用和未用资源,输出对应的资源使用情况。
#include <stdio.h>
#include <string.h>#define MAX_CHIPS 32 // 定义最大芯片数量
#define MAX_CONFIG 1000 // 定义配置序列最大长度// 计算资源分配结果并输出
void getResult(int m, int n, char sequence[]) {double boardCard[MAX_CHIPS]; // 用数组表示所有芯片的容量,初始化为每个芯片 m * 1.25// 初始化每个芯片的资源容量为 m * 1.25for (int i = 0; i < n; i++) {boardCard[i] = m * 1.25;}// 创建一个字典,映射配置 'A', 'B', 'C' 到相应的资源需求int dict[3] = { 1, 2, 8 }; // A -> 1, B -> 2, C -> 8// 遍历配置序列,逐一分配资源for (int i = 0; i < strlen(sequence); i++) {char config = sequence[i];// 根据配置字符计算需要的资源量,乘以 1.25 以匹配资源容量double need = 1.25 * dict[config - 'A']; // 'A' -> 1, 'B' -> 2, 'C' -> 8// 寻找第一个能够满足资源需求的芯片进行分配for (int j = 0; j < n; j++) {// 如果当前芯片的资源大于等于需求,则分配资源if (boardCard[j] >= need) {boardCard[j] -= need; // 从该芯片分配资源break; // 资源分配后跳出循环,处理下一个配置}}}// 输出每个芯片的资源使用情况for (int i = 0; i < n; i++) {// 计算当前芯片未使用的资源单元数int unUsed = (int)(boardCard[i] / 1.25); // 通过将剩余容量除以 1.25 来得到未使用的块数// 计算已使用的资源单元数int used = m - unUsed; // 已使用的资源单元数// 输出已使用的资源单元,输出 "1"for (int j = 0; j < used; j++) {printf("1");}// 输出未使用的资源单元,输出 "0"for (int j = 0; j < unUsed; j++) {printf("0");}printf("\n"); // 输出完每个芯片后换行}
}// 主程序入口
int main() {int m, n; // m 为每个芯片的资源单元数,n 为芯片的数量char sequence[MAX_CONFIG]; // 存储配置序列// 输入每个芯片的资源单元数 m 和芯片数量 nscanf("%d %d", &m, &n);// 输入配置序列scanf("%s", sequence);// 调用资源分配函数getResult(m, n, sequence);return 0; // 程序结束
}
JS解法
-
解题思路
-
该问题的目标是模拟资源分配的过程,根据输入的配置序列,依次为多个板(或芯片)分配资源。每个板(或芯片)有固定的容量,且每个配置(A、B、C)需要不同的资源量。分配完成后,我们需要输出每个板的资源使用情况。
输入说明:
第一个输入是每个板的容量 capacity,表示每个板有 capacity 个资源单元。
第二个输入是板的数量 boards,表示有多少个板参与资源分配。
第三个输入是配置序列 cards,它包含了需要分配的资源配置。每个字符代表一种资源配置:
‘A’ 需要 1.25 单位资源。
‘B’ 需要 2.5 单位资源。
‘C’ 需要 10 单位资源。
资源分配的步骤:
初始化一个数组 boardStates,每个板的初始容量为 capacity * 1.25,表示每个板的资源总量。
遍历 cards 配置序列,对于每个配置,查找第一个能够满足资源需求的板(即剩余资源大于等于需求的板),为其分配资源。
资源分配完成后,更新该板的剩余资源,并继续处理下一个配置。
输出结果:
对每个板的资源情况进行输出,输出每个板的使用情况:已分配资源的部分用 “1” 表示,未分配的部分用 “0” 表示。每个板的资源状态单独占一行
const readline = require("readline"); // 引入 readline 模块,用于处理输入
const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});const data = []; // 存储输入的三行数据
rl.on("line", (line) => {data.push(line); // 将每行输入数据存入 data 数组if (data.length === 3) { // 当收到 3 行输入数据后,开始处理const capacity = parseInt(data[0], 10); // 第1行:每个板的容量const boards = parseInt(data[1], 10); // 第2行:板的数量const cards = data[2]; // 第3行:配置序列(A、B、C)// 调用资源分配函数allocateBoards(capacity, boards, cards);data.length = 0; // 清空数据,准备处理下一个输入}
});// 分配资源的函数
function allocateBoards(capacity, boards, cards) {// 初始化每个板的剩余容量,容量为 capacity * 1.25let boardStates = Array(boards).fill(capacity * 1.25);// 配置与资源需求的映射const cardValues = { A: 1.25, B: 2.5, C: 10 };// 遍历配置序列,依次为每个板分配资源for (const card of cards) {const cardNeed = cardValues[card]; // 获取当前配置所需的资源量for (let i = 0; i < boards; i++) { // 遍历所有板if (boardStates[i] >= cardNeed) { // 如果当前板有足够的资源boardStates[i] -= cardNeed; // 为该板分配资源break; // 分配完成后跳出循环,处理下一个配置}}}// 输出每个板的资源使用情况boardStates.forEach((remaining) => {// 计算未使用的资源单元数,空闲资源 = 剩余资源 / 1.25const emptySlots = Math.floor(remaining / 1.25);// 计算已使用的资源单元数const filledSlots = capacity - emptySlots;// 输出已使用资源的部分(1),未使用的部分(0)console.log("1".repeat(filledSlots) + "0".repeat(emptySlots));});
}
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏
相关文章:
【华为OD-E卷 - 最优资源分配 100分(python、java、c++、js、c)】
【华为OD-E卷 - 最优资源分配 100分(python、java、c、js、c)】 题目 某块业务芯片最小容量单位为1.25G,总容量为M*1.25G,对该芯片资源编号为1,2,…,M。该芯片支持3种不同的配置,分…...

字符串格式时间(HH-MM)添加间隔时间后转为HH-MM输出
转换时间代码如下所示 #include <iostream> #include <iomanip> #include <sstream>//添加时间转换为时间 std::string addMinutesToTime(const std::string& timeStr, int minutesToAdd) {int hours, minutes;char delimiter;//解析输入时间std::istri…...

SQL 基础教程 - SQL ORDER BY 关键字
SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集进行排序。 SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。 ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。 SQL ORD…...

STM32 软件I2C读写
单片机学习! 目录 前言 一、软件I2C读写代码框架 二、I2C初始化 三、六个时序基本单元 3.1 引脚操作的封装和改名 3.2 起始条件执行逻辑 3.3 终止条件执行逻辑 3.4 发送一个字节 3.5 接收一个字节 3.5 发送应答&接收应答 3.5.1 发送应答 3.5.2 接…...
neo4j学习笔记
图数据库 图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是图论为基础的,图数据库主要用于存储更多的连接数据。 图论(GraphTheory)是数学的一个分支。图论以图为研究对象,图论的图是由若干…...

【动手学电机驱动】STM32-MBD(2)将 Simulink 模型部署到 STM32G431 开发板
STM32-MBD(1)安装 STM32 硬件支持包 STM32-MBD(2)Simulink 模型部署 【动手学电机驱动】STM32-MBD(2)Simulink 模型部署 1. 软硬件条件和环境测试1.1 软硬件条件1.2 开发环境测试 2. 创建基于 STM32 处理器…...

Nginx代理本地exe服务http为https
Nginx代理本地exe服务http为https 下载NginxNginx命令exe服务http代理为https 下载Nginx 点击下载Nginx 下载好之后是一个压缩包,解压放到没有中文的路径下就可以了 Nginx命令 调出cmd窗口cd到安装路径 输入:nginx -v 查看版本 nginx -hÿ…...
C++: glibc: pthread: pthread_cond_destroy,程序hang一例
今天碰到一个程序hang的情况。程序在退出的时候,调用到了pthread_cond_destroy,但是另一个线程还在pthread_cond_timedwait。应该是死锁的一个例子。应该查看libpthread.so的二进制文件,查看具体是在等什么。 Thread 1 (Thread 0x7f7028037580 (LWP 38)): #0 0x00007f7022e…...

【中间件】docker+kafka单节点部署---zookeeper模式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言消息中间件介绍1. KRaft模式2. zookeeper模式2.1. 单节点部署安装验证 前言 最近生产环境上准备部署ELFK日志监控,先在测试环境部署单节点kafka验证…...

深入Android架构(从线程到AIDL)_08 认识Android的主线程
目录 3、 认识Android的主线程(又称UI线程) 复习: 各进程(Process)里的主线程编辑 UI线程的责任: 迅速处理UI事件 举例 3、 认识Android的主线程(又称UI线程) 复习: 各进程(Process)里的主线程 UI线程的责任: 迅速处理UI事…...

集线器,交换机,路由器,mac地址和ip地址知识记录总结
一篇很不错的视频简介 基本功能 从使用方面来说,都是为了网络传输的标识,和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器,下面是区别: 集线器 集线器:一个简单的物理扩展接口数量的物理硬件。…...

【VUE】使用create-vue快速创建一个vue + vite +vue-route 等其他查看的工程
create-vue 简介 GitHub:https://github.com/vuejs/create-vue 创建的选项有多个,具体的可以看下方截图,当创建完成的时候可以发现工程中是自带vite的。 下面对其中的各种内容进行简单的说明 JSX (可以选择,但是我感觉没什么必要) 全称:JavaScript XML 允许你在 Java…...

Jetpack Compose 学习笔记(一)—— 快速上手
本篇主要是对 Jetpack Compose 有一个宏观上的了解。 1、Jetpack Compose 是什么与优势 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API,可以帮助您简化并加快 Android 界面开发。 Compose 的优势&am…...
Kafka3.x KRaft 模式 (没有zookeeper) 常用命令
版本号:kafka_2.12-3.7.0 说明:如有多个地址,用逗号分隔 创建主题 bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic demo --partitions 1 --replication-factor 1删除主题 bin/kafka-topics.sh --delete --boots…...

Leetcode 最大正方形
java 实现 class Solution {public int maximalSquare(char[][] matrix) {//处理特殊情况if(matrix null || matrix.length 0 || matrix[0].length 0) return 0;int rows matrix.length;int cols matrix[0].length;int[][] dp new int[rows][cols]; //dp[i][j]的含义是以…...
ubuntu22.04录屏黑屏,飞书共享屏幕黑屏问题
参考https://cloud.tencent.com/developer/ask/sof/116470494 电脑是联想x1笔记本,显卡是intel的,nvidia显卡好像没看见这种问题。 sudo apt update sudo apt install xserver-xorg打开custom.conf, sudo gedit /etc/gdm3/custom.conf 解…...

沙箱模拟支付宝支付3--支付的实现
1 支付流程实现 演示案例 主要参考程序员青戈的视频【支付宝沙箱支付快速集成版】支付宝沙箱支付快速集成版_哔哩哔哩_bilibili 对应的源码在 alipay-demo: 使用支付宝沙箱实现支付功能 - Gitee.com 以下是完整的实现步骤 1.首先导入相关的依赖 <?xml version"1…...

Golang的代码质量分析工具
Golang的代码质量分析工具 一、介绍 作为一种高效、简洁、可靠的编程语言,被越来越多的开发者所喜爱和采用。而随着项目规模的增长和团队人员的扩大,代码质量的管理变得尤为重要。为了保障代码的可维护性、健壮性和可扩展性,我们需要借助代码…...

【Linux】:多线程(读写锁 自旋锁)
✨ 倘若南方知我意,莫将晚霞落黄昏 🌏 📃个人主页:island1314 🔥个人专栏:Linux—登神长阶 ⛺️ 欢迎关注:👍点赞 &#…...

Java开发 PDF文件生成方案
业务需求背景 业务端需要能够将考试答卷内容按指定格式呈现并导出为pdf格式进行存档,作为紧急需求插入。导出内容存在样式复杂性,包括特定的字体(中文)、字号、颜色,页面得有页眉、页码,数据需要进行表格聚…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...