java
文章平均质量分 77
ry_______
这个作者很懒,什么都没留下…
展开
-
Proxy
package com.proxy;public interface Moveable { public String run(String a,String b);}package com.proxy;import java.util.Random;public class Car implements Moveable { public String run原创 2016-05-10 01:16:10 · 227 阅读 · 0 评论 -
druid 的filter设计原理
druid是优秀的开源数据库连接池,据称性能很好,尤其以统计监控著称。其统计功能实际就是利用它提供的filter实现,通过扩展filter我们可以监控connection,(Prepared)Statement,resultSet 的任何方法。1、首先java数据库操作过程datasource->connection->(Prepared)Statement->result原创 2017-07-21 18:53:43 · 4943 阅读 · 1 评论 -
netty笔记1
EventLoopGroup.next()得到EventLoopEventLoopGroup初始化时候会实例化一个EventLoop[]数组,使用的是EventLoopGroup的newChild方法真正干活的是EventLoop使用EventLoopGroup的register方法会将channel注册到一个EventLoop上在AbstractBootstrap的ini原创 2017-09-06 18:05:32 · 190 阅读 · 0 评论 -
jdk 常用的queue
queue队列,先进先出1、优先级队列,元素有优先级public class PriorityQueue extends AbstractQueue implements java.io.Serializable队列使用堆排序,二叉树,使用数组保存数据,非线程安全入队,新节点一直跟自己的父节点比较,不复合比较条件,交换位置,直到根节点 public boolean of原创 2017-12-01 00:02:38 · 1750 阅读 · 0 评论 -
分布式锁 以及 频率限制器
最近工作中遇到几个问题,记录一下1 分布式锁 最近遇到一个类似减库存问题,原本以为使用数据库事务,加上这个业务调用不频繁,应该没有问题。但是测试环境发现前端兄弟有个bug每次提交了两次,项目使用f5代理,两个节点,刚好一边一个请求,造成数据库数据混乱。发现后,我先将serviceImpl中的@Transactional的isolation设置成Isolation.SERIALIZABLE,虽原创 2018-01-13 01:26:41 · 763 阅读 · 0 评论 -
volatile变量特性
volatile变量特性--摘自《Java并发编程的艺术》volatile变量自身具有下列特性:1.可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。2.原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性。从内存语义的角度来说,volatile与锁有相同的效果:volatile写和锁的释放...原创 2018-04-17 16:24:31 · 366 阅读 · 0 评论 -
netty笔记三 ChannelPipeline
1.netty的ChannelHandler设计,使用了接口的适配器模式ChannelHandler ChannelHandlerAdapter ChannelInboundHandler ChannelInboundHandlerAdapter ChannelOutboundHandler ChannelOutboundHandlerAdapter2.channe...原创 2018-04-17 17:39:11 · 293 阅读 · 0 评论 -
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 · 423 阅读 · 0 评论 -
RocketMQ 笔记2 文件存储
MappedFileQueue 代表一类文件集合,比如consumequeue/{topic}/{queueId}/目录下的所有文件MappedFile 代表一个文件,是对这个文件操作的封装CommitLog 代表所有的commitLog文件,里面有一个MappedFileQueue的字段ConsumeQueue 代表了topic+queueId的所有consumeQueue文件,里面也有一个M...原创 2018-05-15 18:11:52 · 398 阅读 · 0 评论 -
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 · 536 阅读 · 0 评论 -
rpc netty
RPC框架比如dubbo,主体实现大概是,客户端与服务端商定使用同一种传输协议,服务端接受客户端的连接,客户端使用动态代理,根据不同的协议生成 不同的代理类,代理类中就是协议的客户端实现。服务器的地址和端口可以使用注册中心来通知。下面使用netty来简单实现。1、请求、响应封装类,使用jdk的序列化,序列化工具类package com.rpc.msg;import ja原创 2017-04-11 22:11:36 · 269 阅读 · 0 评论 -
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 · 235 阅读 · 0 评论 -
java8 HashMap
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable大致原理:一个数组(table)存储链表节点(Node)或者树节点(TreeNode )构造函数:initialCapacity 初始容量( static final int DEFAULT_INITIAL_CAPA原创 2016-05-10 16:31:43 · 242 阅读 · 0 评论 -
java8 HashMap 线程不安全
HashMap线程不安全主要体现在扩容方法上测试:import java.util.HashMap;public class Test { public static final HashMap hashMap=new HashMap(); public static void main(String[] args) { Thread t1 = new Thread(){原创 2016-05-10 19:01:18 · 527 阅读 · 0 评论 -
java8 HashMap table寻址
在put和get方法中都需要根据key找到table中的index,源码为:n = table.lengthstatic final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }i = (n - 1)原创 2016-05-11 11:17:40 · 421 阅读 · 0 评论 -
java8 ConcurrentHashMap
node结构 static class Node implements Map.Entry { final int hash; final K key; volatile V val; volatile Node next; Node(int hash, K key, V val, Node next) {原创 2016-05-31 19:12:24 · 377 阅读 · 0 评论 -
java 观察者模式Observable Observer
被观察者继承Observable 观察者实现Observer过程:1、调用Observable 的addObserver(Observer) 给被观察者添加观察者2、在观察者Observer的update(Observable o, Object arg);的方法中做业务处理3、调用Observable 的setChanged()方法把changed设置为true,调用n原创 2016-05-19 15:55:29 · 192 阅读 · 0 评论 -
java Callable Future
@FunctionalInterfacepublic interface Runnable { public abstract void run();}@FunctionalInterfacepublic interface Callable { V call() throws Exception;}public interface Future {原创 2016-06-01 16:36:41 · 189 阅读 · 0 评论 -
同步与异步 阻塞与非阻塞
作者:严肃链接:http://www.zhihu.com/question/19732473/answer/20851256来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。1.同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是转载 2016-06-08 10:51:33 · 188 阅读 · 0 评论 -
java8 NIO FileChannel例
package com.kd.nio;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;public class FileChannelTe原创 2016-06-08 11:15:03 · 482 阅读 · 0 评论 -
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 · 773 阅读 · 0 评论 -
java8 函数式编程
个人简单理解:方法的参数可以是函数,这种函数我们一般使用Lambda表达式,但是java是面向对象编程语言,所以对于这样的函数需要给出类型,就有了函数式接口(Functional接口)定义函数式接口就是一个具有一个方法的普通接口。像这样的接口,可以被隐式转换为lambda表达式。java.lang.Runnable与java.util.concurrent.Callable是函数式接口原创 2016-06-03 09:18:57 · 949 阅读 · 0 评论 -
RocketMQ 笔记4 HA主从同步
broker主从同步包括同步双写 和 异步复制, 其实这两种都是使用相同的方式传输的,同步双写只是在主线程上阻塞了一段时间,等待传输结果,返回给producermaster针对每一个slave之间会有一个长连接,都会保存已经传输的offset,启动一个线程commitlog最大offset大于已经传输的offset时候,就会通过这个连接往slave写数据,格式为:thisOffset(8字节)+ ...原创 2018-05-16 18:50:31 · 1173 阅读 · 0 评论