cphp数据 cp数据是什么( 四 )


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次数,自然能够提高效率 。分批读入选取最大数,再对缓存的最大数进行快排 。
19. 有千万个string在内存怎么高速查找 , 插入和删除?
对千万个string做hash,可以实现高速查找,找到了 , 插入和删除就很方便了 。关键是如何做hash,对string做hash,要减少碰撞频率 。
在内存中维护一个大小为10000的最小堆,每次从文件读一个数,与最小堆的堆顶元素比较,若比堆顶元素大 , 则替换掉堆顶元素,然后调整堆 。最后剩下的堆内元素即为最大的1万个数,算法复杂度为O(NlogN)

推荐阅读