6月份的时候,群里有一个小伙伴分享了一道面试题,如下图: 趁着下班的功夫,拆解下这道面试题 可以按顺序添加任意节点形成一个任务链 链表且有序 或者数组(考虑到数组的扩容,直接pass调,用有序链表LinkedList) 添加任意节点(可以指定索引添加) 任务需要按顺序执行,同一个节点可能有多个任务(可以并行执行) 线程池执行 同一个节点的任务,广度优先,可以利用Queue 节点完成可以指定任意个数 Queue需要包装起来 同时需要计数,直接利用CountDownLatch 每个节点都可能失败,失败后可以通过接口进行…

2022/08/25 0条评论 780点热度 0人点赞 阅读全文

昨天刚写了 可编排策略在交易系统的应用,今天小伙伴就给我提了个需求。 背景 最近由于新业务的需要,需要对原有工单的推单逻辑进行变动。我是想着尽可能不对原有逻辑进行改动,毕竟业务还一直在跑,就开启了一个小模块进行代码的组合。 在设计评审中,我一直强调要设计的灵活些。 校验规则一定要原子化,然后可编排在任何一处场景。校验的的入参和出参必须抽取,并标准化。 直接把我昨天写的文章扔过去了。 然后就差一个状态机了,得我就把框架搭起来。 设计 工单的流转完全可以状态驱动,如果发现两个状态都指向了一个处理逻辑,那就说明,你需要加…

2022/08/24 0条评论 677点热度 0人点赞 阅读全文

背景 在2019年的时候,由于组织架构变更,我接手了交易板块。接手后开始找之前的产品、开发沟通了解下这块有什么问题。 综合了下有以下问题: 需求积压严重,开发列了满满一小本子(开发); 需求提出方多,经常功能打架,然后就复制出来了一套(涉及的业务线业比较多)(开发); 需求处理慢(产品); 进入交易系统太慢(1~3秒),好多用户跳出(产品); 生产经常出现各种问题,开发解决速度慢(产品); 产品链路数据无法统计,只能分析出最终结果,具体哪块转化率低,无法统计(产品); 用户转化成本过高(风控); 动一块功能,所有的…

2022/08/24 0条评论 634点热度 0人点赞 阅读全文

大神Doug Lea在http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf 里详细介绍了java nio的实现思路,里面也详细介绍了reactor模式,后文统一称为老爷子的文章。 看这篇文章建议先了解下linux中的文件描述符与套接字socket redis中的IO多路复用select和epoll 传统阻塞I/O模型 以上图片摘自大神Doug lea 的nio。 特点 一个后端线程只能处理一个客户端请求 采用I/O阻塞的模式处理客户端请求 分析 随着并发量上升,后端资源有限的情…

2022/01/06 0条评论 821点热度 0人点赞 阅读全文

生成脚手架 随着新框架的不断稳定(同时也带来了不错的收益),新的项目以及重构项目不断的往新框架上切,基于这个原因,要把新框架整一个脚手架。 脚手架中包含了demo(为了学习而框架,实际开发中会有一些便利性的调整) 注意事项 依赖maven环境,必须配置MVAVA_HOME 依赖jdk环境(一定要jdk,不要jre) maven-archetype 的模板使用velocity 引入插件以及自定义配置文件 先找一个可以跑起来的demo,在pom文件中引入脚手架的maven plugin 我的工程结构如下: 项目地址:h…

2021/11/29 0条评论 1575点热度 0人点赞 阅读全文

创建eureka-server项目 主要看下配置文件 server: port: 8765 # 开启优雅停机kill -2 可以优雅停机 shutdown: GRACEFUL eureka: #此处设置会改变eureka控制台System Status的显示 datacenter: cloud #此处设置会改变eureka控制台System Status的显示 environment: dev instance: appname: eureka-server lease-renewal-interval-in-se…

2021/11/24 0条评论 989点热度 0人点赞 阅读全文

什么是docker-compose? docker-compose是docker的容器编排工具。通过配置yml文件来compose 我们开发过程中所需要的服务。 ps: 虽然生产上大部分用的是k8s,但是我们自己开发的时候,可以用docker-compose 来快速的起服务,用什么起什么,极其方便。(至于安装,在这里不做过多的讲解) 先看下实例 docker-compose-mysql.yml version: '3' #基于compose哪个版本定制,1已经废弃,目前2和3 services:…

2021/11/24 0条评论 887点热度 0人点赞 阅读全文

没错,又来了,一个项目的结束,就会复盘并完善下。 传统开发的弊病: 通过事务脚本模式来开发需求; 开发人员热衷于技术并通过技术手段解决问题,而不是深入思考和设计业务的走向; 过于重视数据库,围绕数据库和数据模型进行建模,按数据流程进行建模; 按技术视角进行业务命名,导致后续迭代以及人员更替时,产品和技术无法对齐; 随着业务的发展,到后续业务、技术无法沟通,各种不理解; 业务希望技术出排期,技术得撸代码,耗费精力; 代码开发的过程中技术和业务耦合,一个场景一个服务,代码流水线; 因为技术的问题会导致业务流程的中断,导…

2021/09/20 0条评论 935点热度 0人点赞 阅读全文

基于springcloud的灰度实现方案(一) 基于springcloud的灰度实现方案(二) @Configuration配置加载分析 之前介绍了灰度方案以及实现,分析feign调用的时候,有点不太尽兴,这次再丰富一下。 首先,我们在feign调用时,使用了FeignClient注解。 #接口调用 @FeignClient("demo-service") public interface DemoServiceFeginClient { } # 开启feign @EnableFeignClie…

2021/09/14 0条评论 1201点热度 0人点赞 阅读全文

设计模式是软件设计中常见问题的典型解决方案。它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题。 设计模式相对比较软性,是对解决某类场景问题的高层描述; 根据使用人的不同应用的也不同 只是一种思想,没有好坏之分,只有更适合; 我们应该关注要达到什么样的目的,怎么更加灵活的做到; 软件中唯一不变的是变化,设计模式让我们想各种方法屏蔽这种变化; 设计模式包含: 意图:简单描述问题和解决方案 动机:进一步解释问题并说明模式会如何提供解决方案; 结构:如何将软件结构组装起来并形成关系 设计原则: S…

2021/08/19 0条评论 754点热度 0人点赞 阅读全文