自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 netty在dubbo中的应用

netty在dubbo中的应用dubbo的底层通信是利用netty来实现的,出于好奇是如何实现的,把发现的过程记录一下。首先down下来dubbo的源码,里面包含一个模块dubbo-demo,包含了dubbo-demo-provider和dubbo-demo-consumer,provider提供了一个DemoServiceImpl,我们需要启动它,启动时报错,看报错原因是连接不上注册中心...

2018-10-21 16:25:43 10047

原创 BlockingQueue

在项目中有一个地址建议的需求,由于给出地址建议需要获取的数据较多,且计算比较复杂,接口的耗时时间比较长,平均超过了1.3s,后期优化将业务接口只从缓存中获取数据,如果缓存中没有,则将请求数据放入到redis队列中,由定时任务10s一次轮询队列,由定时任务线程去计算,将结果放入缓存中。将接口的耗时缩短到30-40ms之间。虽然解决了耗时的问题,但是在用户在第一次获取建议时总是拿不到数据。在10s后再...

2018-08-18 18:31:55 1564

原创 CopyOnWriteArrayList

在很多的应用场景中,读操作的可能会远远大于写操作。对于这些场景我们希望是读操作尽可能地快,而写操作慢一些也没有太大的关系。由于读操作根本不会修改原有的数据,因此对于每一次的读取都进行加锁是一种资源的浪费。根据读写锁的思想,读锁与读锁之间不冲突。但是读操作会受到写操作的阻碍,当写操作发生时,读就必须等待。否则可能读到不一致的数据。同时,如果读操作正在进行,程序也不能进行写入。为了将读取的性能发挥...

2018-08-18 12:35:57 2489

转载 cron表达式

cron表达式分为6个域或者7个域6域:Seconds Minutes Hours DayofMonth Month DayofWeek 7域:Seconds Minutes Hours DayofMonth Month DayofWeek Year每个域的允许值Seconds:可出现", - * /"四个字符,有效范围为0-59的整数 Minutes:可出现", - * /"四个字...

2018-08-05 21:17:26 335

原创 https

HTTPS是HTTP的安全版,即HTTP下加入SSL层。目的是为了保证信息的安全性。A给B发了一条消息,只有A和B知道,即使中间被拦截了也无法解读消息!使用什么加密算法1. 对称加密算法:A与B使用同一个秘钥,A向B传输信息使用秘钥对信息进行加密,B使 同一秘钥对信息进行解密,如果这一个秘钥只有A和B知道,那么就可以保证信息传 输的安全。2. 非对称加密算法:有一个私...

2018-08-05 18:57:28 240

原创 CountDownLatch和Cyclibarrier

CountDownLatch和Cyclibarrier 都是jdk并发包中提供的用于多个线程都达到某个点后再进行操作的工具类CountDownLatchcountDownLatch 是一个倒计时器,它可以让某一个线程等待直到得到及时结束才开始执行。构造函数可接收一个整数作为参数,表示计数器的计数个数public CountDownLatch(int count)demop...

2018-07-29 19:11:15 543

原创 redis数据类型

 1. 字符串字符串类型是最基础的数据结构,其他的几种数据结构都是在字符串类型基础上构建的。命令设置值 set key value [ex seconds] [px milliseconds] [nx | xx]ex seconds 为键设置秒级别的超时时间 px millseconds 为键设置毫秒级别的超时时间 nx 键必须不存在才可以设置成功 xx 键必须存在可以设置...

2018-07-21 18:57:46 126

原创 java8函数式编程

介绍函数式编程最直接的表现就是将行为作为数据传递。使代码表达能力得到提升!在java8中主要有三个核心接口函数接口 (Function)流(Stream)聚合器(Collector)函数接口函数接口是行为的抽象函数接口是数据转换器在java.util.funciton包中定义了定义了四个最基础的函数接口Supplier<T> 数据提供器,可以提供 T 类型对象;无参的构造器,提供了 g...

2018-07-15 15:43:39 187

原创 垃圾收集算法与垃圾收集器

