“王炸级别”高并发实战项目来临!!拯救你的项目简单问题

项目背景

可以说目前的Java程序员面试是非常激烈的,前几年大家都热衷于八股文的研究,把八股文背熟了大部分就能拿到岗位offer了,但现在仅仅靠八股文已经不好使了,现在面试官看的是真正的设计项目,项目中的架构复杂程度怎样?做过的东西哪些具有亮点?解决了哪些有价值的问题? 将实际项目和八股文相结合从而判断面试者的能力。

而且现在内卷逐渐激烈,从一开始只会简单增删改查,到后来的各种微服务和中间件,再到现在要有类似 “商品秒杀、抵抗百万并发的压力.."等技术的亮点才行

所以大家急迫的需要一个具有新的业务,而且要有亮点的项目,要是有人能指导下如何写到简历上就更好了,你可以站在面试官的角度上考虑一下,如果你在挑选简历时,看到了之前没有见过,但亮点却很多的项目,你是不是一下子就被吸引住了呢?

项目介绍

大麦订票服务系统提供了可以在线上对相应的节目(包括:演唱会、话剧歌剧、体育比赛、儿童亲子)进行订票的功能,用户可以进行注册,登录,然后选择节目和座位后进行购票,支付,以及查询自己的订单功能

项目优势

大家对于订票时尤其是热门明星的演唱会,第一感觉就是票不好抢,一瞬间票就没有了,而本项目不仅仅是将上述的购票功能实现,并且还要解决这种票不好抢,也就是常说的 高并发 问题

小伙伴通过此项目能够掌握分布式微服务项目的设计、以及 真实生产环境的高并发解决方案。而且项目中遵循了 高内聚 低耦合 设计原则以及使用大量的设计模式来进行架构设计,相信小伙伴学习完此项目后技术会提升几个层次

项目中包括了 微服务本地缓存/分布式缓存消息队列搜索引擎并发编程本地锁/分布式锁设计模式分库分表 等核心技术

本项目主打的是真实性和独特性,都是根据真实架构和实际遇到的问题总结的

  • 本项目对于高并发、高吞吐量的解决方案都是经过真实生产环境验证的,而不是简单的demo而已。而且除了这些以外,还包括了实际开发中项目中的各种架构设计,因为在项目对接的时候,绝不是只是把数据提供给前端就完事了

  • 针对实际生产遇到的问题进行深度定制化的改造是生产中真正用的东西。这些都是针对业务特点单独设计的,网上也没有现成完整的资料,也不是市面上的理论八股文宝典或者简单的后台管理项目

  • 对要毕业的大学生、刚参加工作不久的同学、或者工作多年想对技术有提升的小伙伴都有适合的干货

    • 生产中真正的微服务结构到底什么样

    • 实际中项目的接口调用要注意什么

    • 入参和出参到底如何应该如何设计 加密,从而防止攻击

    • 亮点较多的业务 例如:Redis、Lua、多种数据结构结合

    • 并发编程的高级玩法 例如:线程池的定制化设计、ThreadLocal的深度设计

    • 缓存穿透、缓存击穿、缓存雪崩 在实际项目中的真正落地解决方案

    • 对使用中的 分布式锁、本地锁进行优化 的实际落地解决方案

    • 超高并发情况下,多级缓存、数据一致性 的设计方案

    • 光是生成订单功能就有4个版本 这是为了更好的讲解高并发下要如何去考虑,应该逐步优化哪些方面

    • 各种参数的精细化配置 例如:Sentinel、Hystrix、Ribbon的配置

  • 项目中主打的就是有独特性,包括让人眼前一亮的业务。也具有项目的真实性、真实生产中遇到的 重点和难点 把这些独特的东西体现到简历中和面试官来聊,保证对你印象非常的深刻。这不一下子就甩开了别人了吗

  • 哪怕是常见的面试问题,也能从生产上遇到的故障来做进一步的分析和完善,比如常见的分布式锁,细节就很多。例如:在方法里还是方法外使用?直接Lock.lock就行了吗?事务存在的话需要去考虑吗?如果利用注解那么要考虑其他切面的关系吗?提供哪些策略呢?这些在 项目中都会得到解答

  • 又比如说 SpringBoot的自动装配原理,很多人都背过这个,但究竟用自动装配有什么好处呢?为什么不直接写个组件然后其他项目来依赖呢?两者的区别在哪里呢?在项目中依旧会有讲解

技术结构

  • 使用了 SpringCloud+SpringCloudAlibaba 的微服务结构

  • 使用了 Nacos 作为注册中心

  • 使用 Redis 不仅仅作为缓存,还使用了Lua脚本/延迟队列/Stream消息队列 等高级特性

  • 引入了 Kafka 消息中间件,SpringBootAdmin 作为服务的监控通知

  • ELK 作为日志的记录,ElasticSearch提供搜索和展示功能,

  • Sentinel/Hystrix 作为熔断保护层

  • 使用 ShardingSphere 实现分库分表,来存储海量的数据

