这篇文章很有意思,以一个程序员的面试拉开序幕,很有趣的介绍了缓存的有关话题。这个系列的文章很有意思,恰巧我这个月的计划也有学习Cache的计划,所以我准备翻译这个系列的文章。说是翻译,也只是按照自己的理解潦草的翻译,有不准确的,还请见谅。如果你也很感兴趣,可以去看看原文
引言
我们都听过cache,当你问他们是什么是缓存的时候,他们会给你一个完美的答案,可是他们不知道缓存是怎么构建的,或者没有告诉你应该采用什么标准去选择缓存框架。在这边文章,我们会去讨论缓存,缓存算法,缓存框架以及哪个缓存框架会更好。
面试
“缓存就是存贮数据(使用频繁的数据)的临时地方,因为取原始数据的代价太大了,所以我可以取得快一些。”
这就是 programmer one (programmer one 是一个面试者)在面试中的回答(一个月前,他向公司提交了简历,想要应聘要求在缓存,缓存框架,大规模数据操作有着丰富经验的java开发职位)。
programmer one 通过hashtable实现了他自己的缓存,但是他知道的只是他的缓存和他那存储着150条记录的hashtable,这就是他认为的大规模数据(缓存 = hashtable,只需要在hashtable查找就好了),所以,让我们来看看面试的过程吧。
面试官:你选择的缓存方案,是基于什么标准的?
programmer one:呃,(想了5分钟)嗯,基于,基于,基于数据(咳嗽……)
面试官:excese me! 能不能重复一下?
programmer one:数据?!
面试官:好的。说说几种缓存算法以及它们的作用
programmer one:(凝视着面试官,脸上露出了很奇怪的表情,没有人知道原来人类可以做出这种表情
)
面试官:好吧,那我换个说法,当缓存达到容量时,会怎么做?
programmer one:容量?嗯(思考……hashtable的容量时没有限制的,我能任意增加条目,它会自动扩充容量的)(这是programmer one的想法,但是他没有说出来)
面试官对programmer one表示感谢(面试过程持续了10分钟),之后一个女士走过来说:谢谢你的时间,我们会给你打电话的,祝你好心情。这是programmer one最糟糕的面试(他没有看到招聘对求职者有丰富的缓存经验背景要求,实际上,他只看到了丰厚的报酬
)。
说到做到
programmer one离开之后,他想要知道这个面试者说的问题和答案,所以他上网去查,programmer one对缓存一无所知,除了:当我需要缓存的时候,我就会用hashtable。
在他使用了他最爱的搜索引擎搜索之后,他找到了一篇很不错的关于缓存文章,并且开始去阅读……
本文以一场程序员面试为开头,生动地介绍了缓存的基本概念及重要性。面试者programmerone虽然实现过简单的缓存功能,但对于缓存算法及框架却一无所知。面试官试图引导其了解缓存容量限制及不同算法的应用场景。
930

被折叠的 条评论
为什么被折叠?



