自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ry的专栏

Stay hungry, Stay foolish

  • 博客(74)
  • 资源 (1)
  • 收藏
  • 关注

原创 RocketMQ 笔记4 HA主从同步

broker主从同步包括同步双写 和 异步复制, 其实这两种都是使用相同的方式传输的,同步双写只是在主线程上阻塞了一段时间,等待传输结果,返回给producermaster针对每一个slave之间会有一个长连接,都会保存已经传输的offset,启动一个线程commitlog最大offset大于已经传输的offset时候,就会通过这个连接往slave写数据,格式为:thisOffset(8字节)+ ...

2018-05-16 18:50:31 1092

原创 RocketMQ 笔记3 IndexFile

IndexFile大小固定,文件名是创建时候的时间戳IndexHeader(40字节)    Slot Table(500w * 4字节)   Index Linked List(4 * 500W * 20字节)IndexHeader结构beginTimestamp(8)   第一个索引消息保存broker的时间戳endTimestamp(8)    最后一个索引消息保存broker的时间戳beg...

2018-05-16 14:17:11 504

原创 RocketMQ 笔记2 文件存储

MappedFileQueue  代表一类文件集合,比如consumequeue/{topic}/{queueId}/目录下的所有文件MappedFile 代表一个文件,是对这个文件操作的封装CommitLog 代表所有的commitLog文件,里面有一个MappedFileQueue的字段ConsumeQueue 代表了topic+queueId的所有consumeQueue文件,里面也有一个M...

2018-05-15 18:11:52 374

原创 RocketMQ 笔记1

RocketMQ 物理部署结构如上图所示, RocketMQ的部署结构有以下特点:1.Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。2.Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的B...

2018-05-14 22:09:37 395

原创 netty笔记三 ChannelPipeline

1.netty的ChannelHandler设计,使用了接口的适配器模式ChannelHandler   ChannelHandlerAdapter   ChannelInboundHandler      ChannelInboundHandlerAdapter   ChannelOutboundHandler      ChannelOutboundHandlerAdapter2.channe...

2018-04-17 17:39:11 270

原创 volatile变量特性

volatile变量特性--摘自《Java并发编程的艺术》volatile变量自身具有下列特性:1.可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。2.原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性。从内存语义的角度来说,volatile与锁有相同的效果:volatile写和锁的释放...

2018-04-17 16:24:31 336

原创 图 dijkstra和prim算法

package b;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class Graph { private int[][] array; private Map xyToName = new HashMap<>(); p

2018-01-18 23:11:38 249

原创 分布式锁 以及 频率限制器

最近工作中遇到几个问题,记录一下1 分布式锁    最近遇到一个类似减库存问题,原本以为使用数据库事务,加上这个业务调用不频繁,应该没有问题。但是测试环境发现前端兄弟有个bug每次提交了两次,项目使用f5代理,两个节点,刚好一边一个请求,造成数据库数据混乱。发现后,我先将serviceImpl中的@Transactional的isolation设置成Isolation.SERIALIZABLE,虽

2018-01-13 01:26:41 729

原创 jdk 常用的queue

queue队列,先进先出1、优先级队列,元素有优先级public class PriorityQueue extends AbstractQueue implements java.io.Serializable队列使用堆排序,二叉树,使用数组保存数据,非线程安全入队,新节点一直跟自己的父节点比较,不复合比较条件,交换位置,直到根节点 public boolean of

2017-12-01 00:02:38 1716

原创 spring AOP

在spring事务里面,看到了spring在beanProcessor的AbstractAutoProxyCreator包装了bean,使用了jdk或者cglib动态代理,最后使用到了ProxyFactory那么只要我们准备了必要的参数,可以使用这个类生成代理类package com.test.aop;import java.lang.reflect.Method;

2017-09-15 21:03:01 213

原创 netty笔记1

EventLoopGroup.next()得到EventLoopEventLoopGroup初始化时候会实例化一个EventLoop[]数组,使用的是EventLoopGroup的newChild方法真正干活的是EventLoop使用EventLoopGroup的register方法会将channel注册到一个EventLoop上在AbstractBootstrap的ini

2017-09-06 18:05:32 169

原创 红黑树笔记

红黑树5条性质:1.根节点是黑色2.节点是红色或者黑色3.每个叶节点(空节点)是黑色4.红节点的两个子节点都是黑色5.从任一节点到其子叶节点经过的黑色节点数目一样多插入情况:当前节点N(红)  父节点P  叔叔节点U   祖父节点G1.N是根节点,将N涂黑2.P是黑,N为红,直接加入3.P,U都是红,G必定为黑,将P,U都涂黑,G涂红,N指向G,进行

2017-08-10 18:32:38 207

原创 spring笔记6 容器加载过程、bean初始化

AbstractApplicationContextpublic void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. prepareRefr

2017-08-03 18:38:24 335

原创 druid 的filter设计原理

druid是优秀的开源数据库连接池,据称性能很好,尤其以统计监控著称。其统计功能实际就是利用它提供的filter实现,通过扩展filter我们可以监控connection,(Prepared)Statement,resultSet 的任何方法。1、首先java数据库操作过程datasource->connection->(Prepared)Statement->result

2017-07-21 18:53:43 4870 1

原创 dubbo 5 Listener和Filter

前面的服务提供者和消费者暴漏和引用过程中首先都是用的Protocol,而且使用ExtensionLoader加载的adaptive的Protocol,最终得到的是ProtocolListenerWrapper->ProtocolFilterWrapper->{RegistryProtocol,DubboProtocol}1、ProtocolListenerWrapper如何使用

2017-07-14 11:06:03 620

原创 mybatis 插件原理

1、mybatis初始化每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionF

2017-07-13 17:56:54 232

原创 dubbo 4 服务消费者到提供者过程

服务消费者到服务提供者过程1)首先在初始化nettyServer和nettyClient时候都设置了NettyHandler,那么它的ChannelHandler handler是下面的这条链MultiMessageHandler->HeartbeatHandler->AllChannelHandler->DecodeHandler->HeaderExchangeHandler->Dubb

