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

项目的问题

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

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

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

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

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

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

项目的重点

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

举例

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

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

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

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

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

如何找到好项目

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

项目优势

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

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

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

项目中的各个亮点部分

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

技术结构

alt

架构和组件设计

alt

业务流程

alt

项目介绍

#java##秋招##简历中的项目经历要怎么写##简历被挂麻了,求建议##我的简历长这样#
全部评论
求项目文档
1 回复 分享
发布于 10-03 00:27 广东
佬,问一下这个烂大街了没啊,写了需要包装吗?我双非 怕过不了筛
1 回复 分享
发布于 11-04 00:45 浙江
求项目文档
点赞 回复 分享
发布于 10-19 08:55 湖南

相关推荐

10-30 00:18
已编辑
门头沟学院 Java
推荐个Java的微服务开源项目,项目是仿制的大麦网购票系统,涉及了微服务、分库分表、本地缓存/分布式缓存、消息中间件、线程池、本地锁/分布式锁等主流技术。有的功能接口比如生成订单还提供了多个版本,针对一些高并发场景逐步进行优化,实现了多种解决方案。这次秋招突击学习了几周,用这个项目替换了之前的单体项目去面试,很明显的感觉到一面、二面的通过率提升了不少。面试过程中面试官也问了挺多关于项目的问题,整理了下大概有这些:1. 使用微服务架构的优势是什么,拆分微服务的依据是什么?2. 分库分表怎么做的?分库分表在设计时会碰到哪些问题?怎么解决的?3. 项目中提到针对缓存击穿、缓存雪崩、缓存击穿做了优化,具体是怎么实现的?4. 分布式链路ID为什么不用Skywalking而是自己实现?异步调用时是怎么解决跨线程传递的?5. 项目中哪些地方用到了Redis缓存,是如何实现缓存一致性的?6. 你提到了使用了本地缓存+redis缓存实现多级缓存,怎么保证多级缓存的一致性?多实例情况怎么解决?7. 项目中哪些地方用到了分布式锁,使用分布式锁的时候有碰到什么问题吗?8. 你提到项目中实现了自定义的分布式锁组件,为什么要这么做,解决了哪些问题?9. 项目里提到了用redisson实现了分布式延迟队列,具体是怎么实现的?10. 购票时的余票扣减是怎么实现的?为什么要用lua+redis来实现,有没有更好的方法?目前碰到面试官问过的,主要就是这些问题,项目内容还是挺多的,代码量也很大,还有很多知识点都没来得及深入学。项目本身是完全开源的,具体地址在gitee上搜damai应该就能找到。
点赞 评论 收藏
分享
4 39 评论
分享
牛客网
牛客企业服务