自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小武的Blog

爱自己是终生浪漫的开始, 我们一直在坚持着, 不是为了改变这个世界, 而是希望不被这个世界所改变。

  • 博客(115)
  • 收藏
  • 关注

原创 小武的博客

作者简介:小武一名大三学生,目前很丧中... 我本楚狂人,凤歌笑孔丘 the whole of life becomes an act of letting go, but what always hurts the most is not taking a moment to say goodbyeCredits 有一种孤独是 原以为...

2019-04-19 15:26:43 231 1

原创 重构

重构重构作为敏捷实践的精髓之一1重构的几个要点重构不应改变原有程序的可观测的行为把添加新功能和重构当做两件不同的事情来对待,就像两顶帽子,在开发过程中我们经常两顶帽子換着戴小步重构,更安全的前进,让代码在绝大部分时间处于可工作的状恣检垃圾式的重构:发现一个垃圾时,不想跑题太多,同时也不想将垃圾留在原地;如果此时很容易重构,就立即完成,否则就记录下来,等后续再来重构绝大多数的...

2020-11-15 20:28:51 730

原创 Netty原理与基础(五)

1.Decoder原理1.1什么叫作Netty的解码器呢?首先,它是一个InBound入站处理器,解码器负责处理“入站数据”。其次,它能将上一站Inbound入站处理器传过来的输入(Input)数据,进行数据的解码或者格式转换,然后输出(Output)到下一站Inbound入站处理器。一个标准的解码器将输入类型为ByteBuf缓冲区的数据进行解码,输出一个一个的Java POJO对象。Nett...

2020-10-25 18:08:51 215

原创 Netty原理与基础(四)

1. ByteBuf浅层复制的高级使用方式ByteBuf的浅层复制分为两种,有切片(slice)浅层复制和整体(duplicate)浅层复制。1.1 slice切片浅层复制ByteBuf的slice方法可以获取到一个ByteBuf的一个切片。一个ByteBuf可以进行多次的切片浅层复制;多次切片后的ByteBuf对象可以共享一个存储区域。slice方法有两个重载版本:(1)public...

2020-10-18 16:23:17 204

原创 Netty原理与基础(三)

1.Pipeline流水线Netty的业务处理器流水线ChannelPipeline是基于责任链设计模式(Chain of Responsibility)来设计的,内部是一个双向链表结构,能够支持动态地添加和删除Handler业务处理器。入站操作image.png出站操作出站流水从后往前image.png1.1ChanneHandlerCont...

2020-10-18 16:02:31 123

原创 Netty原理与基础(二)

5.Handler业务处理器在Reactor反应器经典模型中,反应器查询到IO事件后,分发到Handler业务处理器,由Handler完成IO操作和业务处理。整个的IO处理操作环节包括:从通道读数据包、数据包解码、业务处理、目标数据编码、把数据包写到通道,然后由通道发送到对端image.png用户程序主要在Handler业务处理器中,Handler涉及的环节为:数据包解码、业...

2020-10-12 21:13:08 142

原创 Netty原理与基础

1.简介Netty是为了快速开发可维护的高性能、高可扩展、网络服务器和客户端程序而提供的异步事件驱动基础框架和工具。换句话说,Netty是一个Java NIO客户端/服务器框架2.Netty目标使开发可以做到“快速和轻松”做到高性能和高扩展3.创建第一个Netty项目<dependency> <groupId>io.netty<...

2020-10-08 18:10:37 84

原创 Feign+Ribbon、Dubbo、gRPC的选型对比

1.场景在微服务开发中,在调用不同模块之间的数据时,经常回去调用他的http接口,总不能这样,RPC框架,服务在代码里就调用一个interface的接口,底层直接让RPC框架发送请求到对应的服务器上去2. feign+ribbonimage.pngspring cloud netflix技术栈,RPC调用,用的就是feign框架+ribbon做负载均衡,暴露出来的服务接口,就...

2020-10-08 09:39:36 3896

原创 SpringCloudAlibaba之Nacos注册中心架构原理

