当前位置: 首页 > 面试题库 >

请你回答一下hash表如何rehash,以及怎么处理其中保存的资源

穆飞龙
2023-03-14
本文向大家介绍请你回答一下hash表如何rehash,以及怎么处理其中保存的资源相关面试题,主要包含被问及请你回答一下hash表如何rehash,以及怎么处理其中保存的资源时的应答技巧和注意事项,需要的朋友参考一下

参考回答:

C++的hash表中有一个负载因子loadFactor,当loadFactor<=1时,hash表查找的期望复杂度为O(1). 因此,每次往hash表中添加元素时,我们必须保证是在loadFactor <1的情况下,才能够添加。

因此,当Hash表中loadFactor==1时,Hash就需要进行rehash。rehash过程中,会模仿C++的vector扩容方式,Hash表中每次发现loadFactor ==1时,就开辟一个原来桶数组的两倍空间,称为新桶数组,然后把原来的桶数组中元素全部重新哈希到新的桶数组中。

 类似资料:
  • 本文向大家介绍请你回答一下epoll怎么实现的?相关面试题,主要包含被问及请你回答一下epoll怎么实现的?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Linux epoll机制是通过红黑树和双向链表实现的。 首先通过epoll_create()系统调用在内核中创建一个eventpoll类型的句柄,其中包括红黑树根节点和双向链表头节点。然后通过epoll_ctl()系统调用,向epol

  • 本文向大家介绍请你回答一下如何判断内存泄漏?相关面试题,主要包含被问及请你回答一下如何判断内存泄漏?时的应答技巧和注意事项,需要的朋友参考一下 内存泄漏通常是由于调用了malloc/new等内存申请的操作,但是缺少了对应的free/delete。为了判断内存是否泄露,我们一方面可以使用linux环境下的内存泄漏检查工具Valgrind,另一方面我们在写代码时可以添加内存申请和释放的统计功能,统计当

  • 本文向大家介绍请你回答一下栈和堆的区别,以及为什么栈要快?相关面试题,主要包含被问及请你回答一下栈和堆的区别,以及为什么栈要快?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 堆和栈的区别: 堆是由低地址向高地址扩展;栈是由高地址向低地址扩展   堆中的内存需要手动申请和手动释放;栈中内存是由OS自动申请和自动释放,存放着参数、局部变量等内存   堆中频繁调用malloc和free,会产生

  • 本文向大家介绍请你回答一下野指针是什么?相关面试题,主要包含被问及请你回答一下野指针是什么?时的应答技巧和注意事项,需要的朋友参考一下 野指针就是指向一个已删除的对象或者未申请访问受限内存区域的指针。

  • 本文向大家介绍请问Redis的rehash怎么做的,为什么要渐进rehash,渐进rehash又是怎么实现的?相关面试题,主要包含被问及请问Redis的rehash怎么做的,为什么要渐进rehash,渐进rehash又是怎么实现的?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 因为redis是单线程,当K很多时,如果一次性将键值对全部rehash,庞大的计算量会影响服务器性能,甚至可能会

  • 本文向大家介绍请你回答一下mongodb和redis的区别相关面试题,主要包含被问及请你回答一下mongodb和redis的区别时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 内存管理机制上:Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其