Java后端最长的河?——黑马点评项目超全复盘|从业务开发、Redis实战、高并发优化到面试总结
前言作为Java后端开发者黑马点评几乎是所有人从“CRUD新手”迈向“高并发实战”的分水岭项目。在学习黑马点评之前我写代码停留在- 只会写普通CRUD接口- 只会用MySQL做数据存储- 不懂缓存、不懂并发、不懂分布式问题- 遇到高并发、超卖、缓存失效、会话丢失完全无从下手完成黑马点评项目之后我真正打通了 SpringBoot MyBatis-Plus Redis 消息队列 分布式锁 多级缓存 的完整技术闭环。本项目基于大众点评真实业务模型复刻了企业级本地生活平台核心业务短信登录、商户缓存、高并发秒杀、用户关注、点赞排行、附近商户、签到统计、UV统计等模块。本文将万字完整复盘黑马点评所有知识点、踩坑记录、底层原理、优化方案、面试考点与简历包装思路适合所有Java后端初学者收藏复盘。项目架构图黑马点评项目采用经典的三层架构设计清晰分离前端展示、业务逻辑与数据存储确保系统的高可用、高并发与可扩展性。以下是整体架构图flowchart TD subgraph A[前端层] A1[用户浏览器/App] A2[页面请求] A3[交互与秒杀下单] end subgraph B[业务服务层] B1[拦截器] B2[登录校验] B3[业务逻辑处理] B4[分布式锁] B5[消息队列生产者] end subgraph C[数据存储层] C1[MySQL 持久化存储] C2[Redis 缓存/会话/队列] C3[RabbitMQ 异步解耦] end A --gt;|HTTP/HTTPS请求| B B1 --gt;|Token校验| B2 B2 --gt;|用户信息| B3 B3 --gt;|读请求优先| C2 B3 --gt;|写请求| C1 B3 --gt;|高并发写| B5 B5 --gt;|异步消息| C3 C3 --gt;|消费者处理| C1 C2 --gt;|缓存未命中| C1 C1 --gt;|数据回写| C2/code/pre 架构说明 前端层负责用户界面展示、页面请求发起和秒杀下单等交互操作通过HTTP/HTTPS协议与后端服务通信。 业务服务层核心业务处理层包含拦截器统一鉴权、登录校验分布式会话、业务逻辑处理商户查询、秒杀等、分布式锁防超卖和消息队列生产者异步削峰。 数据存储层MySQL负责持久化存储核心业务数据Redis作为高速缓存存储会话、热点数据、分布式锁和计数器RabbitMQ用于异步解耦将高并发写操作转化为队列任务保护数据库。 该架构体现了“读多写少场景全部缓存化、高并发写场景全部异步化、分布式问题全部中间件化解决”的核心设计思想。一、项目整体介绍1.1 项目定位黑马点评是前后端分离的本地生活服务后端项目对标大众点评、美团商户点评系统。核心业务场景- 用户短信登录、登录状态持久化- 商户查询、商户缓存加速- 优惠券秒杀高并发场景- 用户关注、取关、共同关注- 探店笔记发布、点赞、点赞排行榜- 用户连续签到统计- 基于地理位置的附近商户查询- 页面UV独立访客统计1.2 技术栈纯正版无魔改后端核心技术- SpringBoot 2.7- MyBatis-Plus- MySQL 8.0- Redis 6.2- Redisson分布式锁- RabbitMQ消息异步削峰- Lua脚本Redis原子操作- Caffeine本地二级缓存- JWT、ThreadLocal、拦截器1.3 项目架构设计整体架构分为三层1. 前端层页面请求、交互、秒杀下单2. 业务服务层接口拦截、登录校验、业务逻辑处理3. 数据存储层MySQL持久化、Redis缓存、MQ异步解耦核心设计思想读多写少场景全部缓存化、高并发写场景全部异步化、分布式问题全部中间件化解决。二、模块一分布式短信登录从Session痛点到Redis会话2.1 原生Session存在的致命问题初学Java Web时我们依赖Tomcat Session存储用户登录信息。但集群部署下存在致命缺陷- 多台Tomcat服务器 Session不共享- 用户第一次访问服务器A登录第二次负载均衡到服务器B → 登录状态丢失- 无法水平扩展完全不适合线上集群环境2.2 黑马解决方案Redis实现分布式Session核心思路1. 用户登录成功后生成随机Token作为令牌2. 将用户信息序列化存入Redis设置过期时间3. Token返回前端前端每次请求携带Token4. 拦截器拦截所有请求根据Token从Redis获取用户5. 存入ThreadLocal供全局业务使用2.3 关键优化点1. ThreadLocal存储用户信息避免Controller、Service层层传参实现全局用户透明获取。2. 登录状态自动续期每次访问接口刷新Redis Key过期时间实现“活跃用户永久在线”。3. 短信验证码限流利用Redis自增计数器限制1分钟最多发送1次验证码防刷接口。2.4 面试高频问题1. 为什么不用JWT纯令牌方案JWT无法主动失效不适合单点登出、踢下线场景Redis会话可随时删除可控性更强。2. ThreadLocal会内存泄漏吗项目拦截器请求结束必须remove用户信息否则线程池复用会导致脏数据。三、模块二商户查询缓存彻底吃透Redis缓存三大问题这是黑马点评最核心、最基础、面试问得最多的模块。3.1 业务痛点商户查询属于典型读多写少场景- 数据库查询压力大- 重复查询相同商户SQL浪费资源- 高并发场景数据库极易被打挂因此必须引入Redis缓存优化查询。3.2 基础缓存流程1. 查询商户 → 先查Redis2. 命中直接返回3. 未命中查询MySQL4. 查询完毕写入Redis下次直接缓存命中3.3 缓存更新策略企业标准更新数据库 → 删除缓存为什么不更新缓存- 频繁更新会导致大量无效缓存写入- 删除缓存更轻量、更一致性3.4 三大缓存问题完整解决方案面试必背1缓存穿透问题查询不存在数据Redis、MySQL都查不到请求直接打数据库。解决方案空值缓存不存在的商户也缓存空数据设置短期TTL拦截大量恶意空查询。2缓存雪崩问题大量缓存Key同时过期瞬间全部请求打数据库。解决方案TTL随机值给缓存过期时间增加随机偏移量避免批量Key同时失效。3缓存击穿热点Key问题问题超级热点商户缓存过期瞬间海量并发直接打数据库。黑马提供两套企业级方案方案1互斥锁保证一致性、牺牲性能缓存失效时只放行一个线程查数据库其他线程阻塞等待缓存重建完成。方案2逻辑过期保证高性能、弱一致性热点数据提前设置逻辑过期字段- 未过期直接返回旧缓存- 已过期异步线程重建缓存用户依旧返回旧数据零阻塞、超高并发3.5 项目进阶亮点CaffeineRedis二级缓存我在本项目完全落地企业二级缓存架构1. 一级缓存Caffeine本地缓存JVM内存- 无网络IO、速度极快- 拦截80%热点请求2. 二级缓存Redis分布式缓存- 保证集群数据共享优势- 大幅减少Redis访问次数- 降低网络开销- 极大提升QPS四、模块三高并发优惠券秒杀项目天花板、面试重中之重秒杀是后端最经典高并发场景黑马点评秒杀模块涵盖几乎所有并发问题。4.1 秒杀原生问题1. 库存超卖多线程同时扣减库存库存负数2. 一人多单用户重复秒杀3. 数据库压力巨大大量请求直接落库4. 同步下单阻塞严重响应慢、超时多4.2 阶段一Redis预扣库存解决超卖利用Redis原子操作判断库存、扣库存。问题多条Redis命令不保证原子性依旧超卖。4.3 阶段二Lua脚本保证绝对原子性将判断库存 扣库存 判断用户是否已秒杀三条逻辑写在同一个Lua脚本Redis单线程执行Lua彻底杜绝超卖。4.4 阶段三Redisson分布式锁实现一人一单单机synchronized无法集群生效。使用Redisson分布式锁- 锁定用户ID- 保证同一个用户只能创建一单- 解决集群环境重复秒杀问题4.5 阶段四RabbitMQ异步削峰最终企业方案流程最终优化为1. 前端秒杀请求2. Redis Lua预扣库存、校验资格3. 秒杀成功发送消息到MQ4. 前端直接返回排队成功5. 消费者异步创建订单、落库优势- 秒杀请求毫秒级响应- 彻底削峰不压垮数据库- 支持超大流量秒杀场景4.6 秒杀完整链路总结限流 → 缓存预扣 → Lua原子校验 → 分布式锁防重 → MQ异步落库这就是真实互联网秒杀架构雏形。五、模块四Redis高阶数据结构实战面试加分大招黑马点评最大亮点把Redis所有高频数据结构全部落地业务5.1 String- 分布式登录会话- 验证码存储、限流计数5.2 Hash- 用户信息缓存、商户信息缓存5.3 Set- 用户关注列表- 共同好友求取Set交集5.4 ZSet有序集合- 探店笔记点赞排行榜- 按点赞数自动排序5.5 BitMap- 用户签到统计极大节省内存千万用户签到仅几MB内存5.6 GeoHash- 经纬度计算- 附近商户距离排序、范围查找5.7 HyperLogLog- 页面UV独立访客统计极小内存实现亿级UV统计学完本项目你再也不是只会set/get的Redis新手而是懂场景、懂选型、懂优化的实战开发者。六、模块五社交业务关注、点赞、排行、探店笔记6.1 用户关注与共同关注核心- Set存关注用户- Set交集求共同关注6.2 点赞功能防重复利用Redis Set唯一性- 存点赞用户ID- 判断是否存在实现不可重复点赞6.3 点赞排行榜ZSet score点赞数自动排序实时榜单。6.4 探店笔记异步发布采用MQ异步发布笔记减少主线程压力提升接口速度。七、模块六性能优化与架构思维升华7.1 所有读请求优先缓存MySQL只做兜底持久化。7.2 所有高并发写请求异步化避免同步阻塞、避免数据库压力堆积。7.3 所有热点数据内存化本地缓存 分布式缓存双层兜底。7.4 所有并发问题原子化Lua、分布式锁解决并发安全。八、学习本项目前后能力对比学习前- 只会普通CRUD- 不懂缓存原理- 不懂并发安全- 不懂分布式问题- 面试只会背概念无实战支撑学习后- 能独立设计缓存架构- 能解决穿透、击穿、雪崩三大经典问题- 能独立开发高并发秒杀系统- 熟练掌握Redis七种数据结构真实业务场景- 掌握分布式锁、会话共享、异步削峰- 具备企业级后端业务设计思维这就是校招面试官最想看的实战能力九、项目踩坑记录真实开发问题1. 缓存更新策略错误导致数据不一致未采用删缓存而是更新缓存引发脏数据。2. 秒杀不加锁导致超卖普通Java锁无法集群生效。3. 不用Lua脚本导致原子性失效4. ThreadLocal不清除导致内存泄漏5. 热点Key无逻辑过期导致数据库瞬间压力暴涨6. TTL固定值引发缓存雪崩隐患所有坑全部在项目中手动踩过、修复过、理解透彻。十、简历标准包装文案项目名称黑马点评本地生活商户平台技术栈SpringBoot、MyBatis-Plus、MySQL、Redis、Redisson、RabbitMQ、Lua、Caffeine项目描述独立复刻仿大众点评本地生活后端项目实现分布式短信登录、商户多级缓存、高并发优惠券秒杀、用户社交关注、点赞排行、附近商户、签到UV统计等核心业务。通过多级缓存、异步削峰、分布式锁、Lua原子脚本解决海量查询与秒杀并发问题具备完整互联网高并发项目架构思维。核心职责1. 基于Redis拦截器ThreadLocal实现分布式会话登录解决集群会话共享与登录状态刷新问题。​2. 搭建Caffeine本地缓存Redis分布式缓存二级架构完整解决缓存穿透、击穿、雪崩三大问题大幅降低DB压力。​3. 基于Lua脚本Redisson分布式锁实现高并发秒杀防止库存超卖与用户重复下单结合RabbitMQ异步下单削峰提升系统吞吐量。​4. 熟练运用Redis Geo、BitMap、ZSet、HyperLogLog等数据结构实现附近商户、签到统计、点赞排行、UV统计等业务。十一、面试高频10问黑马点评必问1. 缓存穿透、击穿、雪崩分别是什么怎么解决​2. 为什么用Redis做分布式Session不用JWT​3. 秒杀为什么要用Lua脚本​4. 一人一单怎么实现​5. 互斥锁和逻辑过期优缺点​6. 二级缓存架构优势和数据不一致怎么解决​7. RabbitMQ在秒杀中的作用​8. 为什么删缓存不更新缓存​9. GeoHash原理是什么​10. BitMap、HyperLogLog适用场景十二、项目总结与个人感悟黑马点评不是一个简单练手项目它是Java后端从零基础进阶工程化、高并发、分布式的必修项目。完成本项目我真正掌握了- 真实企业缓存架构设计​- 高并发秒杀完整解决方案​- Redis全场景业务落地​- 分布式锁、异步队列工程化使用​- 性能优化、并发安全、系统稳定性思维很多人学SpringBoot只会CRUD而我通过黑马点评真正学会了“后端架构”。未来我将继续深入微服务、分布式事务、多级架构、限流熔断持续夯实后端核心竞争力。原创不易欢迎点赞收藏持续更新后端实战系列复盘