通过以上设计,来实现应对高并发、高吞吐的能力,以及海量数据的存储和服务状态的监控

业务结构

通过此业务结构图进一步详细的介绍项目中的服务配置、技术选型、核心业务、基础组件、中间件的使用、监控方式等各个方面,方便大家能够对大麦项目的整体架构和设计有一个清晰的认知

技术选型

技术 说明 官网
Spring-Boot Web服务框架 https://spring.io/projects/spring-boot
Spring-Cloud 微服务框架 https://spring.io/projects/spring-cloud
Spring-Cloud-alibaba alibaba微服务框架 https://github.com/alibaba/spring-cloud-alibaba
Spring-Cloud-Gateway 微服务网关 https://spring.io/projects/spring-cloud-gateway
Nacos 服务注册中心 https://nacos.io/zh-cn/index.html
Sentinel 服务熔断 https://sentinelguard.io/zh-cn/
Log4j2 日志框架 https://github.com/apache/logging-log4j2
Mysql 数据库 https://www.mysql.com/
MyBatis-Plus ORM框架 https://baomidou.com
MyBatisGenerator 数据层代码生成器 http://www.mybatis.org/generator/index.html
AJ-Captcha 图形验证码 https://gitee.com/anji-plus/captcha
Kafka 消息队列 https://github.com/apache/kafka/
Redis 分布式缓存 https://redis.io/
Redisson 分布式Redis工具 https://redisson.org
Elasticsearch 搜索引擎 https://github.com/elastic/elasticsearch
LogStash 日志收集工具 https://github.com/elastic/logstash
Kibana 日志可视化查看工具 https://github.com/elastic/kibana
Nginx 静态资源服务器 https://www.nginx.com/
Docker 应用容器引擎 https://www.docker.com
Jenkins 自动化部署工具 https://github.com/jenkinsci/jenkins
Hikari 数据库连接池 https://github.com/brettwooldridge/HikariCP
JWT JWT登录支持 https://github.com/jwtk/jjwt
Lombok Java语言增强插件 https://github.com/rzwitserloot/lombok
Hutool Java工具类库 https://github.com/looly/hutool
Swagger-UI API文档生成工具 https://github.com/swagger-api/swagger-ui
Knife4j Swagger 增强框架 https://doc.xiaominfo.com
Hibernator-Validator 验证框架 http://hibernate.org/validator
XXL-Job 分布式定时任务框架 http://www.xuxueli.com/xxl-job
ShardingSphere 分库分表 https://shardingsphere.apache.org

架构和组件设计

针对于分布式和微服务的项目来说,随着业务的发展,项目的数量上千个都是很正常的,但如何要把这些项目做好配置,做好架构设计,设计出组件库,都是要考虑的因素

既然组件库是要给其他服务提供使用,所以在设计时要考虑的细节非常的多,设计模式和高内聚低耦合的思想更加的重要,而且代码的健壮性和高效率的执行也是同样重要,而在大麦项目中,使用了SpringBoot的自动装配机制来设计组件库

除了组件库外,还有对异常的处理、数据的封装格式、多线程的使用等等也都要进行相应的封装设计,这些在项目中同样具备

业务流程

对于大麦项目来说,核心的业务就是用户选择节目然后进行购票功能了,项目中不仅完整了对整个业务流程的完整闭环,而且考虑到既然设计此项目是为了应对高并发的特点,那么在从业务的角度上也做了很多的优化设计

项目的亮点质量高吗

我也是一路过来的,所以很清楚大家的心态,希望是能和实际业务结合起来进行学习项目的架构设计技巧以及解决高并发的解决方案,

这里有一点要注意 就是不要让大家过于的陷入项目中的复杂业务中

一方面其实面试官并不会对你做过的业务太感兴趣,太复杂了也听不懂,最好是你能把业务和解决问题的能力结合起来给他讲

另一方面项目的目的是让你提供技术能力,业务固然重要,但还是希望以后能把学到的技术应用到自己的项目中做到融会贯通。

而本项目争取让小伙伴尽可能快速理解业务的前提下,充分的来提供技术能力,尽量减少不必要的时间和精力

项目中的各个亮点部分

项目的亮点可以分成多个部分,比如涉及到用户服务的业务时,项目在海量并发的场景下的问题:

  • 用户服务如何设计分库分表,存在用户邮箱、用户手机号多种方式登录,要怎么设计不会发生读扩散问题?

  • 当一瞬间有大量的用户注册请求时,如何防止 缓存穿透问题?网上说的那些方案到底靠谱吗?到底要怎么解决并且不影响用户体验?

  • 用户和购票人数据为了应对高并发的场景下,在缓存中要怎么设计?把所有数据都放进去吗?

  • 如何设计缓存策略?采取哪种结构来存储?采取哪种维度来存储?哪些数据适合放入缓存?哪些不适合?

