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

【2024年华为OD机试】 (A卷,100分)- 对称美学(Java JS PythonC/C++)

在这里插入图片描述

一、问题描述

题目描述

对称就是最大的美学,现有一道关于对称字符串的美学。已知:

  • 第1个字符串:R
  • 第2个字符串:BR
  • 第3个字符串:RBBR
  • 第4个字符串:BRRBRBBR
  • 第5个字符串:RBBRBRRBBRRBRBBR

相信你已经发现规律了,没错!就是第 i 个字符串 = 第 i - 1 号字符串取反 + 第 i - 1 号字符串;

  • 取反(R->B, B->R);

现在告诉你 nk,让你求得第 n 个字符串的第 k 个字符是多少。(k的编号从0开始)

输入描述

第一行输入一个 T,表示有 T 组用例;

接下来输入 T 行,每行输入两个数字,表示 nk

  • 1 ≤ T ≤ 100;
  • 1 ≤ n ≤ 64;
  • 0 ≤ k < 2^(n-1);

输出描述

输出 T 行表示答案;

  • 输出 “blue” 表示字符是 B;
  • 输出 “red” 表示字符是 R。

备注

  • 输出字符串区分大小写,请注意输出小写字符串,不带双引号。

用例

用例 1

输入:

5
1 0
2 1
3 2
4 6
5 8

输出:

red
red
blue
blue
blue

说明:

  • 第 1 个字符串:R -> 第 0 个字符为 R
  • 第 2 个字符串:BR -> 第 1 个字符为 R
  • 第 3 个字符串:RBBR -> 第 2 个字符为 B
  • 第 4 个字符串:BRRBRBBR -> 第 6 个字符为 B
  • 第 5 个字符串:RBBRBRRBBRRBRBBR -> 第 8 个字符为 B
用例 2

输入:

1
64 73709551616

输出:

red

说明:

解题思路

  1. 规律分析:第 i 个字符串的长度是 2^(i-1)。第 i 个字符串可以看作是第 i-1 个字符串取反后拼接第 i-1 个字符串。
  2. 递归关系:如果 k 小于第 i-1 个字符串的长度,那么第 n 个字符串的第 k 个字符与第 n-1 个字符串的第 k 个字符相同。如果 k 大于等于第 i-1 个字符串的长度,那么第 n 个字符串的第 k 个字符与第 n-1 个字符串的第 k - 2^(i-2) 个字符取反。
  3. 递归终止条件:当 n 为 1 时,第 0 个字符为 R。

在这里插入图片描述

问题分析与规律探索

从题目描述和示例中,我们可以观察到字符串的生成规律。每个新的字符串都是由前一个字符串取反后拼接前一个字符串本身得到的。这个过程可以递归地进行,直到我们到达第一个字符串 “R”。

规律总结
  1. 递归定义

    • n 个字符串的长度是 2^(n-1)
    • n 个字符串 = 第 n-1 个字符串取反 + 第 n-1 个字符串。
  2. 递归终止条件

    • n = 1 时,字符串为 “R”。
  3. 递归关系

    • 如果 k < 2^(n-2),则第 n 个字符串的第 k 个字符与第 n-1 个字符串的第 k 个字符相同。
    • 如果 k >= 2^(n-2),则第 n 个字符串的第 k 个字符与第 n-1 个字符串的第 k - 2^(n-2) 个字符取反。

递归解法

我们可以利用递归关系,通过递归调用逐步减少 nk,直到 n 为 1 时,直接返回结果。

在这里插入图片描述
好的,我们来详细解释这个规律,不使用代码。