相关新闻

Unity集成百度智能云TTS:实现动态语音合成与个性化游戏音频

Unity集成百度智能云TTS:实现动态语音合成与个性化游戏音频

1. 项目概述与核心价值最近在做一个Unity项目,需要为游戏里的NPC和旁白系统加入动态语音。传统的做法是找配音演员提前录制好所有台词,但一旦剧情有调整,或者想支持多语言,工作量就爆炸了。于是我把目光投向了语音合成&#xff08…

2026/10/18 13:47:44 阅读更多 →
C++游戏引擎开发:从零解析FBX骨骼动画数据与实现GPU蒙皮

C++游戏引擎开发:从零解析FBX骨骼动画数据与实现GPU蒙皮

1. 项目概述:为什么从FBX入手是引擎开发的关键一步如果你正在尝试自己动手写一个C游戏引擎,或者至少想深入理解现代游戏引擎的骨骼动画流水线,那么“如何导入并处理FBX文件”这个问题,大概率会成为你从理论迈向实践的第一个硬骨头…

2026/10/19 3:42:16 阅读更多 →
Docker部署Pix2Text:打造本地OCR与Markdown生成工作站

Docker部署Pix2Text:打造本地OCR与Markdown生成工作站

1. 从“截图即文档”到“容器化OCR”:一个效率工作流的诞生不知道你有没有过这样的经历:在网上看到一篇技术文章,图文并茂,但偏偏没有提供源码或关键配置的文本。或者,收到一份PDF格式的合同或报告,需要从中…

