性质4 每个红色节点的两个子节点都是黑色 。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点 。
B树:
1.所有非叶子结点至多拥有两个儿子(Left和Right);
2.所有结点存储一个关键字;
3.非叶子结点的左指针指向小于其关键字的子树 , 右指针指向大于其关键字的子树;
6. 常见的加密算法?
对称式加密就是加密和解密使用同一个密钥 。
非对称式加密就是加密和解密所使用的不是同一个密钥 , 通常有两个密钥 , 称为“公钥”和“私钥” , 它们两个必需配对使用 。
DES:对称算法 , 数据加密标准 , 速度较快 , 适用于加密大量数据的场合;
MD5的典型应用是对一段Message产生fingerprint(指纹) , 以防止被“篡改” 。
RSA是第一个既能用于数据加密也能用于数字签名的算法 。
7. https?
HTTP下加入SSL层 , HTTPS的安全基础是SSL 。
8.有一个IP库 , 给你一个IP,如何能够快速的从中查找到对应的IP段?不用数据库如何实现?要求省空间
9.简述一致性hash算法 。
1)首先求memcached服务器(节点)的哈希值 , 并将其配置到0~232的圆(continuum) 。
2)然后采用同样的方法求出存储数据的键的哈希值 , 并映射到相同的圆上 。
3)然后从数据映射到的位置开始顺时针查找 , 将数据保存到找到的第一个服务器上 。如果超过232仍然找不到服务器 , 就会保存到第一台memcached服务器上 。
11.描述一种hash table的实现方法
1) 除法散列法: p , 令 h(k ) = k mod p , 这里 , p 如果选取的是比较大的素数 , 效果比较好 。而且此法非常容易实现 , 因此是最常用的方法 。最直观的一种 , 上图使用的就是这种散列法 , 公式: index = value % 16 , 求模数其实是通过一个除法运算得到的 。
2) 平方散列法 :求index频繁的操作 , 而乘法的运算要比除法来得省时 。公式: index = (value * value) >> 28 (右移 , 除以2^28 。记法:左移变大 , 是乘 。右移变小 , 是除)
3) 数字选择法:如果关键字的位数比较多 , 超过长整型范围而无法直接运算 , 可以选择其中数字分布比较均匀的若干位 , 所组成的新的值作为关键字或者直接作为函数值 。
4) 斐波那契(Fibonacci)散列法:平方散列法的缺点是显而易见的 , 通过找到一个理想的乘数index = (value * 2654435769) >> 28
冲突处理:令数组元素个数为 S , 则当 h(k) 已经存储了元素的时候 , 依次探查 (h(k)+i) mod S , i=1,2,3…… , 直到找到空的存储单元为止(或者从头到尾扫描一圈仍未发现空单元 , 这就是哈希表已经满了 , 发生了错误 。当然这是可以通过扩大数组范围避免的) 。
12、各类树结构的实现和应用
13、hash , 任何一个技术面试官必问(例如为什么一般hashtable的桶数会取一个素数?如何有效避免hash结果值的碰撞)
不选素数的话可能会造成hash出值的范围和原定义的不一致
14.什么是平衡二叉树?
左右子树都是平衡二叉树 , 而且左右子树的深度差值的约对值不大于1 。
15.数组和链表的优缺点
数组 , 在内存上给出了连续的空间 。链表 , 内存地址上可以是不连续的 , 每个链表的节点包括原来的内存和下一个节点的信息(单向的一个 , 双向链表的话 , 会有两个) 。
数组优于链表的:
A. 内存空间占用的少 。
B. 数组内的数据可随机访问 , 但链表不具备随机访问性 。
C. 查找速度快
链表优于数组的:
A. 插入与删除的操作方便 。
B. 内存地址的利用率方面链表好 。
C. 方便内存地址扩展 。
17.最小堆插入 , 删除编程实现
18. 4G的long型整数中找到一个最大的 , 如何做?
每次从磁盘上尽量多读一些数到内存区 , 然后处理完之后再读入一批 。减少IO次数 , 自然能够提高效率 。分批读入选取最大数 , 再对缓存的最大数进行快排 。
推荐阅读
- 如何选购普洱熟茶,如何鉴别普洱熟茶的好坏
- 男人该如何健身比较好?
- 如何正确慢跑呢?
- 如何轻松跑步呢?
- 胸肌中缝应该如何锻炼?
- 腰部赘肉应该如何减掉呢?
- 腰后的赘肉应该如何减掉呢?
- 基础力量应该如何训练?
- 如何收藏普洱茶,普洱茶收藏和存放需注意哪些
- 如何报考高等教育自学考试课程