规律解释

  1. 字符串生成规律

    • 第1个字符串:R
    • 第2个字符串:BR
    • 第3个字符串:RBBR
    • 第4个字符串:BRRBRBBR
    • 第5个字符串:RBBRBRRBBRRBRBBR
    • 第6个字符串:BRRBBRRBRBBRBRBBRBRRBBRRBRBBR
  2. 观察规律

    • 每个字符串的长度是 2^(n-1)
    • 每个字符串可以分为两部分:
      • 前半部分是前一个字符串取反。
      • 后半部分是前一个字符串本身。
  3. 递归关系

    • 如果 k 位于第 n 个字符串的前半部分(即 k < 2^(n-2)),那么第 n 个字符串的第 k 个字符与第 n-1 个字符串的第 k 个字符取反。
    • 如果 k 位于第 n 个字符串的后半部分(即 k >= 2^(n-2)),那么第 n 个字符串的第 k 个字符与第 n-1 个字符串的第 k - 2^(n-2) 个字符相同。
  4. 递归终止条件

    • n = 1 时,字符串为 R,第 0 个字符为 R
    • n = 2 时,字符串为 BR,第 0 个字符为 B,第 1 个字符为 R

详细步骤

  1. 确定 k 位于前半部分还是后半部分

    • 计算 mid = 2^(n-2)
    • 如果 k < mid,则 k 位于前半部分。
    • 如果 k >= mid,则 k 位于后半部分。
  2. 递归处理

    • 如果 k 位于前半部分:
      • 递归调用 get(n-1, k),并将结果取反。
    • 如果 k 位于后半部分:
      • 递归调用 get(n-1, k - mid),结果不变。
  3. 递归终止

    • n = 1 时,返回 R
    • n = 2 时,根据 k 的值返回 BR

用例解释

用例 1
  • 输入:1 0

    • 第1个字符串:R
    • 第0个字符:R -> 输出 red
  • 输入:2 1

    • 第2个字符串:BR
    • 第1个字符:R -> 输出 red
  • 输入:3 2

    • 第3个字符串:RBBR
    • 第2个字符:B -> 输出 blue
  • 输入:4 6

    • 第4个字符串:BRRBRBBR
    • 第6个字符:B -> 输出 blue
  • 输入:5 8

    • 第5个字符串:RBBRBRRBBRRBRBBR
    • 第8个字符:B -> 输出 blue
用例 2
  • 输入:64 73709551616
    • 通过递归关系,逐步减少 nk,直到 n 为 1 或 2。
    • 最终确定第 k 个字符为 R -> 输出 red

通过这种方式,我们可以高效地找到第 n 个字符串的第 k 个字符,而不需要生成整个字符串,从而避免了内存溢出的问题。

在这里插入图片描述
可以发现,其实get(n,k),如果k <= 2^(n-2) ,则相当于 get(n-1, k) 的颜色取反。

二、JavaScript算法源码

以下是 JavaScript 代码的详细中文注释和逻辑讲解,重点在于如何处理大数(BigInt)以及递归逻辑的实现:


JavaScript 代码实现

