加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

memcache内核,一文搞定!口试再也不怕了!!!(值得保藏)

发布时间:2019-06-17 23:42:22 所属栏目:建站 来源:58沈剑
导读:memcache是互联网分层架构中,行使最多的的KV缓存。口试的进程中,memcache相干的题目险些是必问的,关于memcache的口试提问,你能答复到哪一个条理呢? 画外音:很也许关乎,你拿到offer的薪酬档位。 第一类题目:知道不知道 这一类题目,考查用没用过,知
副问题[/!--empirenews.page--]

memcache是互联网分层架构中,行使最多的的KV缓存。口试的进程中,memcache相干的题目险些是必问的,关于memcache的口试提问,你能答复到哪一个条理呢?

画外音:很也许关乎,你拿到offer的薪酬档位。

口试

第一类题目:知道不知道

这一类题目,考查用没用过,知不知道,相比拟力好答复。

关于memcache一些基本特征,行使过的小搭档根基都能答复出来:

  • mc的焦点职能是KV内存打点,value存储最大为1M,它不支持伟大数据布局(哈希、列表、荟萃、有序荟萃等);
  • mc不支持耐久化;
  • mc支持key逾期;
  • mc一连运行很少会呈现内存碎片,速率不会跟着处事运行时刻低落;
  • mc行使非阻塞IO复用收集模子,行使监听线程/事变线程的多线程模子;

面临这类关闭性的题目,必然要刀切斧砍,毫无踌躇的给出答复。

第二类题目:为什么(why),什么(what)

这一类题目,考查对付一个器材,只逗留在行使层面,照旧有道理性的思索。

(1) memcache为什么不支持伟大数据布局?为什么不支持耐久化?

营业抉择技能方案,mc的降生,以“以处事的方法,而不是库的方法打点KV内存”为计划方针,它倾覆的是,KV内存打点组件库,伟大数据布局与耐久化并不是它的初志。

虽然,用“倾覆”这个词未必不吻合,库和处事各有行使场景,只是在漫衍式的情形下,处事的行使范畴更广。计划方针,降生配景很重要,这必然水平上抉择了实现方案,就如redis的呈现,是为了有一个更好用,更多成果的缓存处事。

画外音:我很喜好问这个题目,大部门候选人面临这个没有尺度谜底的题目,状态也许是蒙圈。

(2) memcache是用什么技能实现key逾期的?

懒裁减(lazy expiration)。

(3) memcache为什么能担保运行机能,且很少会呈现内存碎片?

提前分派内存。

(4) memcache为什么要行使非阻塞IO复用收集模子,行使监听线程/事变线程的多线程模子,有什么优弱点?

目标是进步吞吐量。

多线程可以或许充实的操作多核,但会带来一些锁斗嘴。

面临这类半开放的题目,有些并没有尺度谜底,必然要答复出本身的思索和看法。

第三类题目:怎么做(how) | 文本刚开始

这一类题目,探测候选人领略得有多透,把握得有多细,对技能有多刨根究底。

画外音:所谓“好奇心”,真的很重要,只想要“一份事变”的技强人很难有这种好奇心。

(1) memcache是什么实现内存打点,以减小内存碎片,是怎么实现分派内存的?

开讲之前,先表明几个很是重要的观念:

  • chunk:它是将内存分派给用户行使的最小单位。
  • item:用户要存储的数据,包括key和value,最终都存储在chunk里。
  • slab:它会打点一个牢靠chunk size的多少个chunk,而mc的内存打点,由多少个slab构成。

画外音:为了停止伟大性,本文先不引入page的观念了。

memcache内核,一文搞定!口试再也不怕了!!!(值得保藏)

如上图所示,一系列slab,别离打点128B,256B,512B…的chunk内存单位。

将上图中打点128B的slab0放大:

memcache内核,一文搞定!口试再也不怕了!!!(值得保藏)

可以或许发明slab中的一些焦点数据布局是:

  • chunk_size:该slab打点的是128B的chunk
  • free_chunk_list:用于快速找到空闲的chunk
  • chunk[]:已经预分派好,用于存放用户item数据的现实chunk空间

画外音:着实尚有lru_list。

(2) 若是用户要存储一个100B的item,是怎样找到对应的可用chunk的呢?

memcache内核,一文搞定!口试再也不怕了!!!(值得保藏)

会从最靠近item巨细的slab的chunk[]中,通过free_chunk_list快速找到对应的chunk,如上图所示,与item巨细最靠近的chunk是128B。

(3) 为什么不会呈现内存碎片呢?

memcache内核,一文搞定!口试再也不怕了!!!(值得保藏)

拿到一个128B的chunk,去存储一个100B的item,余下的28B不会再被其他的item所行使,即:现实上挥霍了存储空间,来镌汰内存碎片,担保会见的速率。

画外音:理论上,内存碎片险些不存在。

(4) memcache通过slab,chunk,free_chunk_list来快速分派内存,存储用户的item,那它又是怎样快速实现key的查找的呢?

没有什么出格算法:

memcache内核,一文搞定!口试再也不怕了!!!(值得保藏)

  • 通过hash表实现快速查找
  • 通过链表来办理斗嘴

用最朴实的方法,实现key的快速查找。

(5) 跟着item的个数不绝增多,hash斗嘴越来越大,hash表怎样担保查询服从呢?

当item总数到达hash表长度的1.5倍时,hash表会动态扩容,rehash将数据从头漫衍,以担保查找服从不会不绝低落。

(6) 扩展hash表之后,统一个key在新旧hash表内的位置会产生变革,怎样担保数据的同等性,以及怎样担保迁徙进程处事的可用性呢(必定不能加一把大锁,迁徙完成数据,再从头处事吧)?

哈希表扩展,数据迁徙是一个耗时的操纵,会有一个专门的线程来实验,为了停止大锁,回收的是“分段迁徙”的计策。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读