自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Hystrix 熔断机制原理

相关配置circuitBreaker.enabled 是否开启熔断circuitBreaker.requestVolumeThreshold 熔断最低触发请求数阈值circuitBreaker.sleepWindowInMilliseconds 产生熔断后恢复窗口circuitBreaker.errorThresholdPercentage 错误率阈值circuitBr...

2018-05-09 11:28:00 553

转载 Redis模块化基本介绍

概要Redis Modules System基本概念基本应用参考资料1. Redis Modules System基本概念Redis Modules System是4.0出现一大改动点,使得可以通过外部模块对Redis进行功能性扩展。 Redis的模块采用的是动态链接库的方式,可以启动的时候加载,也可以在运行时加载(MODULE LOAD),在Linux系统里面,可以通过d...

2017-07-26 20:49:00 194

转载 Redis Pipeline原理分析

转载请注明出处:http://www.cnblogs.com/jabnih/1. 基本原理1.1 为什么会出现PipelineRedis本身是基于Request/Response协议的,正常情况下,客户端发送一个命令,等待Redis应答,Redis在接收到命令,处理后应答。在这种情况下,如果同时需要执行大量的命令,那就是等待上一条命令应答后再执行,这中间不仅仅多了RTT(Round...

2017-07-12 22:09:00 167

转载 Redis事务原理分析

