java类加载过程
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:
加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备、解析
3个部分统称为连接。
其中在加载阶段,虚拟机需要完成以下3件事情:
1、通过一个类的全限定名来获取定义此类的二进制字节流。
2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
3、在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这给类的
各种数据访问入口。
验证是连接阶段的第一步,这一阶段的目的是为了确保Class文件的字节流中
包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。
准备是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的
内存都将在方法区中进行分配。强调一下,这时候进行内存分配的仅包括类变量
(被static修饰的变量),而不包括实例变量,实例变量将会在对象初始化时随着对象
一起分配在Java堆中。
解析:解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程。
类初始化阶段是类加载过程的最后一步,在初始化阶段则根据程序员通过程序制定的
主观计划去初始化类变量和其他资源。
数据库索引怎么实现的
数据库索引是定义在存储表基础之上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储结构,由一系列存储在磁盘
上的索引项组成,每一索引项又有两部分组成,索引字段和行指针。
B+树索引是一种多级索引,也就是说当索引项比较多时可以对索引项再建立索引,以此类推,形成多级索引。
B+树能够自动保持与主文件大小相适应的树的层次,每个索引块的指针利用率都在50%-100%之间。
B+树指向主文件的指针仅出现于叶结点。
B树和B+树的区别:
B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最频繁的一种索引。
在了解B+树之前必须先了解二叉搜索树、平衡二叉树和平衡多路查找树(B- Tree),
B+树是由这些树逐步优化而来。
InnoDB存储引擎就是用B+ Tree实现其索引结构。
在B- Tree中,每个节点中不仅包含数据的key值,还有data值。
在B+ Tree中,非叶子节点只存储key值信息,所有数据记录节点都是按照键值大小顺序存放在同一层的叶子节点上。
B+树相对于B-树有几点不同:
1、非叶子节点只存储键值信息。
2、所有叶子节点之间都有一个链指针。
3、数据记录都存放在叶子节点中。
画一个b+树
B-树:

B+树:


讲一下你知道的java.util.concurrent包下的类
treemap了解吗
红黑树是一种自平衡二叉查找树
红黑树的特性:
性质1:节点是红色或黑色
性质2:根结点是黑色
性质3:每个叶节点是黑色
性质4:每个红色节点的两个子节点都是黑色
性质5:从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

TreeMap是一个有序的key-value集合,它是通过红黑树实现的。
该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator进行排序,具体取决
于使用的构造方法。
TreeMap的基本操作containsKey、get、put和remove的时间复杂度是log(n)。
TreeMap是非同步的。
使用数组实现一个队列,写java代码
public class ArrayQueue {
	private int[] array;
	private int count;
	public ArrayQueue(int size) {
		array=new int[size];
		count=0;
	}

	public void push(int val) {
		array[count++]=val;
	}
	public int front() {
		return array[0];
	}
	public int pop() {
		int ret=array[0];
		count--;
		for (int i=1; i<count; i++) {
			array[i-1]=array[i];
		}
		return ret;
	}
	public int size() {
		return count;
	}
	public boolean isEmpty() {
		return size()==0;
	}
	public static void main(String[] args) {
		ArrayQueue aq=new ArrayQueue(5);
		aq.push(1);
		aq.push(2);
		aq.push(3);
		aq.push(4);
		aq.push(5);
		System.out.println(aq.size());
	}

}