- 博客(10)
- 收藏
- 关注
原创 lintcode_99.重排链表
题目给定一个链表L: L0→L1→…→Ln-1→Ln, 重新排列后为:L0→Ln→L1→Ln-1→L2→Ln-2→… 必须在不改变节点值的情况下进行原地操作。样例给出链表 1->2->3->4->null,重新排列后为1->4->2->3->null。思路此处使用一个双向链表,在原有的链表上进行操作。依次循环只需把 n...
2018-04-13 18:47:40
199
原创 AbstractQueuedSynchronizer
文章 https://www.2cto.com/kf/201608/540926.html 是一篇对 aqs 的底层工作机制写的很好的文章,同时本文也是对该文章的读后总结和心得。队列同步器 AbstractQueuedSynchronizer (以下简称同步器),是用来构建锁或者其他同步组件的基础框架,它使用了一个 volatile 修饰的变量 state 来维护同步的状态,通过内置的FIFO...
2018-04-11 17:45:48
536
原创 juc 并发包的基础 cas 与 volatile
CAS :即一种对内存中的数据进行操作的指令,而且该操作是原子的操作其过程如下:首先CPU将内存中的将要被修改的数据与预期的值进行比较,如果这两个值相等,CPU则会将内存中数值替换为新值,否则不做操作。使用非阻塞算法,定义一个线程的失败或者挂起,是不会影响其它线程的失败或者挂起的。该操作是直接修改内存中的值,所以可以认为该操作是原子操作。但 CAS 存在 ABA 问题,假设存在 T1,T2 两...
2018-04-11 16:46:38
245
原创 多线程的状态转换及多线程的内存模型实现
线程的状态线程从开始运行到消亡,可能会经历五种状态,如下图: -初始状态:创建了一个 Thread 对象,并且该对象已经获取到了要执行的任务 Runnbale 实例; -可运行状态: 线程在以下几种情况会转成可运行状态 1丶该线程对象已经调用了 start() 方法; 2丶线程的时间片用完; 3丶线程调用 yieId 方法; ...
2018-04-10 10:08:30
236
原创 红黑树详解
hashmap数据结构jdk 在 1.8 版本对 hashmap 的数据结构做了一次改动,即是当底层数据节点对应的链表长度大于等于 8 的时候,会把当前节点对应的链表转成红黑树,当红黑树的节点总数小于等于 6 的时候,又会把节点对应的红黑树结构转成链表。链表转成红黑树的阈值为 8 ,红黑树转成链表的阈值为 6 ,两个阈值相差 2 这样设计的目的是防止链表与红黑的频繁转换降低 hashmap 的...
2018-04-09 15:02:42
365
原创 hashmap1.7 的数据结构及死锁理解
数据结构hashmap1.7 :先讲链表,再讲 hashmap 的数据结构数据结构描述的是在虚拟机堆中对象与对象之间的一种关系。在 hashmap1.7 的底层是使用数组加链表的形式。使用数组作用是可以根据 key 值计算它的 hashCode,再根据 hashCode 的值可以快速定位到当前的 entry 是保存到数组的哪个元素(每个数组的元素都可以组成一个链表,当前元素是链表的尾节点)对应...
2018-04-08 09:57:38
1628
原创 JVM 运行时数据区
我们有没有想过这样一个问题,当我们在写代码的过程中 new 一个对象的时候,这个对象的创建过程是怎样的?jvm 会在什么地方为这个对象分配内存?为这个对象分配的内存,当这个对象无用之后 jvm 又是怎么回收内存的?jvm 又是怎样划分管理内存?jvm 的运行时数据区: 程序计数器:在 java 代码转译成字节码时,程序计数器给编译好的字节码添加行号,这样这些字节码就以程序计数器的编号来作...
2018-04-04 00:27:58
140
原创 Spring 对配置文件 xml 的解析
在 Spring 框架中,xml 配置文件的读取是 Spring 中重要的功能,因为 Spring 的大部分功能都是以配置作为切入点的。Spring 通过对配置文件的读取,为我们管理所有的 bean 对象。对于代码 BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource(“spring-aop-aspectj.xml
2018-01-23 20:00:00
318
原创 git 中的 tag 常规使用
项目开发中使用 git 管理代码。当我们完成一个完整的稳定的可以上线的版本开发时,把该版本代码提交到 git 管理往往需要给该版本打上相应的 tag(标签) 。版本代码被打上 tag 后就会被封存起来,以后就可以根据相应的 tag 找到对应的版本,防止版本代码丢失。git标签分为两种类型:轻量标签和附注标签。轻量标签是指向提交对象的引用,附注标签则是仓库中的一个独立对象。创建标签(tag)命令
2017-12-15 15:24:31
3893
原创 Java RMI详解
一丶RMI 定义 RMI(Remote Method Invocation):远程方法调用。能够让某个 java 虚拟机上的对象调用运行在另一个 java 虚拟机上的对象的方法,就像调用本地方法一样。这两个虚拟机可以是运行在相同计算机上不同组件的不同进程中,也可以是运行在网络上不同计算机的当中,解决系统之间的通信问题。二丶RMI调用时序图
2017-11-29 17:23:29
282
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人