自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 自定义线程池(一)futuretask版本

自定义线程池

2022-04-24 12:44:05 653

原创 BeanCopier封装

BeanCopier封装

2022-03-31 19:25:00 5274 6

原创 java令牌桶

public class RateLimit { private long bucketSize; private double currentNum; private double rate; // 最后一次加水时间 private long lastTime; private Lock lock; public static RateLimit create(long ticketPerSecond) { RateLimit r.

2022-02-03 10:25:51 557

原创 sentinel源码流程图

最近上海刮台风,在家画了sentinel的源码流程图,如有不对请指出,如需转载请标明出处!!!

2021-09-16 14:23:46 229

转载 java nio Files类使用(转载)

Java NIO中的Files类(java.nio.file.Files)提供了多种操作文件系统中文件的方法。Files.exists()Files.exits()方法用来检查给定的Path在文件系统中是否存在。 在文件系统中创建一个原本不存在的Payh是可行的。例如,你想新建一个目录,那么闲创建对应的Path实例,然后创建目录。由于Path实例可能指向文件系统中的不存在的路径,所以需要用Files.exists()来确认。下面是一个使用Files.exists()的示例:Path p

2020-09-22 00:48:16 503

原创 堆排序

public class HeapSort { public static void main(String[] args) { int[] arr = new int[]{5, 4, 9, 8, 7, 6, 0, 1, 3, 2}; /* * 堆排序必须要先把数组变成堆结构,这样收尾交换后,只有头结点不符合堆结构,调整头结点和交换后的那个子节点树即可 * 这里由最后一个非叶子节点向上排 */ .

2020-08-22 10:06:26 111

原创 mybatis-spring源码分析(有图解)

springboot所有的中间件配置都是从 xxxAutoConfiguration开始的。mybatis也不例外。MybatisAutoConfiguration最重要的3个方法接下来按照执行顺序,逐一讲解一、MapperScannerRegistrarNotFoundConfiguration这个类不一定会执行,主要取决于1、那么这个bean什么时候会有,什么时候会没有呢?这取决于你用什么方式扫描方式。我们通常有2种方式声明mapper: ①在启动类添加@Mappe..

2020-07-24 19:04:33 544

原创 lambda表达式中使用函数式接口

函数式接口:lambda表达式调用函数式接口有如下几种方法:一、匿名内部类二、-> 方式没有参数时候可以使用 () -> {},当参数只有一个时候()可以省略,当处理了只有一行时候{}可以省略三、:: 方式①类名::静态方法②对象::普通方法③类名::new④类名::普通方法这个最特殊!第一个特殊点,其他调用时候参数个数必须一致,但是这个参数要比定义的接口少一个才可以。这句话比较绕,看例子第二个特殊点,如果加上泛型

2020-07-20 22:54:22 467

原创 lombok的@EqualsAndHashcode注解

有时候我们在实体类上面会使用@Data注解,这个注解带了@EqualsAndHashcode注解。一、用法①of 用来指明你要用什么字段来重写equals和hashcode(具体怎么重写看下文)②callSuper 这个选项只能用在有父类情况下,如上图如果没有People那么会报错。这个选项意思就是是否包含父类属性。默认是false那么上文中这样设置,new了2个user,不管是equals还是hashcode那么他们都说是一样的二、lombok是怎么重写equals和hashcod

2020-05-22 18:39:43 6926

原创 nextkey-lock出现条件

Next-key lock行锁 + gap锁。1、没有设置索引或者没有命中索引,全表锁(x锁 + gap锁)2、命中非唯一索引,gap锁3、命中唯一索引,x锁

2020-04-28 17:08:00 357

原创 springbean生命周期以及循环依赖

生命周期注:这篇博文不会每一个方法都细讲,因为主要要说的是生命周期和循环依赖,与这2个主脉络无关的会直接过。一、先扫描包,把类封装成一个beandefinition并且放到beandefinationMap和beandefinitionName里,这一步是在refresh方法的第五步完成的。我看很多博客写生命周期直接从refresh的第十一步开始,但是我觉得beandefinition也算...

2020-02-06 18:44:31 514

原创 springboot Log4jLoggerFactory StackOverflowError

springboot启动时候有可能会报log4j的栈溢出,目前很多网站上面的回答都是具体冲突是log4j-slf4j-impl-2.10.0.jar和log4j-to-slf4j-2.10.0.jar,然后给出的方案如下:<dependency> <groupId>org.springframework.boot</groupId>...

2020-02-04 12:47:14 1293

原创 JVM相关——内存模型以及GC

一、jvm内存模型(注意与JMM——java内存模型区别)在1.7和1.8有了些许改变盗了一张图(1.8)原来的永久代消息,取而代之是元数据区,元数据区也是方法区的一个实现。从目前多方面资料看下来,jvm内存模型还是分为2大块,一个是运行时数据区分为堆、栈、本地栈、计数器,另一个是本地内存(native memry)分为元数据区和直接内存。元数据区没有大小限制,最大就是你物理内存大...

2020-01-30 22:48:20 141

原创 强软弱虚引用以及threadlocal

又是一个被讲烂的东西,但是我还是总结一下,日后也可以自己看。一、强引用A a = new A(); a是强引用,new A();是对象。我们99%都是用这样形式,不多说,不举例。二、软引用软引用是说当内存不足时,也就是快oom之前,它会去把只有软引用引用的对象删除。例子如下:结果如下:三、弱引用弱引用是说当第一次GC时候,删除只有弱引用引用的对象。例子如下:...

2020-01-29 16:59:09 555

原创 Springboot启动原理(一)

第一节讲@SpringBootApplication注解一、@SpringBootConfiguration就一个@configuration注解二、@EnableAutoConfiguration①@AutoConfigurationPackage 先看这个注解,就Import一个类(import作用就是把指定的类加到容器中去)AutoConfigurati...

2019-11-01 16:00:10 132

原创 java实现lru

网上说了很多linkhashmap的实现,但是我觉得还是不要用jdk的工具,自己用最原始的方式实现才更有利于理解。public class Lru { private static final int MAX_NUM = 3; //用来记录节点,使得遍历链表复杂度降低到O(1) private static ConcurrentHashMap<String, L...

2019-10-28 14:29:24 93

原创 spring拓展执行时机

这是一个被人讲烂了的东西,但是我还是会更全面地介绍,并且提出一些坑一、整体流程①BeanFactoryPostProcessor(这个严格来说不是bean生命周期,只是他会在容器初始化完会调用,这里提及,主要为了说明集中后置处理器顺序)②bean实例化(调用构造方法进行实例化,放进三级缓存)③依赖注入④调用各类aware接口(aware接口作用:就是让实现接口的类可以获取容器里...

2019-10-10 14:28:57 249 2

原创 Springboot启动原理(二)

一、启动方法二、进入run方法,跟踪下去发现他先调用一个初始化方法initialize①sources 就是你的启动对象②deduceWebEnvironment()判断是否是web环境,原理就是判断如下的两个类是否存在,存在就是web环境③getSpringFactoriesInstances方法在springboot里大量使用,他的作用是从spring的autoco...

2019-09-18 17:43:07 138

原创 maven子项目打包报错

一、现象父级打包可以,用idea工具deploy可以,但是在terminal deploy子项目会报401二、命令mvn clean javadoc:jar source:jar deploy -pl parent/child -am -Ddoclint=none -Dmaven.test.skip=truejavadoc:jar 打包注释source:jar 打包源码-p...

2019-09-04 14:55:44 407

原创 redis&zk分布式锁

本文主要介绍redis分布式锁,要点1、删除时确认锁防止超时误删除锁 2、锁的续签看代码吧public class RedisLock { private static String lockkey = "defalut-lock-key"; private static long locktimeSecond = 30; private static Concu...

2019-08-20 18:11:04 163 1

原创 transmittable-thread-local解析

这玩意我第一次用到是在用springcloud时候,有组员跟我说希望可以用线程池异步执行。本来没啥问题,但是我们希望模块之间传递traceId(方便日志查询),我们做法是把traceid放在threadlocal里,然后feign请求时候再取出来带到下一个模块去,然后就出现问题了,最后用transmittable-thread-local解决了。一、源码解析点开TransmittableT...

2019-08-09 18:34:40 1387

原创 Guava Ratelimit源码分析以及仿造优化版本

今天介绍Guava的限流RateLimit,主要介绍2个,一个是源码分析,一个是仿造他的原理写一个优化版本。一、源码分析首先我个人认为RateLimit的设计思想很好很优秀,但是写的有点瑕疵,后面我会说到。①create方法第一个参数是Guava的秒表工具用来计时的,第二个参数是你输入的,也就是每秒生成的令牌数。SmoothBursty是RateLimit的子类,看看他的构造方...

2019-07-30 16:56:53 244

原创 synchronized和lock全面详细讲解

synchronized和lock应该是最常用的锁,今天讲这2个原理和比较。我不粘贴也不摘抄,完全是按我自己理解来说,努力做到大白话。一、synchronized原理说原理之前先说synchronized4个状态,因为不同状态的实现原理不同。锁的状态分为无锁->偏向锁->轻量级锁->重量级锁①无锁状态初始化时候状态②偏向锁当只有一个线程进入synchron...

2019-07-19 16:14:31 506

原创 UnsupportedOperationException异常分析

直接先说结论:1不会报错,2、3都会报UnsupportedOperationException错源码分析:①先看看ArrayList的add方法的原理看上去很简单,就是数组赋值,但是注意这个ArrayList的包名:java.util.ArrayList(这个就是引发问题的核心区别)②再看看singletonLIst的add方法原理实例化singletonLI...

2019-07-11 12:11:48 465

原创 阿里sentinel分析

一、这是什么?可以做什么?sentinel可以对接口、系统提供限流,熔断降级,系统保护等功能的一个工具。二、跟网关、hystrix区别网关区别:网关虽然也可以做到限流,但是只是做到client到server的限流,我们服务一般是由一条链路组成,链路之间无法限流,也无法做到熔断等功能。hystrix区别:没啥区别,真要看区别可以百度去。不过我之前使用刺猬感觉就一点不如sentinel...

2019-04-07 19:15:13 1757 1

原创 zuul源码解析

zuul——springcloud的网关。如果看过我之前的博客,可以知道feign的坑是比较多的,但是网关这块做的是比较好的,不管是性能还是灵活性。一、网关的作用:       ①路由       ②利用filter可以实现限流(也可以使用ratelimit),鉴权,验签,黑白名单,对请求处理等等。二、zuul源码及其工作流程:我们首先从开启网关注解进行跟踪——@EnableZ...

2018-10-06 16:46:20 599

原创 Feign源码解析

首先我要说的是springcloud没有rpc,这就涉及rpc和微服务的区别。springcloud的模块通信工具feign跟httpclient和okhttp是一样的东西,都是对http请求封装的工具,其实feign可以选择httpclient或者okhttp作为底层实现(修改配置即可)。一、Feign的作用:       ①封装http请求,使开发人员对发送请求的过程无感知,给人一种伪...

2018-10-04 17:16:12 2181

原创 ThreadLocal和InheritableThreadLocal解析

一、两者区别:    ThreadLocal:为每一个线程创建一个副本,每个副本线程隔离。但是他不支持继承。    InheritableThreadLocal:支持继承。这里的继承不是extends,是指线程的继承。也就是说新起一个线程可以拥有老线程的数据。二、原理:    这里要先说另一个概念ThreadLocalMap。他和普通map差不多,也是key-value结构,key为threadl...

2018-07-05 14:57:35 1353

原创 Eureka源码解析与配置

    Eureka只要分为2部分,一个server,一个是client(包含生产者和消费者)。    Eureka client:       ①DiscoveryClient接口定义了发现服务的方法,EurekaDiscoveryClient是它的实现。EurekaDiscoveryClient引用EurekaClient接口,DiscoveryClient类是EurekaClient实现。 ...

2018-07-01 16:54:23 854

原创 携程apollo配置中心介绍及安装

    分布式配置中心有很多,springcloud的config、百度的disconfig、携程的apollo、淘宝的diamond。由于携程的apollo极少的侵入性,以及面对springcloud开发,所以我项目技术选型最终定为apollo。 一、携程apollo优点:    ①支持配置热更新,而且不需要想springcloud那样需要消息总线来回调通知。    ②对于接入项目,只需要引cl...

2018-03-16 16:59:04 9453 1

原创 封装springboot基础框架(含demo)

    写此篇博文目的有2个:        一、我想做一个最小化框架,包括配置、拦截器,工具包等等都一应具备,使开发可以直接开始编写业务代码,所以我的demo的名字叫做springboot-base。        二、这也是为了以后介绍springcloud做的一个铺垫。    该框架所有设置均来自本人工作实际开发经验总结出来的。好,废话不多说,我们开始吧!一、springboot介绍    ...

2018-03-16 15:04:28 2658

空空如也

空空如也

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

TA关注的人

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