Add notes

This commit is contained in:
2023-10-19 23:28:59 +08:00
parent 62d1810822
commit 4dfffdf3c2
9 changed files with 13 additions and 293319 deletions

View File

@ -1,3 +1,16 @@
# 思路简介
## 文字描述
整个ICPC-Management-System服务端存放在命名空间ICPCManager里其中命名空间ICPCManager::API里面有直接给main函数调用的接口由API里的函数调用ICPCManager::BackEnd里的函数执行具体操作。
拆分成ICPCManager::API和ICPCManager::BackEnd的原因有两个第一个是解析输入命令和校验命令合法性的操作可以在ICPCManager::API里面完成ICPCManager::BackEnd的函数可以直接从函数参数列表获取数据第二个是有些对外接口可以拆分成可复用的子命令虽然在这次大作业中并没有体现在接口层面就拆分成子命令在编写复杂度上没有明显优势或不需要执行很多操作如结束比赛这样可以降低编写复杂度。
在具体的数据维护方面,后台数据(无视是否封榜)的更新较为简单;而与榜单相关的数据则维护哪些数据可以进入榜单、哪些数据可以进入榜单但尚未进入榜单,并注意一些关键细节(如比较器依赖的那些数据的更新要与平衡树的更新实时同步)即可。
在性能优化方面首先完成一些较为明显的优化如刷新榜单时不完全重构只更新变化了的数据。然后利用代码性能分析工具gprof寻找占用过多时间的函数并逐步优化细节。特别鸣谢感谢Dark教授传授的卡常技巧
## 简图
![pic](design.png)
# 测试数据与调试经历
主要经历了两次重大bug第一次是在刚开始编写时出现玄学错误通过抛出异常等方法逐步排查最终发现是解析命令字符串时出错。第二次是在编写中期排名维护反复出bug用下发的测试数据分析发现bug出在需要依次比较两个得分、罚时均相同的队伍的通过时间序列时由于下发测试数据过大不便调试因此我针对性地设计了一组测试数据`testcases/1.in`并借助它修复了这个bug。在性能优化阶段在重构刷新榜单函数使得它支持精确更新后排名维护再次出bug我同样借助`testcases/1.in`修复了bug。
___
# :trophy:ICPC Management System
> ACM 班 2023 级程序设计课程第二次大作业