堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。 两种类型的概念如下:大根堆(最大堆):每个结点的值都大于或等于左右孩子结点小根堆(最小堆):每个结点的值都小于或等于左右孩子结点 以大根堆为例子:【堆是无序的】 堆的三种操作:插入,删除,构建。 ...
分类:
编程语言 时间:
2020-04-09 19:06:52
阅读次数:
101
运行时数据区域 java虚拟机在执行java程序过程中会把他所管理的内存划分为若干个不同的数据区域。 java虚拟机运行时数据区 方法区(线程共享区),虚拟机栈,本地方法栈,堆(线程共享区),程序计数器 1.程序计数器 程序计数器是一块较小的内存空间,他可以看作当前线程所执行的字节码指示器。每条线程 ...
分类:
编程语言 时间:
2020-04-09 14:11:41
阅读次数:
81
稳定性的定义与意义: 通俗地讲就是能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。 如果是不稳定排序,则需要第二次排序,会增加系统开销。 选择排序: 举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏 ...
分类:
编程语言 时间:
2020-04-09 12:59:31
阅读次数:
136
"TOC" 本文大多数例子搬自 python cookbook 这里是对学习的一个总结和提炼 ps:python版本为python3 1.解压序列赋值给多个变量 2.解压可迭代对象赋值给多个变量 3.保留有限的历史记录 4.怎样从一个集合中获得最大或者最小的 N 个元素列表? ps:堆数据结构最重要 ...
分类:
编程语言 时间:
2020-04-09 00:57:52
阅读次数:
281
类的加载机制分为如下三个阶段:加载,连接,初始化。其中连接又分为三个小阶段:验证,准备,解析。 加载阶段 将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后再堆内创建一个class对象,用来封装类在方法区内的数据结构。 加载class文件的方式: 从本地系统中直接 ...
分类:
其他好文 时间:
2020-04-09 00:26:47
阅读次数:
72
"Link" 题意: 给出一个长度为奇数的序列,输出前 $1,3,5,\dots$ 个数的中位数 思路: 对顶堆 建立一个小根堆和大根堆 如果当前数比小根堆堆顶大,插入小根堆 如果当前数比小根堆堆顶小,插入大根堆 大根堆堆顶是始终小于小根堆堆顶的 当已经插入的个数为奇数时,我们要保证大根堆里的数比小 ...
分类:
其他好文 时间:
2020-04-09 00:07:07
阅读次数:
67
1 写这篇博客的初衷 首先一句话概括:我想把这几个月做的事情记录下来,并且希望尽量详细,希望读者读了这篇文章能够知道项目进行模块化,项目改业务框架可能会遇到哪些问题,具体每个步骤都做什么,而不是大致的了解。 现在很多人都在谈模块化,网上有一大堆的博客实践都在讲这个。很多谈的只是模块与模块之间的解耦, ...
分类:
移动开发 时间:
2020-04-08 22:58:08
阅读次数:
165
草草整理一下,以后再完善一点 堆排序的复杂度是比较稳定的$O(nlgn)$,并且具有空间原址性。 二叉堆是一个是一个数组,通过类似线段树的方式来表示父结点和子结点 其中1结点代表根,在大根堆中代表最大的数 任何子结点在循环前都可以看作一个平凡堆 大根堆中,每个结点都要比它的子结点大,维护这个性质,只 ...
分类:
编程语言 时间:
2020-04-08 20:53:12
阅读次数:
69
Java堆内存分为年轻代和老年代,其中,年轻代分为Eden区和survival区,survival又分为fromSurvival和toSurvival。 首先第一个问题:为什么要有Survival区?因为如果没有Survival区,Eden每进行一次MinorGC,存活对象送到老年代,当老年代被填满 ...
分类:
编程语言 时间:
2020-04-08 20:50:01
阅读次数:
240
1. 概述 1. 继续聊 jvm 命令行工具 2. 背景 1. 之前聊过一些简单的命令行工具 1. jps 1. 查看当前 java 进程 2. jinfo 1. 查看 java 运行参数 2. 查看当前 相关系统变量 3. jstat 1. 查看 jvm 的 堆内存,gc 统计信息 2. 如果我想 ...
分类:
编程语言 时间:
2020-04-08 20:41:39
阅读次数:
89