华为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卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…...
计算机挑战赛9
Excel表列名称由字母A~Z组成,列字母的规律如下: A、B、C.、AA、AB....AZ、BA、B...ZZZZY、ZZZZ...输入: 输入包含两个列名称字符串,长度均小于等于5。 输出: 输出两个列名称之间共有多少列 样例输入: AA AZ 样例输出: 24 代码: C&…...
C++学习路线(十六)
void类型指针 void -> 空类型 void* -> 空类型指针,只存储地址的值,丢失类型,无法访问,要访问里面的值 我们必须对指针进行正确的类型转换,然后再间接引用指针 所有其它类型的指针都可以隐式自动转换成 void 类型…...
2024年最受欢迎的AI工具与实际应用:AI技术对未来生活的深远影响
2024年最受欢迎的AI工具与实际应用:AI技术对未来生活的深远影响 随着2024年的到来,人工智能(AI)技术已经深入渗透到我们生活的方方面面。从日常工作到科学研究,AI工具的应用变得越来越广泛。无论是生成式AI工具&#…...
【网络安全】账户安全随笔
未经许可,不得转载。 作者:Enoch 原文出处:https://mp.weixin.qq.com/s/oKBpZ0F6Kl5NNmHSYCYIPw 文章目录 账户类型资金划转问题幂等ID使用错误多接口并发问题精度问题其他划转问题特殊资金盗取问题科学计数法问题账户类型 在互联网金融和电商企业中,账户安全直接关系到用…...
在线培训知识库管理系统:教育行业的新动力
在当今数字化时代,教育行业正经历着前所未有的变革。随着在线教育的兴起,如何高效地管理和传播知识成为了一个关键问题。在线培训知识库管理系统应运而生,它以其强大的知识整合、分享和管理能力,为教育行业注入了新的活力。 一、…...
【AI声音克隆本地整合包及教程】第二代GPT-SoVITS V2:声音克隆的新境界
在数字时代的浪潮中,个性化和创新是永恒的主题。GPT-SoVITS V2,作为第二代声音克隆技术,正以其革命性的特性和应用,为个人和企业打开一扇通往声音个性化的新大门。 声音克隆的新高度 GPT-SoVITS V2是由RVC变声器创始人“花儿不哭…...
博看书苑 8.8.1| 免费阅读海量图书期刊
博看书苑是一款免费的图书和期刊阅读神器,拥有海量的图书和期刊资源,涵盖了文学、历史、科技、教育等多个领域。无论你是想深入研究某个专业领域,还是想在闲暇时阅读一些轻松的读物,博看书苑都能满足你的需求。更令人惊喜的是&…...
导致动态代理无法使用的原因有哪些?
在动态代理的应用过程中,有时会遇到其无法正常使用的情况。这种现象可能源于多种原因,从网络配置到软件设置,了解和解决这些问题对保持代理的高效运行至关重要。本文将详细探讨导致动态代理无法使用的主要原因及对策,以帮助用户及…...
熟练使用Spring Boot、Spring Cloud Alibaba微服务开发框架,并深入理解其原理 学习要求
1. Spring Boot 核心理解 自动配置:了解 Spring Boot 的自动配置原理(EnableAutoConfiguration),包括如何查看和定制自动配置的内容。需要能解释 Spring Boot 如何减少样板代码。Spring Boot Starter:熟悉各种 starte…...
2024-10-09 问AI: [AI面试题] 描述数据预处理在 AI 中的重要性
文心一言 数据预处理在人工智能(AI)中扮演着至关重要的角色,它是构建高效、准确和可靠AI模型不可或缺的步骤。以下是数据预处理在AI中重要性的详细描述: 1. 提高数据质量 清理和去噪:数据预处理可以识别和纠正数据中…...
Linux中文件的理解
✨前言✨ 📘 博客主页:to Keep博客主页 🙆欢迎关注,👍点赞,📝留言评论 ⏳首发时间:2024年10月16日 📨 博主码云地址:渣渣C 📕参考书籍:…...
益安宁丸,国药准字,值得信赖
益安宁丸真品辨别唯一标准 益安宁丸是由同溢堂药业有限公司独家生产的一款中成药,主要用于调理心血管系统,广泛应用于内地市场及港澳地区。由于其疗效显著,益安宁丸在消费者中享有良好的声誉,被誉为心血管健康的守护者。然而&…...
Django项目的创建及说明(详细图解版)
Django项目的创建及说明 1、安装Django2、创建项目2.1、利用终端创建项目2.2、利用Pycharm企业版创建项目 3、默认文件介绍 1、安装Django 在终端输入下述命令行。 pip install django安装成功后执行如下命令查看Django是否安装好,若正确显示出Django版本号则安装…...
MySQL 9从入门到性能优化-二进制日志
【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (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. 引言 在后端开发中,如何设计一套易于扩展、可维护且灵活的系统架构是开发者面临的重要课题。设计模式在这一过程中扮演了至关重要的角色,尤其是在面向对象编程中,它提供了大量解决重复问题的标准…...
划重点!入门安全测试,这几点要注意!
朋友们,今天我们一起来学习下如何做安全测试。 那么首先,什么是安全测试? 安全测试是评估和验证软件系统、应用程序或网络的安全性和强度的过程。其目标是发现和修复潜在的安全漏洞和脆弱性,以确保系统能够抵御恶意攻击和未授权…...
mysql 09 独立表空间结构
表空间中的页实在是太多了,为了更好的管理这些页面,设计 InnoDB 的大叔们提出了 区 (英文名: extent )的概念。对于16KB的页来说,连续的64个页就是一个 区 ,也就是说一个区默认占用1MB空间大小。…...
LLM API安全攻防实战:从提示词注入到自动化测试方案
1. 项目概述:被忽视的LLM API安全前线最近在帮几个团队做上线前的安全审计,发现一个挺有意思的现象:大家对于传统API的鉴权、限流、SQL注入这些常规检查已经形成了肌肉记忆,但一旦涉及到LLM(大语言模型)的A…...
FCEUX终极指南:从怀旧游戏到专业调试的完整NES模拟器教程
FCEUX终极指南:从怀旧游戏到专业调试的完整NES模拟器教程 【免费下载链接】fceux FCEUX, a NES Emulator 项目地址: https://gitcode.com/gh_mirrors/fc/fceux FCEUX是一款功能强大的开源NES模拟器,让你在现代电脑上完美重温经典红白机游戏。无论…...
DISMTools企业部署:在组织中大规模应用的最佳实践
DISMTools企业部署:在组织中大规模应用的最佳实践 【免费下载链接】DISMTools The connected place for Windows system administration 项目地址: https://gitcode.com/GitHub_Trending/di/DISMTools DISMTools是一款专为Windows系统管理设计的连接平台&…...
Windows 10/11系统下,SecureCRT 8.7.2保姆级安装与激活图文指南(含Keygen使用避坑点)
Windows平台SecureCRT 8.7.2全流程部署与安全配置指南在当今远程运维与网络管理的日常工作中,一款可靠的终端仿真工具如同工程师的瑞士军刀。作为行业标杆的SecureCRT,其8.7.2版本在Windows 10/11环境下的部署却常让新手陷入各种技术陷阱——从安装路径选…...
为什么软件开发偏爱 Linux?深度剖析 Linux 相较于 Windows 的核心优势
引言 在软件开发的世界里,一个有趣的现象是:无论是大型互联网公司的服务器集群,还是资深程序员的个人开发机,Linux 操作系统的身影无处不在。与之形成鲜明对比的是,尽管 Windows 在个人消费市场占据绝对主导地位&…...
从CTF题看RSA安全:为什么你的密钥不能‘共享素数’?
从CTF实战看RSA密钥安全:那些年我们踩过的坑 在网络安全竞赛和实际渗透测试中,RSA算法的错误实现方式往往成为突破的关键点。本文将通过典型CTF赛题案例,揭示五种常见RSA实现漏洞背后的数学原理和安全启示,帮助开发者在实际项目中…...
Airtest Poco实战:5分钟搞定微信小程序自动化测试环境搭建与元素抓取
Airtest Poco实战:5分钟搞定微信小程序自动化测试环境搭建与元素抓取微信小程序作为轻量级应用的代表,已经渗透到电商、社交、工具等各个领域。随着小程序功能的日益复杂,自动化测试成为保障产品质量的重要手段。本文将带你快速搭建微信小程序…...
基于雷达与光敏传感器的低功耗智能窗防设备设计与实现
1. 项目概述:一个基于雷达与光敏的智能窗防设备几年前,我因为一次短暂的出差,家里空置了几天,回来后就一直琢磨着怎么给家里的窗户加点“动静”。市面上的智能安防摄像头固然好,但要么需要复杂的布线,要么云…...
InVideo插件深度解析:如何在Unreal Engine中实现高效视频流播放与录制
InVideo插件深度解析:如何在Unreal Engine中实现高效视频流播放与录制 【免费下载链接】InVideo 基于UE4实现的rtsp的视频播放插件 项目地址: https://gitcode.com/gh_mirrors/in/InVideo InVideo是一个基于Unreal Engine 5开发的RTSP视频播放插件࿰…...
保姆级教程:在Ubuntu上配置Frida环境,搞定Android App的IO重定向与签名绕过
在Ubuntu上构建Android逆向工程环境:Frida实战与IO重定向技术解析 对于习惯Linux环境的安全研究人员而言,Windows-centric的逆向工具链往往带来诸多不便。本文将系统性地介绍如何在Ubuntu上搭建完整的Android逆向环境,并深入探讨如何利用Frid…...
