--- title: "07-到底应该如何将大麦项目写入简历中" created: 2025-12-09 aliases: - 到底应该如何将大麦项目写入简历中 tags: - 项目 --- # 到底应该如何将大麦项目写入简历中 本文是在小伙伴学习完大麦项目后教大家如何在简历中写好此项目,能让面试官一眼就看到你做这个项目的价值点,这里将大麦网的所有价值点体现出来,写的比较全,**小伙伴要根据自己对项目的掌握情况来酌情修改** # **一、技术选型** SpringBoot、SpringBootAdmin、SpringCloud、Nacos、Sentinel、Hystrix、MybatisPlus、Redis、Caffeine、Kafka、Elasticsearch、K8s、MySQL、ShardingSphere、ThreadPool、ThreadLocal、Redisson、Lua、Captcha、Prometheus、Arthas、Grafana # **二、项目描述** 这是一个面向演出的**高并发购票系统**,用户可以进行注册、登录、查询节目主页/列表、详情、座位信息、生成订单、支付、查询订单详情/列表等功能。 项目使用**微服务架构开发**,按照业务维度拆分成多个服务。为了应对大数据的数据库存储问题,采取了**分库分表**的解决方案。除了Hash常见的分片算法外,还使用了**基因法**来解决订单表的多维度查询问题,通过将分库分表的基因融入订单编号,使得**基因位分离**,实现**分库分表下数据均匀分布**,资源利用率从**50%提升到100%**。 项目为了解决购票的高并发问题,使用了**本地锁、分布式锁、读写锁、分段锁、双重检测、细化锁的粒度**等多种优化方式来提供系统的并发能力。并且通过**Lua+Redis**实现Redis层面的库存扣减,既能防止超卖问题又能进一步缓解数据库的压力提供系统吞吐量,**吞吐量提升了26%**。 为了应对高并发的业务特点,引入了Redis使用了**字符串、哈希表、有序集合、List**来将热门数据进行缓存,并结合了**Lua**保证了修改数据时的原子性。以及使用了**Caffeine**高效的本地缓存,并且利用演出时间来设计数据淘汰策略,进一步提高查询效率。 并且引用Kafka中间件实现消息的**异步创建订单**,以及设计了**操作记录流水功能**,能够解决**Redis宕机数据丢失**或者**Kafka异步创建订单失败**的问题。集成了**Sentinel/Hystrix**熔断中间件以及自定义业务规则实现服务多种保护机制。 # **三、负责内容** ## **3.1 架构方面** 1. 设计接口数据返回的统一格式,实现全局异常捕获和统一处理,并封装相应的工具类。通过统一的响应结构(code、message、data),简化前后端对接,提升接口规范性和可维护性。 2. 利用雪花算法设计分布式ID功能,并利用**Lua+Redis**自动分配centerId和dataId,**解决Mybatisplus在K8s环境下ID重复的缺陷**。通过Redis原子性操作实现workerId的自动分配和回收,避免了手动配置机器ID的运维成本。 3. 设计**图形验证码**基础组件,应用到用户注册业务,根据并发量动态开启验证码功能,并结合**布隆过滤器解决缓存穿透问题**。通过动态策略既保证了用户体验,又有效防止了恶意注册和缓存穿透攻击。 4. 利用**工厂模式**和**策略模式**提供多种类型的锁(包括:**公平锁、非公平锁、读锁、写锁**)。提供**自定义注解+AOP、方法操作、接口实现**三种加锁方式,并**兼容事务**场景。通过@Order控制切面执行顺序,确保加锁在事务开启前、释放锁在事务提交后,解决了锁与事务的时序问题。 5. 结合**本地锁和分布式锁**以及标识符的优化方案,防止用户重复点击和MQ中间件的重复消费。通过Redisson分布式锁+Redis记录的双重保障机制,支持多种失败策略(抛异常、返回null、执行降级逻辑),确保在高并发场景下的幂等性。 6. 在Redisson提供的延迟队列基础上,**利用分片思想结合线程池**进一步提升处理任务的效率。通过分片将延迟任务分散到多个队列,配合线程池并行消费,实现订单15分钟超时自动关闭,大幅提升了延迟任务的处理能力。 7. 对Redis进行高效封装,对参数进行严格校验,让**键能够统一管理**,简化对象序列化和反序列化过程。设计统一的键命名规范(业务模块:功能:标识),支持自动过期时间管理,提供丰富的数据结构操作API,降低开发成本并减少人为错误。 8. 利用**模板和策略模式**将项目初始化行为进行封装,只需实现接口即可,统一管理执行动作和顺序。通过ApplicationRunner在Spring容器启动完成后按order顺序执行初始化任务(如缓存预热、配置加载),确保初始化操作的可控性和可维护性。 9. 利用**组合模式和树形结构**设计验证基础组件,实现统一管理复杂的业务验证逻辑。将购票前的多个验证环节(库存验证、用户资格验证、场次验证等)组装成树形结构,支持灵活的验证规则组合和复用,符合开闭原则。 10. 设计分布式链路ID,在**上千个服务中通过此ID能够快速找到对应的请求链路**,极大提高排查问题的效率。基于MDC机制实现链路ID的全链路透传,配合ELK日志系统,能够快速定位分布式环境下的问题根源。 11. 利用**模板和装饰者模式**对线程池进行封装定制,利用**TransmittableThreadLocal**原理进行优化,使其能够**支持MDC和ThreadLocal**中的数据传递,分布式链路ID也能够正常传递。解决了线程池场景下上下文丢失问题,保证了日志完整性和链路可追踪性。 12. **12根据SpringBoot自动装配原理,自定义装配Bean的过滤器**,实现根据配置项**丝滑切换到Nacos或Eureka**。支持运行时动态切换注册中心,降低技术栈迁移成本和风险。 13. 根据LoadBalancer负载均衡原理,**自定义服务过滤选择器**,实现服务部署时**从灰度环境到生产环境的丝滑切换**。通过在请求头中携带灰度标识,结合自定义负载均衡策略,实现灰度流量的精准路由,保证新版本的平滑上线。 ## **3.2 业务方面** 1. 配置灵活的请求限制规则,提供细致的定制维度(包括:**请求数阈值、统计时间窗口、限制生效时间**)实现防刷功能。利用**Lua+Redis**操作,使用Redis的多种结构(包括:**String、Hash、Set、Sorted Set**),确保限流判断的原子性和高性能,有效防止接口被恶意刷新。 2. 在用户表基础上,设计**用户手机、用户邮箱路由表**,能在分库分表情况下,**支持手机号和邮箱的登录功能**。通过路由表存储手机号/邮箱到用户ID的映射关系,解决了分库分表场景下的多维度查询问题,避免了全表扫描的性能损耗。 3. 在用户注册业务中,设计多个验证功能,根据并发量通过**Lua+Redis**判断是否需要图形验证码,**设计计数器和布隆过滤器解决缓存穿透问题**。通过动态验证码策略和布隆过滤器的组合,在不影响用户体验的前提下有效防止了恶意攻击和缓存穿透。 4. 利用Redis的多种结构(包括:**String、Hash、List**)并且**利用分片思想**保存节目详情数据、票档、座位数据。实现在缓存数据的前提下,也能保证系统的并发能力。通过分片设计将热点数据分散存储,避免单Key成为性能瓶颈。 5. 引入本地缓存**Caffeine**进一步缓解Redis访问压力,并利用演出时间来设计数据淘汰策略,解决了内存压力过大的问题。通过Caffeine+Redis+数据库的三级缓存架构,并根据演出时间动态调整缓存过期时间,在保证数据时效性的同时最大化了缓存命中率。 6. 通过使用**读写锁、双重检测机制、多级缓存**,引入**"先查询,后加锁"**的方案,解决**缓存击穿**问题。在热点数据失效时,通过读写锁控制只有一个线程去加载数据,其他线程等待或从多级缓存获取,避免大量请求直接打到数据库。 7. 将数据库更新余票的行为转移到**Redis执行**,既能防止超卖问题又能进一步缓解数据库压力,提升系统吞吐量。通过**Lua脚本**保证库存查询和扣减的原子性,配合Kafka异步将扣减结果同步到数据库,实现高性能的库存管理。 8. 利用计算机**二进制**特征,设计**基因法**将订单编号和用户ID融合在一起,对订单表进行分库分表,能够支持**订单编号和用户ID的查询**,且**不发生读扩散问题**。通过将分库基因和分表基因嵌入订单号的不同位置,实现了数据的均匀分布和多维度查询能力。 9. 利用设计的分布式延迟队列功能,**当订单超过15分钟后仍未支付,则自动取消订单**。通过**Redisson延迟队列+分片思想+线程池**的组合,实现了高性能的延迟任务处理,确保订单能够按时关闭并释放库存,提升了库存周转率。 10. 通过**Lua+Redis**操作结合**Kafka中间件**进行**异步创建订单**,**吞吐量提升了26%**,并且可以保证**不会出现余票超卖**的问题。通过将同步的订单创建改为异步处理,释放了主流程的压力,同时通过Lua脚本保证了库存扣减的原子性。 11. 设计**操作记录流水功能**,能够解决**Redis宕机数据丢失**或**Kafka异步创建订单失败**的问题。通过记录每次购票操作的流水(包括用户信息、节目信息、座位信息、操作时间等),在Redis宕机或Kafka消费失败时,可以通过流水进行数据恢复和补偿,保证了数据的最终一致性。 12. 设计MQ消息记录功能,**保证消息不会丢失**,能够实时查询MQ发送和消费的状态,**自动执行对账和及时上报异常信息**。通过记录Kafka消息的完整生命周期,实现了消息的可追溯性,并通过定时对账任务及时发现消息丢失或消费异常,确保了数据的准确性。 13. 将分库和分表的基因融入订单编号,使得**基因位分离**,实现**分库分表下数据均匀分布**,**资源利用率从50%提升到100%**。通过将分库基因和分表基因嵌入订单号的不同位置,避免了数据倾斜问题,实现了各分片的负载均衡,大幅提升了资源利用率。 14. 在物理分片和数据之间,设计一层虚拟分片路由映射:**"数据→虚拟分片ID→路由表→物理库表"**,实现在分库分表情况下,**数据能够灵活扩容**。通过虚拟分片层的解耦,在物理扩容时只需调整路由映射关系,无需数据迁移,大幅降低了扩容成本和风险。 # **四、项目亮点总结** ## **4.1 技术架构亮点** 1. **分布式ID+雪花算法优化** - 解决K8s环境下ID重复,Lua+Redis实现workerId自动分配 2. **分布式锁+多种锁类型** - 工厂+策略模式,提供多种锁类型和加锁方式,兼容事务 3. **高性能延迟队列** - Redisson+分片+线程池,大幅提升延迟任务处理能力 4. **多级缓存架构** - Caffeine+Redis+数据库三级缓存,演出时间淘汰策略 5. **统一封装+设计模式** - Redis、ES高效封装,模板、策略、组合、装饰者模式综合运用 6. **灰度环境+服务治理** - 自定义负载均衡选择器,灰度流量精准路由 ## **4.2 业务价值亮点** 1. **基因法+虚拟分片** - 基因位分离实现数据均匀分布,资源利用率50%→100%,支持灵活扩容 2. **Redis库存扣减** - Lua脚本保证原子性,吞吐量提升26%,防止超卖 3. **多级缓存+击穿解决** - 读写锁+双重检测+先查询后加锁,三级缓存架构 4. **异步创建订单** - Kafka异步处理+操作流水,吞吐量提升26%,数据可恢复 5. **MQ消息记录** - 消息全生命周期记录,自动对账及时发现异常 6. **API防刷+验证码** - 灵活的限流规则,布隆过滤器防缓存穿透 # **五、使用建议** 1. **简历中的项目描述** - 建议保留"项目描述"部分,字数控制在200字以内 2. **负责内容** - 根据自己的实际参与程度选择8-15个核心亮点描述 3. **面试准备** - 重点准备基因法、多级缓存、分布式锁、异步创建订单等核心技术点 4. **量化数据** - 准备好26%吞吐量提升、50%→100%资源利用率等数据的计算依据 5. **技术深度** - 能够解释每个技术方案背后的原理和为什么要这样设计 # **六、注意事项** 1. 简历中不要直接复制所有内容,根据自己的实际参与程度选择和调整 2. 如果对某个技术点不熟悉,建议提前深入学习,确保能够应对面试官的追问 3. 本文档提供的是参考思路,需要结合自己的理解和项目实际情况进行调整 --- **企业级项目导航**:⬅️ [[06-项目入手整体介绍 项目架构亮点学习方法|06-项目入手整体介绍 项目架构亮点学习方法]] | 07-到底应该如何将大麦项目写入简历中 | ➡️ [[01-学习视频|01-学习视频]]