2026/10/17 6:00:28 阅读更多 →

最新新闻

开箱即用的 diff 级代码审查 CLI 工具设计与实践

开箱即用的 diff 级代码审查 CLI 工具设计与实践

1. 项目概述:一个真正“开箱即用”的代码审查 CLI 工具,不是概念演示,而是每天能塞进你 Git 提交流程里的硬核助手“open-code-review”这个名字乍看平平无奇,但拆开来看,每个词都踩在当下工程效能的痛点上。“open”不…

2026/10/19 3:42:16 阅读更多 →
open-code-review:面向 Git 变更的 CLI 代码审查协作者

open-code-review:面向 Git 变更的 CLI 代码审查协作者

1. 这不是又一个“AI代码审查”玩具:open-code-review 的真实定位与设计哲学 你肯定见过太多打着“AI代码审查”旗号的工具——点开网页,粘贴几行代码,等三秒,弹出几条泛泛而谈的“建议”,比如“变量名可以更语义化”…

2026/10/19 3:42:16 阅读更多 →
开源CLI代码审查工具:可审计、可定制的LLM增强型质量保障方案

开源CLI代码审查工具:可审计、可定制的LLM增强型质量保障方案

1. 项目概述:这不是又一个“AI写代码”玩具,而是一套可嵌入真实开发流水线的开源代码审查协作者“open-code-review”这个名字乍看平平无奇,但拆开来看——open(开源)、code(代码)、review&…

