到底应该如何将大麦项目写入简历中

本文是在小伙伴学习完大麦项目后教大家如何在简历中写好此项目,能让面试官一眼就看到你做这个项目的价值点,这里将大麦网的所有价值点体现出来,写的比较全,小伙伴要根据自己对项目的掌握情况来酌情修改

一、技术选型

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-项目入手整体介绍 项目架构亮点学习方法 | 07-到底应该如何将大麦项目写入简历中 | ➡️ 01-学习视频