- 博客(74)
- 资源 (1)
- 收藏
- 关注
原创 RocketMQ 笔记4 HA主从同步
broker主从同步包括同步双写 和 异步复制, 其实这两种都是使用相同的方式传输的,同步双写只是在主线程上阻塞了一段时间,等待传输结果,返回给producermaster针对每一个slave之间会有一个长连接,都会保存已经传输的offset,启动一个线程commitlog最大offset大于已经传输的offset时候,就会通过这个连接往slave写数据,格式为:thisOffset(8字节)+ ...
2018-05-16 18:50:31
1219
原创 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
554
原创 RocketMQ 笔记2 文件存储
MappedFileQueue 代表一类文件集合,比如consumequeue/{topic}/{queueId}/目录下的所有文件MappedFile 代表一个文件,是对这个文件操作的封装CommitLog 代表所有的commitLog文件,里面有一个MappedFileQueue的字段ConsumeQueue 代表了topic+queueId的所有consumeQueue文件,里面也有一个M...
2018-05-15 18:11:52
420
原创 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
439
原创 netty笔记三 ChannelPipeline
1.netty的ChannelHandler设计,使用了接口的适配器模式ChannelHandler ChannelHandlerAdapter ChannelInboundHandler ChannelInboundHandlerAdapter ChannelOutboundHandler ChannelOutboundHandlerAdapter2.channe...
2018-04-17 17:39:11
305
原创 volatile变量特性
volatile变量特性--摘自《Java并发编程的艺术》volatile变量自身具有下列特性:1.可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。2.原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性。从内存语义的角度来说,volatile与锁有相同的效果:volatile写和锁的释放...
2018-04-17 16:24:31
381
原创 图 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
327
原创 分布式锁 以及 频率限制器
最近工作中遇到几个问题,记录一下1 分布式锁 最近遇到一个类似减库存问题,原本以为使用数据库事务,加上这个业务调用不频繁,应该没有问题。但是测试环境发现前端兄弟有个bug每次提交了两次,项目使用f5代理,两个节点,刚好一边一个请求,造成数据库数据混乱。发现后,我先将serviceImpl中的@Transactional的isolation设置成Isolation.SERIALIZABLE,虽
2018-01-13 01:26:41
787
原创 jdk 常用的queue
queue队列,先进先出1、优先级队列,元素有优先级public class PriorityQueue extends AbstractQueue implements java.io.Serializable队列使用堆排序,二叉树,使用数组保存数据,非线程安全入队,新节点一直跟自己的父节点比较,不复合比较条件,交换位置,直到根节点 public boolean of
2017-12-01 00:02:38
1772
原创 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
242
原创 netty笔记1
EventLoopGroup.next()得到EventLoopEventLoopGroup初始化时候会实例化一个EventLoop[]数组,使用的是EventLoopGroup的newChild方法真正干活的是EventLoop使用EventLoopGroup的register方法会将channel注册到一个EventLoop上在AbstractBootstrap的ini
2017-09-06 18:05:32
201
原创 红黑树笔记
红黑树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
250
原创 spring笔记6 容器加载过程、bean初始化
AbstractApplicationContextpublic void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. prepareRefr
2017-08-03 18:38:24
383
原创 druid 的filter设计原理
druid是优秀的开源数据库连接池,据称性能很好,尤其以统计监控著称。其统计功能实际就是利用它提供的filter实现,通过扩展filter我们可以监控connection,(Prepared)Statement,resultSet 的任何方法。1、首先java数据库操作过程datasource->connection->(Prepared)Statement->result
2017-07-21 18:53:43
4990
1
原创 dubbo 5 Listener和Filter
前面的服务提供者和消费者暴漏和引用过程中首先都是用的Protocol,而且使用ExtensionLoader加载的adaptive的Protocol,最终得到的是ProtocolListenerWrapper->ProtocolFilterWrapper->{RegistryProtocol,DubboProtocol}1、ProtocolListenerWrapper如何使用
2017-07-14 11:06:03
682
原创 mybatis 插件原理
1、mybatis初始化每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionF
2017-07-13 17:56:54
274
原创 dubbo 4 服务消费者到提供者过程
服务消费者到服务提供者过程1)首先在初始化nettyServer和nettyClient时候都设置了NettyHandler,那么它的ChannelHandler handler是下面的这条链MultiMessageHandler->HeartbeatHandler->AllChannelHandler->DecodeHandler->HeaderExchangeHandler->Dubb
2017-07-04 19:11:11
564
原创 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
1916
原创 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
584
原创 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
239
原创 spring事务 connection
spring事务使用了aop、动态代理,而数据库的事务最终是作用在connection上面的,那么spring整个过程中开头的begin,结束的commit,rollback如何保证使用的是同一个connection,以及mybatis如何拿到这条connection执行sql,还有再加上spring事务的传播特性的时候connection变化呢一、spring事务从开启到结束使用同一条con
2017-06-30 00:26:18
1106
原创 rpc netty
RPC框架比如dubbo,主体实现大概是,客户端与服务端商定使用同一种传输协议,服务端接受客户端的连接,客户端使用动态代理,根据不同的协议生成 不同的代理类,代理类中就是协议的客户端实现。服务器的地址和端口可以使用注册中心来通知。下面使用netty来简单实现。1、请求、响应封装类,使用jdk的序列化,序列化工具类package com.rpc.msg;import ja
2017-04-11 22:11:36
273
原创 java7 AbstractQueuedSynchronizer
利用AbstractQueuedSynchronizer同步器还可以实现共享锁,比如信号量Semaphore同步器的共享式获取状态,获取锁 public final void acquireShared(int arg) { if (tryAcquireShared(arg) < 0) doAcquireShared(arg); }
2017-03-15 16:45:44
312
原创 java7 ReentrantLock
重入锁,独占式一、ReentrantLock.lock()->sync.lock()1、NonfairSyncfinal void lock() { if (compareAndSetState(0, 1))//尝试修改状态,若成功说明没有线程修改过,获取锁 setExclusiveOwnerThread(Thread.current
2017-03-15 15:11:35
265
原创 java7 concurrentHashMap
一张简易图java7 concurrentHashMap使用分段锁来提高效率,非常有学习意义,比起全部使用同步方法的hashTable效率要高很多上图的结构,外层是一个segment的数组,segment是一个继承ReentrantLock的类,其内部又有一个hashEntry的数组,每个hashEntry节点有一个next节点,类似于hashMap的结构。多线
2017-03-13 14:53:13
326
原创 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
240
原创 归并、二分插入排序、快速排序
经常使用Collections.sort(List list, Comparator c)来排序,jdk怎么实现的,1.7有几个方法mergeSort()使用归并排序TimSort.sort()使用二分插入排序,和优化后归并排序//java.util.Arrays 1.7//归并排序,把数组拆分,如果需要子数组继续拆分(递归),拆成小数组比较,然后依次往上合并 pr
2017-01-22 16:49:23
281
原创 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
1661
1
原创 spring 笔记4 BeanDefinitionReader
BeanDefinitionReader 如何从resource把BeanDefinition注册到工厂BeanDefinitionReader AbstractBeanDefinitionReader XmlBeanDefinitionReader1 、BeanDefinitionReader#loadBeanDefinitions(Resource reso
2017-01-09 20:38:17
389
原创 spring 笔记3 BeanFactory
先来两张图1、顶层接口BeanFactory ,获取bean等2、直接继承的有三个接口:AutowireCapableBeanFactory:不太明白作用HierarchicalBeanFactory:描述父工厂作用ListableBeanFactory:提供了操作工厂所有bean信息方法3、下面的继承关系可以分两条路线看:第一条:Def
2017-01-06 15:38:43
318
原创 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
3048
原创 spring笔记一
顶层接口BeanFactory ApplicationContextbean信息解析到BeanDefinitionpublic abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccessor implements BeanDefinition, Cloneable {
2016-12-12 18:02:48
233
原创 spring 事务 笔记
TransactionProxyFactoryBean afterPropertiesSet() ProxyFactory proxyFactory = new ProxyFactory(); 设置了前后拦截器,以及处理事务的拦截器,代理接口TransactionInterceptor 实现 MethodInterceptor 环绕通知 invoke方法 使用具体事
2016-07-19 14:27:38
331
原创 spring security 一个验证码登录例子
看完shiro,在看spring security感觉快了很多,最开始看spring security的时候,非常晕,看完我觉得spring security做了太多事,以至于程序员都不知道,是怎么实现的,这样的后果就是 当出现错误,或者需要修改的时候感觉无从下手。个人理解,若有错误,请指正。spring security跟shiro类似,都是使用过滤器来认证和授权,不同的
2016-07-11 17:03:05
23772
1
原创 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
4112
原创 Shiro 3 filter
首先Shiro提供的过滤器继承关系过滤器的过滤方法是dofilter,最终可以找到AdviceFilter中的doFilterInternal这个类中还有一个preHandle方法 返回true or false决定是否通过过滤器,这个方法供子类继承重写,实现不同过滤器业务比如LogoutFilter中的 @Override protected boolean
2016-06-28 10:00:01
678
原创 Shiro 3 shiroFilter
ShiroFilterFactoryBean中getObject()方法 public Object getObject() throws Exception { if (instance == null) { instance = createInstance(); } return instance;
2016-06-24 17:18:26
1441
原创 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
2551
原创 Shiro 1 , 登录过程
UsernamePasswordToken token = new UsernamePasswordToken(username, password); token.setRememberMe(true); Subject subject = SecurityUtils.getSubject(); try { subject.logi
2016-06-22 20:08:45
575
原创 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
798
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人