垃圾收集算法与垃圾收集器标记-清除算法 最基础的算法,分为标记和清除两个阶段:首先标记需要清除的对象,在标记完成后统一回收所有被标记的对象。它有两个缺点:一个是效率问题:标记和清除的效率不高;一个是空间问题:清除之后会产生大量的碎片问题,导致再分配大对象内存时由于找不到足够的连续内存而再一次触发垃圾回收。复制算法 为了解决效率问题,出现了复制算法,它可以将内存分为大小相等的两块,每次只使用其中的一...

2018-07-01 14:33:51 130

转载 B-树

mysql的索引的索引主要基于B+树,要弄清楚B+树,首先需要从B-树开始,B-树就是B树,中间是横杠不是减号。索引为什么不使用二叉树​数据库库的索引之所以使用树的存储结构,是因为树的查询效率高,而且可以保持有序。那为什么不使用二叉树的数据结构来存储呢?其实从算法的逻辑上来说,二叉树的比较次数是最小的,但是不得不考虑一个现实问题,磁盘的IO。数据库的索引是存储在磁盘上的,当存储量比较大的时候,索引...

2018-06-10 17:44:24 151

原创 CGLIB动态代理 demo

简介在公司分享会上,提到了cglib生成动态生成代理类。cglib跟jdk动态代理最大的区别就是,jdk的动态代理要求被代理对象必须有接口,对那些没有接口的普通bean,jdk动态代理一点办法都没有,而cglib可以为没有接口的bean生成代理对象。其实cglib是使用ASM来操作字节码重新生成新的类,我么也可以使用ASM直接直接生成操作字节码,但是他需要对java字节码的格式有足够的了解。API...

2018-05-27 11:55:22 931

原创 java内存区域

###运行时数据区域1.1. 程序计数器* 程序计数器是一块比较小的内存空间,可以看作当前线程所执行的字节码的行号指示器。字节码解释器就是通过改变这个计数器来选取吓一条需要执行的指令。1.2. java虚拟机栈* 虚拟机栈描述的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口灯信息。每一个方法从调用到执行完的过程,就对应着一个栈帧...

2018-05-27 00:20:28 120

原创 Executor提供的几种类型的线程池

newFixedThreadPool()方法:该方法返回一个固定线程池数量的线程池。该线程池中的线程数量始终不变。当有一个新的任务提交时,线程池中若有空闲的线程,则立即执行。若没有,则新的任务会被暂存到一个任务队列中,待有线程空闲时,便处理在任务队列中的任务。newSingleThreadExecutor()方法:该方法返回一个只有一个线程的线程池。若多余一个任务被提交到线程池,任务会被保存到一个...

2018-05-22 23:23:07 904

原创 Type接口的基础知识

Type是所有类型的父接口,它有四个子接口和一个实现类下面来看这些子接口和子类所代表的类型Class表示的是原始类型。Class类的对象表示JVM中的一个类或者接口,每个java类在JVM都表现为一个Class对象。可以通过“类名.Class”、“对象.getClass()”或者Class.forName("类名")等方法获取到Class对象。数组也被映射为Class对象,所有元素类型相同且维度相...

2018-05-20 22:08:26 2500

原创 了解BeanPostProcessor

在公司disConf分享会上,听到一个名词,BeanPostProcessor,后来在网上搜了一下,发现使用BeanPostProcessor可以解决很多看似很困难的问题。简介BeanPostProcessor是spring提供的一个扩展接口public interface BeanPostProcessor { //bean初始化方法调用前被调用 Object postProce...

2018-05-17 23:15:55 470

原创 mybatis的一个分库分表插件--jade

通过@Intercepts注解信息和@Signature注解信息可以了解到,JadeSQLInterceptor会拦截Executor.query(MappedStatement, Object, RowBounds, ResultHandler)和Executor.update(MappedStatement, Object)两个方法@Intercepts({ @Signatur...

2018-05-01 15:02:33 1791

原创 mybatis plugin的使用

Mybatis允许用户使用自定义拦截器对sql语句执行过程中的某一点进行拦截,默认情况下,Mybatis允许拦截器拦截Executor的方法、ParameterHandler的方法、ResultSetHandler的方法以及StatementHandler的方法。具体可拦截的方法如下:    1 Executor中的update()、query()、flushStatement()、commit(...

2018-04-30 22:06:13 4372

空空如也

空空如也

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

TA关注的人

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