工作记录(10):全过程总结
在这两个多月的开发工作中,我完成了算法题库系统、竞赛系统、排行评测的前端开发以及判题沙箱的设计与实现。以下从工作内容、技术收获、问题解决、开发反思和未来规划五个方面进行全面总结。
一、主要工作内容
1. 算法题库前端开发
基于Vue 3,完成了题库模块的全流程开发,包括:
-
题目列表与筛选系统:实现多维度筛选(关键词、标签、难度)、热门标签动态统计和响应式表格展示,使用
watchEffect实现搜索条件与数据加载的自动同步。 -
代码编辑与提交闭环:集成Monaco Editor实现专业代码编辑功能,支持多语言模板生成、代码高亮和自动补全,完成从代码编写、提交到判题结果展示的完整流程。
-
提交分析与题解系统:开发提交记录分析页面,实现状态切换、详情查看和智能分析功能,题解页面支持Markdown渲染和空状态处理。
2. 竞赛模块开发
构建了竞赛功能模块,包括:
-
竞赛列表与状态管理:实现竞赛状态判断(未开始、进行中、已结束)、倒计时功能和视觉化状态展示,使用CSS动画增强奖杯、彩带等视觉元素。
-
竞赛答题与结果系统:开发竞赛进行页面,实现倒计时、代码提交和实时评判功能;完成竞赛结果页面,包括排名计算、奖励分配和成绩可视化。
-
竞赛管理与创建:实现竞赛创建表单(支持时间选择、题目添加)、管理页面(搜索、统计)和权限控制功能。
3. 评测与排行榜系统
实现了评测记录与排行榜功能:
-
评测记录管理:开发评测记录搜索表单、统计卡片和详情展示,使用响应式数据管理实现筛选条件与表格数据的自动同步。
-
多维度排行榜:完成通过题目数和积分排行榜,实现动态排名计算、前三名展示和动画效果,使用flex布局实现响应式界面。
4. 判题沙箱设计与实现
完成判题沙箱的理论研究与本地化实现:
-
沙箱理论研究:深入学习沙箱本质、实现原理,包括操作系统级隔离、语言级安全管理和资源限制技术。
-
核心模块开发:设计数据模型、枚举类型、安全管理和进程工具等基础模块,为沙箱实现奠定基础。
-
多语言沙箱实现:使用模板方法模式实现Java、C++、Python三种语言的沙箱,处理编译、执行、资源限制和安全隔离等核心逻辑。
二、技术收获与经验积累
1. Vue 3组合式API的深度应用
通过项目实践,深入理解了Vue 3组合式API的设计思想,掌握了以下关键技术:
-
响应式系统:熟练使用
ref、reactive创建响应式状态,利用watch、watchEffect实现状态变化的自动响应。 -
组合式函数:将复杂逻辑封装为可复用的组合式函数,如
useContestForm实现表单状态管理,提高代码复用性。 -
依赖注入:通过
provide/inject实现跨组件状态共享,简化多层组件间的通信。
2. 复杂表单与状态管理
在竞赛创建、题目管理等功能开发中,积累了复杂表单处理经验:
-
表单验证:实现多层次验证策略,包括必填字段检查、时间合理性验证和格式校验。
-
数据序列化:处理表单数据与API接口的数据格式转换,如JSON序列化、时间格式转换。
-
草稿保存:实现表单草稿保存机制,使用localStorage存储临时数据,提升用户体验。
3. 沙箱架构与安全技术
通过判题沙箱的实现,掌握了以下安全与系统级编程技术:
-
进程管理:使用Java的
Process类实现外部进程启动、输入输出流管理和超时控制。 -
安全隔离:实现自定义
SecurityManager限制代码权限,结合文件隔离策略防止恶意操作。 -
多语言兼容:理解不同语言的执行机制,实现Java、C++、Python的差异化处理逻辑。
4. 前端性能与体验优化
在界面开发中,积累了性能优化与交互设计经验:
-
虚拟滚动:实现长列表虚拟滚动,提升大数据量下的渲染性能。
-
动画效果:使用CSS过渡与动画提升用户体验,如卡片悬停效果、数字滚动动画。
-
响应式设计:利用栅格系统和媒体查询实现多设备适配,确保在不同屏幕尺寸下的良好体验。
三、遇到的难点及解决方案
1. 多语言沙箱的兼容性问题
问题描述:不同编程语言的执行机制差异大,如Java需要编译为字节码,C++需要编译为本地可执行文件,Python为解释执行,导致统一接口设计困难。
解决方案:
- 采用模板方法模式,定义统一接口
executeCode,不同语言沙箱继承基类并重写差异化方法(如编译、执行逻辑)。 - 抽象数据模型,定义统一的请求
ExecuteCodeRequest和响应ExecuteCodeResponse模型,屏蔽语言差异。
2. 前端与沙箱的数据同步问题
问题描述:前端提交代码后,需要与沙箱执行结果进行实时同步,包括编译状态、执行结果和资源消耗等。
解决方案:
- 设计标准化的判题信息模型
JudgeInfo,包含状态、耗时、错误信息等字段。 - 实现前端与沙箱服务的异步通信机制,使用Promise处理异步结果,确保数据一致性。
3. 代码编辑器的集成挑战
问题描述:集成专业代码编辑器时,需要处理代码同步、语言切换和自动补全等功能,确保编辑器状态与组件状态一致。
解决方案:
- 使用
watch监听组件属性变化,实现编辑器内容与语言的双向绑定。 - 自定义补全提供器,根据不同语言提供相应的关键字补全建议,提升编码体验。
4. 安全隔离与资源限制
问题描述:用户代码可能包含恶意操作(如无限循环、文件删除),需要确保沙箱环境的安全隔离和资源限制。
解决方案:
- 实现自定义
SecurityManager,重写checkRead、checkWrite等方法,限制代码的文件访问权限。 - 使用
ulimit/cgroup等技术限制进程资源消耗,结合超时机制防止死循环。
四、开发反思
1. 技术选型的思考
- Vue 3的优势:组合式API使代码组织更灵活,响应式系统性能更优,适合复杂业务逻辑的开发。
- 沙箱技术的选择:本地化沙箱实现简单但功能有限,未来可考虑Docker沙箱实现更强大的隔离效果。
- 技术栈整合:前端与后端的接口定义需更加规范,通过OpenAPI生成类型安全的API客户端,减少联调问题。
2. 架构设计的优化空间
- 模块耦合:部分组件间耦合度较高,如竞赛模块与题库模块的数据共享方式可进一步优化。
- 沙箱扩展性:当前沙箱对新语言的支持需要修改核心代码,可进一步抽象扩展接口。
3. 用户体验的改进点
- 反馈机制:部分操作的反馈不够及时,如代码提交后的判题结果展示可增加加载状态和进度提示。
- 无障碍设计:界面的可访问性考虑不足,未来需添加键盘导航、屏幕阅读器支持等功能。
五、未来规划与改进方向
1. 功能扩展计划
- 协同编程:添加多人协作编辑、实时讨论功能,打造更具互动性的学习社区。
- 更多语言支持:扩展沙箱对Go、JavaScript等语言的支持,满足更多用户需求。
2. 技术优化方向
- 容器化部署:将判题沙箱迁移到Docker容器,实现更强大的资源隔离和弹性扩展。
- 前端性能优化:使用WebPack代码分割、懒加载等技术,进一步提升首屏加载速度。
五、总结
通过本次算法题库与判题沙箱的开发,我在Vue 3应用开发、系统安全架构和性能优化等方面积累了丰富经验。从前端界面的交互设计到后端沙箱的安全隔离,整个项目涵盖了从需求分析到落地实现的完整流程。非常感谢老师和同学的帮助,在未来的工作中,我将继续深化对前沿技术的学习,优化系统架构,提升用户体验,为打造更完善的项目而努力。
3万+

被折叠的 条评论
为什么被折叠?



