Add notes
This commit is contained in:
13
README.md
13
README.md
@ -1,3 +1,16 @@
|
||||
# 思路简介
|
||||
## 文字描述
|
||||
整个ICPC-Management-System服务端存放在命名空间ICPCManager里,其中命名空间ICPCManager::API里面有直接给main函数调用的接口,由API里的函数调用ICPCManager::BackEnd里的函数执行具体操作。
|
||||
拆分成ICPCManager::API和ICPCManager::BackEnd的原因有两个:第一个是解析输入命令和校验命令合法性的操作可以在ICPCManager::API里面完成,ICPCManager::BackEnd的函数可以直接从函数参数列表获取数据;第二个是有些对外接口可以拆分成可复用的子命令(虽然在这次大作业中并没有体现,在接口层面就拆分成子命令在编写复杂度上没有明显优势)或不需要执行很多操作(如结束比赛),这样可以降低编写复杂度。
|
||||
|
||||
在具体的数据维护方面,后台数据(无视是否封榜)的更新较为简单;而与榜单相关的数据则维护哪些数据可以进入榜单、哪些数据可以进入榜单但尚未进入榜单,并注意一些关键细节(如比较器依赖的那些数据的更新要与平衡树的更新实时同步)即可。
|
||||
|
||||
在性能优化方面,首先完成一些较为明显的优化,如刷新榜单时不完全重构,只更新变化了的数据。然后利用代码性能分析工具gprof寻找占用过多时间的函数,并逐步优化细节。(特别鸣谢:感谢Dark教授传授的卡常技巧)
|
||||
## 简图
|
||||

|
||||
# 测试数据与调试经历
|
||||
主要经历了两次重大bug,第一次是在刚开始编写时,出现玄学错误,通过抛出异常等方法逐步排查最终发现是解析命令字符串时出错。第二次是在编写中期,排名维护反复出bug,用下发的测试数据分析,发现bug出在需要依次比较两个得分、罚时均相同的队伍的通过时间序列时,由于下发测试数据过大不便调试,因此我针对性地设计了一组测试数据`testcases/1.in`,并借助它修复了这个bug。在性能优化阶段,在重构刷新榜单函数使得它支持精确更新后,排名维护再次出bug,我同样借助`testcases/1.in`修复了bug。
|
||||
___
|
||||
# :trophy:ICPC Management System
|
||||
|
||||
> ACM 班 2023 级程序设计课程第二次大作业
|
||||
|
Reference in New Issue
Block a user