摘要:
一、进程 进程是一个具有一定独立功能的程序的一次动态执行过程,是操作系统进程资源分配的基本单位,通常包含三部分 程序 数据 程序控制块PCB:包含进程描述信息和控制信息 二、线程 线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度的基本单位。 用户线程与内核线程 一对一模型 阅读全文
摘要:
# 单调栈(Monotonic Stack) > 单调栈:本质上还是一个先进后出的栈结构,但是在将元素压入栈中时,需要保持栈内所有元素具有单调性(单调递增/单调递减) 单调栈的核心功能需求:添加元素时要保证栈中的数据呈现单调性。 ```java public class MonotonicStack 阅读全文
摘要:
**关键步骤:** 如何处理 **通配符*** 1. s[i] == pattern[j] && pattern[j + 1] == '*', 可以匹配0次、1次或多次 2. s[i] != pattern[j] && pattern[j + 1] == '*', 只能匹配0次 对于第二种情况是比较 阅读全文
摘要:
> Least Frequently Used(LFU): 淘汰使用次数最少的数据。 ## LFU 算法的需求 1. 接收一个参数 `capacity` 作为缓存的最大容量 2. 实现一个函数 `put()` 添加数据到缓存 3. 实现一个函数 `get()` 查询缓存中的数据 4. 以上函数应该在 阅读全文
摘要:
> Least Recently Used(LRU) 是缓存淘汰一种常用的策略,内存满了则优先删除最久没被使用的数据。 ## LRU 算法的需求 1. 接收一个参数 `capacity` 作为缓存的最大容量 2. 实现一个函数 `put()` 添加数据到缓存 3. 实现一个函数 `get()` 查询 阅读全文
摘要:
## B+树相关介绍 > B+树是一棵**多叉排序树**,即每个非叶子节点可以包含多个子节点,其整体结构呈扁平化,所以其非常适配于数据库和操作系统的文件系统中。且B+树能够保持数据的稳定有序,插入和删除都拥有较稳定的**对数时间复杂度**。 **B+树的特性**:以 m 阶为例,m 表示内部节点即非 阅读全文
摘要:
1 对象存活判断 1.1 引用计数 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可 能再被使用的 引用计数法的缺陷: public class ReferenceCountingGC { public Object 阅读全文
![Java GC基础知识](https://img2023.cnblogs.com/blog/2616186/202304/2616186-20230413190917229-344358527.png)
摘要:
JDK 动态代理 目标类 JDK动态代理基于接口创建代理,所以目标类必须至少实现一个接口。 public interface SmsService { String send(String message); void print(); } public class SmsServiceImpl i 阅读全文
![动态代理与Spring AOP](https://img2023.cnblogs.com/blog/2616186/202304/2616186-20230413145032233-821057878.png)
摘要:
线程池ThreadPoolExecutor ThreadPoolExecutor 继承结构 继承结构如图所示:ThreadPoolExecutor <- AbstractExecutorService <- ExecutorService <- Executor public class Threa 阅读全文
![ThreadPoolExecutor源码学习](https://img2023.cnblogs.com/blog/2616186/202304/2616186-20230411172022457-1660113407.png)
摘要:
抽象队列同步器AQS AQS介绍 AQS提供一套框架用于实现锁同步机制,其通过一个 FIFO队列 维护线程的同步状态,实现类只需要继承 AbstractQueuedSynchronizer ,并重写指定方法(tryAcquire()/tryRelease()等)即可实现线程同步机制。 AQS 继承结 阅读全文
![AQS源码学习](https://img2023.cnblogs.com/blog/2616186/202304/2616186-20230410214329839-403181246.png)