You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
# 期中测试 | 这些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源码的阅读和学习能力。我们下节课再见!