项目问答(自用记录)

在搭建 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决定是否能访问。

相关推荐
蹦蹦跳跳真可爱58910 分钟前
Python----计算机视觉处理(Opencv:ROI图像切割)
人工智能·python·opencv·计算机视觉
小小鱼er12 分钟前
python flask项目架构搭建
python·flask
小白学大数据25 分钟前
Superagent 异步请求:如何处理复杂的 HTTP 场景
开发语言·网络·python·网络协议·http
SomeB1oody32 分钟前
【Python机器学习】3.2. 决策树理论(进阶):ID3算法、信息熵原理、信息增益
python·算法·决策树·机器学习
知舟不叙1 小时前
机器学习——深入浅出理解朴素贝叶斯算法
人工智能·python·算法·机器学习
草明1 小时前
python 操作 mongodb 输出执行命令的日志
开发语言·python·mongodb
天才测试猿1 小时前
Python接口自动化浅析unittest单元测试原理
自动化测试·软件测试·python·测试工具·单元测试·测试用例·集成测试
yscript1 小时前
linux系统安装和激活conda
linux·运维·人工智能·python·深度学习·conda
平平无奇我要摘星星1 小时前
1.排序算法(学习自用)
python·算法·排序算法