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

华为OD机试真题——投篮大赛(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025Q1 A卷 100分 题型

本文涵盖详细解题思路、代码注释、讲解、复杂的分析以及测试用例;
并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式!

华为OD机试A卷真题《投篮大赛》:

题目名称:投篮大赛

知识点:字符串、栈操作、逻辑处理
时间限制:1秒
空间限制:256MB
限定语言:不限


题目描述

你作为一场特殊赛制投篮大赛的记录员,需根据操作字符串列表 ops 记录得分。规则如下:

  1. 整数 x:当前回合得分为 x,直接记录。
  2. +:当前回合得分为前两回合有效得分之和。
  3. D:当前回合得分为前一回合有效得分的两倍。
  4. C:当前回合无得分,且前一回合得分无效(需移除)。

最终返回所有有效得分的总和。若操作过程中出现异常(如操作符无法执行),返回 -1


输入输出格式

  • 输入:字符串数组 ops,元素为整数或操作符(CD+)。
  • 输出:整型数字,总得分或 -1(异常时)。

约束条件

  • 1 <= ops.length <= 1000
  • 整数范围:[-3*10^4, 3*10^4]
  • 需处理以下异常:
    • + 操作时,前两有效得分不存在。
    • C/D 操作时,前一有效得分不存在。

示例

示例1
输入:5 2 C D +
输出:30
解释:

  • 5 → 记录 [5]
  • 2 → 记录 [5, 2]
  • C → 移除 2,记录 [5]
  • D → 记录 5*2=10[5, 10]
  • + → 记录 5+10=15[5, 10, 15]
    总和:5+10+15=30

示例2
输入:+
输出:-1
解释:+ 操作时栈中无足够元素,触发异常。


快捷目录

    • 题目名称:投篮大赛
      • 题目描述
      • 输入输出格式
      • 示例
    • Java
      • 详细分析与解答
        • 题目分析
        • 解题思路
        • 代码实现
        • 代码讲解
        • 复杂度分析
        • 边界案例验证
        • 总结
    • Pytnon
      • 详细分析与解答
        • 题目分析
        • 解题思路
        • 代码实现
        • 代码讲解
        • 复杂度分析
        • 示例验证
        • 边界案例
        • 总结
    • JavaScript
      • 详细分析与解答
        • 题目分析
      • 代码实现
      • 代码解析与优化分析
        • 核心逻辑
        • 复杂度分析
      • 示例验证
        • 示例1
        • 示例2
      • 边界条件测试
        • 测试1:连续 `C` 操作
        • 测试2:负数与异常操作
      • 总结
    • C语言
      • 思路总结
      • 优化点
      • C语言实现
      • 代码解释
    • C++
      • 方法思路
      • 解决代码
      • 代码解释
      • 复杂度与优化
    • Go
      • 解决思路
      • Go 代码实现
      • 代码解释
      • 复杂度与优化
      • 示例测试
      • 总结

Java

详细分析与解答

题目分析

题目要求模拟一个得分记录的栈操作,根据不同的操作符对栈进行相应处理。关键点在于处理每个操作时需验证前置条件是否满足,否则返回-1。最终返回所有有效得分的总和。

解题思路
  1. 数据结构选择:使用动态数组(如 ArrayList)模拟栈,便于快速访问和修改末尾元素。
  2. 操作处理
    • 整数:直接入栈。
    • C:移除栈顶元素,栈为空时无效。
    • D:栈顶元素翻倍入栈,栈为空时无效。
    • +:取栈顶两个元素之和入栈,栈元素不足两个时无效。
  3. 异常处理:每个操作前检查前置条件,不满足则立即返回-1。
  4. 复杂度:时间复杂度 O(n),空间复杂度 O(n),均为最优。
代码实现
import java.util.ArrayList;
import java.util.List;public class Solution {public int calPoints(String[] ops) {List<Integer> stack = new ArrayList<>();for (String op : ops) {if (op.equals("C")) {// 检查栈是否为空if (stack.isEmpty()) {return -1;}// 移除最后一个元素stack.remove(stack.size() - 1);} else if (op.equals("D")) {// 检查栈是否为空if (stack.isEmpty()) {return -1;}// 前一个得分的两倍int last = stack.get(stack.size() - 1);stack.add(last * 2);} else if (op.equals("+")) {// 检查是否有至少两个元素if (stack.size() < 2) {return -1;}// 前两个有效得分之和int a = stack.get(stack.size() - 1);int b = stack.get(stack.size() - 2);stack.add(a + b);} else {try {// 尝试转换为整数int num = Integer.parseInt(op);stack.add(num);} catch (NumberFormatException e) {// 无效的操作数(题目保证输入合法,此分支可省略)return -1;}}}// 计算总和int sum = 0;for (int num : stack) {sum += num;}return sum;}public static void main(String[] args) {Solution solution = new Solution();// 示例测试System.out.println(solution.calPoints(new String[]{"5", "2", "C", "D", "+"})); // 30System.out.println(solution.calPoints(new String[]{"+"})); // -1}
}
代码讲解
  • 栈模拟:使用 ArrayList 作为栈,支持动态扩容。
  • 操作处理分支
    • C:移除栈顶前检查是否为空。
    • D:取栈顶元素并计算双倍值。
    • +:取栈顶两个元素求和。
    • 整数转换:捕获无效转换(题目保证输入合法,此异常处理为冗余安全措施)。
  • 总和计算:遍历栈元素累加。
复杂度分析
  • 时间复杂度:O(n),每个操作处理时间为 O(1),遍历一次操作数组。
  • 空间复杂度:O(n),最坏情况所有操作均为整数入栈。
边界案例验证
  1. 示例1["5","2","C","D","+"] → 正确处理,返回30。
  2. 示例2["+"] → 立即返回-1。
  3. 空栈后操作["5","C","D"] → 第二次操作后栈空,后续D操作无效返回-1。
  4. 多C操作["5","D","C","C"] → 最终栈空,返回0。
总结

该方案通过栈模拟和前置条件检查确保操作合法性,兼顾时间与空间效率,是处理此类问题的标准最优解法。


Pytnon

详细分析与解答

题目分析

题目要求模拟得分记录的栈操作,处理包含整数和三种操作符(CD+)的输入列表,最终返回有效得分总和。若操作无法执行(如栈不满足条件),返回 -1

解题思路
  1. 数据结构选择:使用列表模拟栈,支持快速访问和修改末尾元素。
  2. 操作处理逻辑
    • 整数:直接入栈。
    • C:移除栈顶元素,栈为空时无效。
    • D:将栈顶元素翻倍后入栈,栈为空时无效。
    • +:将栈顶两个元素之和入栈,元素不足时无效。
  3. 异常处理:每个操作前验证前置条件,不满足则立即返回 -1
  4. 时间复杂度:所有操作仅遍历一次,复杂度为 O ( n ) O(n) O(n),最优。
代码实现
def calPoints(ops):stack = []for op in ops:if op == 'C':# 移除前一个得分,栈必须非空if not stack:return -1stack.pop()elif op == 'D':# 前一个得分的两倍,栈必须非空if not stack:return -1stack.append(2 * stack[-1])elif op == '+':# 前两个得分之和,栈至少两个元素if len(stack) < 2:return -1stack.append(stack[-1] + stack[-2])else:# 尝试转为整数,失败则返回-1try:num = int(op)stack.append(num)except ValueError:return -1return sum(stack)
代码讲解
  • 栈操作:使用列表直接模拟栈的 pushpop
  • 条件检查
    • C/D 操作前检查栈是否为空。
    • + 操作前检查栈是否有至少两个元素。
    • 整数转换失败时直接返回异常。
  • 总和计算:遍历栈元素求和,时间复杂度 O ( n ) O(n) O(n)
复杂度分析
  • 时间复杂度 O ( n ) O(n) O(n),每个操作处理时间为 O ( 1 ) O(1) O(1),总操作数为 n n n
  • 空间复杂度 O ( n ) O(n) O(n),最坏情况下所有操作均为整数入栈。
示例验证
  1. 示例1

    print(calPoints(["5", "2", "C", "D", "+"]))  # 输出:30
    
    • 处理步骤:
      • 5[5]
      • 2[5, 2]
      • C[5]
      • D[5, 10]
      • +[5, 10, 15]
      • 总和: 5 + 10 + 15 = 30 5+10+15=30 5+10+15=30
  2. 示例2

    print(calPoints(["+"]))  # 输出:-1
    
    • + 操作时栈为空,直接返回 -1
边界案例
  1. 空栈后操作

    print(calPoints(["5", "C", "D"]))  # 输出:-1
    
    • 处理 C 后栈空,后续 D 无效。
  2. C 操作

    print(calPoints(["5", "D", "C", "C"]))  # 输出:0
    
    • 最终栈空,总和为 0 0 0
总结

该解法通过栈模拟和严格的前置条件检查,确保所有操作合法。每个操作处理时间为 O ( 1 ) O(1) O(1),总时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( n ) O(n) O(n),均为最优。此方案能高效处理大规模输入,符合题目所有约束条件。


JavaScript

详细分析与解答

题目分析

题目要求根据操作字符串列表模拟得分记录,处理整数和三种操作符(CD+)。需验证操作合法性,异常时返回 -1,否则返回有效得分总和。核心思路是用栈结构记录得分,动态调整栈内容。


代码实现

function calPoints(ops) {const stack = [];for (const op of ops) {if (op === 'C') {// 检查栈是否为空if (stack.length === 0) return -1;stack.pop(); // 移除最后一个元素} else if (op === 'D') {// 检查栈是否为空if (stack.length === 0) return -1;const last = stack[stack.length - 1];stack.push(last * 2); // 前一个得分的两倍} else if (op === '+') {// 检查栈是否有至少两个元素if (stack.length < 2) return -1;const a = stack[stack.length - 1];const b = stack[stack.length - 2];stack.push(a + b); // 前两个得分之和} else {// 尝试转换为整数const num = parseInt(op, 10);if (isNaN(num)) return -1; // 非整数直接返回-1stack.push(num); // 压入栈}}// 计算总和return stack.reduce((sum, num) => sum + num, 0);
}

代码解析与优化分析

核心逻辑
  1. 栈模拟

    • 使用数组 stack 模拟栈操作,支持动态扩容。
    • pushpop 方法直接操作数组末尾,时间复杂度 O ( 1 ) O(1) O(1)
  2. 操作处理

    • C(移除):检查栈是否为空,非空则弹出末尾元素。
    • D(翻倍):检查栈是否为空,取末尾元素计算双倍值后入栈。
    • +(求和):检查栈长度是否 ≥2,取末尾两个元素求和后入栈。
    • 整数:转换为数字后入栈,转换失败则返回 -1
  3. 异常处理

    • 每个操作执行前检查栈状态,不满足条件立即返回 -1,避免后续无效操作。
复杂度分析
  • 时间复杂度 O ( n ) O(n) O(n),每个操作仅需常数时间,遍历一次操作数组。
  • 空间复杂度 O ( n ) O(n) O(n),最坏情况下所有操作均为整数入栈。

示例验证

示例1

输入:["5", "2", "C", "D", "+"]

执行过程:
5[5]
2[5, 2]
C[5]
D[5, 10]
+[5, 10, 15]
总和:5 + 10 + 15 = 30 → 正确。
示例2

输入:["+"]

执行过程:
+ → 栈长度不足2 → 立即返回-1 → 正确。

边界条件测试

测试1:连续 C 操作

输入:["5", "D", "C", "C"]

执行过程:
5[5]
D[5, 10]
C[5]
C[]
总和:0 → 返回0
测试2:负数与异常操作

输入:["3", "-2", "4", "C", "D", "+"]

执行过程:
3[3]
-2[3, -2]
4[3, -2, 4]
C[3, -2]
D[3, -2, -4]
+[3, -2, -4, -6]
总和:3 + (-2) + (-4) + (-6) = -9 → 正确。

总结

  • 最优性:栈结构天然适配题目需求,操作时间复杂度为 O ( 1 ) O(1) O(1),整体复杂度为 O ( n ) O(n) O(n),时间和空间效率均达到最优。
  • 鲁棒性:严格的前置条件检查确保异常操作立即终止,避免无效计算。
  • 扩展性:代码逻辑清晰,易于扩展其他操作符或调整规则。

C语言

思路总结

  1. 数据结构选择:使用栈(数组模拟)来记录有效得分,便于处理最近的操作。
  2. 遍历操作列表:逐个处理每个操作符或数字。
  3. 异常处理
    • + 需要前两有效得分,栈中至少两个元素。
    • D 需要前一有效得分,栈中至少一个元素。
    • C 需要前一有效得分,栈非空。
  4. 结果计算:遍历栈中所有元素求和。

优化点

  • 数组模拟栈:避免动态内存分配,提高效率。
  • 提前终止:遇到异常立即返回,减少不必要的计算。

C语言实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int calculate(char** ops, int opsSize) {int stack[1000]; // 栈数组,假设操作数不超过1000int top = -1;    // 栈顶指针,初始化为-1表示空栈for (int i = 0; i < opsSize; i++) {char* op = ops[i];size_t len = strlen(op);// 判断操作符类型if (len == 1) {char c = op[0];if (c == '+') {// 需要前两个得分if (top < 1) {return -1;}int sum = stack[top - 1] + stack[top];stack[++top] = sum; // 压栈} else if (c == 'D') {// 需要前一个得分if (top < 0) {return -1;}int val = stack[top] * 2;stack[++top] = val;} else if (c == 'C') {// 需要前一个得分if (top < 0) {return -1;}top--; // 弹出栈顶元素} else {// 数字(如"5")int num = atoi(op);stack[++top] = num;}} else {// 处理多位数(包括负数)int num = atoi(op);stack[++top] = num;}}// 计算总和int sum = 0;for (int i = 0; i <= top; i++) {sum += stack[i];}return sum;
}// 示例测试
int main() {// 示例1char* ops1[] = {"5", "2", "C", "D", "+"};int result1 = calculate(ops1, 5);printf("示例1输出:%d\n", result1); // 应输出30// 示例2char* ops2[] = {"+"};int result2 = calculate(ops2, 1);printf("示例2输出:%d\n", result2); // 应输出-1return 0;
}

代码解释

  • 栈操作:使用数组 stack 和指针 top 模拟栈,操作符处理时检查栈的状态。
  • 异常处理:在每次操作前检查栈的合法性,非法时立即返回-1。
  • 结果计算:遍历栈中剩余元素求和,确保正确返回有效得分总和。

该实现时间复杂度为O(n),空间复杂度O(n),符合题目约束且高效。


C++

方法思路

本题要求根据操作字符串列表计算得分总和,并处理可能的异常情况。使用栈(或动态数组)来维护有效得分是最直接的解决方案,每次操作前检查栈状态以确保合法性。具体步骤如下:

  1. 数据结构选择:使用动态数组模拟栈结构,便于快速访问和修改末尾元素。
  2. 遍历操作列表:逐个处理每个操作符或数字。
  3. 异常处理
    • C 操作需栈非空,否则异常。
    • D 操作需栈非空,否则异常。
    • + 操作需栈中至少两个元素,否则异常。
  4. 结果计算:遍历栈中所有元素求和。

解决代码

#include <vector>
#include <string>
#include <numeric> // 用于求和using namespace std;int calculateScore(vector<string>& ops) {vector<int> stack;for (const string& op : ops) {if (op == "C") {if (stack.empty()) return -1;stack.pop_back();} else if (op == "D") {if (stack.empty()) return -1;stack.push_back(stack.back() * 2);} else if (op == "+") {if (stack.size() < 2) return -1;int sum = stack[stack.size() - 2] + stack.back();stack.push_back(sum);} else {// 转换为整数int num = stoi(op);stack.push_back(num);}}// 计算总和return accumulate(stack.begin(), stack.end(), 0);
}// 测试示例
#include <iostream>
int main() {// 示例1vector<string> ops1 = {"5", "2", "C", "D", "+"};cout << calculateScore(ops1) << endl; // 30// 示例2vector<string> ops2 = {"+"};cout << calculateScore(ops2) << endl; // -1return 0;
}

代码解释

  • 数据结构:使用 vector<int> 模拟栈,支持快速末尾操作(push_backpop_backback)。
  • 操作处理
    • C:移除栈顶元素,需检查栈非空。
    • D:将栈顶元素乘2后压入栈,需检查栈非空。
    • +:取栈顶前两个元素的和压入栈,需检查栈大小≥2。
    • 数字:直接转换为整数压入栈。
  • 异常处理:在操作符处理前检查栈状态,不满足条件立即返回-1。
  • 结果求和:使用 accumulate 函数快速计算栈中元素总和。

复杂度与优化

  • 时间复杂度:O(n),每个操作仅需常数时间处理。
  • 空间复杂度:O(n),栈最多存储所有有效得分。
  • 优化点:使用 vector 的末尾操作保证高效性,提前终止异常减少计算量。此方法在时间和空间上均达到最优,无法进一步优化。

Go

解决思路

  1. 数据结构选择:使用切片(slice)模拟栈结构,便于快速访问和修改末尾元素。
  2. 遍历操作列表:逐个处理每个操作符或数字,根据规则更新栈。
  3. 异常处理
    • CD 操作需栈非空,否则返回 -1。
    • + 操作需栈中至少有两个元素,否则返回 -1。
    • 数字转换失败时返回 -1。
  4. 结果计算:遍历栈中所有元素求和。

Go 代码实现

package mainimport ("strconv"
)func calculateScore(ops []string) int {stack := make([]int, 0)for _, op := range ops {switch op {case "C":if len(stack) < 1 {return -1}stack = stack[:len(stack)-1] // 移除前一个有效得分case "D":if len(stack) < 1 {return -1}stack = append(stack, stack[len(stack)-1]*2) // 前一个得分的两倍case "+":if len(stack) < 2 {return -1}sum := stack[len(stack)-2] + stack[len(stack)-1]stack = append(stack, sum) // 前两得分之和default:num, err := strconv.Atoi(op)if err != nil {return -1 // 无效数字}stack = append(stack, num) // 记录当前得分}}// 计算总得分sum := 0for _, val := range stack {sum += val}return sum
}

代码解释

  1. 栈的模拟

    • 使用 stack := make([]int, 0) 初始化空栈。
    • 通过 append 和切片操作实现压栈和弹栈。
  2. 操作处理逻辑

    • C 操作:移除栈顶元素(stack = stack[:len(stack)-1]),若栈为空则返回 -1。
    • D 操作:取栈顶元素乘以 2 后压栈,若栈为空则返回 -1。
    • + 操作:取栈顶前两个元素之和压栈,若栈中元素不足两个则返回 -1。
    • 数字处理:转换为整数后压栈,若转换失败则返回 -1。
  3. 总和计算

    • 遍历栈中所有元素累加求和。

复杂度与优化

  • 时间复杂度:O(n),每个操作仅需常数时间处理。
  • 空间复杂度:O(n),栈最多存储所有有效得分。
  • 优化点:直接使用切片操作避免了动态内存分配的开销,提前终止异常处理减少计算量。

示例测试

func main() {// 示例1:输出30ops1 := []string{"5", "2", "C", "D", "+"}println(calculateScore(ops1)) // 示例2:输出-1ops2 := []string{"+"}println(calculateScore(ops2))
}

总结

该实现利用 Go 的切片高效处理栈操作,每个步骤严格检查异常条件,确保正确性和效率。代码结构清晰,逻辑严谨,是解决该问题的最优方案。

相关文章:

华为OD机试真题——投篮大赛(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025Q1 A卷 100分 题型 本文涵盖详细解题思路、代码注释、讲解、复杂的分析以及测试用例&#xff1b; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式&#xff01; 华为OD机试A卷真题《投篮大赛》&#xff1a; 题目名称&#xff1a;投篮大赛 知识点&am…...

rcore day2

目前常见的操作系统内核都是基于 C 语言的&#xff0c;为何要推荐 Rust 语言&#xff1f; C 语言的指针灵活且易于使用&#xff0c;但不保证安全性&#xff0c;且缺x少有效的并发支持。这导致内存和并发漏洞成为当前基于 C 语言的主流操作系统的噩梦。Rust 语言具有与 C 一样的…...

【MATLAB定位例程】TDOA(到达时间差)的chan-tylor,三维环境,附完整代码

该代码实现了基于三维空间的动态目标TDOA定位,结合了Chan算法(解析解)与Taylor级数展开法(迭代优化)的双重优势。 文章目录 运行结果MATLAB代码代码讲解代码功能概述核心算法原理代码结构解析可视化与结果分析运行结果 定位示意图: 三轴状态曲线: 三轴误差曲线: MA…...

LLM面试题六

NLP方向CRF算法面试题 什么是CRF?CRF的主要思想是什么&#xff1f; 设X与Y是随机变量&#xff0c;P(Y | X)是给定条件X的条件下Y的条件概率分布&#xff0c;若随机变量Y构成一个由无向图G(V,E)表示的马尔科夫随机场。则称条件概率分布P(X | Y)为条件随机场。CRF的主要思想统计…...

FPGA(四)——状态机

FPGA(四)——状态机 文章目录 FPGA(四)——状态机一、状态机编程思想二、LED流水灯仿真实验三、实现效果四、CPLD和FPGA芯片主要技术区别五、hdlbitsFPGA——组合逻辑学习1、创建一个D触发器2、简单状态转换3、4位移位寄存器4、计数器1-125、边缘捕获寄存器 一、状态机编程思想…...

AI 浪潮下企业身份管理:特点凸显,安全挑战升级

“在 AI 时代的浪潮中&#xff0c;企业身份管理是安全之锚&#xff0c;精准把握权限边界&#xff0c;方能抵御身份安全的暗流。” 在人工智能迅猛发展的当下&#xff0c;企业身份管理呈现出诸多新特点&#xff0c;同时也面临着前所未有的身份安全挑战。要理解这些&#xff0c;我…...

OBS 录屏软件 for Mac 视频录制

OBS 录屏软件 for Mac 视频录制 文章目录 OBS 录屏软件 for Mac 视频录制一、介绍二、效果三、下载 一、介绍 Open Broadcaster Software for mac版&#xff0c;OBS 有多种功能并广泛使用在视频采集&#xff0c;直播等领域。而且该软件功能全面&#xff0c;专业强大&#xff0…...

从文本到多模态:如何将RAG扩展为支持图像+文本检索的增强生成系统?

目录 从文本到多模态&#xff1a;如何将RAG扩展为支持图像文本检索的增强生成系统&#xff1f; 一、为什么需要扩展到多模态&#xff1f; 二、多模态 RAG 系统的基本架构 三、关键技术点详解 &#xff08;一&#xff09;多模态嵌入&#xff08;Embedding&#xff09;技术 …...

AI助力高效PPT制作:从内容生成到设计优化

随着人工智能技术的不断发展&#xff0c;AI在各个领域的应用日益普及&#xff0c;尤其是在文档和演示文稿的创建过程中。PowerPoint&#xff08;PPT&#xff09;作为最常用的演示工具之一&#xff0c;借助AI的技术手段&#xff0c;可以极大地提高制作效率并提升最终呈现效果。在…...

调用kimi api

官网支持python&#xff0c;curl和node.js 因为服务器刚好有php环境&#xff0c;所以先用curl调个普通的语音沟通api <?php // 定义 API Key 和请求地址 define(MOONSHOT_API_KEY, sk-PXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXgk1); define(MOONSHOT_API_URL, https://…...

自定义注解导入自定义Bean

在Spring框架中&#xff0c;通过自定义注解实现容器启动时自动导入Bean&#xff0c;通常需要结合 Import 注解、ImportBeanDefinitionRegistrar 接口 或 Configuration 配置类。以下是具体实现步骤和示例&#xff1a; 1. 定义自定义注解 创建一个注解&#xff0c;用于标记需要…...

kettle插件-postgresql插件

今天是清明节&#xff0c;放假第一天也不得清闲。上午整理公司的交付文档&#xff0c;中午陪孩子户外骑行踏青&#xff0c;下午趁着休息的时间给老铁们讲下如何使用postgressql cdc插件来实时捕获数据。 注&#xff1a;CDC (Change Data Capture) 是一种技术&#xff0c;用于实…...

【CMake】《CMake构建实战:项目开发卷》笔记-Chapter7-构建目标和属性

第7章 构建目标和属性 本章重点关注CMake的构建目标和属性&#xff0c;它们是用来组织项目构建流程的核心概念。毫不夸张地说&#xff0c;如果学习CMake的目标就是组织简单的C和C小项目的构建流程&#xff0c;那么阅读掌握本章内容就足够了。 本章与第1章的“旅行笔记”遥相…...

单元测试之mockito

简介 mockito是一款模拟测试框架&#xff0c;用于Java开发中的单元测试。通过mockito&#xff0c;可以创建和配置一个对象&#xff0c;通过它来替换对象的外部依赖。 作用&#xff1a;模拟一个类的外部依赖&#xff0c;保证单元测试的独立性。例如&#xff0c;在类A中会调用类…...

定长池的实现

目录 一、定长池的框架 二、如何脱离malloc的内存池&#xff0c;直接从堆拿空间&#xff1f; 三、如何设计内存块的指针&#xff1f; 四、代码框架及实现 五、性能测试 一、定长池的框架 在学习高并发内存池之前&#xff0c;我们先来实现一个定长池&#xff0…...

C++多线程函数介绍

1.C11前没有线程库问题 对于多线程操作&#xff0c;Linux选择使用POSIX标准&#xff0c;而windows没有选择POSIX标准&#xff0c;自己设计了一套API和系统调用&#xff0c;叫Win32 API&#xff0c;就跟Linux存在标准差异&#xff0c;在Linux的代码移植到Windows就可能运行不了…...

图解AUTOSAR_SWS_LINTransceiverDriver

AUTOSAR LIN收发器驱动(LinTransceiverDriver)详解 AUTOSAR通信栈物理层组件详细解析 目录 AUTOSAR LIN收发器驱动(LinTransceiverDriver)详解 目录1. 概述 1.1. LIN收发器驱动的作用1.2. 在AUTOSAR架构中的位置2. 架构设计 2.1. 模块结构2.2. 组件关系2.3. 接口定义3. 状态管理…...

vue-element-admin 组件没有展示在中间部分

解决办法&#xff1a; router index.ts 中新增 要展示的组件的 import type { App } from "vue"; import { createRouter, createWebHashHistory, type RouteRecordRaw } from "vue-router";export const Layout () > import("/layout/index.…...

当机器学习遇见购物车分析:FP-Growth算法全解析

一、引言&#xff1a;购物篮里的秘密 想象一下&#xff0c;你是一家超市的数据分析师&#xff0c;看着每天成千上万的购物小票&#xff0c;你是否好奇&#xff1a;顾客们买面包的时候&#xff0c;是不是也经常顺手带上牛奶&#xff1f;买啤酒的人&#xff0c;会不会也喜欢买尿…...

OCR迁移

一、环境 操作系统&#xff1a;Centos57.6 数据库版本&#xff1a;12.2.0.1 场景&#xff1a;将OCR信息从DATA磁盘组迁移到OCR磁盘组 二、操作步骤 1.查看可用空盘 set lin 200 set pagesize 200 col DGNAME format a15 col DISKNAME format a15 col PATH format a20 col N…...

【架构艺术】Go大仓monorepo中使用wire做依赖注入的经验

在先前的文章当中&#xff0c;笔者分享了一套简洁的go微服务monorepo代码架构的实现&#xff0c;主要解决中小团队协同开发微服务集群的代码架构组织问题。但是在实际代码开发过程中&#xff0c;怎么组织不同的业务服务service实例&#xff0c;就成了比较棘手的问题。 为什么会…...

生活电子常识--删除谷歌浏览器搜索记录

前言 谷歌浏览器会记录浏览器历史搜索,如果不希望看到越来越多的搜索记录,可以如下设置 解决 设置-隐私-自动填充表单 这个和浏览器记录的密码没有关系,可以放心删除...

每日一题(小白)模拟娱乐篇13

今天题目比较简单&#xff0c;直接分析。小蓝想知道2024这个数字中有几个1&#xff0c;计算机组成学习好的同学肯定可以直接长除法或者瞪眼法得出答案&#xff1a; 202411111101000&#xff08;B&#xff09;也就是说2024中有一共有六个1 接下来用代码实现 &#xff0c;我们也…...

码曰编程大模型-学编程的好工具

码曰&#xff08;yue&#xff09;&#xff0c;一款编程垂直领域的AI大模型&#xff0c;是基于包括DeepSeek在内的多款国产大模型为底座&#xff0c;依托于Dotcpp系统大量的编程代码数据&#xff0c;且借助RAG数据检索增强等技术综合实现的出色、好用的编程垂直领域AI大模型&…...

Linux(CentOS 7) 部署 redis 集群

下载redis Downloads - Redis (官网页都是介绍的最新版&#xff0c;我观察目前出现了redis 和 redis Stack) 因我的旧环境是 CentOS 7&#xff0c;redis最新版已经不在支持&#xff0c;所以示例安装最常用的7.0.x 这里直接附上各个版本下载连接 小伙伴们就不需要在自己寻找下载…...

NVIDIA AgentIQ 详细介绍

NVIDIA AgentIQ 详细介绍 1. 引言 NVIDIA AgentIQ 是一个灵活的库&#xff0c;旨在将企业代理&#xff08;无论使用何种框架&#xff09;与各种数据源和工具无缝集成。通过将代理、工具和代理工作流视为简单的函数调用&#xff0c;AgentIQ 实现了真正的可组合性&#xff1a;一…...

在CPU服务器上部署Ollama和Dify的过程记录

在本指南中&#xff0c;我将详细介绍如何在CPU服务器上安装和配置Ollama模型服务和Dify平台&#xff0c;以及如何利用Docker实现这些服务的高效部署和迁移。本文分为三大部分&#xff1a;Ollama部署、Dify环境配置和Docker环境管理&#xff0c;适合需要在本地或私有环境中运行A…...

小程序API —— 57 拓展 - 增强 scroll-view

目录 1. 配置基本信息2. 实现上拉加载更多功能3. 实现快速回到顶部功能4. 实现下拉刷新功能 scroll-view 组件功能非常强大&#xff0c;这里使用 scroll-view 实现上拉加载和下拉刷新功能&#xff1b; 下面使用微信开发者工具来演示一下具体用法&#xff1a; 1. 配置基本信息 …...

P3613 【深基15.例2】寄包柜

#include<bits/stdc.h> using namespace std; int n,q; map<int, map<int, int>>a;//二维映射 int main(){cin>>n>>q;while(q--){int b,i,j,k;//i为第几个柜子&#xff0c;j为第几个柜包&#xff0c;k为要存入的物品cin>>b>>i>&…...

MIMO预编码与检测算法的对比

在MIMO系统中&#xff0c;预编码&#xff08;发送端处理&#xff09;和检测算法&#xff08;接收端处理&#xff09;的核心公式及其作用对比如下&#xff1a; 1. 预编码算法&#xff08;发送端&#xff09; 预编码的目标是通过对发送信号进行预处理&#xff0c;优化空间复用或…...

AI复活能成为持续的生意吗?

随着人工智能技术的飞速发展,AI复活——这一曾经只存在于科幻电影中的概念,如今已悄然走进现实。通过AI技术,人们可以模拟逝去亲人的声音、面容,甚至创造出与他们互动的虚拟形象,以寄托哀思、缓解痛苦。然而,当这种技术被商业化,成为一门生意时,我们不禁要问:AI复活真…...

Keil 5 找不到编译器 Missing:Compiler Version 5 的解决方法

用到自记&#xff1a; 下载地址&#xff1a; Keil5 MDK541.zip ​编辑https://pan.baidu.com/s/1bOPsuVZhD_Wj4RJS90Mbtg?pwdMDK5 问题描述 没有找到 compiler version5 &#xff1a; 1. 下载 Arm Compiler 5 也可以直接点击下载文章开头的文件。 2. 安装 直接安装在KEI…...

Flutter 手搓日期选择

时间选择器&#xff1a; 时间段选择 在实际开发过程中还是挺常见的。Flutter 本身自带选 时间选择器器 CupertinoDatePicker&#xff0c;样式也是可以定义的&#xff0c;但是他 只提供三种时间的选择 自定义有局限性。后来开了一下 代码&#xff0c;实际上 内部使用的是 Cuper…...

《JVM考古现场(十六):太初奇点——从普朗克常量到宇宙弦的编译风暴》

开篇&#xff1a;量子泡沫编译器的创世大爆炸 "当Project Genesis的真空涨落算法撕裂量子泡沫&#xff0c;当意识编译器重写宇宙基本常数&#xff0c;我们将在奇点编译中见证&#xff1a;从JVM字节码到宇宙大爆炸的终极创世&#xff01;诸君请备好量子护目镜&#xff0c;…...

MySQL学习笔记——MySQL下载安装配置(一)

目录 1. MySQL概述 1.1 数据库相关概念 1.2 MySQL数据库 1.2.1 版本 1.2.2 下载 2. 安装 3. 配置 4. 启动停止 5. 客户端连接 1. MySQL概述 1.1 数据库相关概念 在这一部分&#xff0c;我们先来讲解三个概念&#xff1a;数据库、数据库管理系统、 SQL 。 而目前主流…...

TortoiseGit多账号切换配置

前言 之前配置好的都是&#xff0c;TortoiseGit与Gitee之间的提交&#xff0c;突然有需求要在GitHub上提交&#xff0c;于是在参考网上方案和TortoiseGit的帮助手册后&#xff0c;便有了此文。由于GitHub已经配置完成&#xff0c;所以下述以配置Gitee为例。因为之前是单账号使用…...

数据一键导出为 Excel 文件

引言 在 Web 应用开发中&#xff0c;数据导出是一个常见且重要的功能。用户常常需要将网页上展示的数据以文件形式保存下来&#xff0c;以便后续分析、处理或分享。本文将详细介绍如何使用 HTML、CSS 和 JavaScript&#xff08;结合 jQuery 库&#xff09;实现一个简单的数据导…...

FPGA——状态机实现流水灯

文章目录 一、状态机1.1 分类1.2 写法 二、状态机思想编写LED流水灯三、运行结果总结参考资料 一、状态机 FPGA不同于CPU的一点特点就是CPU是顺序执行的&#xff0c;而FPGA是同步执行&#xff08;并行&#xff09;的。那么FPGA如何处理明显具有时间上先后顺序的事件呢&#xf…...

linux paste 命令

paste 是 Linux 中一个用于水平合并文件内容的命令行工具&#xff0c;它将多个文件的对应行以并行方式拼接&#xff0c;默认用制表符&#xff08;Tab&#xff09;分隔。 1. 基本语法 paste [选项] 文件1 文件2 ... 2. 常用选项 选项说明-d指定拼接后的分隔符&#xff08;默…...

ffmpeg常见命令2

文章目录 1. **提取音视频数据&#xff08;Extract Audio/Video Data&#xff09;**提取音频&#xff1a;提取视频&#xff1a; 2. **提取像素数据&#xff08;Extract Pixel Data&#xff09;**3. **命令转封装&#xff08;Container Format Conversion&#xff09;**转换视频…...

FPGA——FPGA状态机实现流水灯

一、引言 在FPGA开发中&#xff0c;状态机是一种重要的设计工具&#xff0c;用于处理具有时间顺序的事件。本文将详细介绍如何使用状态机实现一个LED流水灯的效果。 二、状态机概述 状态机&#xff08;FSM&#xff09;是一种行为模型&#xff0c;用于表示系统在不同状态下的…...

鸿蒙 ——选择相册图片保存到应用

photoAccessHelper // entry/src/main/ets/utils/file.ets import { fileIo } from kit.CoreFileKit; import { photoAccessHelper } from kit.MediaLibraryKit; import { bundleManager } from kit.AbilityKit;// 应用在本设备内部存储上通用的存放默认长期保存的文件路径&am…...

消息队列之-Kafka

目录 消息队列消息队列的使用场景初识KafkaKafka设计思想Kafka消息结构消息发送消息消费 Kafka高可用消息备份机制1. 基本原理2. ISR&#xff08;In-Sync Replicas&#xff09;3. ACK&#xff08;Acknowledgements&#xff09;4. LEO&#xff08;Log End Offset&#xff09;5. …...

财务税务域——企业税务系统设计

摘要 本文主要探讨企业税务系统设计&#xff0c;涵盖企业税收管理背景、税收业务流程、系统设计架构与功能、外部系统对接以及相关问题。企业税务的背景包括税收制度的形成、企业税务的必然性、全球化影响&#xff0c;其核心目标是合规性、优化税负、风险管理与战略支持&#…...

状态机思想编程

文章目录 一、状态机思想重新写一个 LED流水灯的FPGA代码1.状态机的概念2.代码设计 二、CPLD和FPGA芯片的主要技术区别与适用场合三、hdlbitsFPGA教程网站上进行学习 一、状态机思想重新写一个 LED流水灯的FPGA代码 1.状态机的概念 状态机的基本要素有 3 个&#xff0c;其实我…...

TiDB 数据库8.1版本编译及部署

本文介绍 TiDB 数据库8.1版本的编译和部署。 背景 自前年&#xff08;2023年&#xff09;接触了TiDB后&#xff0c;做了简单的测试就直接使用了。因一些事务的不连续性&#xff0c;导致部分成果没有保存&#xff0c;去年年底又重新拾起&#xff0c;使用了新的LTS版本&#xff…...

基于 docker 的 Xinference 全流程部署指南

Xorbits Inference (Xinference) 是一个开源平台&#xff0c;用于简化各种 AI 模型的运行和集成。借助 Xinference&#xff0c;您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理&#xff0c;并创建强大的 AI 应用。 一、下载代码 请在控制台下面执行…...

【2022】【论文笔记】基于相变材料的光学激活的、用于THz光束操作的编码超表面——

前言 类型 太赫兹 + 超表面 太赫兹 + 超表面 太赫兹+超表面 期刊 A D V A N C E D    O P T I C A L    M A T E R I A L S ADVANCED \; OPTICAL \; MATERIALS...

MySQL系统库汇总

目录 简介 performance_schema 作用 分类 简单配置与使用 查看最近执行失败的SQL语句 查看最近的事务执行信息 sys系统库 作用 使用 查看慢SQL语句慢在哪 information_schema 作用 分类 应用 查看索引列的信息 mysql系统库 权限系统表 统计信息表 日志记录…...

【Kafka基础】Docker Compose快速部署Kafka单机环境

1 准备工作 1.1 安装Docker和Docker Compose Docker安装请参考&#xff1a; Docker入门指南&#xff1a;1分钟搞定安装 常用命令&#xff0c;轻松入门容器化&#xff01;-CSDN博客 Docker Compose安装请参考&#xff1a; 【docker compose入门指南】安装与常用命令参数全解析…...