摘要:
LRU缓存机制,全称Least Recently Used,字面意思就是最近最少使用,是一种缓存淘汰策略。换句话说,LRU机制就是认为最近使用的数据是有用的,很久没用过的数据是无用的,当内存满了就优先删除很久没有使用的数据。 基于LeetCode146,可以使用哈希链表或者自定义双端链表类+哈希表两 阅读全文
摘要:
二叉树的遍历方式一般包括前序遍历、中序遍历以及后序遍历: 前序遍历:根结点 | 左子树 | 右子树 中序遍历:左子树 | 根结点 | 右子树 后序遍历:左子树 | 右子树 | 根结点 二叉树遍历的性质: 已知二叉树的前序遍历和中序遍历可以唯一重建二叉树; 已知二叉树的中序遍历和后序遍历可以唯一重建二 阅读全文
摘要:
层序遍历的思路:若树为空,则返回空,否则从树的第一层开始,即从根节点,从上而下逐层遍历。 1. 二叉树层序遍历Ⅰ——剑指offer32-Ⅰ 从上到下,从左到右打印二叉树,返回一维数组int[] res。 class Solution { public int[] levelOrder(TreeNod 阅读全文
摘要:
二叉树的遍历方式包括前序遍历、中序遍历和后序遍历,其实现方式包括递归实现和非递归实现。 前序遍历:根节点 | 左子树 | 右子树 中序遍历:左子树 | 根节点 | 右子树 后序遍历:左子树 | 右子树 | 根节点 1. 递归实现 递归方式实现代码十分简洁,三种遍历方式的递归实现代码结构相同,只是执行 阅读全文
摘要:
线程池之Executor框架 Java的线程既是工作单元,也是执行机制。从JDK5开始,把工作机单元和执行机制分离开来。工作单元包括Runnable和Callable,而执行机制由Executor框架提供。 1. Executor框架简介 1.1 Executor框架的两级调度模型 在上层,Java 阅读全文
摘要:
线程池之ThreadPoolExecutor 线程池的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,那么超出数量的线程排队等候,等其他线程执行完毕再从队列中取出任务来执行。 在开发过程中,合理地使用线程池能够带来3个好处: **降 阅读全文
摘要:
ThreadLocal相关 1. ThreadLocal介绍 ThreadLocal,线程局部变量。**ThreadLocal通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。**在很多情况下,ThreadLocal比直接使用synchronized同步机制解决线程安全问题更简单,更 阅读全文
摘要:
多线程相关 1. 进程与线程 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建、运行到消亡的过程。 线程是比进程更小的执行单位,一个进程在其执行的过程中可以产生多个线程。线程共享进程的堆和方法区的资源,同时线程还有私有的程序计数器、虚拟机栈和本 阅读全文
摘要:
并发工具类——CountDownLatch、CyclicBarrier、Semaphore与Exchanger 在并发包java.util.concurrent中提供了一些并发工具类。CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,而E 阅读全文
摘要:
AQS相关 AQS全称为AbstractQueuedSynchronizer,抽象队列式同步器,位于java.util.concurrent.locks包下。 AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,不如ReentrantLock和Semaphor 阅读全文