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

华为OD机试 - 文本统计分析(Python/JS/C/C++ 2024 E卷 200分)

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

有一个文件,包含以一定规则写作的文本,请统计文件中包含的文本数量。

规则如下:

1、文本以";“分隔,最后一条可以没有”;",但空文本不能算语句,比如"COMMAND A;“只能算一条语句。注意,无字符/空白字符Q/制表符等操作"空文本”;

2、文本可以跨行,比如下面,是一条文本,而不是三条;

COMMAND A
AND
COMMAND B;

文本支持字符串,字符串为成对的单引号(‘)或者成对的双引号("),字符串中可能出现用转义字符()处理的单双引号(‘your input is’”)和转义字符串本身,比如

COMMAND A "Say \"hello\"";

支持注释,可以出现在字符串之外的任意位置注释以"—"开头,到换行结束,比如:

COMMAND A;this is comment
COMMAND —comment
A AND COMMAND B;

注意 字符串Q 内的“—”,不是注释。

二、输入描述

文本文件

三、输出描述

包含的文本数量

四、测试用例

测试用例1:

1、输入

COMMAND A;
COMMAND B;
COMMAND C; — This is a comment
COMMAND D; — Another comment

2、输出

4

3、说明

本例中的文件内容有4个命令,每个命令都以分号结尾。

尽管第三行和第四行后面有注释,注释部分不会影响命令的统计。

因此,总共4条有效命令。

测试用例2:

1、输入

COMMAND A;
COMMAND B
AND COMMAND C;
COMMAND “D"Text”";
— Entire line is a comment
COMMAND E; — Comment at the end

2、输出

4

3、说明

第一行 COMMAND A; 是一条有效命令。

第二行和第三行合并构成一条跨行命令 COMMAND B AND COMMAND C;。

第四行 COMMAND “D"Text”"; 是一条有效命令,其中 " 表示转义字符,表示字符串中的双引号。

第五行是一个注释,应该被忽略。

第六行 COMMAND E; 是一条有效命令,尽管有注释。

最终,共有4条有效命令。

五、解题思路

程序会检查文件内容中的注释,并将这些注释移除。注释是以 “—” 开头,直到该行结束。需要注意的是,程序会确保只移除字符串之外的注释,即在字符串内的 “—” 不会被视为注释。这一步是为了避免注释内容干扰命令的统计。

程序会根据分号(;)将内容分割成多个部分,每个部分代表一个潜在的命令。

对于每个分割出的部分,程序会去除首尾空白符,并检查内容是否为空。只有非空的部分才会被计数为有效命令。这一步是为了确保空白命令或无效的命令不会被错误地计入。

程序会输出统计得到的有效命令数量。这个数量即为文件中符合规则的命令的总数。

六、Python算法源码

import sysdef is_escaped(line, index):"""判断当前位置的字符是否被转义:param line: 当前处理的行字符串:param index: 当前字符的索引:return: 如果字符被转义,返回True;否则返回False"""backslash_count = 0index -= 1  # 检查当前字符前面的字符while index >= 0 and line[index] == '\\':backslash_count += 1index -= 1return backslash_count % 2 != 0  # 如果反斜杠数量为奇数,则字符被转义def find_comment_index(line):"""找到注释的起始位置,忽略字符串内的注释符:param line: 当前处理的行字符串:return: 注释符的索引,如果没有注释,返回-1"""in_single_quote = False  # 是否在单引号字符串内in_double_quote = False  # 是否在双引号字符串内for i, ch in enumerate(line):if ch == '\'' and not is_escaped(line, i):in_single_quote = not in_single_quote  # 切换单引号状态elif ch == '"' and not is_escaped(line, i):in_double_quote = not in_double_quote  # 切换双引号状态elif ch == '—' and not in_single_quote and not in_double_quote:return i  # 找到不在字符串内的注释符return -1  # 没有找到注释符def main():count = 0  # 有效命令计数current_text = []  # 当前命令的内容列表in_single_quote = False  # 是否在单引号字符串内in_double_quote = False  # 是否在双引号字符串内for line in sys.stdin:line = line.rstrip('\n')  # 移除行尾的换行符if not line:break  # 输入空行结束输入# 处理注释:找到注释符的位置并截断comment_index = find_comment_index(line)if comment_index != -1:line = line[:comment_index]i = 0  # 当前字符索引while i < len(line):ch = line[i]  # 当前字符# 处理引号,切换状态if ch == '\'' and not is_escaped(line, i):in_single_quote = not in_single_quoteelif ch == '"' and not is_escaped(line, i):in_double_quote = not in_double_quote# 处理文本结束符';'if ch == ';' and not in_single_quote and not in_double_quote:if ''.join(current_text).strip():  # 如果当前命令非空count += 1  # 有效命令数加一current_text = []  # 重置当前命令内容else:current_text.append(ch)  # 添加字符到当前命令i += 1  # 移动到下一个字符current_text.append('\n')  # 保留换行符以支持跨行命令# 处理最后一个可能没有分号的文本final_text = ''.join(current_text).strip()if final_text and not final_text.startswith('—'):count += 1  # 如果最后的文本非空且不是注释,计数加一print(count)  # 输出有效命令数量if __name__ == "__main__":main()

七、JavaScript算法源码

const readline = require('readline');/*** 判断当前位置的字符是否被转义* @param {string} line - 当前处理的行字符串* @param {number} index - 当前字符的索引* @returns {boolean} 如果字符被转义,返回true;否则返回false*/
function isEscaped(line, index) {let backslashCount = 0;index -= 1; // 检查当前字符前面的字符while (index >= 0 && line[index] === '\\') {backslashCount++;index--;}return backslashCount % 2 !== 0; // 如果反斜杠数量为奇数,则字符被转义
}/*** 找到注释的起始位置,忽略字符串内的注释符* @param {string} line - 当前处理的行字符串* @returns {number} 注释符的索引,如果没有注释,返回-1*/
function findCommentIndex(line) {let inSingleQuote = false; // 是否在单引号字符串内let inDoubleQuote = false; // 是否在双引号字符串内for (let i = 0; i < line.length; i++) {const ch = line[i];if (ch === '\'' && !isEscaped(line, i)) {inSingleQuote = !inSingleQuote; // 切换单引号状态} else if (ch === '"' && !isEscaped(line, i)) {inDoubleQuote = !inDoubleQuote; // 切换双引号状态} else if (ch === '—' && !inSingleQuote && !inDoubleQuote) {return i; // 找到不在字符串内的注释符}}return -1; // 没有找到注释符
}// 创建读取接口,用于逐行读取输入
const rl = readline.createInterface({input: process.stdin,output: process.stdout,terminal: false
});let count = 0; // 有效命令计数
let currentText = []; // 当前命令的内容数组
let inSingleQuote = false; // 是否在单引号字符串内
let inDoubleQuote = false; // 是否在双引号字符串内// 监听每一行的输入
rl.on('line', (line) => {if (line === '') {rl.close(); // 输入空行结束输入return;}// 处理注释:找到注释符的位置并截断const commentIndex = findCommentIndex(line);if (commentIndex !== -1) {line = line.substring(0, commentIndex);}for (let i = 0; i < line.length; i++) {const ch = line[i];// 处理引号,切换状态if (ch === '\'' && !isEscaped(line, i)) {inSingleQuote = !inSingleQuote;} else if (ch === '"' && !isEscaped(line, i)) {inDoubleQuote = !inDoubleQuote;}// 处理文本结束符';'if (ch === ';' && !inSingleQuote && !inDoubleQuote) {if (currentText.join('').trim().length > 0) { // 如果当前命令非空count++; // 有效命令数加一currentText = []; // 重置当前命令内容}} else {currentText.push(ch); // 添加字符到当前命令}}currentText.push('\n'); // 保留换行符以支持跨行命令
});// 输入结束后处理
rl.on('close', () => {// 处理最后一个可能没有分号的文本const finalText = currentText.join('').trim();if (finalText.length > 0 && !finalText.startsWith('—')) {count++; // 如果最后的文本非空且不是注释,计数加一}console.log(count); // 输出有效命令数量
});

八、C算法源码

#include <stdio.h>
#include <string.h>
#include <stdbool.h>#define MAX_LINE_LENGTH 1000/*** 判断当前位置的字符是否被转义* @param line 当前处理的行字符串* @param index 当前字符的索引* @return 如果字符被转义,返回true;否则返回false*/
bool is_escaped(char *line, int index) {int backslash_count = 0;index--; // 检查当前字符前面的字符while (index >= 0 && line[index] == '\\') {backslash_count++;index--;}return backslash_count % 2 != 0; // 如果反斜杠数量为奇数,则字符被转义
}/*** 找到注释的起始位置,忽略字符串内的注释符* @param line 当前处理的行字符串* @return 注释符的索引,如果没有注释,返回-1*/
int find_comment_index(char *line) {bool in_single_quote = false; // 是否在单引号字符串内bool in_double_quote = false; // 是否在双引号字符串内int len = strlen(line);for (int i = 0; i < len; i++) {char ch = line[i];if (ch == '\'' && !is_escaped(line, i)) {in_single_quote = !in_single_quote; // 切换单引号状态} else if (ch == '"' && !is_escaped(line, i)) {in_double_quote = !in_double_quote; // 切换双引号状态} else if (ch == '—' && !in_single_quote && !in_double_quote) {return i; // 找到不在字符串内的注释符}}return -1; // 没有找到注释符
}int main() {char line[MAX_LINE_LENGTH]; // 用于存储每一行输入int count = 0; // 有效命令计数char current_text[MAX_LINE_LENGTH * 10] = ""; // 当前命令的内容字符串// 逐行读取输入while (fgets(line, sizeof(line), stdin)) {// 移除末尾的换行符size_t len = strlen(line);if (len > 0 && line[len - 1] == '\n') {line[len - 1] = '\0';}if (strlen(line) == 0) {break; // 输入空行结束输入}// 处理注释:找到注释符的位置并截断int comment_index = find_comment_index(line);if (comment_index != -1) {line[comment_index] = '\0';}// 遍历每个字符for (int i = 0; i < strlen(line); i++) {char ch = line[i];// 处理引号,切换状态if (ch == '\'' && !is_escaped(line, i)) {// 切换单引号状态// 在C语言中,单引号用于字符,通常不会跨多个字符// 此处假设与Java代码逻辑一致// 实际应用中可能需要调整} else if (ch == '"' && !is_escaped(line, i)) {// 切换双引号状态// 同上}// 需要重新处理引号状态bool in_single_quote = false;bool in_double_quote = false;for (int j = 0; j <= i; j++) {if (line[j] == '\'' && !is_escaped(line, j)) {in_single_quote = !in_single_quote;} else if (line[j] == '"' && !is_escaped(line, j)) {in_double_quote = !in_double_quote;}}// 处理文本结束符';'if (ch == ';' && !in_single_quote && !in_double_quote) {// 检查current_text是否非空bool non_empty = false;for (int k = 0; k < strlen(current_text); k++) {if (current_text[k] != ' ' && current_text[k] != '\t' && current_text[k] != '\n') {non_empty = true;break;}}if (non_empty) {count++; // 有效命令数加一current_text[0] = '\0'; // 重置当前命令内容}} else {// 添加字符到当前命令int current_len = strlen(current_text);if (current_len < sizeof(current_text) - 1) { // 防止溢出current_text[current_len] = ch;current_text[current_len + 1] = '\0';}}}// 添加换行符以支持跨行命令strcat(current_text, "\n");}// 处理最后一个可能没有分号的文本// 移除前导空白char *final_text = current_text;while (*final_text == ' ' || *final_text == '\t' || *final_text == '\n') {final_text++;}if (strlen(final_text) > 0 && final_text[0] != '—') {count++; // 如果最后的文本非空且不是注释,计数加一}printf("%d\n", count); // 输出有效命令数量return 0;
}

九、C++算法源码

#include <iostream>
#include <string>using namespace std;/*** 判断当前位置的字符是否被转义* @param line 当前处理的行字符串* @param index 当前字符的索引* @return 如果字符被转义,返回true;否则返回false*/
bool is_escaped(const string &line, int index) {int backslash_count = 0;index--; // 检查当前字符前面的字符while (index >= 0 && line[index] == '\\') {backslash_count++;index--;}return backslash_count % 2 != 0; // 如果反斜杠数量为奇数,则字符被转义
}/*** 找到注释的起始位置,忽略字符串内的注释符* @param line 当前处理的行字符串* @return 注释符的索引,如果没有注释,返回-1*/
int find_comment_index(const string &line) {bool in_single_quote = false; // 是否在单引号字符串内bool in_double_quote = false; // 是否在双引号字符串内for (int i = 0; i < line.length(); i++) {char ch = line[i];if (ch == '\'' && !is_escaped(line, i)) {in_single_quote = !in_single_quote; // 切换单引号状态} else if (ch == '"' && !is_escaped(line, i)) {in_double_quote = !in_double_quote; // 切换双引号状态} else if (ch == '—' && !in_single_quote && !in_double_quote) {return i; // 找到不在字符串内的注释符}}return -1; // 没有找到注释符
}int main() {int count = 0; // 有效命令计数string current_text = ""; // 当前命令的内容字符串string line; // 用于存储每一行输入// 逐行读取输入while (getline(cin, line)) {if (line.empty()) {break; // 输入空行结束输入}// 处理注释:找到注释符的位置并截断int comment_index = find_comment_index(line);if (comment_index != -1) {line = line.substr(0, comment_index);}// 遍历每个字符for (size_t i = 0; i < line.length(); i++) {char ch = line[i];// 处理引号,切换状态if (ch == '\'' && !is_escaped(line, i)) {// 切换单引号状态// 在C++中,单引号用于字符,通常不会跨多个字符// 此处假设与Java代码逻辑一致// 实际应用中可能需要调整} else if (ch == '"' && !is_escaped(line, i)) {// 切换双引号状态// 同上}// 需要重新处理引号状态bool in_single_quote = false;bool in_double_quote = false;for (size_t j = 0; j <= i; j++) {if (line[j] == '\'' && !is_escaped(line, j)) {in_single_quote = !in_single_quote;} else if (line[j] == '"' && !is_escaped(line, j)) {in_double_quote = !in_double_quote;}}// 处理文本结束符';'if (ch == ';' && !in_single_quote && !in_double_quote) {if (current_text.find_first_not_of(" \t\n") != string::npos) { // 如果当前命令非空count++; // 有效命令数加一current_text = ""; // 重置当前命令内容}} else {current_text += ch; // 添加字符到当前命令}}// 添加换行符以支持跨行命令current_text += '\n';}// 处理最后一个可能没有分号的文本// 移除前导空白size_t start = current_text.find_first_not_of(" \t\n");if (start != string::npos) {string final_text = current_text.substr(start);if (!final_text.empty() && final_text[0] != '—') {count++; // 如果最后的文本非空且不是注释,计数加一}}cout << count << endl; // 输出有效命令数量return 0;
}

🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

相关文章:

华为OD机试 - 文本统计分析(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…...

计算机挑战赛9

Excel表列名称由字母A~Z组成&#xff0c;列字母的规律如下: A、B、C.、AA、AB....AZ、BA、B...ZZZZY、ZZZZ...输入: 输入包含两个列名称字符串&#xff0c;长度均小于等于5。 输出: 输出两个列名称之间共有多少列 样例输入: AA AZ 样例输出: 24 代码&#xff1a; C&…...

C++学习路线(十六)

void类型指针 void -> 空类型 void* -> 空类型指针&#xff0c;只存储地址的值&#xff0c;丢失类型&#xff0c;无法访问&#xff0c;要访问里面的值 我们必须对指针进行正确的类型转换&#xff0c;然后再间接引用指针 所有其它类型的指针都可以隐式自动转换成 void 类型…...

2024年最受欢迎的AI工具与实际应用:AI技术对未来生活的深远影响

2024年最受欢迎的AI工具与实际应用&#xff1a;AI技术对未来生活的深远影响 随着2024年的到来&#xff0c;人工智能&#xff08;AI&#xff09;技术已经深入渗透到我们生活的方方面面。从日常工作到科学研究&#xff0c;AI工具的应用变得越来越广泛。无论是生成式AI工具&#…...

【网络安全】账户安全随笔

未经许可,不得转载。 作者:Enoch 原文出处:https://mp.weixin.qq.com/s/oKBpZ0F6Kl5NNmHSYCYIPw 文章目录 账户类型资金划转问题幂等ID使用错误多接口并发问题精度问题其他划转问题特殊资金盗取问题科学计数法问题账户类型 在互联网金融和电商企业中,账户安全直接关系到用…...

在线培训知识库管理系统:教育行业的新动力

在当今数字化时代&#xff0c;教育行业正经历着前所未有的变革。随着在线教育的兴起&#xff0c;如何高效地管理和传播知识成为了一个关键问题。在线培训知识库管理系统应运而生&#xff0c;它以其强大的知识整合、分享和管理能力&#xff0c;为教育行业注入了新的活力。 一、…...

【AI声音克隆本地整合包及教程】第二代GPT-SoVITS V2:声音克隆的新境界

在数字时代的浪潮中&#xff0c;个性化和创新是永恒的主题。GPT-SoVITS V2&#xff0c;作为第二代声音克隆技术&#xff0c;正以其革命性的特性和应用&#xff0c;为个人和企业打开一扇通往声音个性化的新大门。 声音克隆的新高度 GPT-SoVITS V2是由RVC变声器创始人“花儿不哭…...

博看书苑 8.8.1| 免费阅读海量图书期刊

博看书苑是一款免费的图书和期刊阅读神器&#xff0c;拥有海量的图书和期刊资源&#xff0c;涵盖了文学、历史、科技、教育等多个领域。无论你是想深入研究某个专业领域&#xff0c;还是想在闲暇时阅读一些轻松的读物&#xff0c;博看书苑都能满足你的需求。更令人惊喜的是&…...

导致动态代理无法使用的原因有哪些?

在动态代理的应用过程中&#xff0c;有时会遇到其无法正常使用的情况。这种现象可能源于多种原因&#xff0c;从网络配置到软件设置&#xff0c;了解和解决这些问题对保持代理的高效运行至关重要。本文将详细探讨导致动态代理无法使用的主要原因及对策&#xff0c;以帮助用户及…...

熟练使用Spring Boot、Spring Cloud Alibaba微服务开发框架,并深入理解其原理 学习要求

1. Spring Boot 核心理解 自动配置&#xff1a;了解 Spring Boot 的自动配置原理&#xff08;EnableAutoConfiguration&#xff09;&#xff0c;包括如何查看和定制自动配置的内容。需要能解释 Spring Boot 如何减少样板代码。Spring Boot Starter&#xff1a;熟悉各种 starte…...

2024-10-09 问AI: [AI面试题] 描述数据预处理在 AI 中的重要性

文心一言 数据预处理在人工智能&#xff08;AI&#xff09;中扮演着至关重要的角色&#xff0c;它是构建高效、准确和可靠AI模型不可或缺的步骤。以下是数据预处理在AI中重要性的详细描述&#xff1a; 1. 提高数据质量 清理和去噪&#xff1a;数据预处理可以识别和纠正数据中…...

Linux中文件的理解

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;2024年10月16日 &#x1f4e8; 博主码云地址&#xff1a;渣渣C &#x1f4d5;参考书籍&#xff1a…...

益安宁丸,国药准字,值得信赖

益安宁丸真品辨别唯一标准 益安宁丸是由同溢堂药业有限公司独家生产的一款中成药&#xff0c;主要用于调理心血管系统&#xff0c;广泛应用于内地市场及港澳地区。由于其疗效显著&#xff0c;益安宁丸在消费者中享有良好的声誉&#xff0c;被誉为心血管健康的守护者。然而&…...

Django项目的创建及说明(详细图解版)

Django项目的创建及说明 1、安装Django2、创建项目2.1、利用终端创建项目2.2、利用Pycharm企业版创建项目 3、默认文件介绍 1、安装Django 在终端输入下述命令行。 pip install django安装成功后执行如下命令查看Django是否安装好&#xff0c;若正确显示出Django版本号则安装…...

MySQL 9从入门到性能优化-二进制日志

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

Cloudlog delete_oqrs_line 未授权SQL注入漏洞复现

0x01 产品简介 Cloudlog 是一个自托管的 PHP 应用程序,可让您在任何地方记录您的业余无线电联系人。使用PHP和MySQL构建的基于Web的业余无线电记录应用程序支持从HF到微波的一般站记录任务 0x02 漏洞概述 Cloudlog delete_oqrs_line 接口存在未授权SQL注入漏洞,未经身份验…...

【Linux】解锁软硬链接奥秘,高效动静态库管理的实战技巧

软硬连接和动静态库 1. 软链接1.1. 概念1.2. 特点1.3. 应用场景 2. 硬链接2.1. 概念2.2. 硬链计数2.3. 特点2.4. 应用场景 3. 动静态库3.1 库存在的原因3.2. 静态库制作与使用3.2.1 打包3.2.2. 使用 3.3. 动态库制作与使用3.3.1. 打包3.3.2. 使用 4. 解决动态库查不到的4种方法…...

【设计模式】Python 后端开发中的工厂模式设计与实现

Python 后端开发中的工厂模式设计与实现 1. 引言 在后端开发中&#xff0c;如何设计一套易于扩展、可维护且灵活的系统架构是开发者面临的重要课题。设计模式在这一过程中扮演了至关重要的角色&#xff0c;尤其是在面向对象编程中&#xff0c;它提供了大量解决重复问题的标准…...

划重点!入门安全测试,这几点要注意!

朋友们&#xff0c;今天我们一起来学习下如何做安全测试。 那么首先&#xff0c;什么是安全测试&#xff1f; 安全测试是评估和验证软件系统、应用程序或网络的安全性和强度的过程。其目标是发现和修复潜在的安全漏洞和脆弱性&#xff0c;以确保系统能够抵御恶意攻击和未授权…...

mysql 09 独立表空间结构

表空间中的页实在是太多了&#xff0c;为了更好的管理这些页面&#xff0c;设计 InnoDB 的大叔们提出了 区 &#xff08;英文名&#xff1a; extent &#xff09;的概念。对于16KB的页来说&#xff0c;连续的64个页就是一个 区 &#xff0c;也就是说一个区默认占用1MB空间大小。…...

linux 虚拟环境下源码安装DeepSpeed

第一步&#xff1a;创建虚拟环境&#xff1a; conda create -n deepspeed python3.10 第二步&#xff1a;进入虚拟环境&#xff0c;安装Pytorch 2.3.1 # CUDA 12.1 conda install pytorch2.3.1 torchvision0.18.1 torchaudio2.3.1 pytorch-cuda12.1 -c pytorch -c nvidia 第…...

常见八大排序算法

今天我们带来数据结构中常见的8大排序算法。 排序算法平均时间复杂度最好情况最坏情况空间复杂度稳定性冒泡排序O(n方)O(n方)O(n方)O(1)稳定插入排序O(n方)O(n方)O(n方)O(1)稳定选择排序O(n方)O(n方)O(n方)O(1)不稳定希尔排序O(n1.3方到1,5方)O(n)O(n方)O(1)不稳定堆排序O(n lo…...

汽车免拆诊断案例 | 2022款大众捷达VS5车行驶中挡位偶尔会锁在D3挡

故障现象  一辆2022款大众捷达VS5汽车&#xff0c;搭载EA211发动机和手自一体变速器&#xff0c;累计行驶里程约为4.5万km。该车行驶中挡位偶尔会锁在D3挡&#xff0c;车速最高约50 km/h&#xff0c;且组合仪表上的发动机故障灯和EPC灯异常点亮。 故障诊断  用故障检测仪检…...

Linux之HugePage的原理与使用

Linux之HugePage的原理与使用 虚拟地址与物理地址虚拟地址物理地址虚拟地址与物理地址的转换 HugePage的概念Linux使用HugePage创建HugePage在程序中使用HugePage 总结 虚拟地址与物理地址 在研究HugePage之前&#xff0c;首先需要明白虚拟地址和物理地址的概念。在计算机系统…...

一步步优化Redis实现分布式锁

分布式锁概念 在多线程的程序里&#xff0c;为了避免同时操作一个共享变量产生数据问题&#xff0c;会加一个互斥锁&#xff0c;以确保共享变量的正确性&#xff0c;使用范围是同一个进程。 那如果是多个进程&#xff0c;需要同时操作一个共享资源&#xff0c;如何互斥呢&…...

C++进阶——二叉搜索树

目录 一、基本概念 二、性能分析 三、模拟实现 四、使用场景 1.key搜索场景 2.key/value搜索场景 一、基本概念 二叉搜索树&#xff08;Binary Search Tree&#xff09;&#xff0c;看名字就知道,是可以用来搜索数据的一种二叉树。 它可以是空树&#xff08;一个数据都…...

Require:业界优秀的HTTP管理方案。

方案异步JDK额外依赖特点HttpURLConnection 【优点】Java内置&#xff0c;简单易用。对于简单的HTTP请求和响应处理非常合适。 【缺点】功能相对较少&#xff0c;不支持现代特性&#xff08;如异步请求、连接池等&#xff09;。API相对繁琐&#xff0c;处理复杂请求时代码冗长。…...

装饰模式(Decorator Pattern)在 Go 语言中的应用

文章目录 引言什么是装饰模式&#xff1f;在Go语言中的应用定义接口实现具体逻辑创建装饰器使用装饰器 装饰模式 vs 中间件装饰模式中间件区别 总结 引言 在软件开发中&#xff0c;设计模式是解决常见问题的模板。装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构…...

Windows系统部署redis自启动服务

文章目录 引言I redis以本地服务运行(Windows service)使用MSI安装包配置文件,配置端口和密码II redis服务以终端命令启动缺点运行redis-server并指定端口和密码III 知识扩展确认redis-server可用性Installing the Service引言 服务器是Windows系统,所以使用Windows不是re…...

34岁IT男的职场十字路口:是失业预警,还是转型契机?

在信息技术这片充满机遇与挑战的广袤领域&#xff0c;34岁&#xff0c;一个看似正值壮年却暗藏危机的年龄&#xff0c;成为了许多IT男性不得不面对的职场考验。当“34岁现象”逐渐凸显&#xff0c;我们不禁要问&#xff1a;在这个快速变化的时代&#xff0c;34岁的IT男&#xf…...