# exam-question **Repository Path**: xuhao2018/exam-question ## Basic Information - **Project Name**: exam-question - **Description**: 乐考刷在线考试刷题系统具备强大的功能集,包括但不限于租户管理、用户管理、部门管理、题库管理、题目管理、在线考试、随机出题、按知识点出题以及在线刷题等。通过灵活的配置和直观的界面,用户可以轻松创建和参与各种类型的测试活动。系统基于Spring Boot 3构建,采用微服务架构设计,允许系统各部分独立开发、部署和扩展,提高了系统的灵活性和可维护性。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2024-12-26 - **Last Updated**: 2025-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringCloud, SpringBoot ## README # 乐考刷 ## 介绍 乐考刷在线考试刷题系统具备强大的功能集,包括但不限于租户管理、用户管理、部门管理、题库管理、题目管理、在线考试、随机出题、按知识点出题以及在线刷题等。通过灵活的配置和直观的界面,用户可以轻松创建和参与各种类型的测试活动。系统基于Spring Boot 3构建,采用微服务架构设计。该架构允许系统各部分独立开发、部署和扩展,提高了系统的灵活性和可维护性。通过使用Spring Cloud的相关组件,实现了服务发现、配置管理、负载均衡、熔断器等功能,确保了系统的高可用性和稳定性。 ## 功能说明 ### 1. 租户管理 - 支持多租户架构,允许不同组织独立使用同一平台。 - 租户可以自定义品牌化设置(如Logo、颜色主题)。 - 每个租户拥有独立的数据存储空间,确保数据隔离。 - 可复用于其他项目,便于快速部署新的业务场景。 ### 2. 用户管理 - 用户角色划分(管理员、教师、学生等),权限控制精细。 - 支持批量导入/导出用户信息,简化用户管理流程。 - 提供用户活动日志记录,便于审计追踪。 - 集成第三方认证服务,支持多种登录方式(如OAuth2, SSO)。 ### 3. 部门管理 - 组织结构树形展示,清晰呈现各部门层级关系。 - 支持部门间转移人员,调整组织架构。 - 自动同步部门变动至相关联的应用模块。 - 同样适用于非考试类项目的组织管理需求。 ### 4. 题库管理 - 创建和分类管理各类题库,涵盖不同学科领域。 - 题库可共享或私有化,根据需要设定访问权限。 - 提供题库版本控制,方便更新维护。 ### 5. 题目管理 - 多种题型支持(选择题、填空题、简答题等)。 - 图片、音频、视频等多媒体元素嵌入。 - 题目难度分级,适应不同层次的学习者。 - 题目解析与答案提示,帮助用户理解正确答案。 ### 6. 在线考试 - 定时开考、限时作答,模拟真实考场环境。 - 考试过程中防作弊机制(如摄像头监控、屏幕锁定)。 - 实时统计考试进度,成绩即时反馈。 ### 7. 随机出题 - 根据设定规则自动从题库中抽取题目组成试卷。 - 支持指定题目数量、题型比例等参数。 ### 8. 按知识点出题 - 精准定位知识点,构建有针对性的试题集合。 - 有助于评估特定领域的知识掌握情况。 ### 9. 在线刷题 - 个性化推荐练习题目,依据用户的答题历史和薄弱点。 - 刷题记录保存,便于回顾复习。 - 成绩跟踪与进步分析,激励持续学习。 ## 模块设计 ### 模块划分 乐考刷在线考试刷题系统包含系统服务、API网关、消息服务、题目服务、考试服务、刷题服务、日志服务等7个模块。 ### 模块描述 #### API网关 API网关作为单一入口点来管理API调用之间的交互,能够将多个微服务整合在一起,为外部提供统一且简化的接口,其职责为: 1. **统一入口点**:API网关作为所有外部请求进入系统的唯一通道,它可以有效地隐藏后端微服务的具体部署信息,保护内部架构不被外界直接访问。 2. **请求路由与负载均衡**:API网关可以根据预定义的规则将请求分发给正确的后端服务实例。这不仅包括基本的路径匹配,还可以基于内容类型、地理位置、用户身份等因素进行更复杂的路由决策。此外,API网关通常内置了负载均衡机制,能够在多个服务实例之间分配流量,确保即使某个实例出现故障,也不会影响整体的服务可用性。 3. **安全性增强**:为了保障API的安全调用,API网关实施了严格的访问控制措施,如IP黑白名单、认证鉴权、防重放攻击、防止恶意请求等。这些安全策略可以集中配置在API网关层面,避免了每个微服务都需要单独处理这些问题,大大降低了开发成本和潜在的风险。 4. **流量管理和限流**:API网关支持多种算法实现精细化的流量控制,例如固定窗口、滑动窗口、令牌桶等。通过灵活自定义的流量控制策略,API网关可以帮助应对突发的大流量冲击,保证API服务的稳定性和连续性。当检测到异常高的请求量时,API网关还可以自动触发限流措施,限制某些用户的请求频率,防止过载。 5. **监控与日志记录**:API网关是监控微服务运行状况的理想位置,因为它可以捕获所有的入站和出站流量。通过集成监控工具,API网关能够实时收集有关API性能、延迟、错误率等关键指标的数据,并生成详细的日志文件供后续分析使用。这对于快速定位问题根源、优化系统性能至关重要。 6. **版本管理和服务演进**:随着业务的发展和技术的进步,API可能会经历多次迭代更新。API网关允许开发者在同一URL下同时维护多个版本的API,确保旧版本的兼容性不受新版本的影响。同时,API网关也支持灰度发布功能,使得新的特性或改进可以在不影响现有用户的情况下逐步推广。 7. **静态响应处理**:对于一些不需要动态计算的结果,API网关可以直接返回预先准备好的静态响应,减少对后端服务的压力。这类场景特别适用于那些访问频率高但数据变化较少的资源,如网站的常见问题解答页面、API文档等。 #### 系统服务 系统服务主要包含管理维护租户、用户、部门、角色、权限、菜单等系统基础数据,其职责为: 1. **用户管理**:管理用户信息,包括注册、登录、权限管理等,支持OAuth2和JWT进行身份验证。 2. **部门管理**:维护组织结构,处理部门间的层级关系,支持部门人员的添加、删除和转移操作。 3. **租户管理**:管理租户信息,支持多租户架构,实现租户级别的数据隔离,提供品牌化设置接口。 4. **角色管理**:管理维护系统角色信息,包括角色数据权限管理、菜单权限管理等。 5. **菜单管理**:维护菜单结构,处理菜单之间的层级管理,可修改、删除菜单图标、名称、对应路径等数据。 #### 消息服务 todo #### 题目服务 todo #### 考试服务 todo #### 刷题服务 todo #### 日志服务 todo ## 数据库设计 ### 数据库选型 乐考刷在线考试刷题系统使用MySQL数据库,原因如下: - MySQL是一种高性能的关系型数据库管理系统,具有优秀的读写速度。通过优化数据库结构,如范式化设计、选择合适的数据类型、添加索引等,可以进一步提高MySQL的读写性能。 - MySQL的数据管理能力非常关键。通过数据库分区、分表等技术,MySQL可以更好地管理数据,提高查询效率。 - MySQL具有良好的可扩展性,可以随着系统的增长而不断扩展。无论是通过增加硬件资源还是通过分布式架构,MySQL都能够应对不断增长的数据量和用户量。 - 报警管理服务数据请求并发量较小,使用MySQL即可很好地存储和管理数据。 ### 数据库结构 #### 表设计 系统用户信息表(sys_user)如下: | 字段名称 | 字段类型 | 长度 | 是否可为null | 描述 | 备注 | | ----------- | --------- | ---- | ------------ | ------------ | ----------------------- | | user_id | int | | 否 | 用户id,主键 | | | username | varchar | 64 | 否 | 用户名称 | | | nickname | varchar | 64 | 否 | 用户昵称 | | | password | varchar | 512 | 否 | 密码 | | | phone | varchar | 11 | 否 | 手机号 | | | email | varchar | 64 | 是 | 邮箱 | | | sex | tinyint | | 是 | 性别 | 0男,1女,3未知 | | avatar | varchar | 512 | 是 | 头像 | | | user_status | tinyint | | 否 | 用户状态 | 0可用,1禁用,默认为0 | | remark | varchar | 512 | 是 | 备注 | | | dept_id | int | | 否 | 部门id | | | tenant_id | int | | 否 | 租户id | | | create_time | timestamp | | 否 | 创建时间 | | | creator_id | int | | 否 | 创建者id | | | update_time | timestamp | | 是 | 更新时间 | | | updater_id | int | | 是 | 更新者id | | | deleted | tinyint | | 否 | 删除标志 | 0未删除,1删除,默认为0 | ## 技术栈 - **前端**:Vue.js - **后端**:SpringBoot 3.4.0 - **数据库**:MySQL - **缓存**:Redis - **搜索**:Elasticsearch - **部署**:Docker - **API文档生成**:Swagger ## 贡献代码 我们欢迎任何形式的贡献,无论是修复bug、优化性能还是新增特性。请参照[贡献指南](https://tongyi.aliyun.com/qianwen/CONTRIBUTING.md)了解如何参与项目开发。 ## 版权声明 本项目遵循MIT许可证发布。更多信息,请参阅[LICENSE](https://tongyi.aliyun.com/qianwen/LICENSE)文件。