面向 Java 实习/校招用户的多人云端八股复习工具。
- 用户注册/登录 — Sa-Token 认证,多设备同步学习进度
- 题库分类 — 按 Java基础、JVM、并发编程、Spring、MySQL、Redis 等分类浏览
- 随机抽题 — 全库随机、分类随机、高频题、错题、未掌握题加权抽取
- 题目详情 — 先思考再查看答案,支持简答/详解/常见追问
- 掌握度标记 — 不会 / 不熟 / 会了 三级标记
- 收藏功能 — 收藏重要题目方便复习
- 错题复习 — 自动收集不会/不熟题目
- 模拟面试 — 随机抽 10 题模拟面试,生成报告
- 学习统计 — 进度、掌握度分布、完成率
- 搜索 — 关键词搜索题目
┌───────────────┐ ┌──────────────────────────────────┐
│ Android App │──────▶│ Spring Boot 后端 (:8080) │
│ Kotlin + │ HTTP │ - Sa-Token 认证 │
│ Jetpack │◀──────│ - MyBatis-Plus + MySQL │
│ Compose │ │ - 加权随机抽题算法 │
│ + Retrofit │ │ - Redis Session │
└───────────────┘ └──────────────────────────────────┘
- Spring Boot 3.2 + Java 17
- MyBatis-Plus ORM
- MySQL 8 数据库
- Redis 会话存储
- Sa-Token 认证鉴权
- Hutool 工具库
- Kotlin + Jetpack Compose (Material 3)
- Retrofit + OkHttp 网络请求
- DataStore Token 持久化
- MVVM 架构
- Navigation Compose 路由
# 创建 MySQL 数据库
mysql -u root -p < backend/src/main/resources/db/schema.sql
mysql -u root -p < backend/src/main/resources/db/data.sql
# 修改数据库和 Redis 连接配置
# 编辑 backend/src/main/resources/application.yml
# 启动
cd backend
mvn spring-boot:run1. 修改服务器地址: app/.../network/RetrofitClient.kt 中的 BASE_URL
- 模拟器: http://10.0.2.2:8080/
- 真机同 Wi-Fi: http://<电脑IP>:8080/
- 公网部署: https://your-domain.com/
2. 用 Android Studio 打开项目根目录
3. Sync Gradle → Run app
Javaguide/
├── backend/ # Spring Boot 后端
│ ├── pom.xml
│ └── src/main/java/com/javaguide/server/
│ ├── ServerApplication.java
│ ├── config/ # Sa-Token + MyBatis-Plus 配置
│ ├── common/ # Result 统一响应 + 异常处理
│ ├── entity/ # User, Question, UserQuestionRecord
│ ├── mapper/ # MyBatis-Plus Mapper
│ ├── dto/ # 请求 DTO
│ ├── vo/ # 响应 VO
│ ├── service/ # 业务逻辑 + 加权随机算法
│ └── controller/ # REST API
│
├── app/ # Android 客户端
│ └── src/main/java/com/javaguide/app/
│ ├── network/ # Retrofit API + TokenManager
│ ├── viewmodel/ # MVVM ViewModels
│ ├── ui/
│ │ ├── theme/ # Material 3 主题
│ │ ├── components/ # 通用 UI 组件
│ │ ├── screens/ # 所有页面 (含登录注册)
│ │ └── navigation/ # 路由定义
│ ├── JavaGuideApp.kt
│ └── MainActivity.kt
| 方法 | 路径 | 说明 | 鉴权 |
|---|---|---|---|
| POST | /api/auth/register | 注册 | × |
| POST | /api/auth/login | 登录 | × |
| POST | /api/auth/logout | 登出 | ✓ |
| GET | /api/auth/me | 当前用户 | ✓ |
| GET | /api/questions/categories | 分类列表 | ✓ |
| GET | /api/questions/list | 题目列表(分页) | ✓ |
| GET | /api/questions/{id} | 题目详情 | ✓ |
| GET | /api/questions/search | 搜索 | ✓ |
| GET | /api/questions/random | 加权随机抽题 | ✓ |
| GET | /api/questions/review | 错题/不熟题 | ✓ |
| GET | /api/questions/favorites | 收藏列表 | ✓ |
| GET | /api/questions/interview | 模拟面试抽题 | ✓ |
| POST | /api/record/update | 更新掌握度 | ✓ |
| POST | /api/record/favorite/{id} | 切换收藏 | ✓ |
| POST | /api/record/view/{id} | 记录浏览 | ✓ |
| GET | /api/record/stats | 学习统计 | ✓ |
向 question 表 INSERT 新记录即可,所有用户立即可见:
INSERT INTO question (title, short_answer, detail_answer, category, sub_category, tags, difficulty, importance, frequency, follow_up_questions)
VALUES ('题目标题', '简短答案', '详细答案', '分类', '二级分类', '标签1,标签2', 2, 5, 5, '追问1|追问2');