# 期中测试 | 这些Redis源码知识,你都掌握了吗? 你好,我是蒋德钧。 时间过得真快,从7月26日上线到现在,我们已经走过了一个半月的学习之旅,不知道你的收获如何呢? 前面我其实也说过,阅读和学习Redis源码确实是一个比较烧脑的任务,需要你多花些时间钻研。而从我的经验来看,阶段性的验证和总结是非常重要的。所以在这里,我特别设置了期中考试周,从9月13日开始到9月19日结束,这期间我们会暂停更新正文内容,你可以好好利用这一周的时间,去回顾一下前20讲的知识,做一个巩固。 有标准才有追求,有追求才有动力,有动力才有进步。一起来挑战一下吧,开启你的期中考试之旅。 我给你出了一套测试题,包括一套选择题和一套问答题。 * 选择题:满分共 100 分,包含4道单选题和6道多选题。提交试卷之后,系统会自动评分。 * 问答题:包括2道题目,不计入分数,但我希望你能认真回答这些问题,可以把你的答案写在留言区。在9月16日这一天,我会公布答案。 ### 选择题 [![](https://static001.geekbang.org/resource/image/28/a4/28d1be62669b4f3cc01c36466bf811a4.png)](http://time.geekbang.org/quiz/intro?act_id=926&exam_id=2699) ### 问答题 **第一题** Redis源码中实现的哈希表在rehash时,会调用dictRehash函数。dictRehash函数的原型如下,它的参数n表示本次rehash要搬移n个哈希桶(bucket)中的数据。假设dictRehash被调用,并且n的传入值为10。但是,在dictRehash查找的10个bucket中,前5个bucket有数据,而后5个bucket没有数据,那么,本次调用dictRehash是否就只搬移了前5个bucket中的数据? ``` int dictRehash(dict *d, int n) ``` **第二题** Redis的事件驱动框架是基于操作系统IO多路复用机制进行了封装,以Linux的epoll机制为例,该机制调用epoll\_create函数创建epoll实例,再调用epoll\_ctl将监听的套接字加入监听列表,最后调用epoll\_wait获取就绪的套接字再进行处理。请简述Redis事件驱动框架中哪些函数和epoll机制各主要函数有对应的调用关系。 好了,这节课就到这里。希望你能抓住期中周的机会,查漏补缺,快速提升Redis源码的阅读和学习能力。我们下节课再见!