自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 gradlew test 失败

在idea内执行./gradlew test,发现如下报错:google了一堆,说要用groovy,可是我没有用groovy,以前也是正常启动的。后来无意发现,有人说gradle版本和jdk版本有对应关系。检查了下我的gradle版本都是4或者5,但是jdk版本是17,很明显不符合版本关系。通过执行命令,发现我是有jdk8的。在~/.bash_profile里面设置jdk相关变量后,使得默认版本是jdk8即可。具体步骤:此时,再执行./gradlew test一切正常。

2023-06-15 10:47:35 653

原创 本地怎么画最简单的监控图

windows怎么画最简单的监控图

2023-01-20 11:47:43 2502

原创 解决IDEA 无法下载sqlite驱动

1.直接在任意项目里面引入sqlite-jdbc的依赖,也就是通过依赖仓库下载jdbc的jar包,如maven则在pom加上依赖,再刷新下maven。2.去本地仓库找到刚刚下载好的sqlite-jdbc的依赖,确定有依赖后再往下执行。3.去idea里面,设置sqlite-jdbc的依赖的地址。

2022-11-16 10:18:33 3230 3

原创 计算机网络——网络层

普通电信不是能做到可靠传输吗,为什么需要有计算机网络?计算机网络应用场景是灵活的,无连接(不用提前建立连接预留所有资源),多对多,并不是完全需要可靠交付。网络交付类型?1.直接交付:不要通过任何路由器,直接能在本机路由表找到目的主机,直接将IP数据报交付的场景。2.间接交付:需要通过路由器,在路由器的路由表中找到目的主机,进行转发IP数据报的场景。IPV4中IP地址分类?IP地址由32位构成,由网络号+(子网)+主机号组成。在3级分类中,IP地址可分为 ABCDE五类地址。A类首部为0,网

2021-12-11 15:58:48 1897

原创 Spring创建及使用切面过程

文章目录AspectJ和Spring aopSpring创建切面创建入口1.普通场景代理1-c.为AspectJ创建对应的advisorc-I.先找到使用了@Aspect注解的类或者使用ajc编译的类c-II.创建普通Advisor及IntroductionAdvisor2.再找出匹配上的切面3.看看是不是需要其他辅助切面【AspectJ】2.根据名字代理切面执行代理执行代理的入口执行切面代理顺序拼接原理AspectJAroundAdviceMethodBeforeAdviceInterceptorAspe

2021-09-10 18:06:46 776

原创 Lettuce-并发操作大key导致OOM

并发操作大key(1M)导致OOM场景:100个并发线程同时发出100个请求,请求中涉及set,get,expire操作,设置最大堆外内存为100M分析:在测试过程中,发现io.netty.util.internal.PlatformDependent#DIRECT_MEMORY_COUNTER的值在高并发下突然变多,可是又没发现泄露,所以最后debug发现可能是flush的环节有问题,于是在flush的时候直接返回了(红框处)。原因是因为socket缓冲区不够用了,所以没有真正的flush掉,相应

2021-09-03 15:37:04 710

原创 Netty内存分配

文章目录基本概念PooledByteBufAllocatornewDirectBufferPoolThreadCacheinitCachePoolArenaPoolChunkListPoolChunkmemoryMapdepthMapsubpagesPoolSubpagebitmap分配原理★遵循的原则PoolThreadCache分配内存PoolChunk里面分配内存allocateallocateRunallocateNodeallocateSubpagePoolSubpage#allocate回收原理

2021-08-10 16:23:10 839

原创 Spring切面笔记

1.在创建普通bean之前,会先创建postprocessor2.一般会先触发创建advisor,在创建advisor时,会先实例化factory(声明或者创建advisor的类),所以比如配置类有定义advisor的beanMethod,就会导致这个configuration先生成实例、注入属性(populate)、注入到spring中,最后再创建advisor...

2021-06-09 20:17:49 84

原创 lettuce学习笔记

文章目录Lettuce读写命令流程看门狗重连机制连接正常时的有序性连接异常时的乱序现象看门狗重连看门狗配置注意事项PUBSUB重连OOM不宜创建过多连接切记使用后关闭RedisClient丢包、超时,不会直接从stack移除命令服务端下线,会清空stackCancelException如果是阻塞式命令或者multi,不建议共享连接。Lettuce是一个基于NIO的Redis客户端,可以使用较少的统一管理的IO线程处理全部的数据。Lettuce提供了同步,异步和响应式命令。Lettuce读写命令流程

2021-06-09 18:39:35 3591 5

原创 TransmittableThreadLocal正确使用方式

TransmittableThreadLocal为什么没生效ThreadLocal原理TransmittableThreadLocal原理TransmittableThreadLocal正确使用方式

