自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 orika1.5.1版本的map死循环问题

问题现象在测试环境看到机器cpu报警,且cpu是突然升起来并且一直稳定跑满在百分之90左右。观察流量和接口的qps,并没有突然增加或者有突刺。问题排查上机器top -H -p pid + jstack观察之后发现很多http线程卡在orika的一个weakHashMap的get方法中:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L1YgzDzP-1590335021764)(https://zlj1217-blog-image.oss-cn-hongkong.ali

2020-05-24 23:44:26 88

原创 dubbofilter的spi文件路径问题

自定义dubbofilter在使用dubbo框架的时候可以使用filter去实现一些拦截功能和调整拦截顺序,在每次调用的过程中,Filter的拦截都会被执行。当然除了Dubbo默认的filter,用户也可以自定义dubbo filter来实现对应的功能。这里记录一个遇到的spi文件路径问题。问题现象在测试自定义一个dubbo filter之后,发现并没有生效。对应的filter代码:@Activate(group = Constants.PROVIDER, order = Integer.MIN_

2020-05-20 23:39:43 83

原创 类加载系列之理解类加载

类的阶段在Java代码中,类型的加载、连接和初始化都是在程序运行期完成的。类有以下几个阶段:类加载:即查找并加载类的二进制数据类连接:验证:确保被加载类的正确性准备:为类的静态变量分配内存,并将其初始化为默认值解析:类的符号引用转换为直接引用类初始化:为类的静态变量赋予正确的初始值,运行static快中的代码。类使用类卸载类加载类加载:类的加载是指将类的.class...

2020-04-14 00:01:11 45

原创 HashMap拾遗(一)
原力计划

开始HashMap是在开发工作中经常使用的集合类之一,熟悉其源码应该是基本要求。这篇文章对jdk1.8版本中的HashMap的一些常用方法的源码进行个记录。ps:这篇文章没有对其中的树化进行深究,比如提供的TreeNode内部类的结构和在扩容、Hash碰撞的时候的静态方法,之后有时间再研究下。源码分析1.1定义的变量常量 /** * The default initia...

2020-04-11 14:03:57 90

原创 Comparator接口在java8中的优化

开始Comparator接口或者Comparable接口在日常开发工作中是经常用到的,用于比较一组数据或者对象,在java8之后,也可以看到在Comparator接口中加入了一些default方法和static方法,这里做一个简单说明。Comparator接口和Comparable接口这两个接口首先要做一个简单区别。Comparable接口* Lists (and arrays) of...

2020-03-23 00:46:00 333

原创 栈和队列相互实现

背景一道很经典的数据结构的题目实现。栈:一般是后进先出的顺序,可以看下java中的Stack这个类。队列:一般是先进先出的顺序,但是java中的Queue接口中也写了注释,没有要求是必须严格的先进先出,比如java中也有优先级队列、双端队列Deque。代码实现在代码的注释中有描述对应的思路,这里不去赘述两个栈实现队列/** * Created by zlj on 2020/3...

2020-03-22 22:13:52 74

原创 windows下typora图床(附带阿里云教程)

typoraTypora是大家写博客、记笔记、写文档等日常使用场景下都会使用的一个MarkDown语法的软件,对于熟悉markdown语法和喜欢markdown简洁性的朋友来说,typora是不可或缺的工具。但是,对于图片处理,我们需要图床去将我们的本地图片(截图、流程图之类的)上传到第三方的对象存储上(当然自己的服务器也是可以的)。本文基于一个typora在windows下的小插件windo...

2019-12-10 21:36:33 2076 8

原创 jvm参数分类

JVM参数的分类常用的JVM参数可以大致的分为三类,下边简单的将JVM的参数做一个分类,作为一个JVM参数的简单总结。JVM标准参数JVM的标准参数是指的在各个JDK版本中都比较稳定的,不会变动的参数,一般是针对jdk全局的参数。比如-help-server -client-version -showversion-cp -classpath这种参数称之为标准参数。JVM...

2019-08-07 00:48:28 640

原创 @DepnedsOn解决一个spring启动问题

前言最近遇到了一个启动失败的问题,原因是在bean初始化完成之后的钩子方法中使用获取容器中bean的工具类,(对应工具类之前的一篇博客 获取springbean)。分析这里具体的场景是我想实现一个bean在钩子方法中往一个策略map中注册自己作为一个策略使用,但是在启动的时候报错:第33行代码如下: public static <T> T getBean(@NotNull ...

2019-08-04 18:52:53 212

原创 一道题的思考

题目在小马哥的每日一问中看到了一道这个题:输出什么?。当时看错了在static块中的代码,就毫不意外的答错了= =,这个题其实没有看起来那么简单,这里去记录下这个题。小马哥这个每日一题的系列有很多比较"坑"的题,一般第一遍都比较难答对,推荐每天没事的时候可以去思否上看看这个题,也算拾遗一些基础~再来看看这个问题的代码:public class Lazy { private sta...

2019-08-04 18:16:08 151

原创 java枚举拾遗

前言java枚举是在开发过程中用的最多的类,这里对java之前的枚举常量类和枚举做了一个分析,并且对枚举相关知识拾遗。枚举类在出现枚举之前,通常是一个final类去表示"可枚举"这个概念,比如下面这个列举数字的枚举类/** * 模拟枚举类 (枚举类:在enum出现之前的表达 可枚举的含义的类) * 通常 private 构造函数 * final class * private st...

2019-06-14 17:42:11 89

原创 redis命令拾遗(字符串操作)

前言前一段时间一直在忙,拉下了一些知识的学习,现在努力追赶修补中。= =当然也有一些新的知识的学习,但其实更多的是关于一些知识的拾遗。之前在工作当中发现对redis命令掌握的还不是很完善,所以想花比较少的碎片时间去写一下redis常用命令的拾遗。redis命令对这些命令的拾遗记录是在网站:http://redisdoc.com上进行学习的,很简单明了,推荐给大家进行学习拾遗。这里只是把日...

2019-05-20 01:12:18 53

原创 dubbo基础(五)——dubbo接口的特性设置

dubbo的一些配置之前的文章中写了dubbo的初步使用和dubbo和springboot的使用整合,这里来总结下dubbo框架暴露接口常用的配置项。启动时检查dubbo提供了在服务启动时的一些检查机制,这个机制包括consumer端对服务提供者的检查、dubbo对注册中心的检查。可以看下官方文档中dubbo:reference标签中关于check属性的配置。可以看到是默认在启动时检查...

2019-04-01 00:56:03 227

原创 dubbo基础(四)——dubbo的配置加载

dubbo的配置在之前的文章中配置了spring boot和dubbo框架的使用(传送门:springboot使用dubbo框架),看到了把dubbo相关的配置配置在了配置文件中。这里官方文档中也去讲解了对应的dubbo配置的加载。dubbo的配置加载流程首先要知道dubbo的配置是在应用启动阶段,并且这里的配置包括应用配置、注册中心配置、服务配置等。dubbo的配置来源Jvm Sy...

2019-03-21 23:40:00 649

原创 dubbo基础(三)——springboot使用dubbo框架

dubbo集成spring bootspring boot肯定是现在用的做多的开发框架,而dubbo框架是最流行的rpc框架之一,整合springboot和dubbo的使用很有必要。本篇博客还是根据上一篇中的dubbo简单demo的简单示例来整合spring boot。(上一篇传送门:dubbo-demo)依赖因为是springboot项目,dubbo官方也提供了dubbo的starter...

2019-03-20 22:52:01 185

原创 dubbo基础(二)——dubbo简单demo

get start在上一篇中介绍了dubbo诞生的背景和框架的特性:dubbo概念和基本概念,这里就来一个dubbo的简单使用小体验。dubbo注册中心安装dubbo中的官方文档的快速启动使用的是multicast广播注册中心暴露服务地址,这里选择的是使用zk作为注册中心,因为zk是很多公司作为dubbo注册中心,并且zk也是dubbo官方文档中推荐使用的注册中心。本次是使用的mac上安装...

2019-03-18 23:56:46 119

原创 设计模式——装饰者模式

装饰者模式装饰者模式是java IO流中使用的一个经典模式,本文会简单介绍装饰者模式的原理和解决的问题,并且以一个咖啡demo来演示装饰者模式。装饰者模式的定义装饰者模式遵守的设计原则:开闭原则(类应该支持扩展,而拒绝修改)装饰者模式通过组合的方式扩展对象的特性,这种方式允许我们在任何时候对对象的功能进行扩展甚至是运行时扩展,而若我们用继承来完成对类的扩展只能在编译时实现,可以比较动态地...

2019-03-16 19:29:20 211

原创 一次排查$jacocoData的过程

起因最近在开发过程中,遇到了一个奇怪的现象,在测试环境去利用反射拿一个类的字段时,发现拿到的field数组中多了一个奇怪的变量:$jacocoData,是一个static的boolean数组:很明显jacoco这种统计代码覆盖率不是我定义在一个业务含义的类中,这时考虑到可能是测试环境中对代码覆盖率在编译时对字节码进行了修改,于是去测试环境的机器上看这个jar包。疑惑点在机器上对jar包...

2019-03-11 00:04:44 3701

原创 dubbo基础(一)——dubbo的整体简介

入门dubbo是公司选择rpc框架时首先会去选择的框架,好好了解dubbo框架是一个合格程序员的必经之路。这里作为dubbo的入门篇,把一些概念和官方文档搞清楚一定是最应该开始的步骤。dubbo框架诞生的背景dubbo框架满足的需求dubbo框架的整体架构...

2019-03-06 23:36:59 53

原创 使用telnet测试dubbo接口初使用

背景dubbo接口的测试不像controller的http接口那么容易测试,这里去了解了下使用telnet去测试参数没那么复杂的dubbo接口。正题首先看看一个dubbo接口的代码:public interface ShopAggregateRemoteService { /** * 获取所有产品类型 聚合字段的产品类型范围[软件+有伴服务] * @param...

2019-02-26 00:09:32 1215

原创 《并发编程艺术》中的线程状态

线程的状态线程的状态很早之前就理解过了,最近翻《并发编程艺术》的书时候,看到有个点之前理解的不太对。书中的线程状态分类new 初始状态,线程被构建,但是还没有调用start()方法runnable 运行状态,java中将操作系统中的就绪和运行两种状态笼统称作”运行中“(这里没有网上常见的Running状态)blocked 阻塞状态,表示线程阻塞于锁waiting 等待状态,表示线程进...

2019-02-24 14:54:20 87

原创 并发编程——Thread API

这篇主要介绍Thread API,也是并发编程中的基础Thread一些常用API守护线程守护线程的概念和原理可以见:守护线程和非守护线程守护线程的一个应用:比如在做长连接的时候,需要一个心跳检查线程,这个线程就应该设置为后台线程,这样当整个连接关闭时,也会跟随连接线程消亡。这里可以在一个线程中再创建一个后台线程,来验证上述的这个应用:/** * 这里对后台线程提出一个问...

2019-02-22 01:16:53 95

原创 并发编程——基础拾遗

并发编程基础拾遗在看并发的书或者看并发相关的博客时,会发现一些知识点会遗漏或者之前没有看到,这里去总结一下。创建线程相关main线程我们通常会通过写main方法去创建多个线程,main线程是非守护线程,代表方法的入口。这个时候如果用jconsole去看的话,会发现这时也会启用很多后台线程:比如GC线程、计算引用线程、JMX线程。线程生命周期新建状态可运行状态运行状态阻塞状态...

2019-02-12 01:44:39 79

原创 设计模式——模板方法的一个应用

模板方法模板方法很多情况下代码中的业务都可以抽象出一个模板去解决,这时候经常需要用到模板方法。大家经常接触到的是一些业务方法的抽象模板,比如在计算优惠券的流程当中总是有一定的步骤:(1)先计算该商品是否可以拥有优惠券信息(2)再为该商品绑定优惠券信息(3)最后回调或者通知向下的流程今天要记录的是一个通用服务层的模板方法,包含了前置校验、后置处理(是有点像拦截器= =)、finally操...

2019-02-02 00:47:06 76

原创 设计模式——观察者模式

观察者模式观察者模式也是我们经常会用到的设计模式之一,这里用一个气象站的一些数据变化通知气象板为例去记录一下观察者设计模式,值得一提的是java中提供了观察者模式的接口和类。demo一个气象站通知气象板的小demo,气象站提供温度、气压、湿度的数据给一些气象板提供数据,当气象站发生变化了之后,要通知订阅气象站数据的气象板数据变更。一般方案在气温变化的气象站中加入气象板对象,在数据变化时...

2018-12-31 02:25:27 79

原创 深拷贝和浅拷贝

深拷贝与浅拷贝对对象的深拷贝和浅拷贝我们并不陌生。(1)浅拷贝:在浅拷贝中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。简单来说,在浅拷贝中,当对象被复制时只复制它本身和其他包含的值类型的成员变量,而引用类型的成员对象并没有复制。在Java中,通过覆盖O...

2018-12-24 20:37:34 73

原创 java集合类的一些总结——Arrays.asList和Guava操作集合

使用背景总结一下最近项目中使用到集合的两个点,一个是Arrays.asList这个方法使用的坑,另一个是利用Guava的Sets工具类去求并交集。使用总结Arrays.asList的坑先上结论:Arrays.asList这个方法不适用于基本类型:byte,short,int,long,float,double,boolean该方法将数组和列表动态链接起来,当其中一个更新后,另一个也会...

2018-12-16 02:15:39 1420

原创 ClassNotFoundException和NoClassDefFoundError

背景极客时间上《Java核心技术36讲》第二讲中提到了一个问题:ClassNotFoundException和NoClassDefFoundError有什么区别?看到这个问题的时候,第一时间想到的就是一个是受检的异常,而另一个是一个Error,但是其实在真正的项目开发中这两个错误都遇到过,都是关于类或者文件jar包找不到的错误,这里去总结下其中的不同。两者的区别ClassNotFoundE...

2018-12-07 17:00:58 1102

原创 Java36讲总结(一)——Java平台型的理解

背景最近看了一点点极客时间上的《Java核心技术36讲》,打算把一些自己感兴趣或者不知道的点总结到博客中,方便对一些知识有一些整理和拾遗。Java平台性的理解java本身是一种面向对象的语言,有两个特征,一是“write once, run anywhere”,能够非常容易的获取跨平台的能力;另外就是垃圾手机机制,Java通过垃圾收集器(Garbage Collector)回收分配内存。我...

2018-12-02 23:41:26 122

原创 并发编程——并发基础:守护线程和非守护线程

前言最近在复习的时候,发现一个运行线程池拒绝策略demo中的main方法在运行了之后,进程并没有关闭。看了jconsole线程池中的线程都处于waiting状态。这里是跟我设置线程池的线程工厂中的设置线程是否为后台线程有关。后台线程和非后台线程后台线程,也叫守护线程,指的是在程序运行的时候后台提供一种通用服务的线程,比如jvm里垃圾回收线程,这种线程并不属于程序中不可或缺的部分。因此,当所有...

2018-11-27 00:40:58 1166

原创 记一次url参数截断的问题

问题现象在最近的开发过程中要根据一堆id值去删除ES中的数据,就写了一个脚本接口,传入了idList。这里选择的是GET方式的接口,将idList以逗号分隔当做字符串传入当做参数,然后在接口中转换成List类型再对ES进行操作。脚本代码这个接口中的process是为了控制是否真正执行刷数据的逻辑,在一些刷数据的接口中加入这个参数,可以去在真正去刷数据之前,去看看捞出来的数据是否正确,然后再进...

2018-11-25 02:17:22 591

原创 FastJson中的一些用法

FastJson中的一些用法总结fastJson在工作过程中经常用到的一个工具类,之前用到的最多的是在输出日志的时候的对java对象输出序列化之后的json字符串,最近在消费消息端也用到了JsonObject这个类的一些功能,做个简单的FastJson功能类的查漏补缺。JSONObject通过观察fastJson的源码我们可以发现JSONObject是实现了Map&amp;lt;String, Ob...

2018-11-22 00:47:49 384

原创 java8中的LocalDateTime

背景最近在项目中遇到了一些时间进行转化的小需求,比如一个时间添加多少天之后,两个时间的比较之类的。这里要去了解一下java8中的新增的时间API–LocalDateTime。参考博客:一些用法系统时间// now方法获取系统时间LocalDate date = LocalDate.now();// getMonth:英文 getMonthValue : 数字System.out....

2018-11-11 22:17:44 424

原创 spring boot配置jsp

spring-boot中jsp的使用jsp是之前在学习java开发中会学习到的知识,虽然现在公司中虽然使用jsp越来越少,但是spring-boot配置jsp的使用还是应该去记录一下。相关依赖增加这里要加入一些依赖:&amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt; &amp;lt;ar

2018-10-25 00:01:11 3331 2

原创 并发编程——ThreadPoolExecutor源码分析(二)

前言在上一篇中,我们分析了ThreadPoolExecutor中关键变量ctl,这篇我们继续来看ThreadPoolExecutor中的构造函数及其参数。其中参数的相关解释来源于源码中的相关注释。构造函数我们可以看到ThreadPoolExecutor有四个构造函数:他们其实都是调用其中的全参数的构造函数,只不过有一些参数是使用了默认提供的参数。我们可以看一下构造函数:public ...

2018-10-16 09:56:45 254

原创 java8增加的接口中默认方法

前言最近在工作中的一次小修改让自己应用到了java8中的新特性:接口默认方法,这里去简单记录下。在java8之后可以在接口定义方法的实现,成为default方法,类似于Scala中的trait。比如在Iterable接口中新增了foreach默认方法:/** * Performs the given action for each element of the {@code Iterable...

2018-10-11 00:20:45 2649

原创 并发编程——ThreadPoolExecutor源码分析(一)

前言线程池是并发编程中最重要的应用之一,使用线程池可以防止大量的创建和销毁线程的过程,可以节省很多的内存空间,提高程序的响应率和cpu的利用率,并且也可以对线程进行统一管理和监控。这里将分几篇文章介绍一下线程池的源码分析。本篇是分析ThreadPoolExecutor中的ctl变量ctl变量源码中的解释ThreadPoolExecutor中有个字段是ctl,具体来说是对线程池的运行状态和池...

2018-10-05 22:45:54 271

原创 vi命令总结(二)

在vi编辑模式下显示行数在vi编辑模式下可以显示下行数,比如在php调试模式下可以根据相应的行数的代码去打印值调试代码。方法:在vi模式下输入:set nu即可。也可以直接:line number跳转到对应的行数。在vi编辑模式中撤回一个操作在INSERT模式下如果写了一些操作,然后想撤回这个操作,按一下esc之后输入u即可。如果是想撤回刚才那个撤回操作,可以按了esc之后点击Ctrl ...

2018-10-03 08:58:44 82

原创 springboot配置swagger-rest文档

前言swagger是一个很好的restful形式的api文档,可以通过比较小的侵入来提供很好的restful的文档。因为swagger是依赖服务生成的,所以其实是依赖服务的,这也算是它的一个小缺点吧。但是其实如果一个项目习惯去手写文档之后,也是可以的,但是新的项目还是建议去用一些自动生成的文档,省去了很多麻烦。spring boot配置swagger引入swagger依赖&amp;amp;lt;depe...

2018-09-24 16:22:16 945

原创 两个切面的配置

前言之前也学习过validate注解去校验一些参数的必要条件,这回工作中用的时候遇到了一些问题。这里都是使用spring boot框架去做的切面,省去了很多不需要的配置。这里去记录一下。两个切面validate注解这里主要是去使用了hibernate中的注解而去做的切面,之前在博客中写到的整合了两个标准的注解的切面(注意区分下)。看一下切面的代码:@Aspect@Configurat...

2018-09-24 02:27:47 835

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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