课程实验
不要面向 OJ 编程 (刷不到 100 时不要惊慌,刷到 100 时也不要得意)。关于 OJ 使用过程中遇到的 Bugs、以及对实验内容的相关建议可以随时反馈给助教。
学术诚信
‼️ 独立完成实验是对自己最好的训练。在这一过程中,你可以从网上搜索或者向 AI 询问 API 的使用方式和示例、以及对相关概念和技术的介绍,但要主动避免去网上「搜索」和「参考」已有的代码实现、或者让 AI 来直接生成代码。 对于完成全部实验确有困难的同学,可以仅提交部分完成的代码。为了促进学术诚信,提交完全为空的代码文件也将获得一定的诚信分数。
实验环境准备
本学期的课程实验都属于编程实验,即利用操作系统提供的典型系统调用 (APIs) 来实现某些功能。完成实验需要准备一个可用的 Linux 系统 (我们推荐使用 Ubuntu 24.04,和 OJ 运行环境一致),并在其中安装包括编辑器、gcc 等在内的必要软件。可采用的方式包括:
- 物理机直接安装 Linux
- Windows Subsystem for Linux (WSL)
- 虚拟机安装 Linux (e.g., VirtualBox 等)
实验提交
目前 OJ 服务器仅支持校园网环境访问,如果在校外请使用学校 VPN 连接。
我们为每位同学生成了一个 Token 并将通过邮件发送到各自的南大邮箱 (学号@smail.nju.edu.cn),请保存该 Token 并在每次实验提交时提供 (若没收到请单独联系助教)。
在完成每次实验后,按实验手册要求使用如下方式提交实验代码和实验报告 (实验截止后我们才会阅读实验报告,因此可以先仅提交代码进行测试,在实验截止前提交最终版实验报告即可)。
通过 Makefile 打包提交
我们会在框架代码中提供自动的代码打包和提交指令。你需要新建一个 conf/info.mk
文件,并将学号和 Token 添加到该文件中:
# conf/info.mk
SID=123456789
TOKEN=123456789abcdefg
执行以下命令会直接提交所需的文件到 OJ:
$ make submit
对于实验报告,需将实验报告命名为 学号.pdf
,并放入代码根目录,随后可通过以下命令提交:
$ make report
结果返回
如果提交成功,你会收到类似如下格式的返回信息:
{
"sid": "学号"
"name": "姓名"
"submit index": "当前提交 ID"
"message": "Code/Report file uploaded successfully"
}
实验代码将在我们的测试环境中进行检查、编译和运行。你可以通过以下命令获取测试结果和反馈信息 (例如,对未通过测试的补充说明):
# 使用各实验提供的 Makefile
$ make score
实验结果将以类似如下的格式返回 (受限于可用资源,建议在提交几分钟后查看结果):
{
"score": "最近一次提交得分"
"submit index": "最近一次提交 ID"
"highestscore": "历史最高得分"
"message": "反馈信息"
}
此外,为了引导大家不要不假思索地将 OJ 当作 “默认” 存在的 Test Oracle 来使用 (不管对不对先提交,反正 OJ 会告诉我结果),我们会设置相应的 “冷却时间”,在每次提交后需要间隔一定时间才能进行下一次提交。
* 如果你发现提交到 OJ 上的某个测试用例总是不通过,并且你确信自己的实现没有问题,那有可能是 OJ 的问题。请及时联系助教。
* 代码执行所需时间比较久,提交后请等待一段时间再查看结果,但一般不会超过 15 分钟,如果超过 15 分钟还没有结果,请联系助教。
答疑
实验处于建设阶段,手册、框架代码等可能存在问题,在实验中遇到任何与实验相关的问题,都欢迎向助教提问,直接在对应实验框架代码的 GitLab 仓库中提交 Issue 即可。但在提 Issue 前请先搜索是否有类似问题,避免重复提问,并注意提问的智慧。
特别注意:
- 答疑的主要目的是解释实验手册描述不完善、或造成大家对实验需求理解有歧义的地方,而不是为你提供答案或陪你 debug,助教不是你的小黄鸭;
- 提问前请先自行思考,助教不会回答一切问题;
- 提问前请检查实验手册中是否已经明确说明过,不要提 “蠢问题”;
- 不要在 Issue 中粘贴自己的代码;
- 请理解什么是 STFW & RTFM。
好的提问示例:
- 实验 1 的手册中写的是 xxx,但是有两种理解方式,xxx 和 xxx,请问是 A 还是 B?(助教可能在写手册的时候没有考虑到有多种理解方式,提出你的理解)
- 实验 2 的某个要求是 xxx,但是我不太理解,能否给一个例子?(例子可以辅助你理解,而不是直接问这是什么意思,助教也不知道你哪里没理解)
- 这个测试用例我在本地测试可以通过(请认真检查确定是通过的),但是提交不通过,可否给出 OJ 上的输出?(OJ 上使用自动化脚本,从标准输入输出传入测试用例,如果你没有正确处理标准输入输出,可能会有不同的表现,在本地终端测试难以发现)
不好的提问示例:
- 实验 1 没有看懂,助教可以给点提示吗?(哪里没看懂,看之后你有什么理解)
- 实验 2 的这个要求做不到,太难了(为什么做不到,仅仅抱怨不解决任何问题)
- 实验环境怎么配/代码编译不成功/运行不了/某个 API 怎么用(这些问题应该由谷歌/百度解决)
实验截止时间
本学期每个实验会设置一个截止时间 (Soft Deadline),我们会在该截止时间后进行必要的代码查重、阅读实验报告、以及手工运行部分代码进行额外检查。在实验 Soft Deadline 之前完成至少一次完整提交 (包括代码和实验报告) 将获得一定加分。不同实验的截止时间会有重叠,大家注意安排好时间。
所有实验的最终截止时间 (Hard Deadline) 将在本学期末结束,在此之前均可提交新版本的代码和报告。超过该截至时间后提交的实验将无法反应在最终成绩中。