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

2023年09月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

在这里插入图片描述

C/C++编程(1~8级)全部真题・点这里
Python编程(1~6级)全部真题・点这里

第1题:生日相同

在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。
时间限制:1000
内存限制:65536
输入
第一行为整数n,表示有n个学生,n ≤ 180。此后每行包含一个字符串和两个整数,分别表示学生的名字(名字第一个字母大写,其余小写,不含空格,且长度小于20)和出生月(1 ≤ m ≤ 12)日(1 ≤ d ≤ 31)。名字、月、日之间用一个空格分隔
输出
每组生日相同的学生,输出一行,其中前两个数字表示月和日,后面跟着所有在当天出生的学生的名字,数字、名字之间都用一个空格分隔。对所有的输出,要求按日期从前到后的顺序输出。 对生日相同的名字,按名字从短到长按序输出,长度相同的按字典序输出。如没有生日相同的学生,输出”None”
样例输入
6
Avril 3 2
Candy 4 5
Tim 3 2
Sufia 4 5
Lagrange 4 5
Bill 3 2
样例输出
3 2 Tim Bill Avril
4 5 Candy Sufia Lagrange

以下是使用C语言编程解决方案:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_STUDENTS 180
#define MAX_NAME_LENGTH 20// 定义学生结构体
typedef struct {char name[MAX_NAME_LENGTH];int month;int day;
} Student;// 比较函数:按照生日先后顺序进行比较
int compare(const void* a, const void* b) {const Student* studentA = (const Student*)a;const Student* studentB = (const Student*)b;if (studentA->month != studentB->month) {return studentA->month - studentB->month;} else {return studentA->day - studentB->day;}
}int main() {int n;  // 学生数量scanf("%d", &n);// 创建学生数组Student students[MAX_STUDENTS];// 读取学生信息for (int i = 0; i < n; i++) {scanf("%s %d %d", students[i].name, &students[i].month, &students[i].day);}// 按照生日先后顺序对学生数组进行排序qsort(students, n, sizeof(Student), compare);// 遍历学生数组,找出生日相同的学生int currentMonth = students[0].month;int currentDay = students[0].day;int count = 1;  // 相同生日学生的数量for (int i = 1; i < n; i++) {if (students[i].month == currentMonth && students[i].day == currentDay) {count++;} else {if (count > 1) {// 输出生日相同的学生信息printf("%d %d", currentMonth, currentDay);for (int j = i - count; j < i; j++) {printf(" %s", students[j].name);}printf("\n");}currentMonth = students[i].month;currentDay = students[i].day;count = 1;}}// 输出最后一组生日相同的学生信息if (count > 1) {printf("%d %d", currentMonth, currentDay);for (int j = n - count; j < n; j++) {printf(" %s", students[j].name);}printf("\n");}// 如果没有生日相同的学生if (currentMonth == students[n - 1].month && currentDay == students[n - 1].day && count == 1) {printf("None\n");}return 0;
}

在这个解决方案中,我们使用了一个Student结构体来存储学生的姓名、月份和日期信息。

首先,我们读取学生的数量。

然后,创建一个学生数组students,并使用循环逐个读取学生的姓名、月份和日期信息。

接下来,我们使用qsort函数对学生数组进行排序,按照生日先后顺序进行排序,使用自定义的compare函数进行比较。

然后,我们遍历学生数组,找出生日相同的学生。通过维护一个当前生日的月份和日期,以及一个计数器count来判断是否有相同生日的学生。

当遇到新的生日时,如果count大于1,则输出上一个生日相同的学生组的信息,包括月份、日期和学生的姓名。

最后,如果最后一组生日相同的学生的count大于1,则输出最后一组生日相同的学生组的信息。

如果没有生日相同的学生,则输出"None"。

第2题:合法出栈序列

给定一个由不同小写字母构成的长度不超过8的字符串x,现在要将该字符串的字符依次压入栈中,然后再全部弹出。
要求左边的字符一定比右边的字符先入栈,出栈顺序无要求。
再给定若干字符串,对每个字符串,判断其是否是可能的x中的字符的出栈序列。
时间限制:1000
内存限制:65536
输入
第一行是原始字符串x 后面有若干行,每行一个字符串
输出
对除第一行以外的每个字符串,判断其是否是可能的出栈序列。如果是,输出"YES",否则,输出"NO"
样例输入
abc
abc
bca
cab
样例输出
YES
YES
NO