const readline = require("readline");// 创建控制台输入输出接口
const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});// 存储输入行
const lines = [];
let t; // 测试用例的数量// 监听输入事件
rl.on("line", (line) => {lines.push(line); // 将输入行存入数组// 当读取到第一行时,解析测试用例的数量 tif (lines.length === 1) {t = BigInt(lines[0]); // 将 t 转换为 BigInt 类型}// 当读取到所有测试用例时,开始处理if (t && lines.length === Number(t) + 1) {lines.shift(); // 移除第一行(t 的值)const arr = lines.map((line) => line.split(" ").map(BigInt)); // 将每行输入转换为 BigInt 数组getResult(arr); // 调用主逻辑函数lines.length = 0; // 清空输入行数组,准备下一组输入}
});// 主逻辑函数
function getResult(arr) {for (let [n, k] of arr) {console.log(getNK(n, k)); // 对每个测试用例调用 getNK 函数并输出结果}
}// 递归函数,计算第 n 个字符串的第 k 个字符的颜色
function getNK(n, k) {// 如果 n 为 1,直接返回 "red"if (n === 1n) {return "red";}// 如果 n 为 2,根据 k 的值返回 "blue" 或 "red"if (n === 2n) {if (k === 0n) return "blue";else return "red";}// 计算第 n 个字符串的一半长度 halflet half = 1n << (n - 2n); // 1n << (n - 2n) 等价于 2^(n-2)// 如果 k 大于等于 half,递归处理第 n-1 个字符串的第 k - half 个字符if (k >= half) {return getNK(n - 1n, k - half);} else {// 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反return getNK(n - 1n, k) === "red" ? "blue" : "red";}
}

代码讲解

1. 输入处理
  • 使用 readline 模块从控制台读取输入。
  • 第一行是测试用例的数量 t,后续每行是一个测试用例,包含两个值 nk
  • 将输入值转换为 BigInt 类型,以支持大数运算。
2. 主逻辑:getResult 函数
  • 遍历每个测试用例,调用 getNK 函数计算结果并输出。
3. 递归逻辑:getNK 函数
  • 基本情况
    • 如果 n === 1n,直接返回 "red"
    • 如果 n === 2n,根据 k 的值返回 "blue""red"
  • 递归情况
    • 计算第 n 个字符串的一半长度 half,公式为 1n << (n - 2n),即 2^(n-2)
    • 如果 k >= half,递归处理第 n-1 个字符串的第 k - half 个字符。
    • 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反("red""blue""blue""red")。

示例解析

输入
2
3 2
4 5
运行结果
blue
red
  • 解析
    • 对于 n = 3k = 2
      • half = 2^(3-2) = 2
      • k >= half,递归处理 n = 2k = 2 - 2 = 0
      • 对于 n = 2k = 0,返回 "blue"
    • 对于 n = 4k = 5
      • half = 2^(4-2) = 4
      • k >= half,递归处理 n = 3k = 5 - 4 = 1
      • 对于 n = 3k = 1
        • half = 2^(3-2) = 2
        • k < half,递归处理 n = 2k = 1
        • 对于 n = 2k = 1,返回 "red"
        • 取反后返回 "blue"
      • 取反后返回 "red"

总结

  • 该代码通过递归和位运算的方式,高效地计算第 n 个字符串的第 k 个字符的颜色。
  • 使用 BigInt 类型处理大数,确保计算的准确性。
  • 代码逻辑清晰,适用于解决类似递归问题的场景。

如果有其他问题,欢迎随时提问!

三、Java算法源码

以下是 Java 代码的详细中文注释和逻辑讲解,重点在于如何处理大数(long 类型)以及递归逻辑的实现:


Java 代码实现

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in); // 创建 Scanner 对象,用于读取输入int t = sc.nextInt(); // 读取测试用例的数量 tlong[][] arr = new long[t][2]; // 创建一个二维数组,用于存储每个测试用例的 n 和 kfor (int i = 0; i < t; i++) {arr[i][0] = sc.nextLong(); // 读取 narr[i][1] = sc.nextLong(); // 读取 k}getResult(arr); // 调用主逻辑函数}// 主逻辑函数,处理每个测试用例public static void getResult(long[][] arr) {for (long[] nk : arr) {System.out.println(getNK(nk[0], nk[1])); // 调用 getNK 函数并输出结果}}// 递归函数,计算第 n 个字符串的第 k 个字符的颜色public static String getNK(long n, long k) {// 如果 n 为 1,直接返回 "red"if (n == 1) {return "red";}// 如果 n 为 2,根据 k 的值返回 "blue" 或 "red"if (n == 2) {if (k == 0) return "blue";else return "red";}// 计算第 n 个字符串的一半长度 halflong half = 1L << (n - 2); // 1L << (n - 2) 等价于 2^(n-2)// 如果 k 大于等于 half,递归处理第 n-1 个字符串的第 k - half 个字符if (k >= half) {return getNK(n - 1, k - half);} else {// 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反return "red".equals(getNK(n - 1, k)) ? "blue" : "red";}}
}

代码讲解

1. 输入处理
  • 使用 Scanner 从控制台读取输入。
  • 第一行是测试用例的数量 t,后续每行是一个测试用例,包含两个值 nk
  • 将输入值存储到二维数组 arr 中,arr[i][0] 存储 narr[i][1] 存储 k