2026/10/19 3:42:16 阅读更多 →
AI原生应用的内容生成全链路:从意图识别到质量保障与成本优化

AI原生应用的内容生成全链路:从意图识别到质量保障与成本优化

最近帮一个内容团队梳理技术方案,对方把预算几乎全部压在"调用大模型"这一项上,觉得只要选一个足够聪明的模型,内容生成就解决了。我在他们那份方案旁边补了整整三页注释:意图解析怎么做、生成结果谁来校验、用户反馈怎…

2026/10/19 3:42:16 阅读更多 →
基于协同过滤的电影推荐系统:SpringBoot+Vue3+MyBatis全栈实战

基于协同过滤的电影推荐系统:SpringBoot+Vue3+MyBatis全栈实战

做推荐系统这件事,很多人第一反应是"算法很难"。但当我真正把一个 Java SpringBoot Vue3 MyBatis 的协同过滤电影推荐系统,从前端页面到后端算法完整跑通之后,最大的体会是:算法本身就是整个项目里相对好啃的部分&…

2026/10/19 3:42:16 阅读更多 →
AI辅助编写教材:从查重原理到个性化改写的完整实战

AI辅助编写教材:从查重原理到个性化改写的完整实战

很多人第一次拿到AI生成的教材初稿时,心里其实是犯嘀咕的:内容看起来像那么回事,但送去查重一测,重复率愣是能冲到百分之四五十,个别段落甚至被标红一大片。这其实是AI写教材最常见的翻车现场,也是这篇文章…

2026/10/19 3:41:16 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →