项目问答(自用记录)

在搭建 OJ 平台时,你选用了哪种编程语言和框架?为什么选择它们,它们在处理在线评测任务时有哪些优势?

Vue3+FastAPI是前端,python3是后端。FastAPI高效灵活,是用于构建API的高效的python web框架。vue3高效响应,处理大数据更优秀,相对于vue2来说选项式API,组合式API将函数封装在一起,方便代码的复用性和维护性。python简单高效有丰富的第三方库。

处理在线测评任务时python的subprocess模块可以方便的处理和管理子进程,用于运行用户提交的代码。

在 Vue3 和 FastAPI 的选型上,你主要考虑了它们的哪些特性来适配在线判题系统的需求?

vue3响应式系统优化可以更快速刷新界面,使得数据驱动速度更高效。组合式API使代码逻辑清晰,复用性高。vue3生态系统丰富,有更多好用的组件,加快开发速度。

fastapi基于python,语法简洁高效,开发率高。利用异步编程(await)可以更好地处理并发判题。fastapi有自动生成api文档的功能便于前后端交互和后期系统维护和扩展。

在线判题系统中,判题逻辑是核心部分。请详细阐述你是如何在 FastAPI 后端实现判题逻辑的,包括对不同编程语言代码的编译、运行和结果比对的处理方式。

对不同语言的处理方式不同,python用内置函数执行代码。通过捕获标准输出和标准错误来获取运算结果。对于c/c++,调用系统编译器(gcc)对代码编译生成可执行文件,然后运行可执行问价获得输出。判题,则用预先准备好的测试用例进行比对,同时设置运行时间限制防止恶意代码导致系统资源耗尽。

为了保证系统的稳定性和性能,在设计和实现过程中,你采取了哪些优化措施?比如在前端 Vue3 部分的渲染优化,或者后端 FastAPI 应对高并发判题请求的策略。

前端对图片资源压缩和懒加载处理,提升页面加载速度。

后端fastapi利用异步特性,使用uvicorn服务器处理高并发请求。

在 Vue3 前端与 FastAPI 后端进行交互时,你是如何设计数据传输格式和接口规范的?有没有遇到跨域问题,又是如何解决的?

数据传输格式是JSON,因为他简介易于解析,前后端都有很好的支持。

接口规范遵循RESTful API原则,比如使用不同的http方法(GET\POST\PUT\DELETE等)来对应不同的操作,如获取题目列表使用GET请求,提交代码使用POST请求。

考虑到用户在系统中提交代码可能存在恶意代码攻击的风险,你在系统设计中采取了哪些安全防护措施?

进行验证码输入,检查是否包含危险的系统命令或者敏感操作。用Docker容器技术,将用户代码和其他系统部分隔离开来。

在线判题系统可能会涉及多种编程语言的支持,你在实现对不同编程语言的支持时,遇到的最大挑战是什么,又是如何克服的?

最大挑战是不同语言编译和运行环境差距较大,解决方法是了解个语言的编译运行原理,然后针对每种语言编写相应的代码解析和执行模块。同时,简历统一接口运行不同语言的运行结果。

请描述一下系统的用户管理模块是如何设计的,包括用户注册、登录、权限管理等功能的实现细节。

用户注册时,前端会收集用户基本信息,进行基本的格式验证。然后将这些信息通过post请求发送到后端FastAPI的注册接口。后端会对用户名和邮箱进行唯一性检查,若不重复则存储密码到数据库中(哈希加密)

登录时,用户输入用户名和密码,前端讲这些信息发送到后端的登录接口。后端从数据库中查询对应的用户信息,验证密码是否匹配。若匹配,则生成一个Token并返回给前端,前端将token存在本地,用于后续身份验证。权限管理则根据不同角色设置不同权限,后端每个接口都会检查token,然后通过token决定是否能访问。

相关推荐
bellus-1 分钟前
ubuntu26测试win10的ollama大模型性能
python
水木流年追梦3 分钟前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式
JavaWeb学起来3 分钟前
Python学习教程(六)数据结构List(列表)
数据结构·python·python基础·python教程
liuyunshengsir16 分钟前
PyTorch 动态量化(Dynamic Quantization)
人工智能·pytorch·python
电子云与长程纠缠25 分钟前
UE5制作六边形包裹球体效果
开发语言·python·ue5
DFT计算杂谈34 分钟前
KPROJ编译教程
java·前端·python·算法·conda
念恒123061 小时前
Python(循环中断)
开发语言·python
tsfy20031 小时前
Python 处理中文文件名的3个坑(附 Flask 上传解决函数)
开发语言·python·flask·文件上传·中文编码
AI技术控2 小时前
KV Cache 缓存机制的原理和应用:从 Transformer 推理到大模型服务优化
人工智能·python·深度学习·缓存·自然语言处理·transformer
vx-程序开发2 小时前
基于机器学习的动漫可视化系统的设计与实现-计算机毕业设计源码08339
java·c++·spring boot·python·spring·django·php