以下是解决该问题的C语言代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_LENGTH 9// 定义栈结构
typedef struct {char data[MAX_LENGTH];int top;
} Stack;// 初始化栈
void initStack(Stack* stack) {stack->top = -1;
}// 入栈操作
void push(Stack* stack, char c) {stack->data[++stack->top] = c;
}// 出栈操作
char pop(Stack* stack) {return stack->data[stack->top--];
}// 判断字符串是否是可能的出栈序列
int isPossibleSequence(const char* x, const char* sequence) {int xLen = strlen(x);int seqLen = strlen(sequence);if (xLen != seqLen) {return 0;}Stack stack;initStack(&stack);int xIndex = 0;int seqIndex = 0;while (xIndex < xLen && seqIndex < seqLen) {if (stack.top >= 0 && stack.data[stack.top] == sequence[seqIndex]) {// 栈顶元素与序列当前字符相等,出栈pop(&stack);seqIndex++;} else if (x[xIndex] == sequence[seqIndex]) {// x当前字符与序列当前字符相等,入栈push(&stack, x[xIndex]);xIndex++;} else {// x当前字符与序列当前字符都不相等,不满足条件return 0;}}// 检查栈是否为空while (stack.top >= 0 && seqIndex < seqLen) {if (stack.data[stack.top] == sequence[seqIndex]) {// 栈顶元素与序列当前字符相等,出栈pop(&stack);seqIndex++;} else {// 栈顶元素与序列当前字符不相等,不满足条件return 0;}}return stack.top == -1 && seqIndex == seqLen;
}int main() {char x[MAX_LENGTH];scanf("%s", x);int n;scanf("%d", &n);char sequence[MAX_LENGTH];for (int i = 0; i < n; i++) {scanf("%s", sequence);if (isPossibleSequence(x, sequence)) {printf("YES\n");} else {printf("NO\n");}}return 0;
}

在这个解决方案中,我们使用了一个栈来模拟字符的入栈和出栈操作。

首先,我们读取原始字符串x,并获取其长度。

然后,读取整数n,表示待判断的出栈序列的数量。

接下来,我们使用一个循环,对每个出栈序列进行判断。

在判断函数isPossibleSequence中,我们使用两个指针xIndex和seqIndex分别表示原始字符串x和当前出栈序列的位置。

我们使用一个while循环来遍历出栈序列,同时判断字符的入栈和出栈操作。

如果栈顶元素与序列当前字符相等,则出栈,seqIndex加一。

如果x当前字符与序列当前字符相等,则入栈,xIndex加一。

如果x当前字符与序列当前字符都不相等,则不满足条件,返回0。

在遍历完出栈序列后,我们检查栈是否为空,以及seqIndex是否等于序列长度,如果满足条件,则返回1,否则返回0。

最后,根据返回的结果,输出"YES"或"NO"。

第3题:括号画家

Candela是一名漫画家,她有一个奇特的爱好,就是在纸上画括号。这一天,刚刚起床的Candela画了一排括号序列,其中包含小括号()、中括号[]和大括号{},总长度为N。这排随意绘制的括号序列显得杂乱无章,于是Candela定义了什么样的括号序列是美观的:
(1) 空的括号序列是美观的;
(2) 若括号序列A是美观的,则括号序列(A)、[A]、{A}也是美观的;
(3) 若括号序列A、B都是美观的,则括号序列AB也是美观的;
例如 [(){}]() 是美观的括号序列,而 )({)[}]( 则不是。
现在Candela想知道她画出的括号序列是不是美观的。你能帮帮她吗?
时间限制:1000
内存限制:262144
输入
一个括号序列,长度不超过10000。
输出
如果它是美观的,输出Yes,否则输出No。
样例输入
{}[(){}]()
样例输出
Yes

以下是解决该问题的C语言代码:

#include <stdio.h>
#include <stdlib.h>#define MAX_LENGTH 10001// 定义栈结构
typedef struct {char data[MAX_LENGTH];int top;
} Stack;// 初始化栈
void initStack(Stack* stack) {stack->top = -1;
}// 入栈操作
void push(Stack* stack, char c) {stack->data[++stack->top] = c;
}// 出栈操作
char pop(Stack* stack) {return stack->data[stack->top--];
}// 判断括号是否匹配
int isMatching(char open, char close) {if (open == '(' && close == ')') {return 1;} else if (open == '[' && close == ']') {return 1;} else if (open == '{' && close == '}') {return 1;} else {return 0;}
}// 判断括号序列是否美观
int isBeautifulSequence(const char* sequence) {Stack stack;initStack(&stack);int i = 0;while (sequence[i] != '\0') {if (sequence[i] == '(' || sequence[i] == '[' || sequence[i] == '{') {// 左括号入栈push(&stack, sequence[i]);} else if (sequence[i] == ')' || sequence[i] == ']' || sequence[i] == '}') {// 右括号与栈顶元素进行匹配if (stack.top < 0 || !isMatching(stack.data[stack.top], sequence[i])) {// 栈为空或者匹配失败,不满足美观条件return 0;} else {// 括号匹配成功,出栈pop(&stack);}}i++;}// 检查栈是否为空return stack.top == -1;
}int main() {char sequence[MAX_LENGTH];scanf("%s", sequence);if (isBeautifulSequence(sequence)) {printf("Yes\n");} else {printf("No\n");}return 0;
}

在这个解决方案中,我们使用一个栈来模拟括号的匹配过程。

首先,我们定义了一个栈结构Stack,其中data数组用于存储括号,top表示栈顶索引。

然后,我们定义了initStack函数用于初始化栈,push函数用于将括号入栈,pop函数用于将括号出栈。

接下来,我们定义了isMatching函数,用于判断左右括号是否匹配。

在判断函数isBeautifulSequence中,我们遍历括号序列中的每个字符。

如果字符是左括号,则将其入栈。

如果字符是右括号,则与栈顶元素进行匹配判断。如果栈为空或者匹配失败,即不满足美观条件,返回0;否则,括号匹配成功,将栈顶元素出栈。

在遍历完括号序列后,我们检查栈是否为空,如果为空,则满足美观条件,返回1;否则,栈中还有未匹配的左括号,不满足美观条件,返回0。

最后,根据返回的结果,输出"Yes"或"No"。

第4题:表达式求值

求一个可能包含加、减、乘、除、乘方运算的中缀表达式的值。
在计算机中,我们常用栈来解决这一问题。首先将中缀表达式转换到后缀表达式,然后对后缀表达式求值。
加、减、乘、除、乘方分别用+,-,*, /, ^来表示。表达式可以有圆括号()。
时间限制:1000
内存限制:65536
输入
第一行为测试数据的组数N。 接下来的N行,每行是一个中缀表达式。 每个表达式中,圆括号、运算符和运算数相互之间都用空格分隔,运算数是整数。一般运算数可正可负(负数的符号和数字之间无空格),指数一定为自然数(0和正整数)。不必考虑除0的情况。每个运算数均可由int放下。不必考虑溢出。中缀表达式的字符串长度不超过600。乘方的优先级比乘除都高,结合性是向左结合,如2 ^ 3 ^ 4表示( 2 ^ 3 ) ^ 4 = 4096。除法的商向下取整。
输出
对每一组测试数据输出一行,为表达式的值
样例输入
2
31 * ( 5 - ( -3 + 25 ) ) + 70 ^ 2
2 * 5 + 6 * ( 7 - 8 ) + 6
样例输出
4373
10

以下是解决该问题的C语言代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>#define MAX_LENGTH 601// 定义运算符栈结构
typedef struct {char data[MAX_LENGTH];int top;
} OperatorStack;// 定义操作数栈结构
typedef struct {int data[MAX_LENGTH];int top;
} OperandStack;// 初始化运算符栈
void initOperatorStack(OperatorStack* stack) {stack->top = -1;
}// 运算符栈是否为空
int isOperatorStackEmpty(OperatorStack* stack) {return stack->top == -1;
}// 入栈操作
void pushOperatorStack(OperatorStack* stack, char c) {stack->data[++stack->top] = c;
}// 出栈操作
char popOperatorStack(OperatorStack* stack) {return stack->data[stack->top--];
}// 获取运算符栈顶元素
char getOperatorStackTop(OperatorStack* stack) {return stack->data[stack->top];
}// 初始化操作数栈
void initOperandStack(OperandStack* stack) {stack->top = -1;
}// 操作数栈是否为空
int isOperandStackEmpty(OperandStack* stack) {return stack->top == -1;
}// 入栈操作
void pushOperandStack(OperandStack* stack, int num) {stack->data[++stack->top] = num;
}// 出栈操作
int popOperandStack(OperandStack* stack) {return stack->data[stack->top--];
}// 获取操作数栈顶元素
int getOperandStackTop(OperandStack* stack) {return stack->data[stack->top];
}// 判断运算符的优先级
int getPriority(char c) {if (c == '+' || c == '-') {return 1;} else if (c == '*' || c == '/') {return 2;} else if (c == '^') {return 3;} else {return 0;}
}// 判断字符是否为运算符
int isOperator(char c) {return (c == '+' || c == '-' || c == '*' || c == '/' || c == '^');
}// 执行运算
int performOperation(int operand1, int operand2, char operator) {switch (operator) {case '+':return operand1 + operand2;case '-':return operand1 - operand2;case '*':return operand1 * operand2;case '/':return operand1 / operand2;case '^':return pow(operand1, operand2);default:return 0;}
}// 将中缀表达式转换为后缀表达式
void infixToPostfix(char* infixExpression, char* postfixExpression) {OperatorStack operatorStack;initOperatorStack(&operatorStack);int infixLength = strlen(infixExpression);int postfixIndex = 0;for (int i = 0; i < infixLength; i++) {char currentChar = infixExpression[i];if (isspace(currentChar)) {continue;  // 忽略空格}if (isdigit(currentChar)) {// 如果是数字,直接添加到后缀表达式中postfixExpression[postfixIndex++] = currentChar;} else if (currentChar == '(') {// 如果是左括号,入栈pushOperatorStack(&operatorStack, currentChar);} else if (isOperator(currentChar)) {// 如果是运算符while (!isOperatorStackEmpty(&operatorStack) &&getPriority(getOperatorStackTop(&operatorStack)) >= getPriority(currentChar) &&getOperatorStackTop(&operatorStack) != '(') {// 当前运算符的优先级小于等于栈顶运算符的优先级,将栈顶运算符出栈并添加到后缀表达式中postfixExpression[postfixIndex++] = popOperatorStack(&operatorStack);}// 当前运算符入栈pushOperatorStack(&operatorStack, currentChar);} else if (currentChar == ')') {// 如果是右括号,将栈顶运算符出栈并添加到后缀表达式中,直到遇到左括号为止while (!isOperatorStackEmpty(&operatorStack) && getOperatorStackTop(&operatorStack) != '(') {postfixExpression[postfixIndex++] = popOperatorStack(&operatorStack);}// 左括号出栈if (!isOperatorStackEmpty(&operatorStack) && getOperatorStackTop(&operatorStack) == '(') {popOperatorStack(&operatorStack);}}}// 将栈中剩余的运算符出栈并添加到后缀表达式中while (!isOperatorStackEmpty(&operatorStack)) {postfixExpression[postfixIndex++] = popOperatorStack(&operatorStack);}// 添加字符串结束符postfixExpression[postfixIndex] = '\0';
}// 计算后缀表达式的值
int evaluatePostfix(char* postfixExpression) {OperandStack operandStack;initOperandStack(&operandStack);int postfixLength = strlen(postfixExpression);for (int i = 0; i < postfixLength; i++) {char currentChar = postfixExpression[i];if (isdigit(currentChar)) {// 如果是数字,将其转换为整数并入栈int num = currentChar - '0';while (isdigit(postfixExpression[i + 1])) {num = num * 10 + (postfixExpression[i + 1] - '0');i++;}pushOperandStack(&operandStack, num);} else if (isOperator(currentChar)) {// 如果是运算符,从栈中取出两个操作数进行运算,并将结果入栈int operand2 = popOperandStack(&operandStack);int operand1 = popOperandStack(&operandStack);int result = performOperation(operand1, operand2, currentChar);pushOperandStack(&operandStack, result);}}// 返回栈顶元素,即为表达式的值return getOperandStackTop(&operandStack);
}int main() {int N;scanf("%d", &N);char expression[MAX_LENGTH];fgets(expression, MAX_LENGTH, stdin);  // 读取换行符for (int i = 0; i < N; i++) {fgets(expression, MAX_LENGTH, stdin);// 将中缀表达式转换为后缀表达式char postfixExpression[MAX_LENGTH];infixToPostfix(expression, postfixExpression);// 计算后缀表达式的值int result = evaluatePostfix(postfixExpression);printf("%d\n", result);}return 0;
}

在这个解决方案中,我们使用两个栈来解决中缀表达式求值的问题。

首先,我们定义了一个运算符栈结构OperatorStack和一个操作数栈结构OperandStack,分别用于存储运算符和操作数。

然后,我们定义了一系列栈操作的函数,包括初始化栈、判断栈是否为空、入栈操作、出栈操作和获取栈顶元素。

接下来,我们定义了一系列辅助函数,包括判断运算符优先级的getPriority函数,判断字符是否为运算符的isOperator函数以及执行运算的performOperation函数。

infixToPostfix函数中,我们将中缀表达式转换为后缀表达式。我们遍历中缀表达式中的每个字符,如果是数字,则直接添加到后缀表达式中;如果是左括号,则入栈;如果是运算符,则与栈顶运算符进行优先级比较,如果当前运算符优先级较低,则将栈顶运算符出栈并添加到后缀表达式中,直到遇到左括号或者栈为空;如果是右括号,则将栈中的运算符出栈并添加到后缀表达式中,直到遇到左括号;最后,将栈中剩余的运算符出栈并添加到后缀表达式中。

相关文章:

2023年09月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 Python编程&#xff08;1~6级&#xff09;全部真题・点这里 第1题&#xff1a;生日相同 在一个有180人的大班级中&#xff0c;存在两个人生日相同的概率非常大&#xff0c;现给出每个学生的名字&#xff0c;出生月日。试…...

docker-compose 部署示例

文章目录 docker-compose文件格式docker-compose 下载 docker-compose文件格式 这个软件的实际很小&#xff0c;只是根据配置文件产生一些docker命令来执行可以。 配置文件本身是yml的格式&#xff0c;如下 version: 3.5services:# Etherpad: real-time collaborative docume…...

新版WordPress插件短视频去水印小程序源码

最新版去水印小程序源码&#xff0c;本版本全开源&#xff0c;是WordPress插件 上传到Wordpress 安装插件 启动之后 绑定自己的小程序id wordpress可以在宝塔一键部署 也可以用我的这个 搭建前我们需要一下东西&#xff1a; 第一个&#xff1a;一台服务器&#xff08;国内外都可…...

如何提高MES系统的落地成功率?

导 读 ( 文/ 2768 ) 制造执行系统&#xff08;MES&#xff09;在现代制造业中扮演着至关重要的角色&#xff0c;但实施MES系统并取得成功并非易事。为了帮助企业提高MES系统的落地成功率&#xff0c;本文将介绍关键的方法和策略。通过深入了解业务需求、有效的团队合作、全面的…...

private key ssh连接服务器

这里用到的软件是PuTTY。 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 保存本地rsa文件后&#xff0c;打开软件PuTTYgen&#xff0c;点击Load导入文件&#xff0c;输入Key passphrase即密码&#xff0c;保存至本地。 随后在PuTTY配置ssh的用户名 来Cred…...

PDF-Word-图片等的互相转换

轻闪PDF客户端 - 功能强大的一站式PDF工具 | PDF编辑、转换、阅读 上面页面支持PDF转换成各类别&#xff1a;鼠标停留在PDF工具&#xff0c;点击转换类型即可在线转换 Word-PDF&#xff1a;word文档打开word文件中&#xff0c;点击文件->另存为->另存为的位置->保存…...

【VR开发】【Unity】0-课程简介和概述

【说明】 这是我录制的一套VR基础开发课程的文字版本&#xff0c;更加便于快速参考。 应大家在后台所提的需求&#xff0c;从今天开始&#xff0c;我计划带给大家一套完整达40课时的VR开发基础课程。 在开始学习前需要注意如下几点&#xff1a; 本教程基于Unity2022.2.1f1版…...

Java面试题-Java核心基础-第三天(基本数据类型)

目录 一、Java的基本数据类型了解吗&#xff1f; 二、基本类型和包装类型的区别 三、包装类型的缓存机制了解吗&#xff1f; 四、自动拆箱和自动装箱了解吗&#xff1f; 五、为什么浮点数在运算的时候会有精度损失的风险&#xff1f; 六、如何解决浮点数在运算时存在的精度…...

Bean容器里的单例是根据什么识别它是同一个类呢?(比如容器里创建了A类,再去用这个A类的时候,Bean容器怎么知道这个就是A类?)

Spring容器中的Bean的识别主要依赖于Bean的名称&#xff08;ID&#xff09;和类型。以下是详细解释&#xff1a; Bean的名称&#xff08;ID&#xff09;&#xff1a;每个Bean在Spring容器中都必须有一个唯一的名称&#xff08;ID&#xff09;。这个名称通常在配置文件中、Java…...

简述 happens - before 八大规则

“Happens-Before” 是Java内存模型中的概念&#xff0c;用于描述多线程程序中操作之间的顺序和可见性关系。它定义了一组规则&#xff0c;哪些操作具有可预测的行为。以下是"Happens-Before" 的八大规则&#xff1a; 程序顺序规则&#xff08;Program Order Rule&am…...

windows flask 多进程高并发

最近在做的一个项目&#xff0c;需要将十几个python函数封装程flask服务供外界调用&#xff0c;每个函数之间没有什么关系&#xff0c;相互独立。虽然感觉不是很难&#xff0c;但因为用的windows系统&#xff0c;遇到的坑比较多&#xff0c;在此一一总结一下。 flask偶尔出现卡…...

【设计模式】十、组合模式

文章目录 案例组合模式基本介绍类图代码 组合模式在 JDK 集合的源码分析组合模式的注意事项和细节 案例 编写程序展示一个学校院系结构&#xff1a;需求是这样&#xff0c;要在一个页面中展示出学校的院系组成&#xff0c;一个学校有多个学院&#xff0c;一个学院有多个系。如…...

React知识点系列(8)-每天10个小知识

目录 1. 在 React 中&#xff0c;什么是受控组件和非受控组件&#xff1f;请解释一下它们之间的区别和适用场景。2. 如何使用 React 的 useReducer Hook 来管理组件状态&#xff1f;请描述一下 useReducer 的工作原理和适用场景。工作原理&#xff1a;适用场景&#xff1a; 3. …...

rust注释

一、普通注释 // 这是第一种注释方式/* 这是第二种注释方式 */ /* 多行注释 多行注释 多行注释*/二、文档注释 ///外部行文档注释。为接下来的项生成帮助文档 //! 内部行文档注释。为注释所属于的项生成帮助文档/**...*/外部块文档注释。为接下来的项生成帮助文档 /*!...*/内…...

【Java学习之道】GUI开发的基本概念

引言 在这一章&#xff0c;我们将一起走进Java的图形用户界面&#xff08;GUI&#xff09;开发的世界。在你阅读完这篇文章后&#xff0c;你将能够了解什么是GUI&#xff0c;以及如何使用Java进行GUI的开发。 一、什么是GUI 首先&#xff0c;让我们来解答一个许多初学者都会…...

Docker部署gitlab_ce(避坑版---社区版)

1 下载docker 2 下载gitlab镜像 3 运行 4 进入容器内部修改 5 在浏览器里访问 6 修改root密码&#xff08;如果忘记请修改&#xff09; 1 下载docker # 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2# 设置yum源 yum-config-manager --add-repo https…...

数据仓库DW-理论知识储备

数据仓库DW 数据仓库具备 采集数据、分析数据、存储数据的功能&#xff0c;最后得出一些有用的数据&#xff0c;一些目标数据来使用。 采集来自不同源的数据&#xff0c;然后对这些数据进行分析和计算得出一些有用的指标&#xff0c;提供数据决策支持。 数据的来源有&#xff…...

SpringBoot 如何优雅的停机

这里写目录标题 1 介绍2 使用2.1 开启 hook2.2 禁用 hook 3 手动指定 hook 1 介绍 SpringBoot 如果需要使用hook则需要开启spring.main.register-shutdown-hooktrue(默认为true) 如果使用kill -9则不会出发JVM的hook&#xff0c;kill可以正常触发hook server:port: 8080shutd…...

详细教程:Postman 怎么调试 WebSocket

WebSocket 是一个支持双向通信的网络协议&#xff0c;它在实时性和效率方面具有很大的优势。Postman 是一个流行的 API 开发工具&#xff0c;它提供了许多功能来测试和调试 RESTful API 接口&#xff0c;最新的版本也支持 WebSocket 接口的调试。想要学习更多关于 Postman 的知…...

互联网Java工程师面试题·Java 并发编程篇·第五弹

目录 52、什么是线程池&#xff1f; 为什么要使用它&#xff1f; 53、怎么检测一个线程是否拥有锁&#xff1f; 54、你如何在 Java 中获取线程堆栈&#xff1f; 55、JVM 中哪个参数是用来控制线程的栈堆栈小的? 56、Thread 类中的 yield 方法有什么作用&#xff1f; 57、…...

从逻辑门到CPU:计算机工作原理详解

戏说CPU的工作原理&#xff1a;从逻辑门到计算系统1. 计算系统的基本构建单元1.1 逻辑门的物理实现计算系统最基本的构建单元是逻辑门&#xff0c;它们可以通过简单的物理实体来演示。以三名士兵为例&#xff0c;我们可以构建最基本的逻辑运算单元&#xff1a;输入单元&#xf…...

uStepper S开源库深度解析:闭环步进控制与TMC2130驱动实战

1. uStepper S 开源驱动库深度解析&#xff1a;面向嵌入式工程师的实战指南 uStepper S 是一款集成了高性能步进电机驱动、高精度磁编码器反馈、ARM Cortex-M0 微控制器&#xff08;NXP LPC11U35&#xff09;与丰富外设接口的智能运动控制模块。其配套的 uStepper S Arduino…...

debian 更新内核后,nvidia 驱动突然不见了,处理

nvidia 驱动通常由 dkms 来构建 安装新内核后&#xff0c; 对应 linux-headers-amd64 没有安装到&#xff0c;导致 dkms 不为新内核 构建驱动 解决办法&#xff1a; apt update apt install linux-headers-amd64 它会自动为已有的内核安装 linux 头文件 然后 用命令 dpkg-recon…...

双模型灾备方案:OpenClaw同时配置百川2-13B-4bits与Llama3应对服务中断

双模型灾备方案&#xff1a;OpenClaw同时配置百川2-13B-4bits与Llama3应对服务中断 1. 为什么需要双模型灾备 去年冬天的一个深夜&#xff0c;我正在用OpenClaw自动处理一批技术文档的翻译任务。突然收到一连串报警通知——原本稳定运行的Qwen模型服务因为网络波动彻底失联。…...

用过才敢说 AI论文平台测评:2026年最值得尝试的几款工具

2026年真正好用的AI论文平台&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...

League-Toolkit:英雄联盟智能辅助工具的效率提升之道

League-Toolkit&#xff1a;英雄联盟智能辅助工具的效率提升之道 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit是…...

2026微软SDE LeetCode高频题:208道,按频度排序,含备考建议

2026微软SDE LeetCode高频题&#xff1a;208道&#xff0c;按频度排序&#xff0c;含备考建议 微软SDE的LeetCode面试题&#xff0c;第一名不是反转链表&#xff0c;不是LRU缓存&#xff0c;而是—— 215. 数组中的第K个最大元素&#xff0c;出现14次。 我整理了基于真实面经…...

新手必看!用PHPStudy一键搭建DVWA靶场(附常见错误解决)

零基础实战&#xff1a;用PHPStudy快速搭建DVWA漏洞靶场全指南 第一次接触网络安全实战时&#xff0c;很多人会被复杂的实验环境搭建劝退。作为过来人&#xff0c;我完全理解那种面对满屏报错信息的无力感。本文将手把手带你用PHPStudy这个神器&#xff0c;在Windows系统上快速…...

深度解析:汇率结算下的货代对账困局,如何利用 AI 与 RPA 构建底层逻辑?

【前言】在国际物流与货运代理行业&#xff0c;财务对账向来是一块“硬骨头”。尤其是涉及跨国业务时&#xff0c;汇率的实时波动与多币种结算的交叉影响&#xff0c;使得原本复杂的账目核对工作呈几何倍数增加。传统的人工对账模式不仅效率低下&#xff0c;且在面对分位数的四…...

AI绘画新革命:SDXL-Turbo镜像快速上手与实战测评

AI绘画新革命&#xff1a;SDXL-Turbo镜像快速上手与实战测评 想象一下这样的场景&#xff1a;你刚输入完几个单词&#xff0c;屏幕上就立即呈现出对应的图像。没有等待&#xff0c;没有延迟&#xff0c;就像思维直接转化为画面一样流畅。这就是SDXL-Turbo带来的AI绘画新体验—…...