2. 主逻辑:getResult 函数
  • 遍历每个测试用例,调用 getNK 函数计算结果并输出。
3. 递归逻辑:getNK 函数
  • 基本情况
    • 如果 n == 1,直接返回 "red"
    • 如果 n == 2,根据 k 的值返回 "blue""red"
  • 递归情况
    • 计算第 n 个字符串的一半长度 half,公式为 1L << (n - 2),即 2^(n-2)
    • 如果 k >= half,递归处理第 n-1 个字符串的第 k - half 个字符。
    • 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反("red""blue""blue""red")。

示例解析

输入
2
3 2
4 5
运行结果
blue
red
  • 解析
    • 对于 n = 3k = 2
      • half = 2^(3-2) = 2
      • k >= half,递归处理 n = 2k = 2 - 2 = 0
      • 对于 n = 2k = 0,返回 "blue"
    • 对于 n = 4k = 5
      • half = 2^(4-2) = 4
      • k >= half,递归处理 n = 3k = 5 - 4 = 1
      • 对于 n = 3k = 1
        • half = 2^(3-2) = 2
        • k < half,递归处理 n = 2k = 1
        • 对于 n = 2k = 1,返回 "red"
        • 取反后返回 "blue"
      • 取反后返回 "red"

总结

  • 该代码通过递归和位运算的方式,高效地计算第 n 个字符串的第 k 个字符的颜色。
  • 使用 long 类型处理大数,确保计算的准确性。
  • 代码逻辑清晰,适用于解决类似递归问题的场景。

如果有其他问题,欢迎随时提问!

四、Python算法源码

以下是 Python 代码的详细中文注释和逻辑讲解,重点在于如何处理大数(Python 支持任意大整数)以及递归逻辑的实现:


Python 代码实现

import math  # 导入 math 模块,用于数学运算# 输入获取
t = int(input())  # 读取测试用例的数量 t
# 读取每个测试用例的 n 和 k,并将其转换为 float 类型(虽然题目中 n 和 k 是整数,但代码中使用了 float)
arr = [list(map(float, input().split())) for i in range(t)]# 算法入口
def getResult(arr):for n, k in arr:  # 遍历每个测试用例print(getNK(n, k))  # 调用 getNK 函数并输出结果# 递归函数,计算第 n 个字符串的第 k 个字符的颜色
def getNK(n, k):# 如果 n 为 1,直接返回 "red"if n == 1:return "red"# 如果 n 为 2,根据 k 的值返回 "blue" 或 "red"if n == 2:if k == 0:return "blue"else:return "red"# 计算第 n 个字符串的一半长度 halfhalf = math.pow(2, n - 2)  # 使用 math.pow 计算 2^(n-2)# 如果 k 大于等于 half,递归处理第 n-1 个字符串的第 k - half 个字符if k >= half:return getNK(n - 1, k - half)else:# 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反return "blue" if getNK(n - 1, k) == "red" else "red"# 调用算法
getResult(arr)

代码讲解

1. 输入处理
  • 使用 input() 函数从控制台读取输入。
  • 第一行是测试用例的数量 t,后续每行是一个测试用例,包含两个值 nk
  • 将输入值存储到列表 arr 中,arr 的每个元素是一个包含 nk 的列表。
2. 主逻辑:getResult 函数
  • 遍历每个测试用例,调用 getNK 函数计算结果并输出。
3. 递归逻辑:getNK 函数
  • 基本情况
    • 如果 n == 1,直接返回 "red"
    • 如果 n == 2,根据 k 的值返回 "blue""red"
  • 递归情况
    • 计算第 n 个字符串的一半长度 half,公式为 math.pow(2, n - 2),即 2^(n-2)
    • 如果 k >= half,递归处理第 n-1 个字符串的第 k - half 个字符。
    • 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反("red""blue""blue""red")。

示例解析

