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

第一次个人编程作业

第一次个人编程作业

作业GitHub链接https://github.com/useful-Tree/3123004757/tree/main

一、PSP表格(预估与实际耗时)

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 15 20
· Estimate · 估计任务所需时间 15 20
Development 开发 380 410
· Analysis · 需求分析(含学习新技术) 60 50
· Design Spec · 生成设计文档 30 40
· Design Review · 设计复审 15 15
· Coding Standard · 代码规范制定 10 10
· Design · 具体设计 45 55
· Coding · 具体编码 150 160
· Code Review · 代码复审 20 25
· Test · 测试(自我测试+修改提交) 50 55
Reporting 报告 190 180
· Test Report · 测试报告 40 35
· Size Measurement · 计算工作量 10 5
· Postmortem & Process Improvement Plan · 事后总结与改进计划 140 140
· 合计 585 610

二、计算模块接口的设计与实现过程

1. 代码组织结构

本次论文查重程序采用模块化设计,将功能拆分为“入口调度”“文本处理”“相似度计算”三大核心模块,各模块职责单一、低耦合,便于维护与测试。项目结构如下:

3123004757/
├── main.py          # 程序主入口(命令行参数处理、流程调度)
├── requirements.txt # 依赖清单(jieba==0.42.1)
├── test.py          # 单元测试文件(覆盖10+测试用例)
├── test_cases/      # 测试用例文件夹
│   ├── orig.txt     # 示例原文
│   ├── orig_add.txt # 示例抄袭版
│   └── empty.txt    # 空文件(异常测试)
└── utils/           # 工具函数文件夹├── text_processor.py  # 文本预处理(读取、清洗、分词、词频向量生成)├── stopwords.txt      # 中文停用词表(过滤“的”“是”等无意义词)└── similarity_calculator.py # 相似度计算(余弦相似度核心算法)

2. 核心算法:余弦相似度

本次选择余弦相似度作为查重算法,其核心思想是将文本转化为高维词频向量,通过计算向量夹角的余弦值衡量文本相似性(值越接近1,相似度越高;越接近0,相似度越低)。算法步骤如下:

(1)算法流程

graph TDA[读取原文/抄袭版文件] --> B[文本清洗(去除标点、特殊字符、小写化)]B --> C[分词(jieba分词,过滤停用词+单字)]C --> D[生成词频向量(key=词语,value=出现次数)]D --> E[计算余弦相似度]E --> F[结果保留2位小数,写入答案文件]

(2)关键公式

余弦相似度计算公式如下,其中A、B分别为原文与抄袭版的词频向量:
image

  • 分子:向量点积(衡量两向量方向的一致性);
  • 分母:两向量模长的乘积(衡量向量的“长度”,避免文本长度影响)。

3. 核心函数实现

(1)文本预处理(utils/text_processor.py)

负责将原始文本转化为标准化的词频向量,关键函数包括:

def read_file(file_path):"""读取文本文件,兼容utf-8/gbk编码,捕获文件不存在异常"""try:with open(file_path, 'r', encoding='utf-8') as f:return f.read().strip()except UnicodeDecodeError:with open(file_path, 'r', encoding='gbk', errors='ignore') as f:return f.read().strip()except FileNotFoundError:raise FileNotFoundError(f"错误:文件{file_path}不存在")def text_to_vector(text):"""将文本转化为词频向量(过滤停用词+单字)"""# 文本清洗cleaned_text = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9\s]', ' ', text)cleaned_text = re.sub(r'\s+', ' ', cleaned_text).strip().lower()# 分词(使用jieba快速模式提升速度)words = jieba.lcut_for_search(cleaned_text)  # 搜索引擎模式,速度比精确模式快30%# 加载停用词with open('utils/stopwords.txt', 'r', encoding='utf-8') as f:stopwords = set(f.read().splitlines())# 生成词频向量(用Counter替代defaultdict,代码更简洁)filtered_words = [word for word in words if word not in stopwords and len(word) > 1]return Counter(filtered_words)

(2)相似度计算(utils/similarity_calculator.py)

实现余弦相似度的核心逻辑:

import mathdef cosine_similarity(vec1, vec2):"""计算两个词频向量的余弦相似度,返回0-1之间的浮点数"""# 提取所有不重复词语(避免遗漏任一向量的词)all_words = set(vec1.keys()).union(set(vec2.keys()))# 计算向量点积dot_product = sum(vec1.get(word, 0) * vec2.get(word, 0) for word in all_words)# 计算向量模长norm1 = math.sqrt(sum(val ** 2 for val in vec1.values()))norm2 = math.sqrt(sum(val ** 2 for val in vec2.values()))# 处理空向量(避免除以0)if norm1 == 0 or norm2 == 0:return 0.0# 返回余弦相似度return dot_product / (norm1 * norm2)

(3)入口调度(main.py)

处理命令行参数,串联所有模块:

import sys
from utils.text_processor import read_file, text_to_vector
from utils.similarity_calculator import cosine_similaritydef main():# 检查参数数量(需传入3个文件路径)if len(sys.argv) != 4:print("错误:参数不足!正确格式:python main.py [原文路径] [抄袭版路径] [答案路径]")sys.exit(1)# 提取参数orig_path, plag_path, ans_path = sys.argv[1], sys.argv[2], sys.argv[3]try:# 核心流程:读取→预处理→计算相似度→写入结果orig_vec = text_to_vector(read_file(orig_path))plag_vec = text_to_vector(read_file(plag_path))similarity = round(cosine_similarity(orig_vec, plag_vec), 2)# 写入答案文件(保留2位小数)with open(ans_path, 'w', encoding='utf-8') as f:f.write(f"{similarity:.2f}")print(f"成功:相似度已写入{ans_path},结果为{similarity:.2f}")except Exception as e:print(f"执行错误:{str(e)}")sys.exit(1)if __name__ == "__main__":main()

4. 算法独到之处

  1. 编码兼容read_file函数同时支持utf-8gbk编码,避免因测试用例文件编码不一致导致的读取失败;
  2. 停用词过滤:通过stopwords.txt过滤“的”“是”“在”等无意义词,减少噪声对相似度计算的干扰;
  3. 异常安全:捕获文件不存在、参数不足等异常,输出清晰错误信息,避免程序崩溃;
  4. 结果精度:通过round:.2f双重保证结果精确到小数点后两位,符合作业要求。

三、计算模块接口的性能改进

1. 性能瓶颈定位

使用Python内置的cProfile工具分析程序耗时(命令:python -m cProfile -s cumulative main.py test_cases/orig.txt test_cases/orig_add.txt test_cases/ans.txt),发现两大瓶颈:

耗时占比 函数 问题原因
65% jieba.lcut 默认精确模式分词速度较慢,处理10000字文本需1.8秒
20% text_to_vector中的defaultdict统计 词频统计逻辑冗余,循环效率低

2. 改进思路与实现

(1)优化分词速度

jieba的“精确模式”改为“搜索引擎模式”(lcut_for_search),牺牲极少量分词精度,但速度提升30%以上:

  • 优化前:words = jieba.lcut(cleaned_text)
  • 优化后:words = jieba.lcut_for_search(cleaned_text)

(2)优化词频统计

collections.Counter替代defaultdict,简化代码同时提升效率:

  • 优化前:
    from collections import defaultdict
    vector = defaultdict(int)
    for word in words:if word not in stopwords and len(word) > 1:vector[word] += 1
    
  • 优化后:
    from collections import Counter
    filtered_words = [word for word in words if word not in stopwords and len(word) > 1]
    vector = Counter(filtered_words)
    

同时,程序内存占用稳定在50MB以内(远低于2048MB的限制),所有测试用例均能在0.5秒内完成计算,满足“5秒内出答案”的要求。

四、计算模块部分单元测试展示

1. 单元测试框架与工具

使用Python内置的unittest框架编写测试用例,结合coverage.py工具统计测试覆盖率。测试用例覆盖正常场景(如完全相同文本、同义词替换)、异常场景(如文件不存在、空文件)、边界场景(如参数不足、特殊字符文本),共12个用例。

2. 代表性测试用例代码

(1)测试“完全相同文本”(期望相似度1.00)

import unittest
import os
from utils.text_processor import read_file, text_to_vector
from utils.similarity_calculator import cosine_similarityclass TestPlagiarismChecker(unittest.TestCase):def setUp(self):# 创建临时测试文件self.orig_file = "test_cases/temp/orig_same.txt"self.plag_file = "test_cases/temp/plag_same.txt"with open(self.orig_file, 'w', encoding='utf-8') as f:f.write("今天是星期天,天气晴,今天晚上我要去看电影。")with open(self.plag_file, 'w', encoding='utf-8') as f:f.write("今天是星期天,天气晴,今天晚上我要去看电影。")def test_identical_text_similarity(self):"""测试完全相同的文本,相似度应为1.00"""orig_vec = text_to_vector(read_file(self.orig_file))plag_vec = text_to_vector(read_file(self.plag_file))sim = cosine_similarity(orig_vec, plag_vec)self.assertAlmostEqual(sim, 1.00, places=2)  # 断言相似度接近1.00def tearDown(self):# 清理临时文件os.remove(self.orig_file)os.remove(self.plag_file)if __name__ == "__main__":unittest.main()

(2)测试“文件不存在”(期望抛出FileNotFoundError)

def test_file_not_found(self):"""测试读取不存在的文件,应抛出FileNotFoundError"""non_exist_file = "test_cases/temp/non_exist.txt"with self.assertRaises(FileNotFoundError) as cm:read_file(non_exist_file)# 断言错误信息包含“文件不存在”self.assertIn("文件不存在", str(cm.exception))

(3)测试“命令行参数不足”(期望异常退出)

def test_insufficient_arguments(self):"""测试命令行参数不足(仅2个),程序应异常退出(退出码1)"""import sysoriginal_argv = sys.argv  # 保存原始argvsys.argv = ["main.py", "orig.txt", "plag.txt"]  # 仅2个参数(缺少答案文件路径)with self.assertRaises(SystemExit) as cm:from main import mainmain()self.assertEqual(cm.exception.code, 1)  # 断言退出码为1sys.argv = original_argv  # 恢复原始argv

3. 测试覆盖率结果

执行以下命令生成覆盖率报告:

  1. coverage run -m unittest test.py(运行测试并收集数据);
  2. coverage report -m(查看文本版覆盖率);
  3. coverage html(生成HTML版覆盖率报告)。

(1)文本版覆盖率

代码覆盖率报告

Name Stmts Miss Cover Missing
main.py 25 4 84% 34-37, 41
test.py 103 1 99% 136
utils\similarity_calculator.py 13 0 100%
utils\text_processor.py 30 4 87% 11-12, 38-40
TOTAL 171 9 95%

(2)HTML版覆盖率报告

生成的htmlcov/index.html页面显示:

  • 核心函数(如cosine_similaritytext_to_vector)的每一行代码均被覆盖;
  • text_processor.py中“停用词文件不存在”的分支未覆盖。

五、计算模块部分异常处理说明

本次程序共处理4类关键异常,每种异常均明确设计目标,并配套单元测试用例,确保程序在异常场景下稳定运行且反馈清晰。

1. 异常1:命令行参数不足

(1)设计目标

当用户输入的命令行参数少于3个(原文、抄袭版、答案文件路径)时,程序不崩溃,输出清晰的参数格式提示,引导用户正确使用。

(2)异常处理代码(main.py)

if len(sys.argv) != 4:print("错误:参数不足!正确格式:python main.py [原文路径] [抄袭版路径] [答案路径]")sys.exit(1)  # 异常退出,返回非0状态码(便于脚本调用时判断结果)

(3)单元测试样例

def test_insufficient_arguments(self):import sysoriginal_argv = sys.argvsys.argv = ["main.py", "orig.txt"]  # 仅1个参数(严重不足)with self.assertRaises(SystemExit) as cm:from main import mainmain()self.assertEqual(cm.exception.code, 1)sys.argv = original_argv

(4)错误场景

用户误输入:python main.py test_cases/orig.txt test_cases/orig_add.txt(缺少答案文件路径),程序输出:错误:参数不足!正确格式:python main.py [原文路径] [抄袭版路径] [答案路径],并退出。

2. 异常2:文件不存在

(1)设计目标

当用户传入的文件路径不存在时,程序抛出明确的FileNotFoundError,告知具体不存在的文件,避免用户因路径错误排查困难。

(2)异常处理代码(utils/text_processor.py)

def read_file(file_path):try:with open(file_path, 'r', encoding='utf-8') as f:return f.read().strip()except FileNotFoundError:raise FileNotFoundError(f"错误:文件{file_path}不存在,请检查路径是否正确")

(3)单元测试样例

def test_file_not_found(self):non_exist_path = "test_cases/non_exist.txt"with self.assertRaises(FileNotFoundError) as cm:read_file(non_exist_path)self.assertEqual(str(cm.exception), f"错误:文件{non_exist_path}不存在,请检查路径是否正确")

3. 异常3:文本编码错误

(1)设计目标

当文件编码既不是utf-8也不是gbk时,程序忽略无法解码的字符,继续执行(避免因个别特殊字符导致整个程序失败)。

(2)异常处理代码(utils/text_processor.py)

except UnicodeDecodeError:# 用gbk编码重试,同时忽略无法解码的字符with open(file_path, 'r', encoding='gbk', errors='ignore') as f:return f.read().strip()

(3)测试场景

使用的文本文件程序可正常读取并处理,仅忽略无法解码的字符,相似度计算结果不受影响。

4. 异常4:空向量(文本为空)

(1)设计目标

当原文或抄袭版文本为空时(如empty.txt),避免计算余弦相似度时出现“除以0”错误,直接返回相似度0.0。

(2)异常处理代码(utils/similarity_calculator.py)

norm1 = math.sqrt(sum(val ** 2 for val in vec1.values()))
norm2 = math.sqrt(sum(val ** 2 for val in vec2.values()))
if norm1 == 0 or norm2 == 0:return 0.0  # 任一文本为空,相似度为0

(3)单元测试样例

def test_empty_text_similarity(self):"""测试原文为空、抄袭版非空的场景,相似度应为0.0"""empty_vec = text_to_vector("")  # 空文本的词频向量non_empty_vec = text_to_vector("今天天气很好")sim = cosine_similarity(empty_vec, non_empty_vec)self.assertEqual(sim, 0.0)

六、事后总结与过程改进计划

1. 开发过程收获

  1. 模块化设计的重要性:将功能拆分为独立模块后,后续优化(如替换分词算法)仅需修改text_processor.py,无需改动其他文件,降低了维护成本;
  2. 单元测试的价值:编写测试用例时发现了“空文本除以0”“编码不兼容”等隐性问题,避免了在测试点中扣分;
  3. 性能分析工具的作用:通过cProfile精准定位瓶颈,避免了“盲目优化”,提升了优化效率。

相关文章:

第一次个人编程作业

第一次个人编程作业 作业GitHub链接https://github.com/useful-Tree/3123004757/tree/main 一、PSP表格(预估与实际耗时)PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Planning 计划 15 20 Estimate估计任务所需时间 15 20Development 开发 …...

【初赛】软件系统 - Slayer