2021-06-09 10:52:34 7680

原创 Swagger文档无法生成部分实体类

原因低版本的spring-web(小于5.1.0-RELEASE), HandlerMethodParameter没有重写getParameterAnnotations方法,导致无法向上层解析参数的注解信息。案例api定义如下:@Api( value = "测试的Api", tags = {"TApi"})@RequestMapping({"/tApi"})public interface TApi { @ApiOperation( value = "测

2021-03-20 22:34:42 617

原创 《java并发编程的艺术》摘要

什么时候锁总线而不是锁内存首先为我们知道锁总线,会导致所有通过总线执行的操作都会锁定,导致资源消耗太大,所以锁住单个内存,会更加高效。1.当需要跨多个缓存行或者操作的数据不被缓存则处理器内部时2.不支持缓存锁定的处理器。例如:intel486和pentinum处理器。volatile的实现原理1.lock前缀指令会引起处理器缓存回写到内存。这个过程最终是通过缓存锁定,即锁住内存区域的缓存,并回写到内存实现的。2.一个处理器的缓存回写到内存会导致其他处理器的缓存无效。因为处理器会通过嗅探技术保证它

2021-02-15 13:01:45 173

原创 Object的hashCode返回值会重复吗

首先,看看Object的hashCode注释吧。根据上图注释来解释,红框内容说明hashCode返回值与对象内存地址有一定关系。但是看看open-jdk源码就会发现,hashCode可不这么简单。static inline intptr_t get_next_hash(Thread * Self, oop obj) { intptr_t value = 0 ; if (hashCode == 0) { // This form uses an unguarded global Par

2020-11-10 10:55:02 2246 2

原创 linux模拟丢包

1.下载丢包工具包https://github.com/chaosblade-io/chaosblade/releases2.丢包和取消丢包使得7006和7008两个端口都100%丢包,执行如下命令./blade create network loss --percent 100 --interface eth0 --local-port 7006,7008执行成功后,会返回如下结果:{"code":200,"success":true,"result":"e3e4aea09b80939b

2020-10-29 19:08:36 476

原创 Resilience4j熔断流程总结

概述:1.Resilience4j主要是通过熔断注册器CircuitBreakerRegistry,根据自定义的配置信息创建一个熔断器。2.在业务使用熔断器过程中,CircuitBreaker使用装饰模式,执行完业务后,根据业务执行成功与否来触发CircuitBreakerState的onSuccess/onError方法。3.在onSuccess/onError方法中会通过FixedSizeSlidingWindowMetrics来记录当前的请求状况(失败次数,请求总次数等信息)—>然后又根

2020-09-24 19:46:37 904

原创 HyperLogLog学习总结

每次扔硬币的结果记录到对应indexbit,反面为0,正面为1,则最低位的1所在的index为maxIndex,此时可推出,需要扔出正面的次数,为2的maxIndex次方次。因为16位bit作为桶的下标,故而有2的16次方即16384个桶,由于生下来的50位作为存储数据的流,故而数据流中低位1出现的index至多为50,也就是不超过2^6即64,所以用6bit就能标识出首次出现1的位置,这就是每个桶为6bit大小了。...

2020-09-12 14:44:13 265

原创 研究dlmalloc和dlfree算法

一.背景知识内存模型我理解的是,在内存里面会划分很多个segment,每个segment有对应的state(存储bins,dv,top等重要全局信息,便于后续分配内存块chunk/treeChunk),base,size,next,sflags属性,包含了top chunk,chunk,tree chunk内存块。state下图中,state比较重要的属性是橙色背景的。chunk和tree_chunktree_chunk仅比chunk多child和parent属性。smallBins数

2020-08-20 19:06:52 629

原创 函数式接口,lambda表达式,方法引用

函数式接口是指只拥有一个抽象函数。带有@FunctionalInterface标注的接口,编译时就需要完全符合函数式接口的定义。与函数式接口密切相连的便是lambda表达式。函数式接口1.只拥有一个抽象方法。2.接口可以含有default-method。即使用default修饰的方法,该方法是具有方法体的。3.接口还可以含有static方法,以上接口被实现时,内部的default方法和static方法都会被继承,也可以进行重写。jdk里面的function包中,含有许多函数式接口,接下来就介绍一

2020-05-20 23:21:00 224

原创 云服务器搭建redis集群的问题收集

起因:去年在腾讯云上搭建了一个redis集群,现在很久没有用了,突然使用的时候,发现集群不可用了(重启节点,发现节点不能加入集群)。处理:1.按照老办法去杀死节点,再重新启动节点,发现不可用。2.怀疑自己配置等有问题,也不好查找,就直接重启了服务器…3.重新搭建redis集群。(这时候,云服务什么都没有配置)4.解决各种问题。文章目录waiting for the cluster to join的无限等待不能在创建集群(cluster create)时使用外网ip为什么kill或者shu.

2020-05-14 10:09:17 238

原创 内部类总结

内部类:一种在类内定义的类,具有很多小派别如:静态嵌套类、非静态内部类(成员类)、局部类、匿名类。文章目录静态嵌套类非静态内部类(成员类)局部类匿名类思考题为什么要有内部类呢?为什么局部类和匿名类只能访问final局部变量?为什么说使用内部类可能造成内存泄漏?静态嵌套类带有static修饰符的类。它不依赖于外部类,是独立的类(不持有外部类的引用)可以直接使用,注意其只能访问外部类的静态变量,故而,个人不将其判定为成员类。示例:外部类Outer+静态嵌套类StaticInnerpublic c.

2020-05-10 22:48:08 174

原创 一定要细心 org.apache.ibatis.binding.BindingException

出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found),一般都是xml和java文件的包名不一致,或者namespace里面的路径不一致,或者mapper没有该方法。今天反复找错,还是找不到,原因竟是,自己创建mapper.xml文件时,没有一步一步创建文件夹,最终发现“aa.bb.cc”...

2020-04-01 18:33:52 108

原创 补漏 redis 知识

1.currentEpoch集群初始时为0,当发送其他事件时,会发生增1;当接收事件时,若消息的currentEpoch更大,则替换成更大的currentEpoch。2.slave rank主从同步,会有一个rank记录同步信息,rank越小,表示同步的数据越新。3.节点重新加入到集群如果之前的slot被分配掉了,之前的slot信息全部清空,找出之前最大的slot所在的组,与之绑定为sl...

2020-03-31 22:13:00 172

原创 如何销毁异常jedis

文章目录1.设置testOnBorrow为true2.设置testOnReturn为true3.returnBrokenResource4.联合使用quit,disconnect,close方法1.设置testOnBorrow为true该法是在借用jedis时进行检测,如下源码public T borrowObject(final long borrowMaxWaitMillis) thro...

2020-03-16 22:42:59 550

原创 计算 java对象 内存占用大小

前言作为小白,关于Java对象的大小还停留在 8种基本类型和其包装类占用几个字节的阶段。最近,突然发现Java对象的内存大小似乎不这么简单,就想暂且写点东西,记录一下新知识。Java对象内存结构总体上,提到java对象内存大小,主要分为 数组类型和非数组类型 两大类来探究。就如同下图一样,所有的java对象一般包括 对象头(Header),实例数据(Instance data),对齐...

2020-02-20 18:44:01 2010

原创 复习反射

文章目录前言反射的使用场景反射中重要的类及其重要方法ClassMethodField反射原理获取类实例源码分析forNamenewInstance前言自我理解,反射是动态(运行期)的获取及使用类的一种方式。反射的使用场景个人总结为3种场景:在编译期时,无法得知使用哪个确切的类。想要打破权限,比如调用私有方法。想要获取关于更多该类,其方法或其属性的更多信息时,比如使用了什么注解。...

2020-02-17 17:13:56 98

原创 正则表达式学习

文章目录零宽度断言(?= X )(?! X )(?<= X )(?!= X )模式修正符ixms捕获组与非捕获组捕获组非捕获组零宽度断言主要包括四种:(?= X ),(?! X ),(?<= X ),(?<! X )。前两种是位于表达式右侧,后两种是位于表达式左侧。带“=”的是匹配模式,带“!"是非匹配模式。(?= X ) String testStr = ...

2020-02-08 17:29:51 73

原创 同时使用@JsonProperty和@ApiModelProperty时,在接口文档上属性名该是啥???

文章目录场景collectAll_addFieldsfindNameForDeserialization总结场景由于想在接口文档上显示属性的描述,于是使用了如下代码@JsonProperty(value = "aaBB")@ApiModelProperty(value = "描述内容")private Integer cc;可是打开接口文档一看,原来的cc属性不见了,只剩下aaBB。...

2020-01-20 18:48:12 3145 4

原创 apollo配置变更原理

普通情况下,使用 实现apollo的监听器ConfigChangeListener,通过onChange方法来实时获取配置。但是,如果对配置变化的时效性要求不高,只是想在用到配置的时候,使用新配置的话,可以不实现监听器,直接从environment里面获取配置。文章目录apollo机制图解代码分析主要流程创建RemoteConfigRepository首次同步apollo开启定时刷新配置...

2020-01-17 17:32:37 3311 1

原创 @Aspect结合@Order能建立具有最高优先级的切面?

文章目录疑问探究原因总结疑问一般情况下,比如说@around接口就只有一个参数ProceedingJoinPoint,是不会有问题的(只是侥幸),但是使用多个参数时,就会抛出异常。如下,around方法有两个参数时,程序抛异常:@Aspect@Order(Ordered.HIGHEST_PRECEDENCE)public class TestOrderAspect { @Po...

2020-01-16 18:18:52 1543

原创 使用了 @ConditionalOnClass 却仍然报找不到类的错

文章目录前言我的错误经历分析总结经验前言@ConditionalOnClass的作用是当有该类时,才符合条件,继续执行其他逻辑。@ConditionalOnClass包含两个属性:value和namevalue是class数组,name是string数组。当一个类不确定是否在classpath当中时,建议使用name属性,就算找不到该类时,也不会报错。我的错误经历概况就是,我使用了...

2020-01-14 17:10:39 6381

原创 Spring与SpringBoot对Environment的初始化过程事件发布对比

概述:Spring在初始化environment过程中没有发布有关environment的事件,而SpringBoot会在准备好environment的时候就发布一个applicationEnvPreparedEnvent。但Spring可以发布ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent、ContextClosedE...

2020-01-07 09:36:15 789

原创 Jedis的创建和归还过程

文章目录预备流程梳理获取Jedis实例GenericObjectPool.borrowObject(final long borrowMaxWaitMillis)创建实例GenericObjectPool.create() :其中 createCount记录已经创建的数量,makeObjectCountLock表示正在创建的数量归还Jedis实例预备流程梳理新建Jedis—>新建Bin...

2019-12-31 11:44:23 357

原创 记录连接虚拟机上的redis过程

1.官方下载好redis的tar包2.使用 rz 上传至虚拟机3.使用 tar-zxvf xxx.tar.gz 解压4.在src路径下,使用 make PREFIX=/usr/local/redis install 安装reids4.修改redis.conf:注释掉 bind 127.0.0.1若有 protected mode 则设置为no 否则之后会报,如下错误5...

2019-12-30 13:35:32 279

原创 探究caffeine如何执行添加,更新,淘汰缓存

文章目录前言正文putAddTaskUpdateTaskPerformCleanupTask前言1.caffeine结合使用LRU和LFU来管理缓存。它有3个AccessOrderDeque来存储缓存,分别是accessOrderEdenDeque,accessOrderProbationDeque,accessOrderProtectedDeque。三者占比分别是1%,99%*20%,99...

2019-11-17 18:28:03 4134

原创 解决 阿里云 搭建redis集群 ip变成内网

正常搭建集群后,使用时发现ip变成内网。解决方案:1.杀死节点(不是停止集群,否则不生效)2.找到所有节点的nodes.conf文件,把内网地址改成你的ip3.重启节点 ./redis-server redis.conf...

2019-11-12 16:26:22 2370 3

原创 linux搭建redis集群

1.下载安装redishttps://redis.io/download 官网下载上传(rz)到linux,解压(tar -zxvf )2.新建集群文件(三主三从)这里我建立了7001-7009的文件夹,均只放一个名为redis.conf的文件内容模板如下:port 端口号cluster-enabled yesmaxmemory 100mbmaxmemory-policy all...

2019-11-12 16:12:03 132

原创 解决idea中CreateProcess error=206, 文件名或扩展名太长

看过很多教程,千篇一律,没能解决。最后,在gradle文件里面加入以下配置,即可解决。buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.github.vis...

2019-11-12 15:40:31 7008 2

原创 springfox相关记录

1.springboot为1.5.13版本时,springfox为2.6.0,难以生成正确的swagger文档,升级springfox为2.7.0即可2.@ApiImplicitParam的dataType,需要是小写开头,不能是大写!!!想要实现返回值是数组或者list,加上allowMultiple=true即可。3.本地项目生成swagger-ui页面,只要3个配置。启动类加@Enabl...

2019-11-04 10:47:27 201

原创 使用swagger-codegen生成代码,始终删除不了gradle-wrapper.jar

最近依赖swagger-codegen生成java客户端代码,发现始终删除不了gradle-wrapper.jar。一开始以为是自己压缩过程流没有关闭,发现是源码有问题???

2019-09-19 09:27:03 285

原创 swagger-codegen 生成代码原理

文章目录概述:一.命令行入口二.web调用三.总指挥官1.生成models2.生成apis3.生成支持文件概述:swagger-codegen可以通过命令行生成代码(v2.1.5 /Swagger格式),也可以通过web服务生成代码(v3.0.11/OpenAPI格式)。两者只是入口不一样,但实际都是调用的DefaultGenerator.generate()来生成代码。在整个生成代码的过程...

2019-09-18 16:15:47 4151 1

空空如也

空空如也

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

TA关注的人

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