- 博客(18)
- 收藏
- 关注
原创 Spring IOC源码分析(一)
ps:整个系列之前使用有道云整理的,所以代码都是截图格式1.相关类介绍1.1 Resource类Resource类是Spring对资源的抽象。它的每一个实现类都代表了一种资源的访问策略,如 ClassPathResource、RLResource、FileSystemResource 等。1.2 ResourceLoader类有了资源,就应该有资源加载,Spring ...
2019-05-16 11:22:52
232
原创 JVM运行时数据区域
以下所有内容摘自《深入理解Java虚拟机》第二版 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(JavaSE 7版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行...
2018-10-24 12:50:36
182
原创 队列同步器
1.队列同步器简介 队列同步器AbstractQueuedSynchronizer(以下简称同步器),是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作,并发包的作者(Doug Lea)期望它能够成为实现大部分同步需求的基础。 同步器的主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同...
2018-08-06 17:42:22
202
转载 数据库事务隔离级别
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。1.Read uncommitted 读未提交公司发工资了,领导把5000元打到singo的账号上,但是该事务并未提交,而singo正好去查看账户,发现工资已经到账,是...
2018-08-04 17:08:56
162
转载 B树和B+树简介
一.B树一种平衡的多叉树,称为B树(或B-树、B_树)。一棵m阶B树是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:1、根结点至少有两个子女;2、每个非根节点所包含的关键字个数 j 满足:m/2 - 1 <= j <= m - 1;3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:m/2 <= k ...
2018-08-04 13:12:06
1367
原创 贪婪算法的小例子记录
一 定义 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关二 例子(1)求字符串中最大长度的回文串这...
2018-08-04 13:11:54
1253
原创 Java双重检查锁的错误
1.错误的双重检查锁实现public class DoubleCheckedLocking { // 1 private static Instance instance; // 2 public static Instance getInstance() { // 3 if (instance == null) { // 4:第一次检查 synchr...
2018-07-26 20:33:55
539
1
原创 Final域的重排序规则
*摘自《Java并发编程的艺术》——方腾飞1.final类型为基本类型时对于final域,编译器和处理器要遵守两个重排序规则。1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。2)初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。总结来说,对final域的写入操作(初始化...
2018-07-26 18:36:42
1723
原创 volatile的特性
*摘自《Java并发编程的艺术》——方腾飞1.volatile的特性 理解volatile特性的一个好方法是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面通过具体的示例来说明,示例代码如下。class VolatileFeaturesExample { volatile long vl = 0L; // 使用volat...
2018-07-25 20:07:51
1666
原创 Java5及以上版本中对内存读写的原子性
从JSR-133内存模型开始(即从JDK5开始),仅仅只允许把一个64位long/double型变量的写操作拆分为两个32位的写操作来执行,任意的读操作在JSR-133中都必须具有原子性(即任意读操作必须要在单个读事务中执行)...
2018-07-25 18:13:07
229
原创 happens-before,内存重排序,数据依赖的理解
在JMM(Java内存模型)中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在happens-before关系。happens-before原则规则:程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作; 锁定规则:一个unLock操作先行发生于后面对同一个锁的lock操作; volatile变量规则:对一个变量的写操作先行发生于后...
2018-07-24 12:43:13
875
1
原创 Redis集群批量操作
众所周知,Redis集群是没法执行批量操作命令的,如mget,pipeline等。这是因为redis将集群划分为16383个哈希槽,不同的key会划分到不同的槽中。但是,Jedis客户端提供了计算key的slot方法,已经slot和节点之间的映射关系,通过这两个数据,就可以计算出每个key所在的节点,然后使用pipeline获取数据。具体代码如下:/** * 根据key计算sl...
2018-07-23 17:32:22
4984
1
原创 Redis相关问题和解决方法记录
1.缓存穿透 缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中。所以每次查询这条数据的时候,都先查一遍缓存,然后再查一遍数据库。解决的办法是,在缓存中保存一个空值,来标记该数据在数据库中不存在,同时给该值设置一个较短的过期时间,防止被恶意攻击时产生太多的key。2.缓存无底洞 键值数据库由于通常采用哈希函数将key映射到各个节点上,造成key的...
2018-07-23 16:53:40
458
原创 Java泛型理解
Java集合工具类Collections里定义了sort方法,里面的泛型很有意思:<T extends Comparable<? super T>>对于这个泛型,我们来理解一下:首先,泛型T是要继承Comparable接口的,这个没什么疑问。重点是Comparable接口里定义的泛型,必须是泛型T或者泛型T的父类。什么意思呢?如果我有两个类,A和B,A是B的父类...
2018-07-19 13:18:09
693
原创 Java泛型集合理解
1.只读集合使用<? extends T>定义的集合,只能读取,不能插入。原因是什么呢?我们从头开始分析:首先,我们知道,<? extends T>修饰的集合,表示该集合内部的元素类型只能是T或者是T的子类,比如,有A,B,C三个类,B类和C类继承了A类,<? extends A>的集合,可以插入A,B,C三个子类的实例。那么,当我们插入这个三个实例之后...
2018-07-19 12:50:47
2424
原创 java四种引用
1.强引用强引用指向的对象,在任何时候都不会被回收。除非将引用置为null/** * 强引用 */public class StrongReferences { public static void main(String[] args) { //创建一个对象,new出来的对象都是分配在java堆中的 Sample sample = new Samp...
2018-07-18 12:00:13
162
原创 volatile关键字修饰对象时注意事项
下面的代码实现无锁循环打印A,B,C的功能,但是volatile关键字用错的话,会导致数据不打印1.当volatile修饰公共的成员变量时public class ThreadTest { private static volatile C c = new C(); public static void main(String[] args) { new Thread(n...
2018-07-10 18:30:40
7260
原创 线程池参数理解
之前学习的并发知识,现在记录一下主要参数说明线程池(ThreadPoolExecutor),Jdk1.5版本开始使用,构造方法参数如下(来自ThreadPoolExecutor源码):corePoolSize:核心线程数,线程池启动时就会创建的线程数量。即使核心线程是空闲的,也不会被回收,除非调用了allowsCoreThreadTimeOut方法为trueexecutorS...
2018-07-02 18:15:03
4531
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人