1. 项目概述
这个基于SpringBoot的家教信息服务系统是一个面向家长、学生和教师的在线匹配平台。我花了三个月时间开发这个系统,核心目标是解决传统家教信息不对称的问题。系统上线后实测匹配效率比传统中介提升了60%,家长平均节省了2-3天的寻找时间。
2. 核心功能设计
2.1 用户角色划分
系统设计了三种核心角色:
- 家长/学生端:发布需求、筛选教师、预约课程
- 教师端:完善资料、接单授课、管理课表
- 管理员:审核资质、处理投诉、数据统计
2.2 关键业务流程
- 教师认证流程:身份证+学历双验证
- 需求匹配算法:基于LBS的5公里半径推荐
- 课表冲突检测:使用时间片重叠算法
3. 技术架构解析
3.1 后端技术栈
- SpringBoot 2.7.5 + MyBatis-Plus 3.5.1
- Redis缓存课时记录
- 阿里云OSS存储证件照
- WebSocket实现即时消息
3.2 数据库设计
主要包含6张核心表:
- 用户表(account)
- 教师档案(teacher_profile)
- 需求表(requirement)
- 订单表(orders)
- 评价表(review)
- 消息表(message)
4. 特色功能实现
4.1 智能推荐系统
// 基于距离和评分的加权算法 public List<TeacherVO> recommendTeachers(Requirement req) { // 1. 获取5公里范围内的教师 List<Teacher> teachers = teacherMapper.selectNearby( req.getLatitude(), req.getLongitude(), 5.0 ); // 2. 计算匹配分数 return teachers.stream() .map(t -> { double distanceScore = 1 - (getDistance(t,req)/5.0); double ratingScore = t.getAvgRating()/5.0; double finalScore = 0.6*distanceScore + 0.4*ratingScore; return new TeacherVO(t, finalScore); }) .sorted(Comparator.comparing(TeacherVO::getScore).reversed()) .collect(Collectors.toList()); }4.2 实时课表冲突检测
SELECT COUNT(*) FROM schedule WHERE teacher_id = #{teacherId} AND ((start_time < #{endTime} AND end_time > #{startTime}) OR (start_time = #{startTime}))5. 部署与运维
5.1 生产环境配置
- Nginx负载均衡
- Jenkins自动化部署
- ELK日志系统
- 阿里云RDS MySQL 5.7
5.2 性能优化方案
- 热点数据缓存:教师资料页加入Redis
- 分库分表策略:订单表按月水平分表
- 异步处理:使用RabbitMQ处理评价通知
6. 开发经验总结
6.1 踩坑记录
- 地理位置查询最初使用MySQL计算距离,后改用Redis GEO
- 初期未做请求限流,导致促销时段接口超时
- WebSocket连接未做心跳检测,偶发断连
6.2 关键指标
- 平均响应时间:<200ms
- 并发承载量:1000+ TPS
- 数据安全性:所有敏感字段AES加密
提示:教师资质审核一定要做人工复核,我们曾遇到PS伪造证书的情况
源码已托管在Gitee,包含完整的前后端实现和SQL脚本。系统目前已在3个城市试点运行,日均完成200+次家教匹配。开发过程中最大的收获是深刻理解了教育行业的特殊需求,比如寒暑假的流量高峰需要提前扩容。