
1) 【一句话结论】
核心是通过分布式架构(负载均衡、缓存、数据库分片)结合缓存策略(击穿/雪崩防护)与分布式锁机制,实现高并发下的性能与稳定性,各组件协同保障用户认证、会话管理、选课流程的可靠性。
2) 【原理/概念讲解】
老师口吻,解释关键概念:
3) 【对比与适用场景】
| 组件/策略 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 负载均衡器(如Nginx) | 前端请求分发组件 | 将请求分发到后端多个服务实例,提高可用性和并发处理能力 | 高并发请求的入口 | 需配置健康检查,避免分发到故障实例 |
| Redis缓存 | 分布式内存数据库 | 低延迟,支持高并发读写,适合热点数据 | 用户认证Token、Session、热点课程信息 | 需防击穿(互斥锁+空值缓存)、雪崩(随机过期) |
| 本地缓存(如Guava Cache) | 应用进程内缓存 | 速度快,无网络开销 | 单机非核心数据 | 高并发下内存溢出风险 |
| 数据库水平分片(按课程ID) | 按业务维度拆分大表为多个小表 | 分散单表压力,提升单表性能 | 大规模课程表、选课表 | 跨分片查询需额外处理,分片键选择影响热点数据分布 |
| 分布式锁(Redis SETNX) | 防止高并发下重复操作 | 轻量级,高并发下性能较好 | 选课、库存扣减等业务 | 锁超时设置需合理,避免死锁 |
4) 【示例】
用户登录流程(伪代码):
/api/login,参数:username, password。{"token": "eyJ...", "refreshToken": "..."})。Authorization: Bearer <token>)。redis.hgetall(userId))。选课流程(含分布式锁):
/api/course/select,参数:courseId, userId。lockKey = "select:course:" + courseId + ":" + userId,redis.setnx(lockKey, userId, EX 10s))。db.selectFrom(courseShard1, courseId)。select count(*) from course_select where courseId=? and userId=?)。db.insertInto(courseSelectShard1, courseId, userId)。redis.del(lockKey)。5) 【面试口播版答案】
面试官您好,针对高并发用户登录与课程选课系统,核心是通过分布式架构(负载均衡、缓存、数据库分片)结合缓存策略与分布式锁,实现性能与稳定性。用户认证采用JWT无状态机制,避免Token过期后用户操作中断;会话管理用Redis分布式存储,解决高并发下Session服务器崩溃。缓存策略上,Redis作为一级缓存,对热门课程、用户信息等热点数据提前预热,同时用互斥锁+空值缓存防缓存击穿,随机过期时间防雪崩。数据库按课程ID水平分片,分散选课表压力,跨分片查询用路由器合并数据。选课流程加Redis分布式锁,避免重复选课,确保数据一致性。这样各组件协同保障高并发下的可靠性。
6) 【追问清单】
7) 【常见坑/雷区】