1. 项目概述
EasyJob 是一个集刷题备考、经验分享、社区互动于一体的综合性学习与考试服务平台。系统采用前后端分离架构,分为管理后台(Admin)和用户移动端/Web端(API),旨在为用户提供高效的题库练习体验及知识共享社区,同时为管理员提供完善的内容管理与数据统计能力。
2. 核心业务模块
用户端 (C端)
面向普通用户,提供轻量级、流畅的学习与社交体验。
账号体系:支持邮箱注册、登录、自动登录及图形验证码校验,保障账户安全。
智能刷题:
分类浏览:支持按类别查看题目和模拟考试。
在线考试:创建试卷、计时答题、自动判分、查看错题解析。
错题本:自动记录答错题目,支持专项复习。
收藏功能:用户可收藏题目、分享文章或试卷,支持“上一题/下一题”快速切换浏览。
知识分享社区:
用户可以发布经验分享文章,支持富文本内容。
支持点赞、收藏及查看评论/回复。
搜索中心: 支持对题目、试卷、分享内容进行关键字模糊搜索。
个人中心:
头像上传与信息修改。 my
查看我的收藏、我的考试记录、错题回顾。
意见反馈:用户可提交反馈并与管理员互动。
版本更新:客户端自动检测最新版本,支持增量或全量安装包下载。
管理后台 (B端)
面向运营人员和管理员,提供全方位的数据管控。
数据看板:首页展示注册用户数、日活、内容发布量等关键指标的周统计趋势。
题库管理:
支持单题录入与 Excel 批量导入题目。
题目审核、上下架、删除及批量操作。
支持单选题、多选题、判断题等多种题型。
内容管理:
轮播图配置:自定义首页轮播图内容及排序。
分享管理:审核或删除用户发布的分享文章。
分类管理:维护题目和分享的分类体系。
用户与权限管理:
用户管理:查看用户列表、禁用/启用违规账号、查看设备信息。
角色权限:基于 RBAC 模型,配置角色菜单权限,支持超级管理员保护机制。
账号管理:新增后台管理员账号、重置密码。
反馈处理:查看用户反馈并进行官方回复。
APP发布管理:上传新版本 APK/IPA,设置灰度发布设备ID,控制版本强制更新策略。
1. 技术栈选型
核心框架:Spring Boot 2.2.6 + MyBatis
数据库:MySQL 8.0 (HikariCP 连接池)
缓存/会话:Redis (Jedis) - 用于存储 Session、验证码、频率限制计数器
安全认证:
Admin 端:HttpSession + Spring Session Data Redis
API 端:JWT (JSON Web Token)
工具库:Lombok, FastJson/Jackson, Apache Commons, POI (Excel处理)
构建工具:Maven
2. 项目架构设计
项目采用多模块 Maven 结构,实现代码复用与职责分离:
easyjob-common:公共模块
包含 Entity (PO/DTO/VO/Query)、Enum (枚举)、Mapper 接口及 XML、Service 层逻辑、Utils 工具类。
所有业务逻辑的核心实现均在此模块,避免代码重复。
easyjob-admin:管理后台服务
依赖 easyjob-common。
包含 Controller 层、全局异常处理、AOP 拦截器(权限/登录校验)。
easyjob-api:用户接口服务
依赖 easyjob-common。
包含 Controller 层、JWT 验证、频控拦截器。
3. 关键技术实现
🔐 统一拦截与鉴权 (AOP)
通过自定义注解 @GlobalInterceptor 结合 AspectJ 实现非侵入式拦截。
Admin 端 (OperationAspect):
登录校验:检查 Session 中是否存在 SessionUserAdminDto。
权限校验:比对当前用户拥有的权限码与注解要求的 PermissionCodeEnum。
参数校验:递归遍历对象字段,根据 @VerifyParam 注解进行非空、长度、正则校验。
API 端 (OperationAspect):
Token 校验:从 Header 获取 Token,利用 JWTUtil 解析并验证有效性。
频控限制:基于 Redis 实现 IP + 方法名的请求频率限制(如每分钟最多搜索20次),防止恶意刷接口。
数据持久层优化
通用 Mapper:定义 BaseMapper 和 ACommonMapper,封装常用的 CRUD、分页查询、批量插入/更新操作,减少样板代码。
动态 SQL:在 MyBatis XML 中大量使用 、 标签,配合 Query 对象实现灵活的多条件组合查询。
分页实现:自定义 SimplePage 和 PaginationResultVO,通过计算 LIMIT offset, size 实现物理分页。