本项目实现了一个类似 LeetCode 的代码执行和测试系统,具有以下特点:
- 多语言支持:支持 Python、JavaScript、Java、C++、Go 和 Rust 等多种编程语言
- 安全执行:使用 Docker 容器提供隔离的代码执行环境
- 无状态设计:API 设计为无状态,便于水平扩展
- 灵活测试:支持自定义测试用例和单个测试执行
系统采用了模块化的设计,主要组件包括:
- API 层:提供 RESTful API 接口,处理请求和响应
- 服务层:实现核心业务逻辑,如代码执行和测试
- 执行引擎:基于 Docker 的代码执行引擎,支持多种编程语言
- 代码生成器:根据不同语言生成测试代码和包装代码
- 模板系统:使用 Jinja2 模板引擎,为不同语言提供代码模板
- FastAPI:高性能的 Python Web 框架,提供自动 API 文档和请求验证
- Docker SDK:通过 Docker API 创建和管理容器
- Jinja2:灵活的模板引擎,用于生成不同语言的代码
- 异步编程:使用 Python 的异步特性提高并发性能
系统提供了两个主要的 API 端点:
- /code/execute:执行代码并运行多个测试用例
- /code/run-test:执行代码并运行单个测试
- 资源限制:限制 Docker 容器的 CPU、内存和执行时间
- 网络隔离:禁用容器的网络访问
- 临时文件:使用临时目录存储代码和结果,执行完成后自动清理
系统设计考虑了扩展性,可以通过以下方式进行扩展:
- 添加新语言:只需添加相应的 Docker 镜像、编译/执行命令和代码模板
- 自定义比较逻辑:可以为不同类型的问题定制结果比较逻辑
- 分布式执行:可以将执行引擎部署在多个节点上,通过消息队列分发任务
- 添加更多语言支持:如 Ruby、PHP、Swift 等
- 实现用户认证和授权:添加用户系统和权限控制
- 添加代码分析功能:如代码质量检查、性能分析等
- 支持交互式问题:如多步骤问题、图形界面问题等
- 优化执行性能:使用容器池、预热容器等技术提高执行效率
本项目成功实现了一个模拟 LeetCode 的代码执行和测试系统,提供了安全、灵活、可扩展的代码执行环境。系统设计考虑了多语言支持、安全性和扩展性,可以作为在线编程平台的基础架构。