- 博客(10)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 ReentrantLock原理
ReentrantLock原理 ReentrantLock底层其实实现了AQS的一个同步器 AQS架构 AQS通过一个state和一个FIFO的队列来实现。这个FIFO的是由Node实现 AQS分为2种模式锁:共享锁与独占锁。 共享锁实现AQS的tryAcquireShared-tryReleaseShared方法 独占锁实现AQS的tryAcquire-tryRelease方法 AQS ac...
2019-08-25 22:32:10 135
原创 synchronzied 原理
synchronzied 使用 1. 代码块:锁括号对象 2. 普通方法:锁当前调用对象 3. 静态方法:锁当前class对象 源码解析 1. 代码块上通过javap反编译出来可看到monitorenter和monitorexit对称使用来完成同步。 monitorenter主要判断锁对象对应的monitor计数是否=0,如果是则这个对象对应的monitor计数+1,获取锁成功,否则阻塞。 mo...
2019-08-25 20:20:15 152
原创 JAVA JVM类加载器
类加载器 启动类加载器 bootstrap classloader,加载rt.jar 扩展类加载器 extend classloader,加载lib/ext 应用类加载器 app classloader,加载classpath 自定义类加载器,加载自定义路径 类加载时检查是否存在顺序 自定义类加载器 应用类加载器 扩展类加载器 启动类加载器 类加载到内存时顺序 启动类加载器 扩展类加载器...
2019-07-22 18:15:03 98
原创 JAVA JVM 垃圾收集器
垃圾收集算法 标记清除法 复制法 标记整理法 分代收集法 缺点 标记清除法: 原理: 从根开始扫描,标记所有的存活对象(可达对象),然后对所有未标记的对象进行清除操作。 缺点: 清除后会产生不连续内存,内存碎片,导致资源浪费。 复制法: 原理: 把一块区域切分成2份,从s1把所有存活对象进行复制到s2区域,然后把s1的清除。 缺点: 资源分为2块,运行时只使用一份区域,另一个区域空闲,导...
2019-07-22 18:03:20 90
原创 JAVA JVM内存模型
JMM内存模型 JMM执行流程: 从内存获取共享数据 线程执行引擎通过use指令获取工作内存。 线程工作内存通过load指令,到主内存。 主内存通过read指令读取数据 数据写入内存 线程执行引擎通过assign指令往工作内存写入。 线程工作内存通过store指令,到主内存。 主内存通过write指令写入数据 数据是怎么做同步 主要是在线程工作内存与主内存这2块之间做同步操作 ...
2019-07-22 17:32:05 75
原创 HTTP请求报文拆包粘包
报文怎么拆包粘包: HTTP请求内容:请求行,请求头,空行,请求体 常用,一个有报文的请求到服务器时,请求头里都会有content_length,这个指定了报文的大小, 报文如果很大的时候,会通过一部分一部分的发送请求,直到结束, 当这个过程中,出现多个请求,第一个请求会带有请求头信息,前面一个请求的如果发送的报文如果没有满时, 会把后面一个请求的内容填上,这个操作就叫粘包。 这样粘包...
2019-05-29 17:17:44 3448
原创 红黑树与AVL平衡二叉树
红黑树: 特性 根节点始终为黑节点 从根节点开始到叶子节点所经过的黑节点数始终相同 新节点为红色,空节点为黑色 父节点与父节点之间不能同时为红色 平衡原则: 旋转原则: 颜色变化: 红红旋转颜色不变。 红黑旋转,旋转后的父节点变黑色,子节点变红色。 黑红旋转,旋转后的父节点变红色,子节点变黑色。 结构变化: 左旋转:3层节点间旋转,第二层节点变主节点,第一层节...
2019-05-24 15:49:44 140
原创 Mysql的索引类型
MyISAM: 非聚集索引,B+TREE。 存储方式:生成3个文件,数据结构文件.frm,索引文件.MYI,数据文件MYD 通过B+TREE索引的叶子节点存储着实际数据的指针,指针指向MYD文件 Innodb: 聚集索引,B+TREE。 存储方式:生成2个文件,数据结构文件.frm,索引数据文件.ibd 通过B+TREE索引的叶子节点存...
2019-05-23 22:26:27 116 1
原创 JAVA JVM内存结构
JVM内存模型包含:堆、栈、方法区、程序计算器、本地方法区。 堆: 堆是存放的是在程序运行中new出来的对象,里面包含了4个区,伊甸区、from、to、老年代。 首先new出来的对象先进伊甸区 然后当伊甸区满的时候,会触发gc,然后伊甸区存活下来的会进入from,这个时候伊甸区和to是空的 当第二批伊甸区满的时候,在次触发gc(这里gc包含from也会gc),然后会与from一起迁移...
2018-11-29 14:24:48 157 1
原创 GO的线程模型
go语言本身是为并发而打造的语言。那它的线程模型是怎么样的呢? 传统是怎么处理是这样的,把数据放到共享内存,给多线程使用,这个方式是不是看上去非常简单,但是在并发访问的控制上就变的很复杂。 go语言的是这么处理的,它不推荐用共享内存的方式传递数据,它推荐使用channel。channel主要用来在多个go语句片段之前传递数据,这样做还会保证并发的安全性。不过go还是保留了传统的方法(互斥量、条...
2018-11-18 17:49:50 621 1
Kotlin有什么特性,能给例个例子吗
2017-09-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人