跳转至

FAQ

这里收集了一些近年来本实验相关的常见问题,我们会在每年课程进行中动态更新本节。

参考实现的页式文件系统似乎有 bug,同时打开多个文件会出现混乱?

在参考代码 testfilesystem.cpp 中展示了正确用法:启动系统时要调用静态成员函数 MyBitMap::initConst(),否则哈希值计算错误可能导致多个文件被视为同一个。

编译时缺少antlr-runtime依赖如何处理?

注意根据自身系统,在antlr的下载页面中下载对应版本的runtime依赖环境。注意阅读antlr runtime依赖的使用文档,根据你自身的编译配置依赖的引用。注意,下载页面中已经提供了源码以及预编译的版本,绝大部分情况下不需要重新自行编译,直接利用编译工具cmake等添加依赖信息或者直接复制源码文件即可。

数据库可以使用自定义文法吗?

CI测试部分的语法不可以自定义,其余部分允许合理的自定义。不过我们希望大家尽量使用本文档中提供的文法,以节约验收的时间成本。

数据库有性能要求吗?

对于索引功能(如在SELECT、UPDATE等语句中涉及索引列与常量的比较操作),要求能够在百万级数据下查询时明显比不用索引快。希望大家不要用一些投机手段,如:故意降低不用索引时数据库的性能。其他功能 CI 范围内以 CI 要求为准。

CI运行结果为什么和本地不一致?

CI的文件系统对一些文件操作有着比一般Linux环境更高的要求:例如“尝试删除没有关闭的文件”的情况而导致文件夹递归删除失败;“直接访问未初始化内存区域”导致读取内容不可控;...等问题。因此遇到CI和本地结果比一至的情况请检查是否存在文件管理和内存管理等方面的实现问题。

如何在CI中输出信息进行调试?

stderr 可以用来直接将信息打印到CI的输出里,一个使用例子是可以让数据库在batch模式下将读取到的每句SQL输出到stderr,这样在CI中程序崩溃时可以知道自己是执行哪一句SQL时出了问题。类比上述方法,可以自定义调试信息在CI中的输出。

浮点数精度是否会导致CI测试无法通过?

设计的测例将尽可能避免出现这种情况。同时建议涉及到浮点数时使用double类型进行存储和计算。

数据库可以实现说明文档没有列举的选做功能吗?

可以,但是需要自己构造测例进行展示,并向助教解释该功能的实现。对于说明文档列举的必做、选做功能,我们会准备测例进行测试。

数据库一定要实现批量导入数据的功能吗?

由于最终测试的表有很多行,无法通过逐行插入的方式导入到数据库中,所以大家一定要实现批量导入数据的功能,CI 也对此有要求。

CI测试时可能面临的最大数据规模?

各表总数据量小于 1GB,单表列数不超过 10,表数不超过 8,单列最大长度不超过 2048B,表名、列名长度不超过 32B。

验收时会考查 SQL 语法错误的输入报错吗?

不会,输入一定是能通过 parser 的。但是一些输入语句可能会破坏完整性约束,要求数据库按照说明文档要求的方式执行。

大作业是否可以多次线下验收?

从2023年秋季学期引入CI后,每组只能进行一次线下验收。

CI 测试是否有次数限制?

CI 测试没有直接限制运行次数,但是不必要的连续 CI 运行可能会导致 CI 阻塞,干扰其他同学实验,因此助教可能会在出现此类情况时进行罚分。CI 运行的测例在本地也可以运行,建议你在完成本地测试后再用 CI 提交成绩。

是否可以在线下验收时修改源代码?

不可以。

如果多人组队完成,线下验收时所有人都必须到场吗?

助教需要再线下验收时提问组员来判断组员的参与程度,因此要求所有人都进行检查。原则上每位同学均需要线下到场参加检查。对于确实存在客观情况无法到现场的同学,要求向助教请假(请假形式会在验收前通知)并通过腾讯会议与组员一同参加。任何情况下,每组必须有至少一人线下到场检查。

Authors: Congyuan Rao (55.88%), Haowen Dong (44.12%)