自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

问题现象 在测试环境看到机器cpu报警,且cpu是突然升起来并且一直稳定跑满在百分之90左右。观察流量和接口的qps,并没有突然增加或者有突刺。 问题排查 上机器top -H -p pid + jstack观察之后发现很多http线程卡在orika的一个weakHashMap的get方法中: [外...

2020-05-24 23:44:26 41 0

原创 dubbofilter的spi文件路径问题

自定义dubbofilter 在使用dubbo框架的时候可以使用filter去实现一些拦截功能和调整拦截顺序,在每次调用的过程中,Filter的拦截都会被执行。当然除了Dubbo默认的filter,用户也可以自定义dubbo filter来实现对应的功能。这里记录一个遇到的spi文件路径问题。 问...

2020-05-20 23:39:43 36 0

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

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

2020-04-14 00:01:11 27 0

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

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

2020-04-11 14:03:57 56 0

原创 Comparator接口在java8中的优化

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

2020-03-23 00:46:00 121 0

原创 栈和队列相互实现

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

2020-03-22 22:13:52 26 0

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

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

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

原创 jvm参数分类

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

2019-08-07 00:48:28 143 0

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

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

2019-08-04 18:52:53 146 0

原创 一道题的思考

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

2019-08-04 18:16:08 120 0

原创 java枚举拾遗

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

2019-06-14 17:42:11 75 0

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

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

2019-05-20 01:12:18 40 0

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

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

2019-04-01 00:56:03 153 0

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

dubbo的配置 在之前的文章中配置了spring boot和dubbo框架的使用(传送门:springboot使用dubbo框架),看到了把dubbo相关的配置配置在了配置文件中。这里官方文档中也去讲解了对应的dubbo配置的加载。 dubbo的配置加载流程 首先要知道dubbo的配置是在应用...

2019-03-21 23:40:00 451 0

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

dubbo集成spring boot spring boot肯定是现在用的做多的开发框架,而dubbo框架是最流行的rpc框架之一,整合springboot和dubbo的使用很有必要。本篇博客还是根据上一篇中的dubbo简单demo的简单示例来整合spring boot。(上一篇传送门:dubbo...

2019-03-20 22:52:01 161 0

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

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

2019-03-18 23:56:46 86 0

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

装饰者模式 装饰者模式是java IO流中使用的一个经典模式,本文会简单介绍装饰者模式的原理和解决的问题,并且以一个咖啡demo来演示装饰者模式。 装饰者模式的定义 装饰者模式遵守的设计原则:开闭原则(类应该支持扩展,而拒绝修改) 装饰者模式通过组合的方式扩展对象的特性,这种方式允许我们在任何时...

2019-03-16 19:29:20 203 0

原创 一次排查$jacocoData的过程

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

2019-03-11 00:04:44 2569 0

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

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

2019-03-06 23:36:59 42 0

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

背景 dubbo接口的测试不像controller的http接口那么容易测试,这里去了解了下使用telnet去测试参数没那么复杂的dubbo接口。 正题 首先看看一个dubbo接口的代码: public interface ShopAggregateRemoteService { /**...

2019-02-26 00:09:32 911 0

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

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

2019-02-24 14:54:20 82 0

原创 并发编程——Thread API

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

2019-02-22 01:16:53 86 0

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

并发编程基础拾遗 在看并发的书或者看并发相关的博客时,会发现一些知识点会遗漏或者之前没有看到,这里去总结一下。 创建线程相关 main线程 我们通常会通过写main方法去创建多个线程,main线程是非守护线程,代表方法的入口。这个时候如果用jconsole去看的话,会发现这时也会启用很多后台线程...

2019-02-12 01:44:39 72 0

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

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

2019-02-02 00:47:06 62 0

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

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

2018-12-31 02:25:27 73 0

原创 深拷贝和浅拷贝

深拷贝与浅拷贝 对对象的深拷贝和浅拷贝我们并不陌生。 (1)浅拷贝: 在浅拷贝中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。简单来说,在浅拷贝中,当对象被复...

2018-12-24 20:37:34 67 0

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

使用背景 总结一下最近项目中使用到集合的两个点,一个是Arrays.asList这个方法使用的坑,另一个是利用Guava的Sets工具类去求并交集。 使用总结 Arrays.asList的坑 先上结论: Arrays.asList这个方法不适用于基本类型:byte,short,int,long,...

2018-12-16 02:15:39 1105 0

原创 ClassNotFoundException和NoClassDefFoundError

背景 极客时间上《Java核心技术36讲》第二讲中提到了一个问题:ClassNotFoundException和NoClassDefFoundError有什么区别?看到这个问题的时候,第一时间想到的就是一个是受检的异常,而另一个是一个Error,但是其实在真正的项目开发中这两个错误都遇到过,都是关...

2018-12-07 17:00:58 1083 0

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

背景 最近看了一点点极客时间上的《Java核心技术36讲》,打算把一些自己感兴趣或者不知道的点总结到博客中,方便对一些知识有一些整理和拾遗。 Java平台性的理解 java本身是一种面向对象的语言,有两个特征,一是“write once, run anywhere”,能够非常容易的获取跨平台的能力...

2018-12-02 23:41:26 115 0

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

前言 最近在复习的时候,发现一个运行线程池拒绝策略demo中的main方法在运行了之后,进程并没有关闭。看了jconsole线程池中的线程都处于waiting状态。这里是跟我设置线程池的线程工厂中的设置线程是否为后台线程有关。 后台线程和非后台线程 后台线程,也叫守护线程,指的是在程序运行的时候后...

2018-11-27 00:40:58 1111 0

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

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

2018-11-25 02:17:22 432 0

原创 FastJson中的一些用法

FastJson中的一些用法总结 fastJson在工作过程中经常用到的一个工具类,之前用到的最多的是在输出日志的时候的对java对象输出序列化之后的json字符串,最近在消费消息端也用到了JsonObject这个类的一些功能,做个简单的FastJson功能类的查漏补缺。 JSONObject 通...

2018-11-22 00:47:49 322 0

原创 java8中的LocalDateTime

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

2018-11-11 22:17:44 391 0

原创 spring boot配置jsp

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

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

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

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

2018-10-16 09:56:45 243 0

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

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

2018-10-11 00:20:45 2335 0

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

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

2018-10-05 22:45:54 258 0

原创 vi命令总结(二)

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

2018-10-03 08:58:44 70 0

原创 springboot配置swagger-rest文档

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

2018-09-24 16:22:16 790 0

原创 两个切面的配置

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

2018-09-24 02:27:47 643 0

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