1.什么是哈希冲突?
不同关键字通过相同哈希计算出相同的哈希地址,该种现象称为哈希冲突或哈希碰撞。
2.处理哈希冲突的方法有哪些?优缺点分别是什么?
解决哈希冲突两种常见的方法是:闭散列和开散列
3.哈希表的增删查改的时间复杂度是多少?开放定制法哈希冲突很严重怎么办?哈希桶哈希冲突很严重怎么办?
查找索引当然会很快,不过只有无冲突的hash table复杂度才是O(1),一般是O©,c为哈希关键字冲突时查找的平均长度。
二次探测
4.海量数据处理的面试题?
位图,布隆过滤器,刷几道题就知道了
5.unordered_map和map的区别是什么?哪个更好一些?
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是unordered_map不会根据key的大小进行排序,
他们在以下的几个方面有区别:
-
内部实现
-
内存使用
-
时间复杂度
内部实现
-
std::map将元素存储在一个平衡二叉树中,所以元素是有序存储的。
-
std::unordered_map使用哈希表来存储元素,元素并不是有序存储。
内存使用
- unordered_map比ordered_map更占用内存,因为需要额外的内存来存储哈希表。
查找时间复杂度
-
std::map的查找时间复杂度是O(log n)。
-
std::unordered_map最佳的查找时间复杂度是O(1),如果哈希函数不是很好的话,最糟糕的复杂度会是O(n)。
什么时候选择map:
-
当你需要低内存占用率
-
当你希望序列是有序的
-
当你需要稳定的表现
什么时候选择unordered_map
- 当你有一个很好的哈希函数和对内存占用率没有限制时