项目简单?烂大街?那是你没有掌握核心技巧!

项目的问题

目前有不少小伙伴在网上学习免费的项目来学习,但有个问题,就是一旦项目热度高了后,使用的人多了。面试官看的多了,也就会有所谓的“烂大街”问题。这要怎么办?

目前网上的项目就已经很多了,各种各样的业务都有,其实最根本的原因不是在项目上,而是项目中要有核心业务亮点和解决复杂问题的落地方案

就拿设计模式来说,不少项目都是没有设计模式,或者强行使用设计模式,结果被人拿去面试了,面试官觉得你说的也不合理啊!明明不适用的场景,非得硬往上扯!

另一个关键性的原因是业务中对于细节的把控不够严谨,让面试官一眼就看出你这个项目是个玩具,根本不是生产上真正使用的。

举一个例子:对于缓存和数据库的一致性的问题,有的方案是说用到延迟双删。说实话,真正做过业务的都会觉得这个方案很扯!延迟删?那具体什么时候延迟删?1s?5s?复杂一点的业务在执行中的耗时没法精确把控啊!一旦耗时超过了这个延迟删的时间,那数据的一致性不就不能保证了吗?

但是!还真的有人拿这个方案去面试,结果当然是挂了。所以真正的项目是一定要贴合的业务来做思考的。有一句话说的非常的好:技术始终是为业务而服务的

项目的重点

那么如果能有一个好项目,里面的亮点和方案都足够吸引人,使用场景也合理,其实就不存在烂大街的问题了。即使这个项目被很多人用了,我们依然可以把里面的亮点拿出来套用到另一个项目上(前提依旧是要合理!)

举例

就比如说都要被讲烂了的分布式锁,但又有多少人真的算是完全掌握了分布式锁的技术呢?

其实在设计分布式锁时,绝对不是一行lock.lock就可以的。你要考虑它的细节有很多,比如:

  • 在方法里还是方法外使用?
  • 多个事务存在的话需要去考虑吗?
  • 如果利用注解那么要考虑其他切面的关系吗?
  • 提供哪些策略呢?
  • 锁的超时和拒绝方案怎么处理?
  • 锁的粒度该怎么来设计?

我就举了这一个分布式锁的例子,目前网上的项目有几个能考虑真正全面的?但是!一旦能真正的掌握了,那么就可以完全套用在别的项目上,项目业务会烂大街,但你回答这个亮点不会烂大街啊!

所谓的授人以鱼不如授人以渔,正是这个意思,学了再多项目,如果项目本身质量不行,只会常规的CRUD,那么终究还是逃不掉“烂大街”问题。面试时依旧不能让面试官觉得你比较牛逼,技术也依旧得不到提高。

如何找到好项目

到这里,我们知道了问题的根本是能有学习到真正亮点的项目,那么怎么能找到?这里推荐一个很不错的项目:“大麦”

项目优势

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

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

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

项目中的各个亮点部分

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

技术结构

alt

架构和组件设计

alt

业务流程

alt

项目介绍

  • 项目地址: https://gitee.com/java-up-up/damai
  • 在线体验: https://www.damai-javaup.chat
  • 文档讲解: https://www.javaup.chat/pages/83cf22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值