网络项目OJ 在线判题系统

点我查看代码

思维导图 ,一看立马懂

在这里插入图片描述

思维导图大纲:

1 获取题目列表
1 获取题目列表
访问服务器特定的ip + port
2 渲染展示all_questions的html页面
1 设置html页面标题
2 设置每个题目超链接
3 建立数据字典 + 和C++正则表达式配合使用,匹配展示每个题目的id + name + star
4 设置form表单
1 设置答题的代码编辑框textarea
2 设置提交按钮submit
3 设置提form表单的执行动作----->向服务器该题目的目录提交 提交方式选用post较安全

2 选择题目
1 获取该题目的describe + header
实现:html超链接
2 渲染展示该题目的html页面
数据字典片段 + c++ 正则表达式

3 作答并提交
1 服务器对用户作答数据进行捕捉并保存
1 抓取并解析数据包 name=xxx&body=xxx
2 拆分数据包 得到name和 body
3 获取题目id 和 code
2 由题目Id 查找该题目在服务端保存的main函数
3 将main函数和用户提交代码进行拼接

4 服务器响应运行结果
1 将拼接完成的代码交给编译器Compiler
2 编译器对拼接完整的代码进行分析
1 检查请求是否有效–>req[“code”].empty()
2 将拼接后的代码保存在文件中 ,防止多用户做题,文件统一命名 tmp_ + 时间戳
3 准备编译
1 构造编译命令
2 fork创建新进程
1 父进程回收资源
2 子进程准备编译条件
1 准备捕捉编译错误的信息,保存在文件中
2 正式程序替换,执行构造好的编译命令
3 防止程序替换失败,及时退出exit
3 验证是否产生了可执行程序–>stat()
4 运行
fork 新进程
1 父进程回收资源
2 子进程准备运行条件
1 准备接收stdout/stderr的文件,将stdout/stderr 重定向到准备好的文件中
2 设置时间限制alarm + 内存限制setrlimit
3 进程程序替换,去运行编译生成的可执行程序
4 防止程序替换失败,及时退出exit
5 响应
1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值