# 前提回顾 > **建议大家从[【Java技术专题-JVM研究系列(39)Java各种类型对象占用内存情况分析(上)】](https://blog.51cto.com/alex4dream/2928921 "【Java技术专题-JVM研究系列(39)Java各种类型对象占用内存情况分析(上)】")开始学习比较好,这样子会有一个承接和过度。根据前面的学习的内
堆初始化 二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2。 因此,第0个位置的子节点在1和2,1的子节点在3和4。以此类推。这种存储方式便于寻找父节点和子节点。在二叉堆上可以进行插入节点、删除节点、取出值最小的节点、减小节点的值等
前缀 符号 10的幂次 2的幂次 Kilo 千 K 103 210 Mega 兆 M 106 220 Giga 吉 G 109 230 Tera 太 T 1012 240 Peta 拍 P 1015 250 Exa 艾 E 1018 260 Zetta 泽 Z 1021 270
你给HashMap初始化了容量,却让性能变得更糟? 前言 项目中,看到大家已经意识到初始化HashMap时给Map指定初始容量大小,甚是欣慰。但仔细一看,发现事情好像又有一些不对头。虽然指定了大小,却让性能变得更加糟糕了。 可能你也是如此,看了《阿里巴巴Java开发手册》感觉学到了很多,于是在
[设计模式] 装饰者模式 目录 [设计模式] 装饰者模式 场景分析 实践 总结 REFERENCES 更多 手机用户请横屏获取最佳阅读体验,REFERENCES中是本文参考的链接,如需要链接和更多资源,可以关注其他博客发布地址。 平台 地址 CSDN https://blog.csdn.net/sinat_28690417 简书 https
内部类Node,实现Map.Entry(jdk1.8初次出现Node) public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { static class Node<K,V> implements Map.Entry<K,V> { final int hash; fina
一、摘要 BlockingQueue通常用于一个线程在生产对象,而另外一个线程在消费这些对象的场景,例如在线程池中,当运行的线程数目大于核心的线程数目时候,经常就会把新来的线程对象放到BlockingQueue中去。 二、阻塞队列原理 原理简单的来讲:就是一个线程往队列里面放,而另外的一个线
文章目录 一、概述二、源码1、属性(1)elementData(2)elementCount(3)capacityIncrement 2、构造函数3、主要方法4、遍历(1)迭代器(2)随机访问(3)for(4)Enumeration 一、概述 是一个矢量队列。 继承了AbstractList,实现了List接口,所以它是一个队列,支持相应的添加、删除、修改、遍历等
文章目录 一、引例 1、string 扩容概述 2、扩容尝试 二、扩容逻辑猜测 1、猜测一:常数增量 2、猜测二:倍数增量 三、扩容逻辑实现 一、引例 1、string 扩容概述 string 就是动态字符数组,一旦出现 ‘动态’ 二字,就不可能一开始就申请很大的内存,一定有它内部的申请策略; vector
文章目录 一、引例 1、vector 扩容概述 2、扩容时机 3、扩容尝试 二、扩容逻辑解析 1、扩容逻辑实现 2、精简后的扩容逻辑 3、验证扩容逻辑 4、优化 三、论文解读补充 1、Size 和 Capacity 2、内存重分配 3、内存重分配策略 4、倍增法时间复杂度分析 一、引例 1、vector
1.assign 用于初始化 2.resize 改变capacity,与size 3.reserve 改变capacity,不改变size 超过size的capacity不可直接访问,可通过push_back追加,若size < capacity, push_back操作不尽心内存分配。 测试代码: #include <stdio.h> #include <iostream> #include <vector> #
前言 最近在逛博客的时候看到了有关Redis方面的面试题,其中提到了Redis在内存达到最大限制的时候会使用LRU等淘汰机制,然后找了这方面的一些资料与大家分享一下。 LRU总体大概是这样的,最近使用的放在前面,最近没用的放在后面,如果来了一个新的数,此时内存满了,就需要把旧的数淘汰,那为了
简介 使用了C++自带的实现deque 和 unordered_map code class LRUCache { public: unordered_map<int, bool> map; unordered_map<int, int> mapV; deque<int> q; int capacity; LRUCache(int capacity) { this->capacity = capacity;
前言 最近在逛博客的时候看到了有关Redis方面的面试题,其中提到了Redis在内存达到最大限制的时候会使用LRU等淘汰机制,然后找了这方面的一些资料与大家分享一下。 LRU总体大概是这样的,最近使用的放在前面,最近没用的放在后面,如果来了一个新的数,此时内存满了,就需要把旧的数淘汰,
目录 简介 原理 代码 引用资料 简介 费用流问题就是要求在所有最大流之中,找到费用最大/最小的问题。 下面重点讨论最小费用最大流。 原理 先给出大概的做法: 在残留网络上沿着最短路(边权即费用)增广,直到得到最大流(无法再增广),那么,假如图中没有负圈,这样的最大流的费用是最小的。 下
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 5 int select(int values[],int n,int weights[],int capacity) 6 { 7 int dp[n+1][capacity+1]={}; 8 for(int i=1;i<=n;++i) 9 { 10 for(int j=1;j
在文章开始之前首先要思考的问题是为什么要建立对象池。这和.NET垃圾回收机制有关,正如下面引用所说,内存不是无限的,垃圾回收器最终要回收对象,释放内存。尽管.NET为垃圾回收已经进行了大量优化,例如将托管堆划分为 3 Generations(代)并设定新建的对象回收的最快,新建的短生命周期对象将
这种连续区间的加法处理,是典型的差分数组优化。 class Solution { public: bool carPooling(vector<vector<int>>& trips, int capacity) { vector<int> delta(1010); for(auto trip: trips){ delta[trip[1]] += trip[0]; delta
前言 项目中,看到大家已经意识到初始化HashMap时给Map指定初始容量大小,甚是欣慰。但仔细一看,发现事情好像又有一些不对头。虽然指定了大小,却让性能变得更加糟糕了。 可能你也是如此,看了《阿里巴巴Java开发手册》感觉学到了很多,于是在实践中开始尝试给Map指定初始大小,并感觉自
C++学习笔记_14_string的底层原理及模拟实现 在上节的学习,简单学习了string的用法,但只有了解底层原理并复现string部分代码才可以更好的理解和应用,我实现了string的部分功能。 string简单用法 复习 目录 C++学习笔记_14_string的底层原理及模拟实现注:一、构造与析构二、常
一、redis的过期策略和内存淘汰机制 1、定期删除+惰性删除 定期删除:指的是redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除 惰性删除:在你获取某个key的时候,redis会检查一下 ,这个key如果设置了过期时间那么是否过期了,如果过期了此时就会删除
HashMap的容量、扩容 很多人在通过阅读源码的方式学习Java,这是个很好的方式。而JDK的源码自然是首选。在JDK的众多类中,我觉得HashMap及其相关的类是设计的比较好的。很多人读过HashMap的代码,不知道你们有没有和我一样,觉得HashMap中关于容量相关的参数定义的太多了,傻傻分不清
yarn支持3种调度器,FIFO,容量,公平调度器。 FIFO调度算法 只有一个队列,任务执行是按照先进先出的顺序执行,无法支持多用户并发的场景。如下图 容器调度算法 yahoo开发的多用户调度器(apache yarn中默认使用) 特征 多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略 容器保
LFU是一个著名的缓存算法,实现LFU中的set 和 get样例:capacity = 3set(2,2) set(1,1) get(2) >> 2 get(1) >> 1 get(2) >> 2 set(3,3) set(4,4) get(3) >> -1 get(2) >> 2 get(1) >> 1 get(4) >> 4 我们来看看LFU的百度解释:LFU(least frequently used (LFU)
真实场景中,总会出现这样的情况:新提交的YARN应用需要等待一段时间,才能获得所需的资源。不能立即获得资源的应用,总不能直接拒绝,需要有个地方去存储这些应用 —— 使用队列同时,队列中的应用如何为其分配资源:是先到先得?还是优先执行资源需求较小的应用? —— 需要有特定的策略为应