在用户进行浏览的过程中,对于问题的存在同样也不少:

  • 如何应对高并发下的用户查询请求?在主页列表、类型列表、的请求查看下,如何将设计分库分表的数据查询方案?

  • 节目详情要怎么设计缓存?有了Redis就可以了吗?突发性流量激增的问题怎么解决?

  • 如何设计多级缓存来应对几十万,甚至几百万的访问压力?如何发生了缓存雪崩要解决解决和提前预防?

而在用户购票的流程中,为了解决高并发的压力,需要考虑的问题和细节就会更多:

  • 如何应对高并发下的用户购票压力?在购票流程中怎么考虑缓存和数据库的交互?

  • 库存数量在缓存中应该如何设计?用户购票和支付过程中,要怎么正确的扣除库存?异常了怎么回滚?数据库中的余票数量一致性要如何解决?

  • 分布式锁使用起来的细节到底有哪些?只要加上一行锁就可以了吗?

  • 高并发下的分布式锁如何进一步的优化?锁的粒度?网络请求的性能?

  • 幂等功能如何实现?有哪些维度需要考虑?

  • 经典的缓存数据库一致性的问题实际生产环境中到底如何解决?直接删除缓存、延迟双删 这些方案到底可行吗?

而在整个项目的架构设计上,也有很多的问题存在:

  • 高并发下订单延迟关闭功能如何实现?使用中间件作为延迟队列的问题?使用redis作为延迟队列可以吗?如何提高性能?

  • 分布式id如何生成?经典的雪花算法?直接使用MybatisPlus中的生成策略可以吗?有什么问题?

  • 订单的分库分表如何设计?既要支持订单详情查询、又要支持订单列表查询而不发生读扩散?

  • 如何执行灵活的限流规则?能支持到某个时间段、某个请求、并能记录下异常行为信息?

  • 项目的架构配置、服务配置、数据结构要如何统一设计和管理?异常如何捕获?

  • ... ... ... ...

这里只是将常见的问题列举了一下,而在本项目中解决的问题远不止上述列举这些,小伙伴可在学习时带着某个问题来思考,在项目中找到问题的答案

项目展示

为了尽可能的还原,本项目尽可能贴近官网的页面设计和业务流程,小伙伴可以通过前端项目一边来学习业务,一边体会业务中调取了哪些后端接口,这种学习方式是简单且高效的,也建议小伙伴在学习公司的业务时也使用这种方式

主页列表

分类列表

节目详情

生成订单

订单列表

订单详情

小伙伴的疑惑

学生人群

无论是正在大学中或者是培训机构中的学生,其实对项目的需求更高,可以这么说能不能决定你能正式工作的因素除了学历外就是项目了,既然学历已经成了定局,那么最能提高竞争力的就是 项目,如果能在简历和面试中已经有了比较出色的项目经验,那么对于面试官来说绝对是必杀技!

不用担心怕自己看不懂项目,项目的文档和视频讲解非常的详细,分成了 项目的总体介绍如何启动项目基础介绍项目的架构设计详细业务讲解基础组件讲解设计到的技术讲解深挖细节亮点讲解,配合 详细的代码加注释以及解释流程和设计思路并且还结合了流程图 方便大家更好的理解。学生可根据自己目前学习的进度来跳转到对应的目录来学习

工作了几年的人群

对于这些人群,学习大麦项目更是必要的,通过项目的讲解能学习到项目的架构设计、设计模式、高并发解决方案,来让自己的技术能力得到提高,并且让自己的简历和面试中通过此项目来增加个人亮点

提供的服务

文档数量120+,总字数26W+,并且还在不断更新中,带你全方位360度无死角彻彻底底掌握项目!

包括对 项目从0到1的讲解项目的细节和亮点总结遇到的面试真题详细的各种优化后的压测报告如何将项目有亮点的写到简历上。并且提供后续的答疑解惑,小伙伴在学习项目时遇到没有理解的问题,或者面试过程中遇到的问题都可以在社区中进行反馈,本人会进行详细的分析解答

项目文档目录

#java##微服务##简历中的项目经历要怎么写##24届软开秋招面试经验大赏#
全部评论
大佬你好,这个项目有视频教程吗?
点赞 回复 分享
发布于 08-13 21:48 广西

