面试资料整理汇总
这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。
面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了
在这里祝大家能够拿到心仪的offer!
动态查找树主要包括:二叉搜索树,平衡二叉树,红黑树,B树,B-树时间复杂度O(log2N),通过对树高度的降低可以提升查找效率
尤其是在大量数据进行存储的时候会存储到外部 磁盘,通过对外部磁盘的读取时需要快速的查找到对应的位置,所以需要一种高效的外村数据结构。
B树:就是为了存储设备或者磁盘设计的一种平衡查找树
辨析1:B树与红黑树的区别
B树的节点可以有很多孩子节点,红黑树是一种近似平衡的二叉搜索树即每个节点只有两个孩子
一颗含有N个节点的B树和红黑树的高度是一样的O(lgn)。
B树的定义
对于一颗M阶的B树,推荐:Java进阶学习资料
-
树中的每个节点最多有m个孩子
-
除了根节点和叶子节点外,其他节点最少含有m/2(取上限)个孩子
-
若根节点不是叶子节点,则根节点最少含有两个孩子
-
所以叶子节点都在同一层,叶子节点不包含任何关键字信息
B树的类型与节点定义
struct BTNode
{
int keyNum ; //实际关键字的个数
PBTNode parent;//指向父亲节点
PBTNode *ptr ;
keyType *key ; //关键字向量
}
B树的插入操作
B树的插入
-
若B树中已存在需要插入的键值时,用新的键值替换旧值;
-
若B树中不存在这个值,则在叶子节点进行插入操作;
具体插入过程如下
对于高度为h的m阶B树,新节点一般插在第h层。
-
若该节点中关键码个数小于m-1,则直接插入
-
若该节点中关键码个数等于m-1,则节点分裂。以中间的关键码为界,
将节点一分为二,产生一个新的节点,并将中间关键码插入到父节点中。
重复上述过程,最坏情况一直分裂高根节点,则B树就会增加一层。
B+树的插入操作
B+树插入
1.若为空树直接插入
2.对于叶子结点: 根据key找到叶子结点,对叶子结点进行插入操作。插入后如果当前叶子结点的key值数b不大于m-1,则插入结束。
反之,将这个叶子结点分成左右两个叶子结点进行操作,左叶子结点包含前m/2个记录,右叶子结点包含剩下的记录key,将第m/2+1个记录的key进位到父结点中,(父结点必须是索引类型的结点)
进位到父结点的key,进位的key左孩子指向左结点,右孩子指向右结点。
3.对于索引结点: 如果当前结点的key个数小于等于m-1,插入结束。
反之,将这个索引类型的结点分成两个索引结点,左索引结点包含前(m-1)/2个数据,右结点包含m-(m-1)/2个数据
将第m/2个key进位到父结点中,进位的key左孩子指向左结点,右孩子指向右结点
推荐:Java进阶学习资料
独家面经总结,超级精彩
本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!
Java面试准备
准确的说这里又分为两部分:
- Java刷题
- 算法刷题
Java刷题:此份文档详细记录了千道面试题与详解;