自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 ThreadLocal的理解

ThreadLocal原理ThreadLocal 就是个空壳,本质类似于Map键值对中的一个Key每个线程对象中,有一个类型为ThreadLocalMap的threadLocals变量。存储数据时,把这个ThreadLocal最为key,value就是你要存的数据存到这个线程的这个变量中。这就是为什么它能在多线程做到能隔离的效果。内存泄漏问题这个其实要和Java的GC机制有关。Java线程中的这个threadLocals变量,可以看成一个map,它这个key便是对ThreadLocal的一个弱引用

2021-03-29 09:17:13 75

原创 树结构笔记

几种树二叉搜索树:左小右大,中序遍历即为升序平衡二叉树:二叉搜索树的基础上增加了平衡的概念,即左右子树高度相差不超过1,这样有效的降低了二叉树的高度红黑树:弱化了平衡二叉树的绝对平衡,只追求所有路径相差不会超过一倍,由它所有路径拥有相同数量的黑色节点这一特性决定。注:平衡二叉树相比红黑树,查询效率会更高点,因为绝对平衡的深度肯定不会大于红黑树的深度。但是插入和删除的效率要比红黑树来的低下,以为要各种左旋、右旋等操作来维持平衡。-B树:平衡的多路查找树,相比前面的几种树,更加的“矮”,这里主要结合

2021-03-04 09:02:37 181 1

原创 Activiti笔记

1. 总体流程开始---->定义---->部署(deploy)---->拾取任务(候选人,分组)---->执行任务---->结束2. 三个主要操作接口 - RepositoryService 流程定义 - RuntimeService 流程部署 -TaskService 执行任务(complete)3. 三大网关排他网关-----多个任务满足条件可执行状态,只执行一个并行网关-----所有任务到达网关后执行下一步任务,类似Java障碍器Cyc

2020-10-22 15:52:34 119

原创 List重复添加同一对象

代码 User user=new User(); List<User> list = new ArrayList<>(); for(int i = 0; i < 3; i++){ user.setNameCode("nameCode:"+String.valueOf(i)); list.add(user); }结果[{"nameCode":"nameCode:2"}

2020-09-18 23:35:07 1854

原创 GC

GC回收的地方主要是在堆空间进行回收,Java8以后的元空间的回收暂时不谈!(堆分年轻代和老年代,年轻代分Eden和两个Survivor区域)1. 对象的可回收的判定方法1)引用计数器每个对象中有个引用计数器,每当被引用一次,计数器的数值加一。当计数器的值为0,则会被GC回收。基本不用这种方式作为判断对象是否能进行回收,因为如果出现两个对象互相引用,两个计数器的值不可能为0。2)可达性分析算法以GC Roots为根节点,比如A节点引用了这些根节点,然后B又引用了A,以此类推,形成一条链路,当某些

2020-09-03 22:06:13 90

原创 关于BufferedReader的读取效率

1. 一般情况正常采用readline读取,一行行读取。readline要注意阻塞的情况,当一行没有"/r"、"/n"、"/r/n"就会阻塞在那。 InputStreamReader isr = new InputStreamReader(connection.getInputStream(), "UTF-8"); in = new BufferedReader(isr); String line; whi

2020-09-02 14:16:33 1143

原创 JVM运行时数据区详解

一、五块区域程序计数器线程私有用于记录每个线程将程序执行到哪了,下一步该执行哪条字节码指令。注:如果执行的是一个java方法,计数器记录的是字节码指令的地址,如果是native方法,记录的值为空。本地方法栈线程私有本地方法栈存储一些navtive方法的信息,类似于虚拟机栈,虚拟机栈存储java方法的一些信息。虚拟机栈线程私有虚拟机栈中存储一个个栈帧,而栈帧存储着方法中的局部变量、操作数栈、动态链接、方法出口等信息。当线程调用一个方法时,就相当于一个栈帧入栈,可以理解为一个方法

2020-09-02 08:36:58 115

原创 mongoDB笔记

**1. mongoDB适用场景**存储的数据为json格式实时的DML操作(可以理解为因为使用缓存的缘故)大数据量的存储应用后续需要水平扩展数据模型不确定(可以理解为mongo对collection的结构不固定,这里collection的概念对应关系型数据库中的表概念)2.mongoDB为什么效率比Mysql高?采用基于内存映射的存储引擎。这里肯定对内存映射是什么很疑惑,一开始我也这样。内存映射简述:正常的对数据库进行查询数据,需要对数据进行两次复制,第一次复制,将数据从磁盘中拷贝

2020-08-19 10:21:44 171

原创 Nginx原理简述

Nginx原理简介1. nginx的作用反向代理(隐藏服务器的地址)负载均衡(轮询、权重、ip_hash)动静分离(nginx作为静态资源服务器)对nginx的主要操作都是在改配置文件。2.nginx原理nginx是以进程为单位的,这里是进程不是线程。每个进程有自己独立的资源,不用再像线程一样加锁了。如果你刚下载好了nginx,你启动之后,打开任务管理器看一下有几个nginx进程,如果不出意外,它会有两个nginx进程。为什么会有两个进程呢?原理解析nginx里面,有两

2020-08-17 08:30:26 349

原创 代码块以及构造方法执行顺序

有关静态代码块,构造代码块,main函数,构造函数,静态方法的执行顺序静态代码块是最先执行的,这里有可能会和静态方法联系起来,静态代码块和静态方法都会在类加载的时候,被加载,但是静态代码块会直接执行(且只执行一次,后面无论实例化多少对象,都只被执行一次),而静态方法不会被执行,静态方法要被调用才会执行。构造代码块和构造函数只有对象实例化的时候,才会执行且构造代码块在构造函数执行之前被执行。执...

2020-02-29 11:29:13 1076

原创 事务并发

事务1.事务的并发问题脏读:事务A读取了事务B跟新的数据,事务B回滚,导致A读的数据是错误的不可重复读:事务A多次读取同一行数据,事务B在事务A多次读取过程中,对数据进行了修改并提交,导致A读取的数据不同。(强调是行数据修改)幻读:事务A将整个表的所有行的数据都修改了一遍,而事务B,在其中又插入了一条新数据,A结束修改发现还有一条记录没修改,发生幻读。(强调行数据的新增和删除)2.M...

2020-02-16 13:34:25 232

原创 java多线程

多线程相关知识(浅)1.三种方法创建线程继承thread类实现接口runnable实现callable接口2.三种方法的区别thread是个类只能继承一个,不推荐用runnable是个接口,一个类可以实现多个接口,推荐使用callable与runnable最大的区别在于它有返回值,runnable没有3.实现同步的几种方式基于jvm的同步机制1.使用synchron...

2020-01-28 15:24:56 89

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除