输入
2
3 2
4 5
运行结果
blue
red
  • 解析
    • 对于 n = 3k = 2
      • half = 2^(3-2) = 2
      • k >= half,递归处理 n = 2k = 2 - 2 = 0
      • 对于 n = 2k = 0,返回 "blue"
    • 对于 n = 4k = 5
      • half = 2^(4-2) = 4
      • k >= half,递归处理 n = 3k = 5 - 4 = 1
      • 对于 n = 3k = 1
        • half = 2^(3-2) = 2
        • k < half,递归处理 n = 2k = 1
        • 对于 n = 2k = 1,返回 "red"
        • 取反后返回 "blue"
      • 取反后返回 "red"

总结

  • 该代码通过递归和数学运算的方式,高效地计算第 n 个字符串的第 k 个字符的颜色。
  • Python 支持任意大整数运算,因此无需担心数值溢出问题。
  • 代码逻辑清晰,适用于解决类似递归问题的场景。

如果有其他问题,欢迎随时提问!

五、C/C++算法源码:

以下是 C++ 代码,并附上详细的中文注释和逻辑讲解:


C++ 代码实现

#include <iostream>
#include <vector>
#include <cmath> // 用于 pow 函数using namespace std;// 递归函数,计算第 n 个字符串的第 k 个字符的颜色
string getNK(long long n, long long k) {// 如果 n 为 1,直接返回 "red"if (n == 1) {return "red";}// 如果 n 为 2,根据 k 的值返回 "blue" 或 "red"if (n == 2) {if (k == 0) return "blue";else return "red";}// 计算第 n 个字符串的一半长度 halflong long half = pow(2, n - 2); // 使用 pow 函数计算 2^(n-2)// 如果 k 大于等于 half,递归处理第 n-1 个字符串的第 k - half 个字符if (k >= half) {return getNK(n - 1, k - half);} else {// 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反return (getNK(n - 1, k) == "red") ? "blue" : "red";}
}// 主逻辑函数,处理每个测试用例
void getResult(const vector<vector<long long>>& arr) {for (const auto& nk : arr) {cout << getNK(nk[0], nk[1]) << endl; // 调用 getNK 函数并输出结果}
}int main() {// 输入获取int t;cin >> t; // 读取测试用例的数量 tvector<vector<long long>> arr(t, vector<long long>(2)); // 创建一个二维数组,用于存储每个测试用例的 n 和 kfor (int i = 0; i < t; i++) {cin >> arr[i][0] >> arr[i][1]; // 读取 n 和 k}// 调用算法getResult(arr);return 0;
}

代码讲解

1. 输入处理
  • 使用 cin 从标准输入读取数据。
  • 第一行是测试用例的数量 t,后续每行是一个测试用例,包含两个值 nk
  • 将输入值存储到二维向量 arr 中,arr[i][0] 存储 narr[i][1] 存储 k
2. 主逻辑:getResult 函数
  • 遍历每个测试用例,调用 getNK 函数计算结果并输出。
3. 递归逻辑:getNK 函数
  • 基本情况
    • 如果 n == 1,直接返回 "red"
    • 如果 n == 2,根据 k 的值返回 "blue""red"
  • 递归情况
    • 计算第 n 个字符串的一半长度 half,公式为 pow(2, n - 2),即 2^(n-2)
    • 如果 k >= half,递归处理第 n-1 个字符串的第 k - half 个字符。
    • 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反("red""blue""blue""red")。

示例解析

输入
2
3 2
4 5
运行结果
blue
red
  • 解析
    • 对于 n = 3k = 2
      • half = 2^(3-2) = 2
      • k >= half,递归处理 n = 2k = 2 - 2 = 0
      • 对于 n = 2k = 0,返回 "blue"
    • 对于 n = 4k = 5
      • half = 2^(4-2) = 4
      • k >= half,递归处理 n = 3k = 5 - 4 = 1
      • 对于 n = 3k = 1
        • half = 2^(3-2) = 2
        • k < half,递归处理 n = 2k = 1
        • 对于 n = 2k = 1,返回 "red"
        • 取反后返回 "blue"
      • 取反后返回 "red"

总结

  • 该代码通过递归和数学运算的方式,高效地计算第 n 个字符串的第 k 个字符的颜色。
  • 使用 long long 类型处理大数,确保计算的准确性。
  • 代码逻辑清晰,适用于解决类似递归问题的场景。

如果有其他问题,欢迎随时提问!

相关文章:

【2024年华为OD机试】 (A卷,100分)- 对称美学(Java JS PythonC/C++)

一、问题描述 题目描述 对称就是最大的美学&#xff0c;现有一道关于对称字符串的美学。已知&#xff1a; 第1个字符串&#xff1a;R第2个字符串&#xff1a;BR第3个字符串&#xff1a;RBBR第4个字符串&#xff1a;BRRBRBBR第5个字符串&#xff1a;RBBRBRRBBRRBRBBR 相信你…...

【教程】数据可视化处理之2024年各省GDP排名预测!

过去的一年里&#xff0c;我国的综合实力显著提升&#xff0c;在新能源汽车、新一代战机、两栖攻击舰、航空航天、芯片电子、装备制造等领域位居全球前列。虽然全国各省市全年的经济数据公布还需要一段时间&#xff0c;但各地的工业发展数据&#xff0c;财政收入数据已大概揭晓…...

Java 将RTF文档转换为Word、PDF、HTML、图片

RTF文档因其跨平台兼容性而广泛使用&#xff0c;但有时在不同的应用场景可能需要特定的文档格式。例如&#xff0c;Word文档适合编辑和协作&#xff0c;PDF文档适合打印和分发&#xff0c;HTML文档适合在线展示&#xff0c;图片格式则适合社交媒体分享。因此我们可能会需要将RT…...

深度学习的原理和应用

一、深度学习的原理 深度学习是机器学习领域的一个重要分支&#xff0c;其原理基于多层神经网络结构和优化算法。以下是深度学习的核心原理&#xff1a; 多层神经网络结构&#xff1a;深度学习模型通常由多层神经元组成&#xff0c;这些神经元通过权重和偏置相互连接。输入数据…...

CAPL语法基础

CAPL语法基础 目录 CAPL语法基础1. 引言2. 数据类型、变量与常量2.1 数据类型2.2 变量2.3 常量2.4 案例1&#xff1a;使用变量和常量计算圆的面积 3. 运算符与表达式3.1 算术运算符3.2 关系运算符3.3 逻辑运算符3.4 位运算符3.5 案例2&#xff1a;使用运算符实现简单的逻辑判断…...

安卓studio生成apk步骤

在写完app之后虽然能在真机上运行 但是在文件夹中找不到相应的apk &#xff0c;注意&#xff01;&#xff01;&#xff01;安卓 studio中可以自动生动生成 apk 下面是生成步骤&#xff1a; 步骤1&#xff1a;build ->make project 步骤2&#xff1a;build ->Generate si…...

Azure主机windows2008就地升级十步

Azure上云主机的windows2008系统需要进行就地升级。 按着微软的升级路径&#xff1a;win2008-->win2012-->win2016-->win2022 第一步&#xff1a;创建快照备份&#xff0c;防止升级失败第二步&#xff1a;升级托管磁盘&#xff0c;在VM管理的地方将磁盘升级成托管磁盘…...

解锁 C# 与 LiteDB 嵌入式 NoSQL 数据库

一、开篇&#xff1a;邂逅 C# 与 LiteDB 新世界 在当今的软件开发领域&#xff0c;数据管理如同建筑的基石&#xff0c;而选择一款合适的数据库则是项目成功与否的关键因素之一。对于 C# 开发者来说&#xff0c;面对琳琅满目的数据库选项&#xff0c;如何抉择常常令人头疼。今…...

7 分布式定时任务调度框架

先简单介绍下分布式定时任务调度框架的使用场景和功能和架构&#xff0c;然后再介绍世面上常见的产品 我们在大型的复杂的系统下&#xff0c;会有大量的跑批&#xff0c;定时任务的功能&#xff0c;如果在独立的子项目中单独去处理这些任务&#xff0c;随着业务的复杂度的提高…...

七星棋类游戏源码:两百玩法开源修复

这套七星棋类源码&#xff0c;覆盖六大省区&#xff08;湖南双端、湖北、山西、江苏、贵州等&#xff09;&#xff0c;安卓与苹果端都能轻松适配&#xff0c;汇集 6 个端口与 200 多种子游戏玩法。此版本为二次开发修复版&#xff0c;功能完备且源码完全公开&#xff0c;包括乐…...

未来世界:科技引领的奇幻篇章

科技发展的这么快&#xff0c;未来的世界将会是什么样的呢&#xff1f; 在人类历史的长河中&#xff0c;科技始终是推动社会进步的核心力量。从古老的四大发明到如今的人工智能、基因编辑、量子计算等前沿技术&#xff0c;科技发展的速度日新月异。我们不禁会想&#xff0c;在…...

[python3]Uvicorn库

Uvicorn 是一个用于运行 ASGI&#xff08;Asynchronous Server Gateway Interface&#xff09;应用程序的轻量级服务器。ASGI 是 Python Web 应用程序接口的一种扩展&#xff0c;它不仅支持传统的同步 Web 请求处理&#xff0c;还支持异步请求处理、WebSockets 以及 HTTP/2。 h…...

istio-proxy oom问题排查步骤

1. 查看cluster数量 cluster数量太多会导致istio-proxy占用比较大的内存&#xff0c;此时需检查是否dr资源的host设置有配置为* 2. 查看链路数据采样率 若采样率设置过高&#xff0c;在压测时需要很大的内存来维护链路数据。可以调低采样率或增大istio-proxy内存。 检查iop中…...

Flutter:使用FVM安装多个Flutter SDK 版本和使用教程

一、FVM简介 FVM全称&#xff1a;Flutter Version Management FVM通过引用每个项目使用的Flutter SDK版本来帮助实现一致的应用程序构建。它还允许您安装多个Flutter版本&#xff0c;以快速验证和测试您的应用程序即将发布的Flutter版本&#xff0c;而无需每次等待Flutter安装。…...

关于物联网的基础知识(二)——物联网体系结构分层

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网的基础知识&#xff08;二&a…...

[程序设计]—代理模式

[程序设计]—代理模式&#x1f473; 本文章记录学习于——52.面向切面&#xff1a;AOP-场景模拟_哔哩哔哩_bilibili 最近闲来无事&#xff0c;在学习Spring的源码&#xff1a; 后面慢慢更新源码系列blog&#xff0c;希望多多关注&#x1f64f;&#x1f64f; 目前已经总结的b…...

26、【OS】【Nuttx】用cmake构建工程

背景 之前wiki 14、【OS】【Nuttx】Nsh中运行第一个程序 都是用 make 构建&#xff0c;准备切换 cmake 进行构建&#xff0c;方便后续扩展开发 Nuttx cmake 适配 nuttx项目路径下输入 make distclean&#xff0c;清除之前工程配置 adminpcadminpc:~/nuttx_pdt/nuttx$ make …...

C#中序列化的选择:JSON、XML、二进制与Protobuf详解

C#中序列化的选择&#xff1a;JSON、XML、二进制与Protobuf详解 在C#开发中&#xff0c;序列化是将对象转换为可存储或传输的格式的过程&#xff0c;而反序列化则是将存储或传输的数据重新转换为对象的过程。选择合适的序列化方式对应用程序的性能、可维护性和兼容性至关重要。…...

单片机实现模式转换

[任务] 要求通过单片机实现以下功能&#xff1a; 1.单片机有三种工作模式(定义全局变量MM表示模式&#xff0c;MM1&#xff0c;2&#xff0c;3表示三种不同的模式) LED控制模式 风扇控制模式 蜂鸣器控制模式 2.可以在某一个模式下通过拓展板KEY1按键控制设备 (按…...

Shader -> SweepGradient扫描渐变着色器详解

XML文件 <com.example.myapplication.MyViewxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_gravity"center"android:layout_height"400dp"/>自定义View代码 c…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...