自定义博客皮肤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 109

原创 树结构笔记

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

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

原创 Activiti笔记

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

2020-10-22 15:52:34 188

原创 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 1972

原创 GC

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

2020-09-03 22:06:13 123

原创 关于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 1401

原创 JVM运行时数据区详解

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

2020-09-02 08:36:58 152

原创 mongoDB笔记

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

2020-08-19 10:21:44 238

原创 Nginx原理简述

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

2020-08-17 08:30:26 506

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

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

2020-02-29 11:29:13 1200

原创 事务并发

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

2020-02-16 13:34:25 287

原创 java多线程

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

2020-01-28 15:24:56 125

空空如也

空空如也

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

TA关注的人

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