1. 项目概述这个基于SpringBoot和Android的电影推荐系统是我去年为一个本地影院开发的商业项目。核心目标是解决用户在海量影片中选择困难的问题通过个性化算法为用户推荐可能感兴趣的电影。系统采用B/S架构后台用SpringBoot实现前台通过Android App提供服务。整套系统开发周期3个月上线后使该影院的会员转化率提升了27%。下面我会从技术选型、核心功能、实现细节到部署运维完整分享这个项目的实战经验。2. 技术架构解析2.1 后端技术栈选择SpringBoot 2.7作为后端框架主要考虑快速构建RESTful API内置Tomcat简化部署与MyBatis-Plus的完美整合数据库采用MySQL 8.0主要表结构包括用户表(user)电影表(movie)评分表(rating)标签表(tag)重要提示MySQL一定要配置为utf8mb4字符集否则无法存储emoji等特殊字符的用户评论2.2 推荐算法实现系统采用混合推荐策略基于内容的推荐使用TF-IDF分析电影简介和标签协同过滤采用Item-CF算法计算电影相似度热门推荐近期热播电影加权推荐算法部分核心代码// 混合推荐权重计算 public ListMovie hybridRecommend(int userId) { ListMovie contentBased contentBasedRec(userId); ListMovie cfBased cfRec(userId); ListMovie hot getHotMovies(); // 权重合并算法 return mergeResults(contentBased, cfBased, hot); }2.3 Android客户端关键实现采用MVVM架构主要技术点Retrofit Gson处理网络请求Room本地缓存用户行为数据Glide图片加载优化页面性能优化要点使用DiffUtil高效更新RecyclerView实现分页加载(Paging 3.0)图片懒加载和预加载策略3. 核心功能实现细节3.1 用户行为采集系统为提升推荐准确度设计了多维度的用户行为采集显式反馈用户评分(1-5星)隐式反馈浏览时长、收藏、分享等上下文信息观看时段、设备类型等数据采集接口示例PostMapping(/behavior) public Response logBehavior( RequestBody UserBehaviorDTO dto) { // 异步写入Kafka kafkaTemplate.send(user_behavior, dto); return Response.success(); }3.2 实时推荐引擎采用Flink实现实时处理Kafka接收用户行为数据Flink实时计算用户兴趣向量结果写入Redis供API查询实时推荐流程用户行为 - Kafka - Flink - 更新用户画像 - Redis - API响应3.3 冷启动解决方案新用户/新电影推荐策略基于注册信息的人口统计推荐热门电影加权随机推荐引导用户进行初始兴趣选择4. 系统部署与运维4.1 后端部署方案采用Docker Compose部署version: 3 services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} redis: image: redis:6.2 app: build: . ports: - 8080:80804.2 性能优化实践通过JMeter压测发现的瓶颈及解决方案N1查询问题使用MyBatis-Plus的TableField解决缓存穿透布隆过滤器空值缓存热点KeyRedis集群本地缓存二级架构4.3 监控系统搭建使用PrometheusGrafana监控JVM指标监控接口响应时间监控推荐算法准确率监控5. 踩坑经验与解决方案5.1 推荐结果重复问题现象用户连续刷新返回相同推荐列表原因缓存更新策略不合理解决// 增加推荐结果随机因子 String cacheKey rec:userId:System.currentTimeMillis()/1000/60;5.2 Android端图片加载OOM优化方案使用Glide的override()限制图片尺寸配置memoryCache和bitmapPool大小添加磁盘缓存策略5.3 并发评分数据不一致采用最终一致性方案用户评分先写入Redis定时任务批量同步到MySQL使用版本号解决冲突6. 项目演进方向目前正在开发的增强功能社交关系推荐引入好友观影记录实时弹幕系统WebSocket实现多端同步增加微信小程序端这个项目给我的深刻体会是推荐系统效果算法×数据×工程。初期我们过于追求算法复杂度后来发现高质量的行为数据采集和稳定的工程实现同样重要。建议刚入门的开发者先从简单的基于内容的推荐做起逐步迭代优化。