memcache内核,一文搞定!口试再也不怕了!!!(值得保藏)
副问题[/!--empirenews.page--]
memcache是互联网分层架构中,行使最多的的KV缓存。口试的进程中,memcache相干的题目险些是必问的,关于memcache的口试提问,你能答复到哪一个条理呢? 画外音:很也许关乎,你拿到offer的薪酬档位。 第一类题目:知道不知道 这一类题目,考查用没用过,知不知道,相比拟力好答复。 关于memcache一些基本特征,行使过的小搭档根基都能答复出来:
面临这类关闭性的题目,必然要刀切斧砍,毫无踌躇的给出答复。 第二类题目:为什么(why),什么(what) 这一类题目,考查对付一个器材,只逗留在行使层面,照旧有道理性的思索。 (1) memcache为什么不支持伟大数据布局?为什么不支持耐久化? 营业抉择技能方案,mc的降生,以“以处事的方法,而不是库的方法打点KV内存”为计划方针,它倾覆的是,KV内存打点组件库,伟大数据布局与耐久化并不是它的初志。 虽然,用“倾覆”这个词未必不吻合,库和处事各有行使场景,只是在漫衍式的情形下,处事的行使范畴更广。计划方针,降生配景很重要,这必然水平上抉择了实现方案,就如redis的呈现,是为了有一个更好用,更多成果的缓存处事。 画外音:我很喜好问这个题目,大部门候选人面临这个没有尺度谜底的题目,状态也许是蒙圈。 (2) memcache是用什么技能实现key逾期的? 懒裁减(lazy expiration)。 (3) memcache为什么能担保运行机能,且很少会呈现内存碎片? 提前分派内存。 (4) memcache为什么要行使非阻塞IO复用收集模子,行使监听线程/事变线程的多线程模子,有什么优弱点? 目标是进步吞吐量。 多线程可以或许充实的操作多核,但会带来一些锁斗嘴。 面临这类半开放的题目,有些并没有尺度谜底,必然要答复出本身的思索和看法。 第三类题目:怎么做(how) | 文本刚开始 这一类题目,探测候选人领略得有多透,把握得有多细,对技能有多刨根究底。 画外音:所谓“好奇心”,真的很重要,只想要“一份事变”的技强人很难有这种好奇心。 (1) memcache是什么实现内存打点,以减小内存碎片,是怎么实现分派内存的? 开讲之前,先表明几个很是重要的观念:
画外音:为了停止伟大性,本文先不引入page的观念了。 如上图所示,一系列slab,别离打点128B,256B,512B…的chunk内存单位。 将上图中打点128B的slab0放大: 可以或许发明slab中的一些焦点数据布局是:
画外音:着实尚有lru_list。 (2) 若是用户要存储一个100B的item,是怎样找到对应的可用chunk的呢? 会从最靠近item巨细的slab的chunk[]中,通过free_chunk_list快速找到对应的chunk,如上图所示,与item巨细最靠近的chunk是128B。 (3) 为什么不会呈现内存碎片呢? 拿到一个128B的chunk,去存储一个100B的item,余下的28B不会再被其他的item所行使,即:现实上挥霍了存储空间,来镌汰内存碎片,担保会见的速率。 画外音:理论上,内存碎片险些不存在。 (4) memcache通过slab,chunk,free_chunk_list来快速分派内存,存储用户的item,那它又是怎样快速实现key的查找的呢? 没有什么出格算法:
用最朴实的方法,实现key的快速查找。 (5) 跟着item的个数不绝增多,hash斗嘴越来越大,hash表怎样担保查询服从呢? 当item总数到达hash表长度的1.5倍时,hash表会动态扩容,rehash将数据从头漫衍,以担保查找服从不会不绝低落。 (6) 扩展hash表之后,统一个key在新旧hash表内的位置会产生变革,怎样担保数据的同等性,以及怎样担保迁徙进程处事的可用性呢(必定不能加一把大锁,迁徙完成数据,再从头处事吧)? 哈希表扩展,数据迁徙是一个耗时的操纵,会有一个专门的线程来实验,为了停止大锁,回收的是“分段迁徙”的计策。 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |