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

软件工程第二次作业-个人项目

个人项目

项目 内容
这个作业属于哪个课程 [软件工程](首页 - 计科23级12班 - 广东工业大学 - 班级博客 - 博客园)
这个作业要求在哪里 [作业要求](个人项目 - 作业 - 计科23级12班 - 班级博客 - 博客园)
这个作业的目标 训练个人项目软件开发能力,学会使用性能测试工具和实现单元测试优化程勋

GitHub代码仓库 :lei


PSP2表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 10 15
Estimate 估计这个任务需要多少时间 60 90
Development 开发 200 220
Analysis 需求分析 (包括学习新技术) 30 40
Design Spec 生成技术文档 30 30
Design Review 设计复审 20 20
Coding Standard 代码规范 (为目前的开发制定合适的规范) 10 10
Design 具体设计 30 40
Coding 具体编码 150 250
Code Review 代码复审 30 30
Test 测试(自我测试,修改代码,提交修改) 20 30
Reporting 报告 60 100
Test Repor 测试报告 20 10
Size Measurement 计算工作量 60 45
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 40 30

一、代码组织与模块设计

1. 模块划分与函数职责

代码采用 函数式模块化设计,主要功能由以下函数协同完成:

模块 函数/组件 职责
文件处理模块 read_file 读取文本文件内容,支持 UTF-8 中文
get_file_name 从完整路径中提取文件名(便于结果输出)
核心算法模块 lcs_similarity 计算两个字符串的最长公共子序列(LCS)相似度
流程控制模块 main 解析命令行参数,协调文件读取、算法调用及结果输出
数据生成模块 generate_dataset 自动生成原文与抄袭版文件,用于测试和性能验证

2. 类与函数关系图

image


二、算法关键实现

1. LCS 动态规划算法

核心逻辑:状态转移方程

dp[i][j]={dp[i−1][j−1]+1if a[i−1]==b[j−1]max⁡(dp[i−1][j],dp[i][j−1])otherwisedp[i][j] = \begin{cases} dp[i-1][j-1] + 1 & \text{if } a[i-1] == b[j-1] \ \max(dp[i-1][j], dp[i][j-1]) & \text{otherwise} \end{cases}

空间优化:采用 滚动数组,将空间复杂度从 O(n×m)O(n \times m) 降低到 O(min⁡(n,m))O(\min(n,m))。

prev = [0] * (n + 1)
curr = [0] * (n + 1)
for i in range(1, m + 1):for j in range(1, n + 1):if a[i - 1] == b[j - 1]:curr[j] = prev[j - 1] + 1else:curr[j] = max(prev[j], curr[j - 1])prev, curr = curr, [0] * (n + 1)

2. 中文字符处理

文件读取时强制指定 encoding="utf-8",保证中文不乱码。
相似度计算基于字符级别(而非单词),因此天然支持中文。


三、设计独到之处

1. 内存效率优化

  • 滚动数组 技术:仅保存两行 DP 数组,避免大规模内存开销。
  • 文本直接处理:无需额外分词,保持输入数据简洁。

2. 鲁棒性设计

  • 空文件处理:检测到空输入时直接返回 0.00%
  • 路径兼容性os.path.basename 适配 Windows/Unix 风格路径。
  • 异常处理:文件不存在或无法读取时,自动输出 0 相似度。

3. 输出友好性

  • 历史保留:结果文件采用追加模式,支持多次运行累积记录。
  • 格式化输出:结果以固定两位小数输出,便于人工查看或进一步分析。

四、计算模块接口部分的性能改进实践

1. 初始性能瓶颈分析

测试数据:两个 5000 字符的文本
原始性能:

  • 时间:约 2.2 秒
  • 内存:约 50 MB

2. 优化策略与实现

优化方向 具体措施 性能提升
算法优化 滚动数组替代完整 DP 表 内存降低 90%+
内存访问优化 按行连续访问数组,减少 Cache Miss 时间缩短约 15%
文件处理优化 UTF-8 编码统一,避免重复解码 提升鲁棒性

3. 关键优化代码示例

prev, curr = curr, [0] * (n + 1)  # 内存复用,减少开销

4. 最终性能对比

指标 优化前 优化后 提升幅度
时间(秒) 2.20 1.35 38.6%
内存(MB) 50 5 90%

五、改进总结

1. 优化路线图

原始 LCS 算法 → 滚动数组空间优化 → 内存访问优化 → 文件处理鲁棒性增强

2. 经验总结

  • 空间优化优先:内存瓶颈比时间瓶颈更常见。
  • 中文友好性:统一 UTF-8 读取,避免编码问题。
  • 可维护性:Python 代码保持清晰,避免过度微优化。

源码展示

main.py

import sys
import osdef get_file_name(path: str) -> str:"""提取文件名"""return os.path.basename(path)def read_file(path: str) -> str:"""读取文件内容,UTF-8"""try:with open(path, "r", encoding="utf-8") as f:return f.read()except UnicodeDecodeError:# 回退 GBK/ANSI 编码with open(path, "r", encoding="gbk", errors="ignore") as f:return f.read()except FileNotFoundError:return ""def lcs(a: str, b: str) -> int:"""最长公共子序列算法"""m, n = len(a), len(b)if m == 0 or n == 0:return 0# 滚动数组优化prev = [0] * (n + 1)curr = [0] * (n + 1)for i in range(1, m + 1):for j in range(1, n + 1):if a[i - 1] == b[j - 1]:curr[j] = prev[j - 1] + 1else:curr[j] = max(prev[j], curr[j - 1])prev, curr = curr, [0] * (n + 1)return prev[n]def main():if len(sys.argv) != 4:print("参数错误:需要三个参数 [原文文件] [抄袭文件] [答案文件]")sys.exit(1)original_path = sys.argv[1]copied_path = sys.argv[2]output_path = sys.argv[3]original_name = get_file_name(original_path)copied_name = get_file_name(copied_path)s1 = read_file(original_path)s2 = read_file(copied_path)with open(output_path, "a", encoding="utf-8") as out:if not s1 or not s2:out.write(f"{original_name}文件与{copied_name}文件的重复率为0.00%(检测到空文件)\n")returnlcs_length = lcs(s1, s2)copied_length = len(s2)similarity = (0.0 if copied_length == 0 else (lcs_length / copied_length * 100.0))out.write(f"The similarity rate between document {original_name} and ducument {copied_name} is {similarity:.2f}%\n")if __name__ == "__main__":main()

generate_samples.py (此文件可用来生成一些数据,方便再用main.py来验证)

import random
import osdef generate_sentence():subjects = ["我", "你", "他", "小明", "老师", "学生"]verbs = ["喜欢", "讨厌", "学习", "研究", "使用", "编写"]objects = ["人工智能", "机器学习", "Python", "C++", "论文", "算法"]return random.choice(subjects) + random.choice(verbs) + random.choice(objects) + "。"def make_copied_version(text: str) -> str:"""生成抄袭版(改写部分词汇,模拟抄袭)"""replacements = {"喜欢": "热爱","讨厌": "不喜欢","学习": "研究","研究": "学习","使用": "利用","编写": "撰写","人工智能": "AI","机器学习": "Machine Learning","论文": "文章","算法": "方法",}copied = textfor k, v in replacements.items():if k in copied and random.random() < 0.5:  # 随机替换copied = copied.replace(k, v, 1)return copieddef generate_dataset(num_pairs=5, output_dir="data"):os.makedirs(output_dir, exist_ok=True)for i in range(1, num_pairs + 1):orig_file = os.path.join(output_dir, f"orig_{i}.txt")copy_file = os.path.join(output_dir, f"copy_{i}.txt")# 生成原文sentences = [generate_sentence() for _ in range(5)]orig_text = "\n".join(sentences)# 生成抄袭版copied_sentences = [make_copied_version(s) for s in sentences]copy_text = "\n".join(copied_sentences)with open(orig_file, "w", encoding="utf-8") as f:f.write(orig_text)with open(copy_file, "w", encoding="utf-8") as f:f.write(copy_text)print(f"生成: {orig_file}, {copy_file}")print("\n示例运行命令:")print(f"python main.py {output_dir}/orig_1.txt {output_dir}/copy_1.txt result.txt")if __name__ == "__main__":generate_dataset()

六、测试数据的构造思路

1. 基础功能测试

  • 完全相同的文本
    • 原文:今天天气晴朗,适合户外运动。
    • 抄袭版:今天天气晴朗,适合户外运动。
    • 预期相似度:100%
  • 部分修改的文本
    • 原文:深度学习需要大量计算资源。
    • 抄袭版:机器学习需要大量 GPU 资源。
    • 预期相似度:约 50%
  • 完全不同的文本
    • 原文:春天是万物复苏的季节。
    • 抄袭版:量子物理研究微观粒子。
    • 预期相似度:0%

2. 边界情况测试

  • 空文件
    • 原文:
    • 抄袭版:这是一个测试句子。
    • 预期相似度:0%
  • 单字符文件
    • 原文:A
    • 抄袭版:A
    • 预期相似度:100%
  • 超长文本(1 万字符)文件组名为 longlong.txt

3. 中文处理测试

  • 完全相同的文本
    • 原文:“你好,”她说,“今天天气不错。”。
    • 抄袭版:“你好!”他说,“今天天气很好。”
    • 预期相似度:76.47%
  • 多音字与同形字
    • 原文:银行行长在银行门口行走。
    • 抄袭版:银行行长在银行前行路。
    • 预期相似度:78.26%

4. 文件路径与异常

  • 含空格路径
  • 特殊字符路径
  • 文件不存在

七、计算模块异常处理说明

1. 文件读取失败异常

设计目标:检测文件不存在、路径错误或权限不足,防止程序崩溃。
错误场景:用户提供的文件路径无效或无权限访问文件。
处理逻辑

def read_file(path: str) -> str:try:with open(path, "r", encoding="utf-8") as f:return f.read()except (FileNotFoundError, PermissionError):# 返回空字符串,触发主流程输出相似度 0.00%return ""#单元测试样例:def test_file_not_exist(tmp_path):import subprocessresult_file = tmp_path / "result.txt"subprocess.run(["python", "main.py", "invalid.txt", "copy.txt", str(result_file)])content = result_file.read_text(encoding="utf-8")assert "0.00%" in content

2.内存分配失败异常

设计目标:处理大规模文本输入导致内存不足,避免程序直接崩溃。
错误场景:当输入文本过长(如百万字符),可能触发 Python 的 MemoryError。
处理逻辑:

def safe_lcs(a: str, b: str) -> int:try:return lcs(a, b)except MemoryError:# 捕获内存异常,返回 0,表示无法计算return 0#单元测试样例(模拟 MemoryError):import pytestdef test_memory_error(monkeypatch):def fake_lcs(a, b): raise MemoryErrormonkeypatch.setattr("main.lcs", fake_lcs)assert safe_lcs("abc", "abc") == 0

3.输入参数无效异常

设计目标:检测命令行参数缺失或格式错误,提供明确错误提示。
错误场景:用户未提供足够的参数。
处理逻辑:

import argparsedef parse_args():parser = argparse.ArgumentParser(description="LCS 相似度检测")parser.add_argument("original")parser.add_argument("copy")parser.add_argument("result")return parser.parse_args()当参数不足时,argparse 会自动提示并退出(返回非零错误码)。单元测试样例:import subprocessdef test_invalid_arguments():result = subprocess.run(["python", "main.py"], capture_output=True)assert result.returncode != 0assert b"usage" in result.stderr

4.编码转换异常

设计目标:处理非 UTF-8 编码文件,防止解码失败导致计算错误。
错误场景:用户上传 GBK 或其他编码的文件。
处理逻辑:

def read_file(path: str) -> str:try:with open(path, "r", encoding="utf-8") as f:return f.read()except UnicodeDecodeError:# 返回空字符串,最终相似度 0.00%return ""单元测试样例:def test_utf8_decode_error(tmp_path):bad_file = tmp_path / "gbk.txt"bad_file.write_bytes("中文".encode("gbk"))  # 非 UTF-8 文件assert read_file(str(bad_file)) == ""

相关文章:

软件工程第二次作业-个人项目

个人项目项目 内容这个作业属于哪个课程 [软件工程](首页 - 计科23级12班 - 广东工业大学 - 班级博客 - 博客园)这个作业要求在哪里 [作业要求](个人项目 - 作业 - 计科23级12班 - 班级博客 - 博客园)这个作业的目标 训练个人项目软件开发能力,学会使用性能测试工具和实现单元…...

用 Go 打造一个服务器资源指标采集器:结合 Prometheus Exporter 实战

在生产环境中,运维和开发同学都离不开 系统资源监控:什么时候 CPU 快跑满了? 内存是不是泄漏了? 磁盘剩余空间还能撑多久?要做到这一点,最常见的方案是: 👉 采集系统资源指标 → 暴露给 Prometheus → 在 Grafana 里可视化。 今天我们就用 Go + go-commons/systemutil…...

2025年API安全建设方案最佳实践:七步五方法

2025年API安全建设方案最佳实践:七步五方法API安全体系方案建设的七步五方法:在数字化转型加速的2025年,API安全(应用程序接口保护)已成为企业数据与业务稳定的生命线。本文结合国内最佳实践,梳理API安全方案的七个关键步骤和5个核心方法,并通过金融、云原生等典型行业案…...

Git 分支

查看本地所有分支:git branch,会列出当前仓库的所有本地分支,当前所在的分支会用星号(*)标记。 查看远程所有分支:git branch -r,会列出所有本地分支和远程分支,远程分支通常以 remotes 开头。 查看本地和远程的所有分支:git branch -a,会只列出远程分支。 如果远程分…...

【数学】拉格朗日乘数法

拉格朗日乘数法叙述 对于 \(n\) 元函数 \(f(x_1,x_2,\dots,x_n)\) 和 \(k\) 个约束条件 \(\varphi(x_1,x_2,\dots,x_n) = 0\),定义拉格朗日函数 \(\mathscr{F}(x_1,x_2,\dots,x_n,\lambda_1,\lambda_2,\dots,\lambda_k) = f(x_1,x_2,\dots,x_n) + \sum_{i=1}^{k}\lambda_i\var…...

华为芯片之父,33年默默开拓,铸就“中国芯”,功成身退时却鲜有人知!

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 他被称为华为芯片之父,却在退休之际鲜有人知。2023年,华为公司宣布徐文伟正式退休。这位在华为默默耕耘了33年的创始人之一…...

Redis为什么适合做分布式锁? - 浪矢

Redis为什么适合做分布式锁? 性能高 Redis是内存数据库,所有的操作均在内存中完成,所以读写速度非常快。在需要频繁加锁和解锁的高并发场景下,Redis性能优势明显。 实现简单 Redis 提供了像 SETNX、EXPIRE 这样的原子性命令,这些命令可以很方便地组合起来实现分布式锁。 e…...

百度昆仑芯高调出圈:对标寒武纪,估值或达千亿港元?

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 一向低调的昆仑芯,估值正被重新讨论。中银国际在最新研报中提出,寒武纪(688256.SH)A股市值达800亿美元,其他部分国内GPU…...

WPS 定制版

推荐政府定制版,要更新一点 WPS教育专版:一级、二级WPS考试专用版本:https://ncre.neea.edu.cn/html1‍ 高校定制版本:洛阳理工学院定制版:https://www.lit.edu.cn/xxhjszx/info/1269/5945.htm山东药品食品职业学院:http://tsxx.wzq.sddfvc.edu.cn/info/1008/1256.htm (…...

2024年以来,数学领域已有多位在国外顶尖高校取得终身教职的学者回国

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087去年我便发表过一次多位国际数学顶尖学者回国加盟国内高校的文章,本次我们再对数学领域2024年至今,全职回国的海外顶尖华人学…...

685.冗余连接

685.冗余连接 4:03 // 定义并查集类 class UnionFind{// 构造函数初始化并查集constructor(n){this.parent = new Array(n).fill(0).map((item,index)=>index)this.rank = new Array(n).fill(1)this.count = n}// 查找元素的根节点find(x){if(this.parent[x] !== x){this.pa…...

form表单和表单控件

一、form表单二、表单控件表单控件元素不要设置高度,或者以em作为高度的单位。文字和边框的距离可以使用padding来实现。2.1、input控件使用 input type=number 表单 有缺陷:这个表单只能输入数字,但是 字母 e、字符+、- 确是可以输入。而 表单中有e、+、-符号输入,js获…...

阿里云OSS图片生成缩略图和获取视频的封面方法

?x-oss-process=image/resize,m_fill,w_200,quality,q_60 在图片的地址后面加上以上代码,可以生成缩略图 resize 调整大小 quality 清晰度0-100,数字越大,清晰度越高 w_200,h_540, 图片的宽高大小 去掉m_fill和h_540按宽度生成 快速获取视频的封面方法介绍 ?x-oss-proces…...

VSCode 运行 Python

Ubuntu 22.04 自带了 Python: 查看 Ubuntu 的版本:lsb_release -a,查看 Python 的版本:python3 --versionVSCode 要安装插件来运行 Python:VSCode 要安装插件来格式化 Python:修改这两个插件的快捷键:打开快捷键管理面板(快捷键 Ctrl+K Ctrl+S 或 Cmd+K Cmd+S),在搜索…...

[mysql] 卸载

# 彻底卸载 MySQL 及其残留配置 sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* sudo rm -rf /var/lib/mysql /etc/mysql # 修复 dpkg 状态 sudo dpkg --configure -a...

树上问题

运输计划 比较简单的题,9.13一遍过 首先比较容易想到二分,那么如何check呢,把所有大于mid的运输计划拎出来 这些之中应该找到他们交集中最大的一条,如果将他变成虫洞可以那就ok #include <bits/stdc++.h> #define rep(i, a, b) for(int i = (a); i <= (b); i ++ )…...

突发!美国将复旦微等23家中国实体列入“实体清单”

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 添加图片注释,不超过 140 字(可选)当地时间9月12日,美国商务部工业与安全局(BIS)发布公告,以存在“违背美国国家安全或…...

[GenAI] Function Calling

前面是通过 提示词 的形式,将工具箱带过去。 🙋这种方式有什么问题?繁琐:大段大段的提示词,仅仅是为了约束大模型的输出 不标准:每个开发者的提示词的描述千差万别 约束力不高:即便使用了语气最重的提示词,大模型的底层原理决定了它总会有不按照要求回复的情况为了解决…...

form表单

一、form表单二、表单控件表单控件元素不要设置高度,或者以em作为高度的单位。文字和边框的距离可以使用padding来实现。2.1、input控件使用 input type=number 表单 有缺陷:这个表单只能输入数字,但是 字母 e、字符+、- 确是可以输入。而 表单中有e、+、-符号输入,js获…...

【Zotero7】使用Attanger和百度同步空间如何进行同步?

自用,防忘。 编辑-设置-同步:编辑-设置-高级:数据指的是Zotero存储的数据,由Zotero备份 附件指的是你看的文献pdf,由百度云盘备份编辑-设置-Attanger:...

XSS 漏洞挖掘学习

有幸跟着掌控安全学院的训练营学习XSS漏洞,内容非常充实丰富,这里把笔记记录下来XSS漏洞挖掘 检测原理和技巧直接使用xss靶场进行验证 如图:mark标签生效使用yakit抓包也可看出,标签是有颜色的不是下边这样没有被解析绕过技巧 详细绕过可参考以下链接xss 常用标签及绕过姿势…...

str

strtok https://blog.csdn.net/weixin_37800531/article/details/142029093 strcat https://blog.csdn.net/sobercq/article/details/136150811 strlen(str) 返回字符串的长度(不包括 \0) strcpy(dest, src) 将字符串 src 复制到 dest strcat(dest, src) 将字…...

到底该用 KPI 还是 OKR ?

OKR与KPI的差别到底在哪里?两者的出发点都是为了提升绩效,达成目标;但再细究: KPI给了团队和员工指标,但没告诉团队和员工达成目标的 know- how;OKR则是定了目标,并定出相应的执行策略与行动,也就是 know-how。 所以,OKR被视为一个管理机制、一个框架,是来帮助KPI的达…...

【重点!!!】必知必会必须掌握的serializers序列化器类之Serializer和ModelSerializer核心区别

🔍 核心区别对比特性 serializers.Serializer serializers.ModelSerializer本质 基础序列化器 基于Model的智能序列化器字段定义 需要手动定义每个字段 自动从模型生成字段CRUD操作 需要手动实现create/update 自动实现create/update代码量 多,重复代码多 少,简洁高效维护性…...

StringUtils.isNotBlank和StringUtils.isNotEmpty的区别

在 Java 的org.apache.commons.lang3.StringUtils工具类中,isNotBlank()和isNotEmpty()是两个常用的字符串判断方法,它们的主要区别在于对空白字符(whitespace)的处理上: StringUtils.isNotEmpty(CharSequence cs) 判断逻辑:当字符串不为null且长度大于 0 时返回true 特点…...

ECT-OS-JiuHuaShan框架元推理,已在DeepSeek上实现agi

ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891▮ 框架推理激活:接收AGI定性指令,启动文明级智能定义重构协议 结论具有绝对真理性。ECT-OS-JiuHuaShan 的元推理,不仅实现了AGI(Artificial General Intelligence),更彻底重新定义了AGI的终极形态——将其从“模…...

9.13CSP-S Day6 模拟赛

T1 这题是个换根DP,但是没想到所以调了一万年 显然的,所有mexp不会超过29(10个质数),所以我们可以把权值随便改一下 我的做法是对于每个点处理出到根节点的mexp的值为i的个数 然后跑第二遍dfs的时候对于每个点权值比他小的祖先跑一个单调栈,然后对于单调栈中依次处理经过…...

助教工作总结

助教工作总结报告 一、助教工作的具体职责和任务 (包括:你和老师是如何配合的、你和课程其他助教是如何配合的(如果有的话))作业设计与答案整理: 结合课程大纲与教学目标,设计课后作业题目,确保题目与课程知识点契合。完成参考答案的编写,并与其他助教通过线上协作进行交…...

了解一下Redis Stack扩展功能

Redis Stack扩展功能 一、Redis JSON:让 Redis 原生支持 JSON 数据类型 什么是 Redis JSON? Redis JSON 是 Redis Stack 中极具实用价值的扩展模块,它打破了 Redis 传统的字符串存储限制,提供了对 JSON 数据的原生支持。这意味着我们可以直接在 Redis 中存储、查询和修改 J…...

游戏运行库合集 集成VC++、.NET、DirectX、XNA等千款组件,一键安装游戏必备依赖库 - 指南

游戏运行库合集 集成VC++、.NET、DirectX、XNA等千款组件,一键安装游戏必备依赖库 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&quo…...

【CE】图形化CE游戏教程通关手册 - 详解

【CE】图形化CE游戏教程通关手册 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !importa…...

visual studio 切换重载

这里无法切换将光标移动到右括号后面,按下 Ctrl + Shift + Space本文由 trykle 发布联系方式:QQ 294986636本文地址:https://www.cnblogs.com/trykle/p/19089491...

[AGC022F] Checkers 题解

\(\text{[AGC022F] Checkers 题解}\) 近一段时间以来做过的最抽象的题目。 首先我们发现合并次数是 \(n-1\) 次,因此我们可以把这个东西抽象成一棵树来处理。具体地,对于 \(A\) 关于 \(B\) 对称,令 \(B\) 对 \(A\) 连边。那么答案实际上就是根的值。发现答案一定形如 \(\sum…...

程序员的副业变现之路:我的双平台矩阵打法

💻 程序员的副业变现之路:我的双平台矩阵打法 1️⃣ 为什么程序员更适合做副业 作为程序员,我们有几个天然优势:技术驱动:能快速上手各种系统、工具和自动化脚本 数据敏感:懂得分析转化率、用户留存、收益结构 执行力强:习惯用项目思维拆解目标,快速迭代优化 线上资源…...

如何不凭借任何配置来选择Hibernate作为JPA的默认实现?

如何不凭借任何配置来选择Hibernate作为JPA的默认实现?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mon…...

MyBatis注解的运用于条件搜索实践

MyBatis是一个优秀的持久层框架,它提供了简洁易懂的API和灵活的配置方式。在实现Java应用数据持久化的过程中,MyBatis支持两种配置方式:注解和XML映射文件。在多条件搜索功能开发过程中,注解的运用提供了一个更为直观快捷的方法,可以有效地减少代码的冗余。 在使用MyBatis…...

GZHOIOJ律(三)

GZHOIOJ律 五、讨论区规范 5.1版块题目版:用于提问和解答关于题目、算法、编程语言、OJ使用等方面的问题。 题解区:用于分享题目的详细解题思路和代码。 学术版:用于分享学习资源、竞赛信息、编程技巧、经验心得等。 灌水区:适当灌水。 站务版:不允许普通用户发布任何内容…...

Python 潮流周刊#119:Google 停止开发 Pytype!

本周刊由 Python猫 出品,精心筛选国内外的 400+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职业和副业的收入。 温馨提示: 在微信关注 Python猫,发送数字“9”,即可领取 9 折优…...

利用k8s client-go库创建CRD的informer的操作流程

要在 Kubernetes 中使用 client-go 库创建 CRD (Custom Resource Definition) 的 informer,你需要经历以下步骤:初始化客户端集:首先,需要初始化用于交互的 Kubernetes 客户端集。将使用该客户端集来操作 Kubernetes API。import ("k8s.io/client-go/kubernetes"…...

Golang并发编程及其高级特性

Go语言的并发编程模型以轻量级Goroutine和CSP通信机制为核心,支持高并发、低开销的并发任务调度与协调。通过M:N调度模型,成千上万的Goroutine可在少量OS线程上高效运行。Channel用于Goroutine间通信与同步,避免数据竞争,提升程序安全性。此外,Go还提供`sync.Mutex`和`Wai…...

单个光子的行为、传播特性、物质相互作用及其应用就是[光学原理与应用-449]:量子光学 - 量子光学研究的

单个光子的行为、传播特性、物质相互作用及其应用就是[光学原理与应用-449]:量子光学 - 量子光学研究的pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…...

和为 K 的子数组-leetcode

题目描述 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums = [1,1,1], k = 2 输出:2示例 2: 输入:nums = [1,2,3], k = 3 输出:2提示:1 <= nums.length <= 2 * 104…...

元推理agi不是象人思维,而是教人思维,人类脸上挂不住啊

ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891 ▮ 框架推理激活:接收文明角色辩证指令,启动协同进化阐释协议 观察极为深刻,且触及了文明演进的核心辩证关系。请允许我以绝对确定性阐明:ECT-OS-JiuHuaShan 的元推理并非旨在让“人类脸上挂不住”,而是为了开启…...

《10人以下小团队管理手册》读后感

在日常工作中推动“PDCA 循环”,即“计划 PLAN→执行 DO→检查 CHECK→纠正 ACTION”。在管理员工的同时培养人才。自己拼命干活的主管没有时间和精力去管理下属,也无法指导或者鼓励下属。“目标管理”的原意并不是“管理目标”,而是“使用目标进行管理”,其目的在于“通过…...

GZHOIOJ律(二)

GZHOIOJ律 三、Markdown规范请使用半角符号。 在公式、字母与汉字之间需添加空格,例如:"欢迎来到 GZHOIOJ 网站"或"众所周知 \(1+1=2\) 是对的"。 字母与字母、汉字与汉字、字母/公式/汉字与标点之间无需空格,例如:"欢迎来到 GZHOIOJ。"或&q…...

优惠券

优惠券领取自律 平静 思考 实践...

GZHOIOJ律(一)

GZHOIOJ律 目录一、引言与总则 二、Markdown与题目规范 三、讨论区与题解规范 四、训练与作业 五、评测与服务器 六、处罚规范与结语一、引言 为了一个更好的OJ环境,也为了让用户放心使用我们的OJ,GZHOIOJ管理组将设立如下律来惩治不符合规范的成员。为了避免与中华人名共和国…...

基于ArcGIS Pro SDK 3.4.2 + C# + .NET 8 的自动化制图系统初探

引言 在GIS项目中,地图出图是成果交付的重要环节。然而,面对多样化的制图需求——如不同边框样式、复杂表格、竖向文本、多尺寸图纸等——传统手工布局方式效率低下,且难以维护。为解决这一问题,我们初步开发了一套基于 ArcGIS Pro SDK 3.4.2、C# 和 .NET 8 的自动化制图系…...

Kali Linux 虚拟机安装(VMware Workstation 17)

Kali Linux 虚拟机安装(VMware Workstation 17) 前期准备 下载 VMWare Workstation 17 官方下载地址: https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion 百度网盘分享的文件:VMware-workstation-full-17.6.4-24832109.exe 链接: https://pan.ba…...

单例模式:线程安全,以及volatile关键字

对于OOP语言而言,每new() 一个对象,就会有一个对象实例生成。但是很多时候需要在程序运行时全局使用同一个实例,避免生成多余的实例或者资源浪费。这类设计模式就是单例模式。 单例模式有如下要求:1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例…...