- 博客(27)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 AQS分析第一篇(AQS是什么,有什么用,数据结构)
问题是最好的老师!一、思考第一篇并不深究AQS的实现原理,简单的解决以下几个问题,如果您可以轻松回答出以下问题,可跳过该篇。问题一:AQS是什么?其使用场景在哪里?看过JUC源码的大概都了解ReetrantLock是借助AQS实现的,那么AQS到底提供了怎样的功能,除了ReetrantLock还有哪些地方用到了AQS。问题二:AQS的数据结构?AQS的全名叫Abstrac...
2019-09-20 09:51:07
2401
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 JAVA---线程池(源码分析)
问题是最好的老师。一、思考问题一:为什么需要使用线程池? 问题二:线程池的工作原理? 问题三:线程池是如何做到线程复用的? 问题四:当无任何任务执行时,线程池中的线程数量是等于核心线程数还是0?最大线程数是如何降为核心线程数的? 问题五:线程池有哪些状态,当线程池停止后,已经添加的任务如何处理,即将添加的任务如何处理? 问题六:线程池中的阻塞队列以及其实现原理是什么,该如何选择?...
2019-09-16 21:36:37
169
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 JAVA---线程中断(详细)
问题是最好的老师!一、思考问题一:什么情况下线程会中断?线程自己会中断吗,为什么要去中断一个线程,在什么情况下才能中断一个线程。问题二:如何中断一个线程? 问题三:线程被中断意味着什么?线程被中断了,其状态是什么,被中断的线程还能继续执行吗。二、带着疑问看源码与Thred中断相关的方法(除去private native之外可被调用)有Thread.interrupt(),...
2019-09-11 23:41:34
321
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 JVM运行时数据区详解
运行时数据区概念Java虚拟机在运行Java程序时,需要一定内存存储运行时所需的全部数据(类文件信息、对象、引用、常量等等),JVM采用栈、堆、方法区等等将这些数据所占内存分区域管理,有的区域随着虚拟机进程的启动而创建,有的则随着用户线程(不需要内核支持而在用户程序中实现的线程)的启动和结束而建立和销毁,Java虚拟机规范(JDK7)规定的运行时数据区如下图所示。各区域的区别与作用...
2018-08-07 11:15:20
245
1
原创 SpringBoot---事务实现原理
一、前言利用SpringBoot实现事务非常简单,主要有以下两步骤:1.在启动类上加注解@EnableTransactionManagement2.在需要事务管理的方法上添加注解@Transactional简单的代码后面却体现了SpringAOP的思想和精髓,接下来我们先思考一下可能的实现方式。二、思考要对一个方法进行事务管理,肯定要对该方法进行增强,那就有以下几个...
2019-11-07 17:35:40
1261
原创 Spring---ApplicationContext的refresh流程分析+hook类的产生时机和作用
相信看过Spring源码的一定不会对AbstractApplicationContext.refresh()方法陌生,其主要作用在于刷新Spring容器,刷新的意思即把BeanFactory清空为初始状态,然后再按照程序意图填满各种Bean。一、refresh流程二、流程分析上面流程中提到了BeanPostProceesor、ApplicationEventMulticustor...
2019-11-04 16:49:00
572
原创 阅读---读吴军博士《态度》有感
注意你的态度,因为它能影响你的想法;注意你的想法,因为它能决定你的言辞和行动;注意你的言辞和行动,因为它能主导你的行为;注意你的行为,因为它能决定你的习惯;注意你的习惯,因为它能决定你的性格;注意你的性格,因为它能决定你的命运。一、人生哲学乐观的人生态度当我们离开校园之后反而更加怀念大学时光,我想主要有一个原因是,大学相对于社会来说,显得更无忧无虑或者说责任更少。...
2019-11-03 16:11:49
1073
原创 Spring---Bean实例化过程(源码)分析
在Spring---组件扫描一文中,我们了解到Spring在容器启动时,是如何扫描到带有@Component注解的类并将其添加到beanDefinitionMap之中的。存在于beanDefinitionMap之中的只是所有bean的定义,这些定义包括“是否单例”,“是否懒初始化”,“类元数据信息”等等。当我们需要从容器中获取一个bean时,便会根据该bean定义信息,实例化bean对象,接下来我...
2019-10-20 11:41:55
421
原创 Spring---组件扫描(如何找到一个组件并将其添加到容器)
SpringIOC就是将对象的创建过程交给Spring容器,Spring容器在启动的时候会扫面所有的组件(带有@Component、@Bean等注解)存放在beanDefinationMap中,然后再需要创建对象的时候,取出bean定义信息,实例化对象即可。这里我们将分析一下组件扫描的过程。注意:本文的中心思想是看Spring如何扫描到某个组件,并将其添加到容器中,其余问题不探究,不要走偏。...
2019-10-18 18:31:14
683
原创 JAVA---JDK动态代理原理
本文将明白以下几个问题。一、思考问题一:如何使用JDK动态代理?问题二:JDK动态代理的原理是什么?如何生成代理类?二、分析2.1基于JDK动态代理的一般过程代理过程的实现,必然要涉及原生对象,代理逻辑,代理对象的生成。我们结合用户登录服务,在登录前后打印登录日志功能来说明。原生对象//基于JDK的动态代理,原生对象必须实现接口,具体原因稍后分析public ...
2019-10-15 13:02:26
174
原创 JAVA---为什么递归太深会导致栈溢出
一、思考对于这个问题,我是这样想的:我们知道栈大小是可以通过参数(-Xss)设置的,栈是线程私有的,线程内部的每个方法调用会创建一个栈帧,所以如果“栈帧的数量*每个栈帧的大小>栈大小”时便会发生“栈溢出”。这样的设想基于:-Xss设置的参数是针对每一个栈的,而非JVM所有线程栈内存总大小。 每个方法的调用将创建一个栈帧。 SUM(每个栈帧大小)>栈大小发生栈溢出。...
2019-10-09 18:02:45
5049
原创 MYSQL---MVCC
通过本文将弄明白以下几个问题。一、思考问题一:MVCC是什么?主要为了解决什么问题?问题二:MVCC的实现原理是什么?问题三:有了MVCC之后,开发者还需要做什么?二、分析2.1概念该定义由此博文总结:https://draveness.me/database-concurrency-control。MVCC,即多版本并发控制,在这个机制中,每一个写操作都会创建...
2019-10-06 20:25:08
170
原创 MYSQL---事务
本文将弄明白以下几个问题。一、思考问题一:事务是什么?为了解决什么问题?有哪些特性?问题二:各种事务的隔离级别的区别?二、分析这篇文章先真正搞清楚事务的特性,并不分析事务的实现原理,如果想了解事务的实现原理,请移步【MYSQL---事务实现原理】。2.1事务是什么概念来自于维基百科:数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的...
2019-10-06 12:55:24
163
原创 MYSQL---锁
通过本文我们将了解以下几个问题?一、思考问题一:多线程下,MYSQL是如何同步的?比如多个线程同时要更新某一行数据,这时候MYSQL的处理机制是什么?问题二:MYSQL中有哪些锁?其作用都是什么?相比大家听说过行锁、表锁、乐观锁、悲观锁、间隙锁、死锁、共享锁、排它锁这些概念,本文将探索这些锁是干嘛的。二、分析接下来我们将一一揭开MYSQL中各种锁的面纱。2...
2019-10-05 20:06:03
297
原创 MYSQL---日志
本文将探讨以下几个问题。一、思考问题一:MYSQL执行流程中会产生哪些日志?相信大家都接触过binlog,redolog,undolog这些字眼,那么这些日志究竟在何时产生,存放于什么位置呢?问题二:这些日志的作用是什么?MYSQL产生这些日志的目的在于什么,或者说每一个日志能带来什么作用?二、分析2.1binlog binlog功能开启 可通过以下命令...
2019-10-05 09:27:12
334
原创 MYSQL---索引---聚簇索引
本文将探讨以下几个问题。一、思考问题一:聚簇索引定义? 问题二:聚簇索引和非聚簇索引区别? 问题三:一级索引和二级索引概念?二、分析相信提到索引,到家都听说过以下名词:聚簇索引、非聚簇索引、主键索引、辅助索引、一级索引、二级索引,今天我们将一一分析这些索引。 聚簇索引和非聚簇索引 定义:聚簇索引:叶子节点全部是数据节点。 非聚簇索引:叶子节点仍然是索引节点,...
2019-10-03 17:24:57
328
原创 MYSQL---索引---B+树
本文将探讨以下几个问题。一、思考问题一:B树和B+树的区别?问题二:为什么InnoDB要采用B+树数据结构?二、分析 B树的结构 本文大量参考了其他比较优秀的博文,具体地址,请看文末。B即balance,意为平衡,B树又称为多路平衡查找树,也称B-树。多路即允许每个节点有多个子节点,称为阶。当阶数为2时,又称为平衡二叉查找树。M阶B树的定义:每个节点至多有M个...
2019-10-03 14:52:23
314
原创 MYSQL---索引---物理结构
本文意图理解以下几个问题。一、思考问题一:索引存放在哪里?问题二:B+树是如何以文件形式存储,如何读取?二、分析 索引文件位置 索引可以理解为一种数据结构,我们按照这种数据结构能快速定位到数据。大家会很容易想到这种类似字典的概念性东西,但是大家有没有思考过索引自身也是数据,其存放在哪里。如何将这种数据结构存放?多个索引如何存放?如何将存放的数据又转换为内存中的数据结构以便...
2019-10-03 14:24:46
793
原创 MYSQL---存储引擎
通过本文我们将探索以下几个问题。一、思考问题一:存储引擎的作用 问题二:MYSQL支持哪几种存储引擎 问题三:各个存储引擎有哪些区别? 问题四:存储引擎是针对库还是表?如何设置?二、分析 存储引擎定义 在上文【MYSQL---执行流程】中我们了解到执行器最终会调用存储引擎的接口进行数据操作。而我们能想到数据是存储在磁盘上的。那么我们是否可以理解为存储引擎的作用便是“查询或...
2019-10-01 14:42:46
733
原创 MYSQL---执行流程
通过本文,我们将了解到以下几个问题。一、思考问题一:一条SQL语句在MYSQL中是如何执行的?问题二:MYSQL是如何做到同时处理多个请求的?二、分析备注:本文主要参考《极客时间:MySql实战45讲》 MySQL执行流程图 各模块作用 1.连接器客户端连接MySql服务器命令mysql -h(IP地址) -P(端口号)-u(用户名)-p...
2019-10-01 12:56:19
248
原创 并发工具类源码分析---Semaphore
通过本篇我们将解决以下几个问题。一、思考问题一:该类提供了怎样的功能?使用场景? 问题二:该类的实现原理是什么?一、注释翻译如果您不知道该类的作用或者设计初衷,请跟我一起从注释中找答案:一个计数信号量。信号量维护了一组概念上的许可证。每一个调用acquire方法的线程将阻塞直到一个许可证可用,然后这个线程将取走它。每一个release方法调用都将增加一个许可证,其会潜在的释放一...
2019-09-30 10:59:20
207
原创 AQS分析第四篇(借助CountDownLatch探索AQS共享模式的实现原理)
上一篇我们通过ReentrantLock分析了如何AQS独占模式的实现原理。这一篇我们将根据CountDownLatch探索共享模式的实现原理,如果你认真看完上一篇,那该篇的内容将更容易理解。主要分析以下几个问题?一、思考问题一:CountDownLatch提供了怎样的功能?其实现原理是什么?AQS独占模式是怎样实现的? 问题二:共享锁和独占锁的区别是什么?二、源码分析因为Coun...
2019-09-25 22:33:16
462
原创 AQS分析第三篇(借助ReentrantLock探索AQS独占模式的实现原理)
问题是最好的老师!一、思考问题一:关于Node节点的属性(waitStatus和nextWaiter)?第一篇中我们了解到AQS中队列的Node节点的数据结构,其中Node有几个属性waitStatus和nextWaiter,我们只是从注释翻译了解到其基本概念,那么AQS中不同情况下这两个属性的取值是怎么样的,这一点需要我们取思考。问题二:AQS内部是如何使用队列的?我...
2019-09-23 20:21:09
248
原创 AQS分析第二篇(其提供的受保护方法代表什么意思,如何使用AQS)
问题是最好的老师!一、思考第一篇分析了AQS是干什么的,其内部的数据结构是怎样的,第二篇依然不深入理解AQS的主要实现,先解决以下问题:如何使用AQS?通过第一篇我们知道,AQS是一个同步框架,其提供了排队和阻塞等机制,子类需要实现其受保护方法,去自己定义state所代表的语义。那么其提供了哪些受保护方法,都是干嘛的,该如何使用,其提供的一般方法都是干嘛的,这一篇,我们将围绕这些问...
2019-09-21 10:25:03
351
1
原创 JAVA---阻塞队列
问题是最好的老师!一、思考问题一:阻塞队列阻塞了什么操作?为什么需要这样一个队列(使用场景是什么)?我们都知道在线程池中会用到阻塞队列,那么线程池为什么不用一个一般的队列,要用阻塞队列。那么阻塞队列是否还有其他场景。问题二:阻塞队列是如何实现阻塞/唤醒的?以及何时阻塞/唤醒?我们知道常见的阻塞唤醒方式有Object.wait/notify和Condition.await/si...
2019-09-18 16:49:18
291
原创 并发工具类源码分析---CyclicBarrier(详细)
一、作用 JDK1.8英文注释* A synchronization aid that allows a set of threads to all wait for* each other to reach a common barrier point. CyclicBarriers are* useful in programs involving a fixed sized ...
2019-09-11 14:19:48
211
1
原创 Sql单表查询语句的各种用法以及注意事项
一、Sql查询基本结构SELECT <目标列名序列> FROM <数据源>[WHERE <检索条件表达式>] [GROUP BY <分组依据列>] [HAVING <组提取条件>] [ORDER BY <排序依据列>]其中[]代表可选项 、<>代表必须项注意点1.SELECT
2018-08-09 22:24:42
1820
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人