1.注册与发现image.png服务通过nacos server内部的open api进行服务注册,nacos server内部有一个sevice服务的概念,里面有多个instance实例的概念,同时对不同的service服务可以划归到不同的namespace命名空间下去image.png注册的时候就是在注册表里维护好每个服务的每个实例的服务器地址,包括ip...

2020-10-07 19:34:28 9681 3

原创 UML建模(七)需求启发

1.需求启发要点和涉众交流的形式应该采用视图,而不是模型和涉众交流的内容应该聚焦涉众利益,而不是需求需求启发手段:研究资料、问卷调查、访谈、观察、研究竞争对手2.需求人员的素质培养好奇心、探索力、沟通力、表达力、热情...

2020-10-07 10:48:41 99

原创 UML建模(六)需求之系统用例规约

image.png1.用例规约的内容用例规约就是以用例为核心来组织需求内容的需求规约用例通过前置条件(precondition)、后置条件(postcondition)以契约的形式表达需求前置条件:用例开始前,系统需要满足的约束。后置条件:用例成功结束后,系统需要满足的约束。前置条件、后置条件必须是系统能检测的。前置条件必须是用例开始前系统能检测到的。前置后置条件是状态...

2020-10-06 16:28:42 5429

原创 ZooKeeper、Eureka、Consul、Nacos的选型对比

服务注册中心选型对比.png1.趋势zookeeper和eureka,consul用的没那么多,nacos现在用的越来越多,以后也会是一个大的趋势,但是现在可能还没那么的普及2.CAP理论CAP原则又称CAP定理,指的是在一个分布式系统中,[一致性]、[可用性]、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者...

2020-10-06 15:34:23 1573

原创 UML建模(五)需求之系统用例图

1.系统执行者定义:在所研究系统外,与该系统发生功能性交互的其他系统。系统是能独立对外提供服务的整体封装了自身的数据和行为,能独立对外提供服务的东西才能称为系统。系统边界是责任的边界系统执行者和系统有交互外系统必须和系统有交互,否则不能算是系统的执行者。系统执行者和重要无关。系统执行者只关注哪个外系统和所研究系统接口。交互是功能性交互系统执行者可以是人或非人系统2.【步骤】...

2020-10-01 23:19:48 470

原创 UML建模(四)业务建模之业务序列图

4.1 描述业务流程的手段描述业务流程的手段:文本 活动图 序列图序列图和活动图比较:1.活动图只关注人,序列图把人当作系统。2.活动图表示动作,序列图强迫思考动作背后的目的。3.活动图“灵活”,序列图不“灵活”。4.2 业务序列图要点消息代表责任分配而不是数据流动1.序列图最重要的要点是消息的含义。A指向B的消息,代表“A请求B做某事”,或者“A调用B做某事的服务”,做某事...

2020-09-29 20:10:33 1344

原创 UML建模知识点三-业务用例图

1.软件是组织的零件对于软件开发来说,业务建模的目的是为了得到待引进软件系统的需求可以从内外两个方面来研究组织。1.从外部看,组织是一些价值的集合,我们可以用业务用例图表示;2.从内部看,组织是一些系统的集合,我们可以用业务序列图来表示。2.识别业务执行者业务执行者:以某组织为研究对象,在该组织之外和该组织交互的组织(人群或机构)就是该组织的执行者。因为研究对...

2020-09-29 19:25:49 2619

原创 UML知识点二

1.业务建模之愿景愿景属于业务建模工作流的一部分以一个带引入系统为研究对象,愿景定义:在目标组织看来,引进该系统应该给该组织带来改进2.定位目标组织和老大目标组织:带引入系统将改进其流程的组织。可以是一个机构或者是人老大:目标组织的代表定位情况一:定位目标人群和老大常见错误:1.从功能上加上人群得到目标人群,2.吃窝边草3.虚构老大...

2020-09-26 22:30:33 116

原创 uml建模知识点(一)

