准备过程

200 阅读2分钟

需要准备的知识有:(220-303)

所做的项目,熟练弄清楚相关的知识点,包括且不限于[0227]:

* 反射实现以及序列化和反序列化
* 时间轮定时器
* 底层网络架构
* 多线程应用以及条件变量等同步方案
* UUID
* LRU Cache
* 数据库相关

数据结构和算法(尤其是二叉树、STL、Allocator)

* 每天一题至少

数据库,重点索引+引擎

* 最后2天突击

http tcp/ip cookie session[0225]

nginx 知识点整理[0225]

C++(封装、继承、多态) [0229]

* 0222 内存对齐pack  [参考链接](https://zhuanlan.zhihu.com/p/33252691)  
```
[内存访问粒度]
CPU是按照‘块(chunk)’来读写内存的,块的大小可以是2bytes, 4bytes, 8bytes,  
16bytes甚至是32bytes,这个CPU访问内存采用块的大小,我们可以称为‘内存访问粒度’。
或者可以理解为,对于2bytes的块(chunk)则访问其中任何一个字节,都需要全部读取,然后把用到的截取出来。
```
* c++规则[0229]
* 智能指针(比如STL的智能指针是否线程安全、智能指针是否可以用new操作)
* 析构函数的相关考点

编译和链接、函数调用过程中栈的变化

* 函数调用过程之栈帧变化[0221]  
* - 每天 《程序员的自我修养》 之 编译链接  
* - 对EBP的理解,每次在将要进入被调函数,需要将参数(如果有)压栈,将保存返回地址(指的是调用函数之后的下一条指令)压栈,然后这时候将EBP寄存器的值(此时是调用函数的栈帧起始地址,也即栈底)压栈,是因为EBP要用来存储寄存器ESP的值(也即栈顶的值),也就是被调函数的栈帧的起始地址,这样被调函数执行结束,就可以通过该值找到返回地址,进而重新进入调用函数的栈帧中。另外,通过该值也方便找到传入的参数。[参考1](http://wsfdl.com/linux/2015/05/16/%E7%90%86%E8%A7%A3stack-func.html)     [参考2](https://blog.csdn.net/wangkr111/article/details/41315629)

开源软件,如redis源码熟悉(主要跳表,参考某公众号)[0229]

* 学习redis常用的几个数据结构和主要的功能点,如LRU Cache、调表