1、自我介绍模板
面试官您好!我是来自桂林电子科技大学计算机学院的一名大三学生,我的名字叫阙煜海。
在大学期间,我主要自学了一些主流的Java技术栈,其中主要包括:Java主流的框架:Spring MVC Spring Boot
Spring Cloud Mybaits ,以及常用的数据库MySQL,缓存Redis和常用的消息中间件RabbitMQ,搜索引擎ElasticSearch,并了解一些常用的设计模式比如单例模式、工厂模式、代理模式、策略模式等和一些Docker容器技术、JVM的基本知识。并通过结合所学技术栈自主做了两个项目,其中一个项目是有关微服务的OJ判题系统,该项目的主要核心是用户通过提交代码给后端,后端通过⽤ Java Runtime的exec ⽅法编译和执⾏Java代码,然后并通过Process类进行获取结果,通过与题目的测试结果进行对比来判断用户代码的正确性。
第二个项目是许苑刷题阁,主要是用户通过高效的搜索引擎进行题目的检索,然后进行在线做题,该项目的主要核心要点是围绕性能优化,保证数据的一致性,以及高并发下如何保证系统的安全性和稳定性。
2、项目介绍
2.1、OJ判题系统
它主要包括8个模块:
-
公共模块:用来存放公共使用的工具类等等
-
- 实体类模块:数据库的实体,请求类和通用响应类等等。
-
网关模块:负责统一处理前端的请求,然后根据对应的路由规则路由到对应的模块服务。
-
判题模块
- i.提交判题(结果是否正确与错误)
- ii. 错误处理(内存溢出、安全性、超时)
- iii. 自主实现 代码沙箱(安全沙箱)
- iv.开放接口(提供一个独立的新服务
-
题目模块
- i. 创建题目(管理员)
- ii.删除题目(管理员)
- ii. 修改题目(管理员)
- iv. 搜索题目(用户)
- v.在线做题
- v. 提交题目代码
-
用户模块
- i.注册
ii. 登录
- i.注册
-
代码沙箱(扩展可以用AI作为模块开发)
代码沙箱模块和判题模块之间的关系
-
判题模块:调用代码沙箱,把代码和输入交给代码沙箱去执行。
-
代码沙箱:只负责接收代码和输入的测试用例,然后进行编译运行,返回编译的结果,不负责判断题目的正确与否,实现了与判题模块之间的解耦。(可以作为独立的项目,供给远程的用户进行调用)
技术亮点:
为⽀持多种代码沙箱创建,采⽤静态⼯⼚模式实现沙箱扩展,并通过策略模式封装不同的判题逻辑。
使⽤ Java Runtime的exec ⽅法编译和执⾏Java代码,通过Process类获取结果。
为确保宿主机安全,利⽤Docker Java库创建隔离的容器环境执⾏代码。
为减少判题与服务模块之间的耦合,通过使⽤Rabbitmq技术进⾏解耦。
为保证项⽬各模块独⽴运⾏,选⽤了Spring Cloud Alibaba来实现微服务划分,
为保护服务的同时简化客⼾端的调⽤,项⽬通过Spring Cloud Gateway聚合路由服务,。
2.2、许苑刷题阁
基础功能
-
用户模块
-
- 用户注册
- 用户的登录
- 【管理员】 - 增删改查
-
题库模块
-
- 查看题库列表
- 查看题库详情
- 【管理员】管理题库 - 增删改查
-
题目模块
-
- 题目搜索
- 查看题目详情(进入刷题页面)
- 【管理员】管理题目 - 增删改查(添加题目到所属题库,修改题目所属题库等)
高级功能
- 题目批量管理
-
- 【管理员】批量增删题目
- 分词题目搜索
- 用户刷题记录日历图
- 自动缓存热门题目
- 网站流量控制和熔断
- 动态 IP 黑白名单过滤
- 同端登录冲突检测
- 分级题目反爬虫策略
详细了解地址:https://blog.csdn.net/a147775/article/details/144302349