重构 重构重构作为敏捷实践的精髓之一1重构的几个要点重构不应改变原有程序的可观测的行为把添加新功能和重构当做两件不同的事情来对待,就像两顶帽子,在开发过程中我们经常两顶帽子換着戴小步重构,更安全的前进,让代码在绝大部分时间处于可工作的状恣检垃圾式的重构:发现一个垃圾时,不想跑题太多,同时也不想将垃圾留在原地;如果此时很容易重构,就立即完成,否则就记录下来,等后续再来重构绝大多数的...
Netty原理与基础(五) 1.Decoder原理1.1什么叫作Netty的解码器呢?首先,它是一个InBound入站处理器,解码器负责处理“入站数据”。其次,它能将上一站Inbound入站处理器传过来的输入(Input)数据,进行数据的解码或者格式转换,然后输出(Output)到下一站Inbound入站处理器。一个标准的解码器将输入类型为ByteBuf缓冲区的数据进行解码,输出一个一个的Java POJO对象。Nett...
Netty原理与基础(四) 1. ByteBuf浅层复制的高级使用方式ByteBuf的浅层复制分为两种,有切片(slice)浅层复制和整体(duplicate)浅层复制。1.1 slice切片浅层复制ByteBuf的slice方法可以获取到一个ByteBuf的一个切片。一个ByteBuf可以进行多次的切片浅层复制;多次切片后的ByteBuf对象可以共享一个存储区域。slice方法有两个重载版本:(1)public...
Netty原理与基础(三) 1.Pipeline流水线Netty的业务处理器流水线ChannelPipeline是基于责任链设计模式(Chain of Responsibility)来设计的,内部是一个双向链表结构,能够支持动态地添加和删除Handler业务处理器。入站操作image.png出站操作出站流水从后往前image.png1.1ChanneHandlerCont...
Netty原理与基础(二) 5.Handler业务处理器在Reactor反应器经典模型中,反应器查询到IO事件后,分发到Handler业务处理器,由Handler完成IO操作和业务处理。整个的IO处理操作环节包括:从通道读数据包、数据包解码、业务处理、目标数据编码、把数据包写到通道,然后由通道发送到对端image.png用户程序主要在Handler业务处理器中,Handler涉及的环节为:数据包解码、业...
Netty原理与基础 1.简介Netty是为了快速开发可维护的高性能、高可扩展、网络服务器和客户端程序而提供的异步事件驱动基础框架和工具。换句话说,Netty是一个Java NIO客户端/服务器框架2.Netty目标使开发可以做到“快速和轻松”做到高性能和高扩展3.创建第一个Netty项目<dependency> <groupId>io.netty<...
Feign+Ribbon、Dubbo、gRPC的选型对比 1.场景在微服务开发中,在调用不同模块之间的数据时,经常回去调用他的http接口,总不能这样,RPC框架,服务在代码里就调用一个interface的接口,底层直接让RPC框架发送请求到对应的服务器上去2. feign+ribbonimage.pngspring cloud netflix技术栈,RPC调用,用的就是feign框架+ribbon做负载均衡,暴露出来的服务接口,就...
SpringCloudAlibaba之Nacos注册中心架构原理 1.注册与发现image.png服务通过nacos server内部的open api进行服务注册,nacos server内部有一个sevice服务的概念,里面有多个instance实例的概念,同时对不同的service服务可以划归到不同的namespace命名空间下去image.png注册的时候就是在注册表里维护好每个服务的每个实例的服务器地址,包括ip...
UML建模(七)需求启发 1.需求启发要点和涉众交流的形式应该采用视图,而不是模型和涉众交流的内容应该聚焦涉众利益,而不是需求需求启发手段:研究资料、问卷调查、访谈、观察、研究竞争对手2.需求人员的素质培养好奇心、探索力、沟通力、表达力、热情...
UML建模(六)需求之系统用例规约 image.png1.用例规约的内容用例规约就是以用例为核心来组织需求内容的需求规约用例通过前置条件(precondition)、后置条件(postcondition)以契约的形式表达需求前置条件:用例开始前,系统需要满足的约束。后置条件:用例成功结束后,系统需要满足的约束。前置条件、后置条件必须是系统能检测的。前置条件必须是用例开始前系统能检测到的。前置后置条件是状态...
ZooKeeper、Eureka、Consul、Nacos的选型对比 服务注册中心选型对比.png1.趋势zookeeper和eureka,consul用的没那么多,nacos现在用的越来越多,以后也会是一个大的趋势,但是现在可能还没那么的普及2.CAP理论CAP原则又称CAP定理,指的是在一个分布式系统中,[一致性]、[可用性]、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者...
UML建模(五)需求之系统用例图 1.系统执行者定义:在所研究系统外,与该系统发生功能性交互的其他系统。系统是能独立对外提供服务的整体封装了自身的数据和行为,能独立对外提供服务的东西才能称为系统。系统边界是责任的边界系统执行者和系统有交互外系统必须和系统有交互,否则不能算是系统的执行者。系统执行者和重要无关。系统执行者只关注哪个外系统和所研究系统接口。交互是功能性交互系统执行者可以是人或非人系统2.【步骤】...
UML建模(四)业务建模之业务序列图 4.1 描述业务流程的手段描述业务流程的手段:文本 活动图 序列图序列图和活动图比较:1.活动图只关注人,序列图把人当作系统。2.活动图表示动作,序列图强迫思考动作背后的目的。3.活动图“灵活”,序列图不“灵活”。4.2 业务序列图要点消息代表责任分配而不是数据流动1.序列图最重要的要点是消息的含义。A指向B的消息,代表“A请求B做某事”,或者“A调用B做某事的服务”,做某事...
UML建模知识点三-业务用例图 1.软件是组织的零件对于软件开发来说,业务建模的目的是为了得到待引进软件系统的需求可以从内外两个方面来研究组织。1.从外部看,组织是一些价值的集合,我们可以用业务用例图表示;2.从内部看,组织是一些系统的集合,我们可以用业务序列图来表示。2.识别业务执行者业务执行者:以某组织为研究对象,在该组织之外和该组织交互的组织(人群或机构)就是该组织的执行者。因为研究对...
UML知识点二 1.业务建模之愿景愿景属于业务建模工作流的一部分以一个带引入系统为研究对象,愿景定义:在目标组织看来,引进该系统应该给该组织带来改进2.定位目标组织和老大目标组织:带引入系统将改进其流程的组织。可以是一个机构或者是人老大:目标组织的代表定位情况一:定位目标人群和老大常见错误:1.从功能上加上人群得到目标人群,2.吃窝边草3.虚构老大...
uml建模知识点(一) 1.建模和uml软件开发的需求目的是:让系统更加的好卖软件开发中设计的目的是:降低开发维护成本利润 = 需求 - 设计需求和设计不分,利润就会缩水从需求直接映射设计,会得到大量重复的代码从设计直接定义需求,会得到一堆假需求需求:需求包是基于涉众视角对系统功能分包而得到的子系统是基于内部视角根据系统部件的耦合和内聚情况切割而得到的设计源于需求,高于需求需求和...
Springboot整合quartz(二) 1.Quartz示例public class JobTest implements Job { /** * 具体执行的任务 * * @param jobExecutionContext 保存着该job运行时的一些信息 */ @Override public void execute(JobExecutionCo...
Spring +Quartz(一) 1.Quartz大致介绍1.1介绍Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。Quartz用一个小Java库发布文件(.jar文件),这个库文件包含了所有Quartz核心功...
SpringBoot+Redis实现接口幂等性 1.简介在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重复处理。如何保证其幂等性,通常有以下手段:数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据token机制,每次接口请求前先获取一个token,然后再下次请求的...
scala基础(二) scala基础(二)1.声明变量声明方式 var | val(相当于final 变量无法被修改)能省则省 可以不用写变量类型2.scala数据类型数据类型都是对象image-20200412190149755.pngimage-20200412190409125.pngNothing 无值 异常使用按照精度进行隐式转化 跟java...