Author Archive

实战Spring事务传播性与隔离性

一、事务传播性

1.1 什么是事务的传播性

事务的传播性一般在事务嵌套时候使用,比如在事务A里面调用了另外一个使用事务的方法,那么这俩个事务是各自作为独立的事务执行提交,还是内层的事务合并到外层的事务一块提交那,这就是事务传播性要确定的问题。下面一一介绍比较常用的事务传播性。

Read more

Spring事务配置解惑

一、项目中spring+mybaits xml配置解析

一般我们会在datasource.xml中进行如下配置,但是其中每个配置项原理和用途是什么,并不是那么清楚,如果不清楚的话,在使用时候就很有可能会遇到坑,所以下面对这些配置项进行一一解说

Read more

JDK8中新增原子性操作类LongAdder

LongAdder简单介绍

LongAdder类似于AtomicLong是原子性递增或者递减类,AtomicLong已经通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说性能已经很好了,但是JDK开发组并不满足,因为在非常高的并发请求下AtomicLong的性能不能让他们接受,虽然AtomicLong使用CAS但是CAS失败后还是通过无限循环的自旋锁不断尝试的

Read more

JDK8中StampedLock原理探究

StampedLock是并发包里面jdk8版本新增的一个锁,该锁提供了三种模式的读写控制,三种模式分别如下:

Read more

常用Web框架SpringMVC及WebX级联容器原理探究

一、前言

使用一个东西最好研究下他的原理,因为如果知其然那么在排查问题时候会很方便,本文则针对常用web框架SpringMVC和集团的WebX框架的容器级联关系进行探究。

Read more

论Spring中循环依赖的正确性与Bean注入的顺序关系

一、前言

最近在做项目时候遇到一个奇葩问题,就是bean依赖注入的正确性与bean直接注入的顺序有关系,但是正常情况下明明是和顺序没关系的啊,究竟啥情况那,不急,让我一一道来。

Read more

Mybatis中使用流式查询避免数据量过大导致OOM

一、前言

前面介绍了裸露JDBC 方式使用流式编程,下面介绍下MYbatis中两种使用流式查询方法

Read more

Mysql中使用JDBC流式查询避免数据量过大导致OOM

一、前言

java 中MySQL JDBC 封装了流式查询操作,通过设置几个参数,就可以避免一次返回数据过大导致 OOM。

Read more

利用MongoDB 分片集群(Sharded Cluster)实现高性能大数据处理

一、前言

考虑这样一个场景,有个数据量有10多亿数据的设备库,里面存放了注册的设备的信息,并且设备数据还可能会递增,然后业务集群需要对指定条件的设备群发信息,那么如何才能高效的来处理这个问题那?

 

Read more

MongoDB和MySQL对比(译)

一、概要

几十年来,关系型数据库已经成为企业应用程序的基础,自从MySQL在1995年发布以来,它已经成为一种受欢迎并且廉价的选择。然而随着近年来数据量和数据的不断激增,非关系数据库技术如MongoDB应运而生,以满足新应用的需求。 MongoDB用于新的应用程序,以及扩充或替换现有的关系型基础设施(关系型数据库)。

 

Read more

JDK动态代理代理与Cglib代理原理探究

一、前言

Java中常见的代理有JDK代理和Cglib代理,无论是AOP实现还是mybaits动态生成数据库操作类无一不是通过代理来搞的,下面讲解下原理以及比较

Read more

并发队列-无界阻塞延迟队列DelayQueue原理探究

一、前言

DelayQueue队列中每个元素都有个过期时间,并且队列是个优先级队列,当从队列获取元素时候,只有过期元素才会出队列。
Read more

Java中调度线程池ScheduledThreadPoolExecutor原理探究

一、 前言

前面讲解过Java中线程池ThreadPoolExecutor原理探究,ThreadPoolExecutor是Executors中一部分功能,下面来介绍另外一部分功能也就是ScheduledThreadPoolExecutor的实现,后者是一个可以在一定延迟时候或者定时进行任务调度的线程池。
Read more

常用开源框架扩展清单之原理

一、前言

评价一个框架是否是优秀的,其中必有一点是该框架是否留足了可扩展的接口。我们在实际做项目中很多情况下就是基于某某框架,然后在这个框架留出的扩展接口上进行业务开发,所以很有必要对这些框架留出了哪些扩展点,这些扩展点是干啥用的有个心知肚明的了解。本文针对作者项目中用到的tomcat,spring扩展点进行记录,作为记录笔记,以便查找。
Read more

ClassLoader解惑

一、什么是Classloader

一个Java程序要想运行起来,首先需要经过编译生成 .class文件,然后创建一个运行环境(jvm)来加载字节码文件到内存运行,而.class 文件是怎样被加载中jvm 中的就是Java Classloader所做的事情。

那么.class文件什么时候会被类加载器加载到jvm中运行那?比如执行new操作时候,当我们使用Class.forName(“包路径+类名”),Class.forName(“包路径+类名”,classloader),classloader.loadclass(“包路径+类名”);时候就触发了类加载器去类加载对应的路径去查找*.class,并创建Class对象。
Read more

return top