何足道哉


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

二叉树

发表于 2018-08-17 | 分类于 数据结构
二叉树二叉树是一棵树,其中每个节点都不能有多于两个的字节点。 二叉查找树对于树中的每一个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项。这意味这该树所有的元素可以用某种一致的方式排序。 插入二分法遍历树中的节点,如果新插入的节点X的key不存在,则插入为叶子节点,如果存在则更新。 删除当删除节点X时,需要考虑以下几种情况: 若X是叶子节点:直接删除; 若X有一个子节点:则让X的子节点,代替X成为X父节点的子节点; 若X有两个子节点:让X的右子树的最小的节点Y代替X成为X父节点的子节点,并递归的删除原来的Y节点 如果删除的次数不频繁,可以使用懒惰删除的 ...
阅读全文 »

CPU缓存

发表于 2018-08-16 | 分类于 操作系统原理
CPU缓存随着CPU的频率不断提升,而内存的访问速度却没有质的突破,为了弥补访问内存的速度慢,充分发挥CPU的计算资源,提高CPU整体吞吐量,在CPU与内存之间引入了一级Cache。 一般来说,一级Cache可以分为一级数据缓存(Data Cache,D-Cache)和一级指令缓存(Instruction Cache,I-Cache)。随着热点数据体积越来越大,一级Cache L1已经不满足发展的要求,引入了二级Cache L2,三级Cache L3。 缓存行CPU缓存是由很多个缓存行组成的。每个缓存行通常是64字节,并且它有效地引用主内存中的一块儿地址,并拷贝主内存对应地址中的数据。缓存行 ...
阅读全文 »

线程池

发表于 2018-08-16 | 分类于 并发
ExecutorEexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相当于生产者,执行任务的线程相当于消费者,并用Runnable来表示任务,Executor的实现还提供了对生命周期的支持,以及统计信息收集,应用程序管理机制和性能监视等机制。 ExecutorServiceExecutorService是Executor直接的扩展接口,也是最常用的线程池接口,我们通常见到的线程池定时任务线程池都是它的实现类。 ThreadPoolExecutorjava的线程池支持主 ...
阅读全文 »

HashMap

发表于 2018-08-16 | 分类于 源码
概要HashMap 是一个关联数组、哈希表,它是线程不安全的,允许key为null,value为null。遍历时无序。 其底层数据结构是数组称之为哈希桶,每个桶里面放的是链表,链表中的每个节点,就是哈希表中的每个元素。 在JDK8中,当链表长度达到8,会转化成红黑树,以提升它的查询、插入效率,它实现了Map<K,V>, Cloneable, Serializable接口。 数据结构 构造方法12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 ...
阅读全文 »
1…34

傅鹏

34 日志
16 分类
60 标签
© 2019 傅鹏
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4