摘要: 0. 简介tair 是淘宝自己开发的一个分布式 key/value 存储引擎. tair 分为持久化和非持久化两种使用方式. 非持久化的 tair 可以看成是一个分布式缓存. 持久化的 tair 将数据存放于磁盘中. 为了解决磁盘损坏导致数据丢失, tair... 阅读全文
posted @ 2018-07-20 08:43 john8169 阅读(530) 评论(0) 推荐(0) 编辑
摘要: 1. NUMA与SMPSMP(Symmetric Multi-Processor),即对称多处理器结构,指服务器中多个CPU对称工作,每个CPU访问内存地址所需时间相同。其主要特征是共享,包含对CPU,内存,I/O等进行共享。SMP的优点是能够保证内存一致性... 阅读全文
posted @ 2018-07-20 08:42 john8169 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 0. 前言Unsafe类可以为我们提供高效并且线程安全方式操作变量,直接和内存数据打交道。1. 获取Unsafe实体的方法private static Unsafe getUnsafeInstance() throws SecurityException, ... 阅读全文
posted @ 2018-07-20 08:41 john8169 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 0. 前言常见的限流算法有:令牌桶、漏桶。计数器也可以进行粗暴限流实现。1. 算法介绍1.1 令牌桶算法令牌桶算法是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。令牌桶算法的描述如下:假设限制2r/s,则按照500毫秒的固定速率往桶中添加令牌;桶中最... 阅读全文
posted @ 2018-07-20 08:40 john8169 阅读(928) 评论(0) 推荐(0) 编辑
摘要: 1. 锁优化的思路和方法这里提到的锁优化,是指在阻塞式的情况下,如何让性能不要变得太差。但是再怎么优化,一般来说性能都会比无锁的情况差一点。这里要注意的是,在ReentrantLock中的tryLock,偏向于一种无锁的方式,因为在tryLock判断时,并不... 阅读全文
posted @ 2018-07-15 17:49 john8169 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 0. 前言与synchronized不同的是,Lock完全用Java写成,在java这个层面是无关JVM实现的。在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(... 阅读全文
posted @ 2018-07-15 17:48 john8169 阅读(578) 评论(0) 推荐(0) 编辑
摘要: 0. 前言目前在Java中存在两种锁机制:synchronized和Lock, Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。数据同步需... 阅读全文
posted @ 2018-07-15 17:47 john8169 阅读(882) 评论(0) 推荐(0) 编辑
摘要: public class ExceptionTypeTest { public void doSomething()throws ArithmeticException{ System.out.println(); ... 阅读全文
posted @ 2018-07-15 17:46 john8169 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 0. 前言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁, 但是随着Java SE1.6对Synchronized进行了 各种优化 之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中 为了减少获得锁和... 阅读全文
posted @ 2018-07-15 17:44 john8169 阅读(168) 评论(0) 推荐(0) 编辑
摘要: Java偏向锁(Biased Locking)是Java6引入的一项多线程优化。它通过消除资源无竞争情况下的同步原语,进一步提高了程序的运行性能。偏向锁,顾名思义,它会偏向于第一个访问锁的线程,如果在接下来的运行过程中,该锁没有被其他的线程访问,则持有偏向锁... 阅读全文
posted @ 2018-07-15 17:43 john8169 阅读(1158) 评论(0) 推荐(0) 编辑
摘要: 0. 前言Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编码式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声... 阅读全文
posted @ 2018-07-15 17:42 john8169 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 0. 前言本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务。 通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之。1. Spring 事务属性分析事务管理对于企业应用而言至关重要。它保证了用户的每... 阅读全文
posted @ 2018-07-15 17:40 john8169 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 1. 首先仔细检查一下,Aspect类是不是少了@Component注解(这一点很重要!),只有一个@Aspect注解是不行的。2. 拦截指定注解的规则怎么写?如拦截所有带了RequestMapping的方法首先声明一个写入点来匹配所有要拦截的方法名假如拦截... 阅读全文
posted @ 2018-07-08 22:44 john8169 阅读(552) 评论(0) 推荐(0) 编辑
摘要: 为了验证select 1 与 select 1 from tableName 与 select * from tableName的执行效率,需要测试一下各自执行的时间。于是总结一下,查看mysql语句运行时间的方法。1. show profiles。mysq... 阅读全文
posted @ 2018-07-08 22:43 john8169 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 1. 前言注解是个很奇妙的存在,为什么加上了@Transactional之后,方法会在一个事务的上下文中被执行呢?为什么加上了@Cacheable之后,方法的返回值会被记录到缓存中,从而让下次的重复调用能够直接利用缓存的结果呢?随着对AOP的逐渐应用和了解,... 阅读全文
posted @ 2018-07-08 22:42 john8169 阅读(596) 评论(0) 推荐(0) 编辑
摘要: java问题的排查这么多年几乎没有什么改进,还是老的方法;每年查的问题也都很类似,不会有什么太多特殊的问题出现;java一些很常见的问题基本可以用一个模式去解的(大部分问题,只是有些问题比较复杂)所有的性能优化问题跟排查一个故障没有太大区别,因为最终都体现在... 阅读全文
posted @ 2018-07-08 22:36 john8169 阅读(826) 评论(0) 推荐(0) 编辑
摘要: 1 如何调用他人的远程服务?由于各服务部署在不同机器,服务间的调用免不了网络通信过程,服务消费方每调用一个服务都要写一坨网络通信相关的代码,不仅复杂而且极易出错。 如果有一种方式能让我们像调用本地服务一样调用远程服务,而让调用者对网络通信这些细节透明,那么... 阅读全文
posted @ 2018-07-04 22:53 john8169 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 1. Java序列化工具技术原理比较Binary Formats & language-specific ones JavaBuiltIn(java原生)、JavaManual(根据成员变量类型,手工写)、FstSerliazation、KryoBinary... 阅读全文
posted @ 2018-07-04 08:17 john8169 阅读(2458) 评论(0) 推荐(1) 编辑
摘要: 1. 数据库事务处理中出现的数据不一致的情况在多个事务并发做数据库操作的时候,如果没有有效的避免机制,就会出现种种问题。大体上有四种问题,归结如下:1.1 丢失更新如果两个事务都要更新数据库一个字段X,x=100事务A事务B读取X=100读取X=100写入x... 阅读全文
posted @ 2018-07-02 23:55 john8169 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 0. 前言对于加锁的处理,可以说就是数据库对于事务处理的精髓所在。本文简单分析了MySQL中InnoDB引擎的加锁机制。1. 一次封锁or两段锁?因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会用到哪些数... 阅读全文
posted @ 2018-07-02 23:46 john8169 阅读(118) 评论(0) 推荐(0) 编辑