Hashing

HashMap的工作原理及HashMap和Hashtable的区别

我怕爱的太早我们不能终老 提交于 2020-03-01 14:59:10
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入让这道题变得更加复杂。让我们开始探索的旅程吧! 先来些简单的问题 “你用过HashMap吗?” “什么是HashMap?你为什么用到它?” 几乎每个人都会回答“是的”,然后回答HashMap的一些特性,譬如HashMap可以接受null键值和值,而Hashtable则不能;HashMap是非synchronized;HashMap很快;以及HashMap储存的是键值对等等。这显示出你已经用过HashMap,而且对它相当的熟悉。但是面试官来个急转直下,从此刻开始问出一些刁钻的问题,关于HashMap的更多基础的细节。面试官可能会问出下面的问题: “你知道HashMap的工作原理吗?” “你知道HashMap的get()方法的工作原理吗?” 你也许会回答“我没有详查标准的Java API,你可以看看Java源代码或者Open JDK。”“我可以用Google找到答案。”

varnish 4.0 官方文档翻译17-Hashing

こ雲淡風輕ζ 提交于 2019-12-01 04:01:19
Hashing 实质上,当Varnish存储内容在缓存中时,它也把如何发现这个对象的哈希键和对象一起存储。默认设置的hash键是基于内容的的主机名或者ip地址和URL计算出的。(url+host或者url+ip) 默认的VCL: sub vcl_hash { hash_data(req.url); if (req.http.host) { hash_data(req.http.host); } else { hash_data(server.ip); } return (lookup); } 正如你看见那样,首先检查 req.url 然后如果 req.http.host 存在的话检查 req.http.host 。 需要指出的是在哈希之前varnish不会将hostname或者URL转换成小写,因此“Varnish.org/”和“varnish.org/”理论会导致不同的缓存条目。然而,浏览器,往往小写主机名。 你可以修改hash。这种方式你可以让Varnish根据任意算法提供不同的内容给不同的客户端。 你如果想基于源ip地址提供不同语言的页面给你的用户。你需要一些 根据ip地址判断是哪个国家的VMOD ,然后放在哈希中。看起来像这样: In vcl_recv: set req.http.X-Country-Code = geoip.lookup(client.ip);