相关推荐

        今天,我非常荣幸能与大家分享我在秋招与春招征途中的宝贵经验。随着我投递的岗位日益增多,我不仅对简历的撰写要求愈发精益求精,也惊喜地发现,这份努力直接转化为了更多面试邀约的收获。步入职场后,我更有幸承担起部门简历筛选的重任,这一转变让我得以从雇主视角深入审视每一份简历,深刻理解何为优秀简历的精髓。        PS: 我是一个Java后端,更多的观点是以Java后端的视角出发,其他方向的小伙伴,仅供参考。        接下来,我渴望与大家深入探讨,究竟何为一份出色的简历,以及它应当具备哪些令人瞩目的特质。这不仅是对过往经验的总结提炼,更是希望为即将踏上求职旅程的你们,提供一份实用的指南,助力你们在激烈的竞争中脱颖而出。        好的简历,首先应当是一封精准的自我推销信,它不仅要全面展现你的专业技能、教育背景及实习经历,更要巧妙地凸显你的个人优势与岗位需求的契合度。它应当像一幅精心布置的画卷,既有宏观的概览,也不乏细腻的笔触,让看到你简历的人能够迅速捕捉到你的亮点与潜力。       一份后端简历,大体包括个人信息,教育背景,职业技能,项目经历,实习经历,个人介绍,这几大部分。对于其中的顺序我们应该如何排版呢?应该秉承的最优最前的原则,我们最突出的经历尽可能的放到前面,但然最先开始的内容应该是我们的个人信息。当我开始做招聘工作后,每天需要看大量的简历,这就导致不能够去详细的阅读大家的所有经历,就像看一本书一样,在一开始我的精神一定是最集中的时候,当我看到后面,可能就没有太多的耐心,就会一扫而过。所以要在一开始我们就要牢牢抓住招聘人的眼球,让他们更有兴趣的去看完这一份简历。        在个人介绍版块,大家一定要补充好自己的个人联系信息,包括电子邮箱和个人的手机号,我在招简历的过程中有不少HR喜欢先通过打电话的形式与我们提前沟通及约面试的时间。求职岗位大家也建议大家写上。        在专业技能版块,这块是八股拷打的重灾区,所在在写这块的时候大家一定要把自己熟悉的技术栈和技术点写上,对于哪些不熟悉的技术点不要写,万一面试官问起来,答不上来,会大大降低面试官对我们的印象。校招生比较容易犯的大忌是写精通XX技术,我的个老天爷啊,千万不要写,否则被面试官拷打时,真的如同下油锅啊。这里有个小技巧,在写熟悉某一个技术时,在专利技术版块不写成,使用XX技术做了什么什么,要写成熟悉这个技术的XX技术点。例如:Mysql:熟悉SQL语言编写、Mysql索引、MVCC、事务、日志、锁等机制。 Redis:熟悉 Redis 的数据结构、过期删除与内存淘汰策略,也了解高并发场下缓存异常,如缓存穿、缓存击穿、缓存雪崩。 这样的话面试就知道我拉熟悉哪些知识点,有针对我进行提问看我们掌握的是否扎实。如果只写的熟悉MySQL、Redis那知识点就太多了,面试官也不知识你到底掌握了哪些。        如果有实习经历的小伙伴,一定要想尽一切办法突出我实习期间的一些工作内容。因为这是你第一次到社会上从事相关专业的工作,通过你的实习经历面试官能看出你在工作中到底是一个什么样的表现,是不是匹配他的要求。对于项目描述我们一定要描述的简短且清晰,面试官很少会关心项目的业务细节。在描述项目成果时,我们要更多从技术的角度去出发,展现我们的技术功底。                对于还没有实习经历的小伙伴,项目经历就成我们最重要的部分。这里面有一个面试的隐藏点,如果大家项目准备有非常多的点可以和面试官聊,那么八股的比例就会明显的下降,如果大家项目很简单,面试官感觉没有啥可以聊的,那么大家就要做好被八股拷要的准备。校招的小伙伴,对于项目要求的标准并不会那么高,要我们的使用微服务,解决了什么高并发、高性能的问题,这个知识点太高大上了,我们需要准备好一个项目中的某一个模块或几个模块,这个模块一定要有一定的业务复杂度跟和面试官拉扯几个回合。对于校园项目的数量2~3最为佳。最有亮点的项目一定要放在开始。        自我评介这块,大家都容易写得很虚,因为我们是面试的是技术岗,所以还要以围绕技术来写,如果大家好写喜欢钻研技术,那就不能只写喜欢钻研技术,你还要得写你通过什么方式来钻研技术的,看了什么技术书籍、参与了什么开源项目、阅读了什么源码等等,一定要把东西留在具体的事上。        简历就是我们脸面,把简历写成什么样,直接决定着我们是否有机会上牌桌。PS:24年求职,一共拿到6份offer,其中包括两家头部大厂和一家AI独角兽公司。
点赞 评论 收藏
分享
1 19 评论
分享
牛客网
牛客企业服务