随笔分类 - JAVA
Netty 的 inbound 与 outbound, 以及 InboundHandler 的 channelInactive 与 OutboundHandler 的 close
摘要:先看一个例子.有一个简单 Serverpublic class SimpleServer { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioE...
阅读全文
布隆过滤器
摘要:参照 :http://billmill.org/bloomfilter-tutorial/简介布隆过滤器是一个用来判断某元素是否在全集中的工具.实际上它是一个有 m 个槽的位图, 他拥有 k 个 hash 函数, 每个元素进来的时候会通过 k 个 hash 函数映射到任意 k 个槽中, 并将槽置为 ...
阅读全文
Java CopyOnWriteArrayList
摘要:1. 为什么需要 CopyOnWriteArrayListArrayList 的内部实现是一个数组, 并且是动态扩容的, 当插入数据时, 先判断数组是否需要扩容, 如果需要扩容, 则先扩容, 再插入数据, 也就说插入由三步组成1) 检查是否需要扩容2) 扩容/不扩容3) 数据加入到数组代码如下 ...
阅读全文
Java 工具集
摘要:在 sudo -u tomcat 状态下执行1. jstackjstack pid >> file : 打印当前 thread stack 状态CPU 高分析流程使用jstack分析步骤1) top 查看java进程2) top -p -H 查看消耗cpu的线程3) 转为 十六进制4) sudo...
阅读全文
解決 java.security.cert.CertificateException: Certificates does not conform to algorithm constraints
摘要:找到jre/lib/security/java.security将jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize < 2048改为jdk.certpath.disabledAlgorithms=
阅读全文
TDDL DataSource
摘要:TDDL DataSource 分为 AtomDataSource GroupDatasource他们两者没有依赖关系, 都实现了 JDBC 规范, 可以作为独立的 datasource 单独使用AtomDataSourceAtomDataSource 负责 diamond 动态配置, 它可以通过 ...
阅读全文
Cobar-Client 实现策略总结
摘要:1. 数据源 DataSourceCobarClient 的 DataSource 分为三层ICobarDataSourceService: 封装了多个 DataSourceDescriptor, 以及 HA 包装的IHADataSourceCreatorDataSourceDescriptor: ...
阅读全文
一个使用高并发高线程数 Server 使用异步数据库客户端造成的超时问题
摘要:现象今天在做一个项目时, 将 tomcat 的 maxThreads 加大, 加到了 1024, tomcat 提供的服务主要是做一些运算, 然后插入 redis, 查询 redis, 最后将任务返回给客户端在做压测时, 同时开了 1000 个线程, 并发发起 http 请求去访问 tomcat 的...
阅读全文
Hessian 初探
摘要:Hessian 是一个序列化协议, 他的优点在于比 Java 原生的对象序列化/反序列化速度更快, 序列化出来以后的数据更小.序列化协议跟应用层协议无关, 可以将 Hessian 序列化以后的数据放在 HTTP Body 里, 也可以放在 DUBBO 里, 或者直接用 Socket 传输下面是一个使...
阅读全文
关于 tomcat nio connector, servlet 3.0 async, spring mvc async 的关系
摘要:tomcat 的org.apache.coyote.http11.Http11NioProtocol Connector 是一个使用 Java NIO 实现的异步 accept 请求的 connector它的作用是不需要为每个请求建立一个线程, 而是使用固定的accept线程 accept 多个请求...
阅读全文
HashedWheelTimer 原理
摘要:HashedWheelTimer 是根据Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility这篇论文做出来的.HashedWheelTim...
阅读全文
Netty 中 IOException: Connection reset by peer 与 java.nio.channels.ClosedChannelException: null
摘要:最近发现系统中出现了很多 IOException: Connection reset by peer 与 ClosedChannelException: null深入看了看代码, 做了些测试, 发现 Connection reset 会在客户端不知道 channel 被关闭的情况下, 触发了 eve...
阅读全文
Hadoop + ZK + HBase 环境搭建
摘要:Hadoop 环境搭建参考资料:http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/ClusterSetup.htmlhttp://hadoop.apache.org/docs/r2.4.1/hadoop-ya...
阅读全文
ArrayBlockingQueue, LinkedBlockingQueue, ConcurrentLinkedQueue, RingBuffer
摘要:1. ArrayBlockingQueue, LinkedBlockingQueue, ConcurrentLinkedQueueArrayBlockingQueue, LinkedBlockingQueue 继承自 BlockingQueue, 他们的特点就是 Blocking, Blocking...
阅读全文
Redis 性能问题的记录
摘要:最近线上使用redis, 查询的情况不甚理想, 这个查询操作是个 lua 脚本, 包含如下操作开发机 redis, 没有其他干扰, 插入的 zset 有 5000 member 左右, 使用的 redis 客户端是 spring-data, 底层 jedis 实现, 另外自己封装了一层, 单线程单客...
阅读全文
Java 内存管理白皮书
摘要:1. 垃圾回收器 职责 分配内存 保证有引用对象不被回收 保证无引用对象被回收 设计方式 串行(Serial)与并行(Parallel) 串行的回收方式, 每次只能执行一种操作. 例如, 在多 cpu 的情况下, 只能有一个 cpu 来执行回收. 而并行则可以将回收任务分为多部分交给不同的 cpu
阅读全文
Effective Java - Item 1: Consider static factory methods instead of constructors
摘要:考虑使用静态工厂方法来替代构造方法, 这样的做的好处有四点.1. 更好的表意有的构造方法实际上有特殊的含义, 使用静态工厂方法能更好的表达出他的意思. 例如BigInteger(int, int, Random), 它返回一个可能是素数的 BigInteger. 使用工厂方法 BigInteger....
阅读全文
Grizzly HTTP CoDec ThreadCache 浅析
摘要:Grizzly 的 HTTP CoDec 实现方法更 Netty 的 CoDec 完全不同, 他们思想上的差异主要在于:1. 解码方式Grizzly 使用流式解码, 它的HttpHeader对象内部都是用的DataChunk这样的类来存储数据, 就是像是将一个类都分好格子, 里面有 InitialL...
阅读全文
HttpAsyncClient的连接池使用
摘要:代码示例 public static void main(String[] args) throws Exception { ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(); Pool...
阅读全文
Java 线程与锁
摘要:Synchronizationsynchronized语法可以获取锁, 当其他线程持有锁的时候该线程想要获取锁将会进入等待状态, 直到没有其他线程持有该锁显示使用 synchronized (lock) 将会获取lock对象的锁没有显示指定锁对象将会获取当前类的class对象的锁Wait and N...
阅读全文