Redis事务原理分析基本应用在Redis的事务里面,采用的是乐观锁,主要是为了提高性能,减少客户端的等待。由几个命令构成:WATCH, UNWATCH, MULTI, EXEC, DISCARD。通过WATCH,可以实现CAS操作。使用WATCH监听一些键,然后去检查键的值,然后根据键的值来决定是否还需要进行MULTI,如果键的值被改了,则重新。(因为有可能在执行WATCH前,键...

2017-07-04 20:05:00 108

转载 Java NIO原理分析

Java NIO原理分析这里主要围绕着Java NIO展开,从Java NIO的基本使用,到介绍Linux下NIO API,再到Java Selector其底层的实现原理。Java NIO基本使用Linux下的NIO系统调用介绍Selector原理Channel和Buffer之间的堆外内存Java NIO基本使用从JDK NIO文档里面可以发现,Java将其划分成了三大...

2017-06-25 12:08:00 100

转载 Java Reference 源码分析

@(Java)[Reference]Java Reference 源码分析Reference对象封装了其它对象的引用,可以和普通的对象一样操作,在一定的限制条件下,支持和垃圾收集器的交互。即可以使用Reference对象来引用其它对象,但是最后还是会被垃圾收集器回收。程序有时候也需要在对象回收后被通知,以告知对象的可达性发生变更。Java提供了四种不同类型的引用,引用级别从...

2017-03-19 15:25:00 73

转载 JDK AtomicInteger 源码分析

@(JDK)[AtomicInteger]JDK AtomicInteger 源码分析Unsafe实例化Unsafe在创建实例的时候,不能仅仅通过new Unsafe()或者Unsafe.getUnsafe()来获取,因为Java会进行安全校验,只有信任的代码,才能够获取实例。@CallerSensitivepublic static Unsafe getUnsafe() {...

2017-03-07 22:26:00 62

转载 Java 包装类笔记

@(JDK)[包装类]Java 包装类笔记当需要使用到集合的时候,如果是基础数据类型,需要转换为包装类,再使用,在JDK1.5之前,每次使用的时候,都需要手动转换为包装类(称为装箱),然后在使用的时候再转换为基础数据类型(拆箱),这样子会很麻烦,也多冗余的代码,在JDK1.5后,就出现了自动装箱/拆箱,再也不需要手动来进行转换了。注:如果尝试对null的包装类进行自动拆箱,会导...

2017-03-07 08:55:00 100

转载 Spring Cache 笔记

@(Java ThirdParty)[Spring Cache]Spring Cache Abstraction简介Spring Cache提供了对底层缓存使用的抽象,通过注解的方式使用缓存,减少了对原有的侵入性,通过一个抽象层,分离了不同后端缓存的实现,在不改变代码的前提下,可以切换底层缓存的实现。Cache只有应用于幂等性的方法,即同样的输入,返回同样的数据(在数据没...

2017-03-04 16:00:00 81

转载 JDK 源码分析(4)—— HashMap/LinkedHashMap/Hashtable

JDK 源码分析(4)—— HashMap/LinkedHashMap/HashtableHashMapHashMap采用的是哈希算法+链表冲突解决,table的大小永远为2次幂,因为在初始化的时候,会保证给定的初始容量为2次幂,如下:// Find a power of 2 >= initialCapacityint capacity = 1;while (capaci...

2017-02-25 15:43:00 44

转载 JDK Collection 源码分析(3)—— Queue

@(JDK)[Queue]JDK QueueQueue:队列接口,对于数据的存取,提供了两种方式,一种失败会抛出异常,另一种则返回null或者false。抛出异常的接口:add,remove,element,分别对应:offer,poll,peek。整体类结构PriorityQueue优先级队列,采用堆来实现,在容量不足,添加元素的时候会自动扩展,对于元素的比较...

2016-12-19 21:08:00 84

转载 MyBatis源码分析(5)——内置DataSource实现

@(MyBatis)[DataSource]MyBatis源码分析(5)——内置DataSource实现MyBatis内置了两个DataSource的实现:UnpooledDataSource,该数据源对于每次获取请求都简单的打开和关闭连接。PooledDataSource,该数据源在Unpooled的基础上构建了连接池。UnpooledDataSource配置UNPOOLED...

2016-08-04 21:24:00 138

转载 QR 二维码总结

@(Java ThirdParty)[QR]QR 二维码总结根据Wiki中的介绍,QR Code(Quick Response Code),二维条形码,由日志设计应用于汽车制造工业中。条形码中包含了机器可识别的一些信息。即相当于把一些信息经过编码形成二维码,具体的规则没仔细去看。开源二维码库这里有一个比较好用的开源库QRGen,该库基于zxing之上构建的。如下:ByteArr...

2016-07-30 16:13:00 252

转载 Struts2 拦截器配置以及实现

@(Java ThirdParty)[Struts|Interceptor]Struts2 拦截器配置以及实现Struts2的拦截器应用于Action,可以在执行Action的方法之前,之后或者两者。用于处理一些公共的方法,而不影响原有的代码,并且使得可以关注功能的实现,分离关注点。比如防止重复提交等。如下图(图片来自Struts2文档Interceptor章节):拦截器配置...

2016-07-30 14:42:00 67

转载 Struts2 更改校验配置文件位置

@(Java)[Struts|Interceptor]Struts2 更改校验配置文件位置在Struts2中提供的拦截器校验ValidationInterceptor,该校验器中默认的配置文件位于Action包的位置下,需要和Action类放在一起,而提供的注解又不能针对每个方法不同的参数校验,只能使用配置文件方式来实现同一个Action不同方法实现不同的校验。这里配置文件的放置位置...

2016-07-30 12:12:00 80

转载 MyBatis源码分析(4)—— Cache构建以及应用

@(MyBatis)[Cache]MyBatis源码分析——Cache构建以及应用SqlSession使用缓存流程如果开启了二级缓存,而Executor会使用CachingExecutor来装饰,添加缓存功能,该CachingExecutor会从MappedStatement中获取对应的Cache来使用。(注:MappedStatement中有保存相关联的Cache)在使用Sql...

2016-07-27 19:00:00 94

转载 MyBatis源码分析(3)—— Cache接口以及实现

@(MyBatis)[Cache]MyBatis源码分析——Cache接口以及实现Cache接口MyBatis中的Cache以SPI实现,给需要集成其它Cache或者自定义Cache提供了接口。public interface Cache { String getId(); void putObject(Object key, Object value); O...

2016-07-25 22:47:00 180

转载 MyBatis Cache配置

@(MyBatis)[Cache]MyBatis Cache配置MyBatis提供了一级缓存和二级缓存配置全局配置配置说明默认值可选值cacheEnabled全局缓存的开关truetrue falselocalCacheScope本地缓存,SESSION表示执行的sql结果缓存数据可以在同一个sqlSession共享,而STATEMENT,则...

2016-07-25 22:43:00 86

转载 Service Provider Interface

@(Java)[SPI]Service Provider InterfaceAPI的一种设计方法,一般用于一些服务提供给第三方实现或者扩展,可以增强框架的扩展或者替换一些组件。结构Service服务,可以理解为一系列的接口ProviderService的实现,一般实现指定的Service接口或者继承指定的类Provider registration and access...

2016-07-18 22:00:00 82

转载 Java Annotation概述

@(Java)[Annotation|Java]Java Annotation概述用途编译器的相关信息,如用于检测错误和一些警告编译时和部署时的处理,如一些软件用于自动生成代码之类的运行时处理自定义注解和接口的定义类似,只是用@interface来标识,注解中包含的属性可以具有默认值,如下:@Retention(RetentionPolicy.RUNTIME)@Ta...

2016-07-16 12:15:00 65

转载 MyBatis源码分析(2)—— Plugin原理

@(MyBatis)[Plugin]MyBatis源码分析——Plugin原理Plugin原理Plugin的实现采用了Java的动态代理,应用了责任链设计模式InterceptorChain拦截器链,用于保存从配置文件解析后的所有拦截器插件链的创建在Configuration解析配置文件的时候,XMLConfigBuilder.parseConfiguration中会调用p...

2016-07-09 17:15:00 80

转载 MyBatis源码分析(1)——整体依赖关系图

后续补充更新转载于:https://www.cnblogs.com/jabnih/p/5656182.html

2016-07-09 17:07:00 71

转载 Oracle 图形化以及命令行安装

@(Oracle)[Install]Oracle 安装相关版本说明不同版本的Oracle需要安装在特定的系统版本之上。如Oracle 11gR2的11.2.0.1.0需要安装在CentOS 5.X以及RHLE 5.X硬件要求Physical Memory >= 1GSwap Space >= 2G (available)Temporary Space &gt...

2016-07-07 17:26:00 122

转载 JDK Collection 源码分析(2)—— List

JDK List源码分析List接口定义了有序集合(序列)。在Collection的基础上,增加了可以通过下标索引访问,以及线性查找等功能。整体类结构1.AbstractList该类作为List的通用骨架实现,和AbstractCollection一样,也是为了减少实现该接口的工作量。为了实现一个只读的List,仅仅只需要实现get和size方法即可。而对于读写的List,...

2016-07-07 17:19:00 70

转载 JDK Collection 源码分析(1)—— Collection

JDK CollectionJDK Collection作为一个最顶层的接口(root interface),JDK并不提供该接口的直接实现,而是通过更加具体的子接口(sub interface)的实现。该接口存在是因为有时候需要更加通用的Collection来对元素进行操作,比如一个方法,接收一个Collection,那么就可以不考虑其具体到底是List还是Set之类的。其...

2016-07-07 17:16:00 98

转载 多线程下队列的优化

0. 前言  前段时间在看无锁队列相关的东西时发现了一篇关于加锁队列算法优化的文章,故看了下其原理以及使用C实现了该队列。该队列在Java中类LinkedBlockingQueue以及实现了该功能。  相关文章:Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms  ...

2015-12-22 18:47:00 75

转载 epoll ET模式陷阱分析

0. 前言  这篇文章主要记录在使用epoll实现NIO接入时所遇到的问题。1. epoll简介  epoll是Linux下提供的NIO,其主要有两种模式,ET(Edge trige)和LT(Level trige)。在linux下使用man epoll手册即可知道这两种模式主要的区别:  ET:边缘触发,故名思议,所添加的描述符,只在当其改变状态的时候才会触发一次,就如...

2015-12-05 11:01:00 92

转载 浅谈ARP协议以及应用

0. 前言  本章主要简单的介绍ARP的协议格式,主机如何发送和处理ARP报文,以及免费ARP。1. ARP协议原理  ARP,全称Address Resolution Protocol,地址解析协议,在网络中,有IP地址和MAC地址,在链路层发送报文时使用的是MAC硬件地址,这时需要将IP地址转换为48bit MAC地址,这就会使用到ARP协议。  如下,有两台主机,2...

2015-11-20 19:57:00 293

转载 Redis主-从部署实践

0. 前言  这篇文章简要介绍Redis的主从部署,实现了一主二从,使用两个哨兵监控,以实现简单的HA,其中从库作为备机。1. 部署  这里有三台服务器,其中239主机上的Redis作为主库,其余两个作为从库。这里涉及到了认证,所以当这里在主库和从库都使用了requirepass和masterauth,因为当主库宕机后,哨兵将其中一个从库提升为主库的时候会要求认证,这里简单起...

2015-11-19 20:10:00 57

转载 TCP/IP协议详解 卷1—读书笔记(1)

0. 前言  本系列简要记录该书的关键点,用以梳理知识点。1. 简介  简述链路层下的一些相关协议,如以太网IP数据报,802标准,SLIP,CSLIP,PPP。  链路层主要为上层(IP)和本层(ARP和RARP)的协议提供服务。2. 以太网IP数据报和IEEE 802  以太网IP数据报协议是由Intel和其他公司发布的一个标准,采用CSMA/CD的接入方法。...

2015-11-17 20:11:00 68

转载 Hiredis 基本使用

0. 前言  Hiredis是一个Redis的C客户端库函数,基本实现了Redis的协议的最小集。这里对hiredis的api作基本的介绍以及应用,主要参考hiredis的README文件以及相关源码。1. 同步APIredisContext,该库的上下文环境。 1 /* Context for a connection to Redis */ 2 typedef...

2015-09-16 19:29:00 488

转载 设计模式学习——观察者模式(Observer Pattern)

0. 前言  观察者模式在许多地方都能够用到,特别是作为MVC模式的一部分,在MVC中,模型(M):存放数据,视图(V):显示数据。当模型中的数据发生改变时,视图会得到通知,这是典型的观察者模式。1. 定义  观察者模式:定义了一对多的关系,一个对象作为主题,它维护了一系列的依赖对象,当主题的状态发生改变时,会自动地通知依赖对象(通常通过调用依赖对象的方法来实现)。  官...

2015-09-16 08:27:00 76

转载 设计模式学习——策略模式(Strategy Pattern)

0. 前言  最近在重构公司的一个项目的时候,在抽取DES加密重复部分代码的时候,突然间想起了策略模式,感觉策略模式好像可以应用上,于是重新学习了下策略模式。注:在DES加密中,有DES和TDES算法,其中又有各种分组模式,如EBC,CBC等。1. 定义  引用百度定义:策略模式,定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它...

2015-09-09 22:23:00 83

转载 Linux下小工具使用总结

0. 前言  这篇博客仅用于记录个人在工作中用到的一个小工具,后续用到别的会再补充。1. Tmux  终端分用器(multiplexer),可以在一个屏幕上创建多个终端,这个工具也可以用于结对编程。  个人用途:1. 在一个屏幕中开启多个终端(因为个人使用的是24寸屏)       2. 保存工作环境,在不使用的时候dettach,切换到对应的环境,一般个人会创建三个...

2015-09-07 20:06:00 66

转载 Redis学习——ae事件处理源码分析

0. 前言  Redis在封装事件的处理采用了Reactor模式,添加了定时事件的处理。Redis处理事件是单进程单线程的,而经典Reator模式对事件是串行处理的。即如果有一个事件阻塞过久的话会导致整个Redis被阻塞。   对于Reactor模式,可以查看维基百科。(这里推荐一本书:《面向模式的软件架构:卷2》,里面详细讲了Reactor模式,但是刚开始可能会不太 明白,耐下...

2015-08-20 20:21:00 138

转载 关于TCP连接建立与终止那点事

0. 前言  最近在处理公司遗留项目的时候发现自己对TCP协议一点都不懂,所以补了点关于TCP连接的建立和终止的内容,这里简单写下自己了解的部分,省略了报文序号确认序号这些无关的字段,主要讨论TCP状态的转换以及Linux下的一些问题。  对于这篇文章来说,主要是记录自己遇到的一些问题以及学习到的一些东西。  关于TCP/IP协议,这里推荐一本书:《TCP/IP协议详解:卷1...

2015-08-18 23:52:00 67

转载 服务器后台TCP连接存活问题

0. 背景  公司的服务器后台部署在某一个地方,接入的是用户的APP,而该地方的网络信号较差,导致了服务器后台在运行一段时间后用户无法接入,那边的同事反馈使用netstat查看系统,存在较多的TCP连接。1. 问题分析  首先在公司内部测试服务器上部署,使用LoadRunner做压力测试,能正常运行,然后那边的同事反馈该地方信号较差。考虑到接入的问题,有可能接入进程的FD资源...

2015-08-17 23:37:00 127

转载 Redis学习——链表源码分析

0. 前言  Redis 中的链表是以通用链表的形式实现的,而对于链表的用途来说,主要的功能就是增删改查,所以对于查找来说,redis其提供了一个match函数指针,用户负责实现其具体的匹配操作,从而实现通用化。  涉及的文件:adlist.h/adlist.c1. 数据结构typedef struct listNode { struct listNode...

2015-08-16 15:24:00 85

转载 Redis学习——SDS字符串源码分析

0. 前言  这里对Redis底层字符串的实现分析,但是看完其实现还没有完整的一个概念,即不太清楚作者为什么要这样子设计,只能窥知一点,需要看完redis如何使用再回头来体会,有不足之处还望告知。  涉及文件:sds.h/sds.c1. 数据结构:  1 typedef char *sds;2 3 struct sdshdr {4 unsigne...

2015-08-15 22:25:00 110

转载 Redis学习——环境搭建以及基础命令使用

0. 前言:  这篇文章旨在对redis环境的搭建以及对redis有个大概的认识。一.redis搭建:  环境:ubuntu 14  软件包:redis-3.0.3.tar.gz安装步骤:    1. 首先解压redis源码包  2. 进入目录redis-3.0.3,使用make编译源码  3. 编译完成无错后使用sudo make install安装...

2015-08-15 17:03:00 211

空空如也

空空如也

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

TA关注的人

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