2017-07-04 19:11:11 487

原创 dubbo 3 ReferenceBean<T>消费者端初始化过程

四、ReferenceBean消费者端初始化过程1、ReferenceConfig的init()   createProxy中也生成了registryUrl      invoker = refprotocol.refer(interfaceClass, urls.get(0));   同样这里会ProtocolListenerWrapper->ProtocolFilterWr

2017-07-03 18:16:44 1859

原创 dubbo 2标签解析 ServiceBean<T> 生产者服务暴漏过程

二、dubbo标签解析com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandlerpublic void init() {   registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, t

2017-07-03 18:15:34 543

原创 dubbo 1 ExtensionLoader 插件化

一、ExtensionLoader 插件化属性:1、String cachedDefaultName  默认的扩展名2、Map> cachedClasses 比如[{'dubbo',DubboProtocol.class},{'registry',RegistryProtocol.class}]3、ConcurrentMap> cachedInstances 值是具体扩展的对象的H

2017-07-03 18:14:04 203

原创 spring事务 connection

spring事务使用了aop、动态代理,而数据库的事务最终是作用在connection上面的,那么spring整个过程中开头的begin,结束的commit,rollback如何保证使用的是同一个connection,以及mybatis如何拿到这条connection执行sql,还有再加上spring事务的传播特性的时候connection变化呢一、spring事务从开启到结束使用同一条con

2017-06-30 00:26:18 991

原创 rpc netty

RPC框架比如dubbo,主体实现大概是,客户端与服务端商定使用同一种传输协议,服务端接受客户端的连接,客户端使用动态代理,根据不同的协议生成 不同的代理类,代理类中就是协议的客户端实现。服务器的地址和端口可以使用注册中心来通知。下面使用netty来简单实现。1、请求、响应封装类,使用jdk的序列化,序列化工具类package com.rpc.msg;import ja

2017-04-11 22:11:36 250

原创 java7 AbstractQueuedSynchronizer

利用AbstractQueuedSynchronizer同步器还可以实现共享锁,比如信号量Semaphore同步器的共享式获取状态,获取锁 public final void acquireShared(int arg) { if (tryAcquireShared(arg) < 0) doAcquireShared(arg); }

2017-03-15 16:45:44 273

原创 java7 ReentrantLock

重入锁,独占式一、ReentrantLock.lock()->sync.lock()1、NonfairSyncfinal void lock() { if (compareAndSetState(0, 1))//尝试修改状态,若成功说明没有线程修改过,获取锁 setExclusiveOwnerThread(Thread.current

2017-03-15 15:11:35 225

原创 java7 concurrentHashMap

一张简易图java7 concurrentHashMap使用分段锁来提高效率,非常有学习意义,比起全部使用同步方法的hashTable效率要高很多上图的结构,外层是一个segment的数组,segment是一个继承ReentrantLock的类,其内部又有一个hashEntry的数组,每个hashEntry节点有一个next节点,类似于hashMap的结构。多线

2017-03-13 14:53:13 289

原创 test1

package ztest.a;import java.util.Arrays;import java.util.Comparator;public class Test3 { //核心数组排序 参考jdk Arrays.sort TimSort(优化后的归并排序) public void coreSort(Integer[] a,Comparator c){

2017-02-08 11:00:36 215

原创 归并、二分插入排序、快速排序

经常使用Collections.sort(List list, Comparator c)来排序,jdk怎么实现的,1.7有几个方法mergeSort()使用归并排序TimSort.sort()使用二分插入排序,和优化后归并排序//java.util.Arrays 1.7//归并排序,把数组拆分,如果需要子数组继续拆分(递归),拆成小数组比较,然后依次往上合并 pr

2017-01-22 16:49:23 244

原创 spring 笔记5 bean的生命周期,BeanPostProcessor

BeanPostProcessor接口public interface BeanPostProcessor { Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;//初始化 Object postProcessAfterInitialization(Ob

2017-01-11 11:14:27 1607 1

原创 spring 笔记4 BeanDefinitionReader

BeanDefinitionReader 如何从resource把BeanDefinition注册到工厂BeanDefinitionReader AbstractBeanDefinitionReader XmlBeanDefinitionReader1 、BeanDefinitionReader#loadBeanDefinitions(Resource reso

2017-01-09 20:38:17 350

原创 spring 笔记3 BeanFactory

先来两张图1、顶层接口BeanFactory ,获取bean等2、直接继承的有三个接口:AutowireCapableBeanFactory:不太明白作用HierarchicalBeanFactory:描述父工厂作用ListableBeanFactory:提供了操作工厂所有bean信息方法3、下面的继承关系可以分两条路线看:第一条:Def

2017-01-06 15:38:43 274

原创 spring 笔记2 PropertiesLoaderSupport

public abstract class PropertiesLoaderSupport public class PropertiesFactoryBean extends PropertiesLoaderSupport implements FactoryBean, InitializingBean public abstract class PropertyResourc

2017-01-05 16:44:19 2992

原创 spring笔记一

顶层接口BeanFactory    ApplicationContextbean信息解析到BeanDefinitionpublic abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccessor implements BeanDefinition, Cloneable {

2016-12-12 18:02:48 215

原创 spring 事务 笔记

TransactionProxyFactoryBean   afterPropertiesSet()    ProxyFactory proxyFactory = new ProxyFactory();  设置了前后拦截器,以及处理事务的拦截器,代理接口TransactionInterceptor 实现 MethodInterceptor  环绕通知   invoke方法  使用具体事

2016-07-19 14:27:38 312

原创 spring security 一个验证码登录例子

看完shiro,在看spring security感觉快了很多,最开始看spring security的时候,非常晕,看完我觉得spring security做了太多事,以至于程序员都不知道,是怎么实现的,这样的后果就是 当出现错误,或者需要修改的时候感觉无从下手。个人理解,若有错误,请指正。spring security跟shiro类似,都是使用过滤器来认证和授权,不同的

2016-07-11 17:03:05 23640 4

原创 Shiro 4 sessionManager

sessionManager接口public interface SessionManager { Session start(SessionContext context); Session getSession(SessionKey key) throws SessionException;}实现继承AbstractSessionManager定义了sessi

2016-06-30 17:22:34 4068

原创 Shiro 3 filter

首先Shiro提供的过滤器继承关系过滤器的过滤方法是dofilter,最终可以找到AdviceFilter中的doFilterInternal这个类中还有一个preHandle方法 返回true or false决定是否通过过滤器,这个方法供子类继承重写,实现不同过滤器业务比如LogoutFilter中的 @Override protected boolean

2016-06-28 10:00:01 631

原创 Shiro 3 shiroFilter

ShiroFilterFactoryBean中getObject()方法  public Object getObject() throws Exception {        if (instance == null) {            instance = createInstance();        }        return instance;  

2016-06-24 17:18:26 1391

原创 Shiro 2 Subject的创建

SecurityUtils中 public static Subject getSubject() { Subject subject = ThreadContext.getSubject(); if (subject == null) { subject = (new Subject.Builder()).buildSubject();

2016-06-24 15:22:01 2506

原创 Shiro 1 , 登录过程

UsernamePasswordToken token = new UsernamePasswordToken(username, password); token.setRememberMe(true); Subject subject = SecurityUtils.getSubject(); try { subject.logi

2016-06-22 20:08:45 541

原创 java8 AIO AsynchronousFileChannel例

package com.kd.nio;import java.nio.ByteBuffer;import java.nio.channels.AsynchronousFileChannel;import java.nio.channels.CompletionHandler;import java.nio.file.Path;import java.nio.file.Paths;im

2016-06-08 11:16:19 742

javaoffice

java操作office,一个开源的java office工具包,可用于web开发导出excel,word等,解决导出夸浏览器问题

2013-12-04

空空如也

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

TA关注的人

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