摘要:
线程私有:虚拟机栈,本地方法栈,程序计数器 线程共享:方法区,堆 #程序计数器 当前线程所执行的字节码的行号指示器。 如果线程执行的是Java方法,则这个计数器记录的是正在执行的虚拟机字节码指令的地址,如果执行的是Native方法,这个计数器值应为空(Undefined) #虚拟机栈 虚拟机栈描述的 阅读全文
摘要:
#LinkedHashMap LinkedHashMap是一个有序的HashMap,它继承了HashMap, 其顺序有两种:按照访问的顺序和按照存储的顺序。顺序是由accessOrder字段控制,若accessOrder=true则说明是按照访问的顺序。若accessOrder=false则说明是按 阅读全文
摘要:
1.扩容条件 容量不够,即需要的容量>数组的长度 2.如何扩容 新数组的容量是原数组的1.5倍,复制原数组到新数组中 3.无参构造第一次添加元素 无参构造第一次添加元素时,需要的容量是10 > 数组的长度0,扩容后容量为10 阅读全文
摘要:
CopyOnWriteArrayList是并发安全的List,其底层数据的存储仍然是靠Object[],重点在于它如何实现并发安全的,还是比较简单的 1.初始化 我们可以看到其实就是创建了一个长度为0的数组 2.add元素 每次添加元素都会加锁,同时调用Arrays.copyOf方法将原数组的内容拷 阅读全文
摘要:
#jdk1.7分析 ConcurrentHashMap采用 分段锁的机制,实现并发的更新操作,底层采用数组+链表的存储结构。 其包含两个核心静态内部类 Segment和HashEntry。 Segment继承ReentrantLock用来充当锁的角色,每个 Segment 对象守护每个散列映射表的若 阅读全文
摘要:
//其实整个算法的思路就是把 所有数据分为一半大的,一半小的,放在两个堆中 //我们每次取中位数,只需要关心堆顶元素即可 class MedianFinder { PriorityQueue<Integer> queMin; PriorityQueue<Integer> queMax; public 阅读全文
摘要:
#HashMap底层数据结构 #红黑树 我们都知道,jdk1.8以后 HashMap的底层是由数组+链表+红黑树组成的,那么什么是红黑树? ##二叉搜索树(二叉查找树) 我们都知道二叉树,即每个节点最多有两个子节点。 一颗无序的二叉树,如果我们要找树中的某个节点应该怎么做? 遍历树的每个节点,直到找 阅读全文
摘要:
单例模式 某个类只能存在一个对象实例,且该类只提供一个取得其对象实例的方法(静态方法) 使用场景:需要频繁创建和销毁对象或创建对象消耗过多又经常用到比如数据源,session工厂 饿汉式(静态常量) 1.构造器私有化(防止外部new) 2.类的内部创建对象(private,final,static) 阅读全文
摘要:
#1.K 站中转内最便宜的航班 如果不考虑“最多经过K站”这个条件,这就是一道求最短路问题。 但是现在有了条件,就是有限制的最短路问题。我们考虑用dp来做。 可以看到当前状态,只与之前状态的 经过多少站,在哪一站 有关,因此是个二维dp class Solution { public int fin 阅读全文
摘要:
#日志 ##错误日志 MySQL错误日志是记录MySQL 运行过程中较为严重的警告和错误信息,以及MySQL每次启动和关闭的详细信息。错误日志的命名默认为 主机名.err。 通过show variables like '%log_error%';我们可以查看错误日志的位置 ##慢查询日志 慢查询日志 阅读全文