0

我在一次采访中被问到这个问题。我的直接答案是每次读写。然后面试官问:“你确定哈希没有缓存在表中的某个地方吗?”

这让我自己第二次猜测。最后,我坚持原来的答案,但出于好奇,我想我会在这里提出问题。

另请注意,本次面试是针对 JavaScript 职位的,但问题不一定针对 JavaScript。

那么,一般来说,一个键的散列是计算一次还是每次读/写?特定于 JavaScript 呢?

4

2 回答 2

1

这取决于哈希表和键类型,以及我们是在谈论用于读/写的键还是表中已经存在的键。前者的哈希值可以而且有时会缓存在对象中(例如:Python 中的字符串)。后者的散列值可以而且有时会缓存在表中——而不是键、值对,您存储散列、键、值三元组。

在这两种情况下,决定取决于密钥的类型:它们是否大且散列成本高?额外的空间和内存流量值得吗?例如,对于大于几十个字符的字符串,这可能是一个明显的胜利,而对于 2D 点可能无用或有害。另请注意,哈希值可用于避免比较,这可能有用但似乎并不重要。

于 2013-08-30T18:56:01.120 回答
1

当然,这取决于实现,即使您询问 JS,也有几种实现(V8、SpiderMonkey、MSFT 等)。

它还应该取决于应用程序。如果您的应用程序更频繁地使用放入哈希表的最后一项,那么以某种方式缓存哈希应该是有意义的。在某些情况下,这将是更可取的。

我猜面试官只是想看看你如何处理事后猜测......

于 2013-08-30T17:56:25.587 回答