1.建模和uml软件开发的需求目的是:让系统更加的好卖软件开发中设计的目的是:降低开发维护成本利润 = 需求 - 设计需求和设计不分,利润就会缩水从需求直接映射设计,会得到大量重复的代码从设计直接定义需求,会得到一堆假需求需求:需求包是基于涉众视角对系统功能分包而得到的子系统是基于内部视角根据系统部件的耦合和内聚情况切割而得到的设计源于需求,高于需求需求和...

2020-09-26 21:59:25 351

原创 Springboot整合quartz(二)

1.Quartz示例public class JobTest implements Job { /** * 具体执行的任务 * * @param jobExecutionContext 保存着该job运行时的一些信息 */ @Override public void execute(JobExecutionCo...

2020-04-19 15:04:47 248

原创 Spring +Quartz(一)

1.Quartz大致介绍1.1介绍Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。Quartz用一个小Java库发布文件(.jar文件),这个库文件包含了所有Quartz核心功...

2020-04-18 22:28:35 349

原创 SpringBoot+Redis实现接口幂等性

1.简介在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重复处理。如何保证其幂等性,通常有以下手段:数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据token机制,每次接口请求前先获取一个token,然后再下次请求的...

2020-04-16 15:49:17 1276 1

原创 scala基础(二)

scala基础(二)1.声明变量声明方式 var | val(相当于final 变量无法被修改)能省则省 可以不用写变量类型2.scala数据类型数据类型都是对象image-20200412190149755.pngimage-20200412190409125.pngNothing 无值 异常使用按照精度进行隐式转化 跟java...

2020-04-12 19:35:23 87

原创 scala入门

1.简介是一种类java语言,是一门面向对象和函数式编程的特性结合在一起的静态编程语言是多范式的编程语言,支持面向对象和函数式编译生成字节码,可以运行在jvm上,可以调用java,实现语言的无缝对接跟Java相似image-20200411154933081.png2.环境配置配置java环境配置scala环境IDEA配置1.插件市场选...

2020-04-11 17:21:05 79

原创 mycat单表插入(二)

3.获取路由的结果mycat单表插入-Page-3.png【 1 - 2 】【 11】获取路由的主流程【RouteService.java】 public RouteResultset route(SystemConfig sysconf, SchemaConfig schema, int sqlType, String stmt, S...

2020-04-09 21:22:00 153

原创 mycat单表插入(一)

mycat单表插入(一)1.单库单表插入,交互图:image-20200408144230433.pngmycat server的请求流程如下:1.mycat server接收 客户端发来的请求。2.然后获得路由,进行路由3.获取mysql的链接,执行sql4.响应执行之后的结果,发送给客户端。2.执行sql的过程mycat单表插入-Page...

2020-04-08 19:47:53 290

原创 旋转正方形矩阵

旋转正方形矩阵【题目】 给定一个整型正方形矩阵matrix,请把该矩阵调整成顺时针旋转90度的样子。【要求】 额外空间复杂度为O(1)。解答: 还是一圈圈的旋转,首先旋转最外面,然后逐层向里,在旋转的时候唯一需要注意的就是元素之间的位置替换;图形化:顺时针旋转矩阵_20200109100649.pngclass Solution { public ...

2020-04-07 20:14:08 228

原创 MyCAT源码分析环境搭建

1.mycat简介1.1什么是Mycat?简单的说,Mycat就是(官网:http://www.mycat.org.cn):一个彻底开源的,面向企业应用开发的“大数据库集群”支持事务、ACID、可以替代MySQL的加强版数据库一个可以视为“MySQL”集群的企业级数据库,用来替代昂贵的Oracle集群一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL S...

2020-04-07 15:37:01 119

原创 java并发编程(八)

1.等待多线程完成的CountDownLatchCountDown允许一个或者多个线程等待其他线程来完成工作。package cn.smallmartial.concurrency;import sun.nio.ch.ThreadPool;import java.util.concurrent.CountDownLatch;/** * @Author smallm...

2019-09-14 10:26:07 77

原创 品优购学习笔记四-商家入驻密码加密

1.Spring Security框架入门1.1 Spring Security简介Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injectio...

2019-08-30 00:10:10 489

原创 Java并发基础(七)

1.fork/join示例package com.zskj.concert.test.forkJoin;import java.util.concurrent.RecursiveTask;/** * @author cw * @date 2019/8/29 */public class ForkJoinSumCalculator extends Recursive...

2019-08-29 12:50:22 59

原创 Java并发基础(六)

1.Condition接口任意一个java对象都拥有一组监视器方法,主要包括wait()、wait(long timeout)、notify()以及notifyAll()方法。这些方法与synchronized同步关键字配合,可以实现等待和通知模式。Condition接口提供了类似的监视方法。2.示例package cn.smallmartial.concurrency...

2019-08-27 23:12:17 69

原创 Java并发编程基础(五)

1.读写锁读写锁在同一个时刻可以拥有多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过读锁和写锁,事得并发性比一般的排它锁有了很大提升。java并发包提供的读写锁实现是ReentranWriteLock(特性):公平性选则重入性锁降级2.多写锁示例ReadWriteLock仅定义了获取锁和写锁...

2019-08-26 23:00:25 59

原创 java并发编程基础(四)

Java中的锁1.Lock接口锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程访问共享资源。在lock接口出现之前,java程序依靠synchroized关键字实现锁的功能,Loc接口拥有了获取锁与释放锁的可操作性,可中断的获取锁。package cn.smallmartial.concurrency;import java.util.concur...

2019-08-25 19:08:56 88

原创 java并发编程基础(三)

1.等待/通知机制等待/通知的相关方法是任意java对象都具备的,因为这些方法被定义在所有对象的超类java.lang.Objectnotify()notifyAll()wait(long)wait(long,int)等待/通知机制是指一个线程A调用了对象O的wait()方法进入等待状态,而另一个线程B调用了对象O的notify()或者notifyAll()方法,线...

2019-08-24 19:50:14 61

原创 java并发编程基础(二)

1.Daemon线程Daemon是一个支持型线程,他主要被用作程序中后台调度以及支持性工作。(Daemon属性需要在启动线程之前设置,不能在启动线程之后设置)Daemon`完成工作后,finally块不一定执行package cn.smallmartial.concurrency;/** * @Author smallmartial * @Date 2019/8/2...

2019-08-24 00:01:33 261

原创 java并发编程基础-线程简介

1.线程简介1.1什么是线程现代操作系统调度的最小单元是线程,也是轻量级线程,在一个进程中可以创建多个线程(而一个线程在一个时刻只能运行在一个处理器的核心上),这些线程都拥有各种的计数器、堆栈和局部变量等属性,并且可以访问共享的内存变量。处理器在这些线程上高速切换 ,让使用者感觉这些线程是同步在执行的。使用jmx查看一个java线程包含哪些线程...

2019-08-23 00:02:00 114

原创 数据结构之kmp算法

Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。下面先直接给出KMP的算法流程:假设现在文本串S匹配到 i 位置,模式串P...

2019-07-01 15:56:00 155 2

原创 数据结构之图

1.为什么要有图1)前面我们学了线性表和树2)线性表局限于一个直接前驱和一个直接后继的关系3)树也只能有一个直接前驱也就是父节点4)当我们需要表示多对多的关系时, 这里我们就用到了图图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点也可以称为顶点。如图:1561806847749.png2.图...

2019-06-30 11:16:00 135

原创 数据结构之二叉树与B树

二叉树与B树1.1二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树1561272329026.png二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿), 就存在如下问题:问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响...

2019-06-23 15:17:00 365

原创 数据结构之

1.基本介绍1)平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树, 可以保证查询效率较高。2)具有以下特点:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。3)举例说...

2019-06-22 15:06:00 105

原创 数据结构之二叉排序树

二叉排序数1.二叉排序树介绍二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点比如针对前面的数据 (7, 3, 10, 12, 5, 1, 9) ,对应的二叉排序...

2019-06-22 10:40:00 120

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除