软件系统 (主要是之前做到了几次 全错 来记一下 系统软件 操作系统、Windows、dos、unix、各种计算机语言处理程序、机器语言、汇编语言、高级语言、数据库管理系统、支持软件 应用软件 程序库、软件包、套装软件、用户程序 常见:字处理软件、电子制表软件、计算机辅助设计软…...

漏洞详解--XXE 从入门到精通!

一、漏洞原理 1.1 核心 XXE(XML External Entity injection),名为XML外部实体注入。其核心在于XML解析器默认允许外部实体/DTD,攻击者通过构造特殊的XML使其包含恶意外部实体。外部实体可以为服务器敏感文件,也可以为网络请求等,之后利用方式类似于文件包含和SSRF,有时甚…...

数学分析习题课 note

ohno,这很难第一讲:实数系 我们可以定义有序域 \(F\) 。一些有序域 \((F,+,\cdot,\le )\) 满足以下所谓连续公理: 连续公理 阿基米德公理:\(\forall x,y\in F,x>0,\exists n\in N^{+}\) 使得 \(nx>y\) 完备公理:若存在代数结构 \((F,+,\cdot,\le )\) 满足 \(F\subse…...

总结-CDQ 分治

关于 CDQ 分治 CDQ 分治是一种思想而不是具体的算法,并且必须离线处理,用于维护具有偏序限制的问题。 偏序可以理解为大小关系。 经典三维偏序 CDQ 分治的经典应用。 给定每个元素,每个元素都有三个属性 \((x,y,z)\),要求统计所有满足三个偏序条件时的价值。 标准方法:sor…...

【初赛】计算机语言 - Slayer

计算机语言 编译性语言 c c++ pascal 解释性预言 py java JavaScript ruby PHP...

深入浅出RocketMQ客户端编程

深入理解RocketMQ:从架构到实战的全方位指南 在当今分布式系统日益普及的时代,消息队列已成为支撑高并发、高可靠业务的核心组件。RocketMQ作为阿里巴巴开源的高性能消息中间件,凭借其卓越的性能和稳定性,在电商、金融等高要求场景中得到了广泛应用。今天,让我们一起深入探…...

Win10玩LOL弹窗

将红框内关闭关闭后,可以按win+g快捷键,如果不弹出那个窗口,在LOL里面应该也不会弹出...

溢出存储变量

这个 negative(i) 表示的就是 (-i) 这个数(其中 i>=0),在二进制下的编码。 这个编码满足 \(i+negative(i)=2^k\),可是由于我们二进制下只有 \(k\) 位,最高位是 \(2^{k-1}\),所以那个 \(1\) 会被丢掉,所以加起来结果为 \(0\)。 那如何确定一个数被存储为多少,因为前面…...

retrieving repo key for OS unencrypted from

在服务器上安装mkfontscale工具时,下载成功但是再安装过程中一直提示: retrieving repo key for OS unencrypted from http://repo.openeuler.org/openEuler-22.03-LTS-SP3/OS/x86_64/RPM-GPG-KEY-openEuler。 手动下载RPM-GPG-KEY-openEuler文件,将其上传到服务器/etc/yum.…...

3. Explain详解与索引最佳实践

3.1 Explain使用与详解id select_type table partitions type possible_keys key key_len ref rows filtered Extra1 SIMPLE user NULL ref idx_name_age_dpt idx_name_age_dpt 1023 const 1 100.0 NULL中 重要 中 低 重要 重要 重要 重要一般 一般 一般通过EXPLAIN或DESC命令获…...

软工个人项目作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13477这个作业的目标 制作论文查重工具论文查重工具项目文档 项目概述 本项目是一…...

异地办公文件同步,多台设备如何无缝同步最新教程

如何实现异地电脑文件同步?本文对比了坚果云与Syncthing等复杂技术方案。讲解如何使用坚果云,无需繁琐配置,即可在Windows/Mac等多设备间实现文件自动、实时同步。是解决远程办公和多设备管理难题的简单、高效选择。异地电脑文件同步?告别复杂技术,一招搞定! 身处不同城市…...

CSP-S模拟22

前言: 哈哈哈,又是一场爆零的模拟赛~~ \(T1:\) 木棍 思路: 机房出现了两种思路: 第一种:我们不难发现,一共就只有五种情况\({334}{2233}{2224}{244}{22222}\)...

详细介绍:【系统分析师】2025年上半年真题:论文及解题思路

详细介绍:【系统分析师】2025年上半年真题:论文及解题思路pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New",…...

实战有效的Web时序攻击技术剖析

本文深入探讨了Web时序攻击的实际应用,包括参数发现、服务器端注入和反向代理配置错误检测,通过真实案例展示了高精度时序分析技术在安全测试中的突破性进展。倾听低语:实际有效的Web时序攻击 | PortSwigger研究 James Kettle 研究总监 @albinowax 发布时间:2024年8月7日 1…...

22222222 - idle

//为什么要攀登?因为山就在那里。 #include<bits/stdc++.h> #define mrx 0x7f7f7f7f7f7f7f7f //#define int long long using namespace std; inline int read(){int num=0,flag=1;char ch=getchar();while(ch<0||ch>9){if(ch==-) flag=-1;ch=getchar();}while(ch…...

表格如何设置多人在线编辑?坚果云实时编辑,告别版本冲突!

还在为Excel表格多人协作的版本混乱、数据冲突而烦恼吗?本文深入对比坚果云、在线Office等三大解决方案,并提供坚果云实战教程。教你如何利用其强大的实时同步、版本管理和权限控制功能,彻底告别协作难题,实现高效、安全的团队文件管理。告别表格协作难题:三大高效解决方案…...

白嫖党狂喜!爆肝一下午搞定 URL 转 HTML 幻灯片神器,ISlide 9900 资源点从此是路人

原文:白嫖党狂喜!爆肝一下午搞定 URL 转 HTML 幻灯片神器,ISlide 9900 资源点从此是路人家人们谁懂啊!之前分享的 ISlide 插件做 PPT 一次要耗 9900 个资源点【从 url 到 PPT 一键生成:Coze 工作流,颠覆你的内容创作方式!】,作为资深白嫖党看着资源点的大量消耗实在心疼…...

继承

1.概述 子类和父类的区分需要根据实际情况,不能随便使用 2.子类只能继承一个父类,(单继承),但是可以多级继承 所有类都简介或直接继承Object类(java虚拟机自动生成) 3继承的内容 成员变量 继承的private内容可以被继承但是不能直接使用,需要用get()方法 继承中成员变量的访问特…...

我们究竟在用钱交换什么?

钱,藏着哪些我们没说透的用途?"穷人用健康换钱,富人用钱买健康",而最残忍的是,后者永远买不完 这个世界上,钱不是万能的,但有钱的确能解决99%的问题,包括给我们带来自尊和底气!中国有句老话:和气生财,我认为,和气不一定生财,但有钱确实能为家庭带来一…...

jupyterLab如何使用

好的,JupyterLab 是一个非常强大的交互式开发环境(IDE)。下面我将从安装、启动、核心功能到高级技巧,为你提供一个完整的入门指南。一、安装 JupyterLab 首先,你需要安装 JupyterLab。强烈建议在虚拟环境中安装,以避免包冲突。 1. 使用 pip 安装(最常用) # 1. 创建并激…...

HyperWorks许可监控

在当今竞争激烈的工程设计和仿真领域,资源的高效利用至关重要。HyperWorks作为一款业界领先的工程仿真软件,其许可监控功能为用户提供了强大的资源管理和优化工具。本文将向您介绍HyperWorks许可监控的重要性以及如何利用它确保您的资源得到充分利用。 什么是HyperWorks许可监…...

C++拷贝构造函数详解:从浅拷贝到深拷贝

什么是拷贝构造函数? 拷贝构造函数是C++中的一种特殊构造函数,用于创建一个新对象作为现有对象的副本。当我们使用一个对象来初始化同类型的另一个对象时,拷贝构造函数就会被调用。 基本语法 class MyClass { public:// 拷贝构造函数MyClass(const MyClass& other) {// …...

K8S探针

https://blog.csdn.net/weixin_28820113/article/details/148380309 HTTP探测实战(最常用) 向容器发送 HTTP 请求,若返回状态码为 200-399,则表示检查成功[root@master ~/probe]# cat readiness.yaml kind: Pod apiVersion: v1 metadata:name: nginxlabels:app: nginx spec…...

模拟赛

波波牛的惩罚 我们先处理出每个数可能影响的数,可以用链式前向星或 vector 我们维护一个队列,在最开始的时候放入最小值。 每次取出一个数,然后遍历所有可以影响的数,并把影响成功的数放进队列。 在最后判一下是否相同即可。 复杂度 \(O(n)\)。点击展开代码 #include<bi…...

bug1

9.16 修复报错字体大小bug 补充日志 TeXmacs/progs/debug/debug-widgets.scm 修改build-message 为以下 (define (build-message m)(let* ((k (tm->stree (tm-ref m 0)))(s (utf8->cork (tm->stree (tm-ref m 1))))(t (tm->stree (tm-ref m 2))))(cond ((string-e…...

C#第十二天 025

父类如果只有有参构造器,子类会默认去调用父类的无参构造器,如果子类要有无参构造器需要这样 子类构造器():base(参数)你的理解​​完全正确​​!当父类​​只有有参构造器​​时,子类必须​​显式调用父类的有参构造器​​,否则会编译错误。 类成员的访问级别不能超…...

选择语句的机器级表示

无条件转移指令--jmp 格式: jmp <地址> #pc无条件跳转到<地址> <地址>可以由常数直接给出:jmp 5 <地址>可以来自于寄存器:jmp eax <地址>可以来自于主存 :jmp [999] <地址>可以用“标号”锚定:jmp NEXT 100 mov eax,7 104 mov ebx,6 …...

pip常用命令

好的,这是 Python 包管理工具 pip 的常用命令大全,涵盖了从安装、升级、查询到问题排查的所有核心操作。一、核心命令:安装与卸载命令 描述 示例pip install <package_name> 安装最新版本的包 pip install requestspip install <package_name>==<version>…...

Nginx auth_request 模块使用

Nginx auth_request 模块使用笔记 📌 模块概述 nginx-auth-request-module(官方名:http_auth_request_module)用于在请求处理前向外部服务进行认证验证。 🔧 安装与启用 # 编译时添加模块 ./configure --add-module=/path/to/nginx-auth-request-module# 检查是否已安装…...

用nssm将minio和srs注册成服务

首先,要注意一个关键问题,不要在nssm中直接调用batNSSM 与 Bat 文件的问题:当NSSM启动一个批处理文件(.bat)时,它实际启动的是cmd.exe进程,而批处理中的命令(如minio.exe)则是其子进程。NSSM会监视cmd.exe的状态。一旦批处理中的命令执行完毕,cmd.exe进程就会退出,N…...

Mac上的Markdown学习

Markdown学习 标题 一个#+空格表示一级标题 两个#+空格表示二级标题 ……同理,几个#+空格表示几级标题 字体 粗体 Hello World 前后两个*表示粗体 斜体 Hello World 前后一个*表示斜体 斜体加粗 Hello World 前后三个*表示斜体加粗 删除线 Hello world 前后两个英文字符~表示删…...

ubuntu 18.04安装mysql8.4.5

环境Os:ubuntu 18.04 desktop桌面版mysql:8.4.5 glibc2.17 查看操作系统信息root@db:/# ldd --version ldd (Ubuntu GLIBC 2.27-3ubuntu1) 2.27 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is…...

Radxa E20C 安装 OpenWrt

背景 今天浏览 Radxa E20C 官方文档中无意中发现设备可以安装 OpenWrt,如下图:Radxa E20C 官方文档安装 OpenWrt参考链接: E20C->上手指南->安装系统->安装系统到EMMC->Windows主机创建目录 01-DriverAssistant v5.0, 下载 DriverAssistant v5.0 ,并解压和安装…...

第三篇:配置浏览器

111111车到山前必有路,学到苦海甘甜来。只有知识和阅历对的起自己的年龄,美好的生活才不会欺骗自己!...

第二篇:playwright初步解析

以下是一个完整的测试用例,模拟用户登录功能: 脚本示例:from playwright.sync_api import sync_playwrightdef test_login(): with sync_playwright() as p: # 启动浏览器 browser = p.chromium.launch(headless=True) page = browser.new_page()# 打开…...

高性能计算-TensorCore-hgemm

1. TensorCore 简介:硬件层面支持半精度浮点矩阵乘法,与昇腾NPU的 cube 核类似,最小只能计算规定尺寸的矩阵乘法。 wmma API 封装在 nvcuda 命名空间2. naive :一个block 1 个warp,wmmaTile 16*16点击查看代码 //naive 一个block 一个warp,一个线程处理一个数据 template …...

《ESP32-S3使用指南—IDF版 V1.6》第三十八章 SPIFFS实验

第三十八章 SPIFFS实验 1)实验平台:正点原子DNESP32S3开发板 2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6 3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/…...

技术交流社区基础防诈指南

技术交流社区基础防诈指南技术交流社区基础防诈指南 若已确认被骗或发现违法内容,请立即通过以下渠道举报:公安部网络违法犯罪举报网站:12321.cn (网络不良信息) 国家反诈中心:拨打 110 或通过官方APP举报 (注意:报警时务必索要《受案回执》) 中央网信办违法和不良信息举报…...

神秘题

Trick排列置换题,考虑转化乘环上移动问题。题目 精灵之环 假设知道排列 \(p\)。 那么把这个排列 \(p\) 的环连出来,环上点的编号是排列的下标,点的值是编号对应的值。 就比如排列 4 1 2 3 的环为: val: 4 1 2 3 4 id : 1->2->3->4->1...可以发现把这些环上…...

技术群高级防骗指南

技术群高级防骗指南技术群高级防骗指南 怎么骗的 怎么防 被骗会怎么样 怎么骗的 1.资源储备与身份伪装: 1.盗盗取大量高等级账号并使用,给人友好可信的虚假印象2.养 ​ 骗子可能会花时间养这些盗来的号, 参与正常讨论,发一些专业的言论, 或者爆出自己是某某名牌大学来的 / 某…...

集训游记

前言 关于我 2025-9-16 开始写游击这件事情,其实已经考了 10 多次了,感觉前几次还好,后面被削弱了/kk,肯定是感冒debuff的问题,目前是能碾压ysh和lh的部分时候可以干掉xch,别的没咋关注.exe 2025-9-16 上午考试,比赛题目居然叫做 fish、oblivious、array、digit...

SQL Server 中的 STUFF 函数与FOR XML PATH详解 - 实践

SQL Server 中的 STUFF 函数与FOR XML PATH详解 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mono…...

2025/9/16 总结

A 用时:2h 预期:0pts 实际:0pts 考试是没有想到可以考虑 \(p_k\) 的置换环,思考许久没有思路。 然后打表找构造方法没有找出来心态就炸了,导致后面基本没有写暴力,直接垫底了。 总结:对于这种排列问题,可以考虑置换处理。考试心态不要炸,即使不会做也要打暴力。B 用时…...

Linux备份数据

linux备份常用技术一、备份数据库 1、准备一份备份命令sh文件,比如将其存放在/opt/db_bak中,命名为bak_mysql.sh#!/bin/bash # MySQL备份配置 MYSQL_USER="root" MYSQL_PASSWORD="root" MYSQL_HOST="10.10.10.10" MYSQL_PORT="3306"…...

np.argmax

argmax 是 NumPy 和许多其他科学计算库(如 PyTorch、TensorFlow)中的一个非常常用的函数,它的作用是返回数组中最大值的索引。 简单来说,argmax 告诉你最大值在哪里,而不是最大值是多少。 argmax 的基本用法 np.argmax(a, axis=None, out=None)a: 你要查找最大值索引的数组…...

TQ322数字PIR使用笔记

TQ322 数字PIR特性: 双元单通数字输出热释电红外传感器我使用中断读取的方式即时获取数字PIR传感器内最新的数据具体时序如下: 单片机IO 模拟时序程序如下: (代码中NOP数量根据单片机主频和型号自行调整)/*-------------------------------------------------* 函数名:D…...

使用Apache做web服务器时无法断点续传的怎么办?

Apache 作为 Web 服务器时,如果无法实现 断点续传 功能,通常是因为配置问题或文件系统的限制。断点续传是指用户在中断下载后,可以从上次中断的地方继续下载,而不是重新开始。以下是可能的原因分析和解决方法。1. 什么是断点续传?断点续传(HTTP Range 请求):由客户端发…...

Rust使用rbatis

toml rbs = { version = "4.6"} rbatis = { version = "4.6"} #drivers rbdc-mysql = { version = "4.6" } # 其他依赖 serde = { version = "1", features = ["derive"] } serde_json = "1.0" tokio = { version…...