@@ -150,5 +150,61 @@ $a[] = &$a;
150150> -t: 设置间隔符.
151151> -k: 指定排序的列数.(从1开始)
152152```
153-
153+ 2020年面试
154+ #### 0X01 跟谁学 PHP数据中台
155+ 1 . Redis中RDB的实现:
156+ * RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态保存到磁盘中.
157+ * RDB持久化所生成的是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态.
158+ * 有两个命令可以生成RDB文件,一个是SAVE,一个是BGSAVE.
159+ * RDB文件的载入是在Redis服务器启动时自动执行的.
160+ * 如果数据库启动了AOF持久化,服务器会优先使用AOF文件来还原数据库状态.
161+ * 只有在AOF持久化关闭的情况下,才会使用RDB文件来还原数据库状态.
162+ * Save命令执行时,服务器的状态:
163+ * Redis服务器会被阻塞,只有执行完Save命令,才会重新开始接受请求.
164+ * BGSAVE命令执行时,服务器的状态:
165+ * Redis服务器仍然可以接受处理客户端的命令请求.
166+ * 客户端发送的SAVE命令会被服务器拒绝,服务器禁止SAVE命令和BGSAVE命令同时执行,为了避免产生竞争.
167+ * 服务器禁止两个BGSAVE命令同时执行,为了避免竞争.
168+ * 如果BGREWRITEAOF命令正在执行,则BGSAVE命令会被服务器拒绝.为了避免性能问题.
169+ * 服务器在载入RDB文件期间,会一直处于阻塞状态,直到载入工作完成为止.
170+ * 针对不同的键值对,RDB会使用不同的方式来保存它们.
171+ * AOF:
172+ * AOF持久化是通过保存Redis所执行的写命令来记录数据库状态的.
173+ * 被写入AOF文件的所有命令都是以Redis的命令请求协议保存的.
174+ * AOF持久化功能的实现可以分为命令追加,文件写入,文件同步三个过程.
175+ * 命令追加: 服务器在执行完一个写命令后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾.
176+ * 为了解决AOF文件体积膨胀的问题,Redis提供了AOF文件重写功能.
177+ * AOF后台重写:
178+ * 子进程进行AOF重写期间,服务器进程可以继续处理命令请求.
179+ * 子进程带有服务器进程的数据副本,可以避免在使用锁的情况下,保证数据的安全性.
180+ * appendfync选项的不同值对AOF持久化功能的安全性以及Redis服务器的性能有很大的影响.
181+ * AOF重写可以产生一个新的文件,这个文件和原有的AOF文件所保存的数据库状态一样,但体积更小.
182+ * 在执行BGREWRITEAOF命令时,Redis服务器会维护一个AOF重写缓冲区.
183+ 2 . Redis的RDB持久化为什么要fork一个子进程来实现:
184+ * 父进程继续处理client请求,子进程负责将内存内容写入到临时文件,由于OS写时复制机制,父子进程会共享相同的物理页面,当父进程处理写请求时,
185+ OS会为父进程要修改的页面创建副本,而不是写共享页面.所以子进程地址空间内的数据是fork时刻整个数据库的一个快照.
186+ 3 . MySQL中的索引一定都是放在内存中的吗?
187+ * 索引一般是存储在索引文件中,在使用的时候才会加载到内存中.
188+ 4 . MySQL为什么要用B+tree来实现数据存储?
189+ * B+树的数据结构有更小的磁盘I/O消耗.
190+ * 哈希表:
191+ * 哈希表这种结构适用于等值查询的场景,再做区间查询的时候就比较慢.
192+ * 有序数组:
193+ * 有序数组索引只适用于静态存储引擎.
194+ * 在更新数据的时候需要保证插入的顺序,成本太高.
195+ * 二叉搜索树:
196+ * 为了维持O(logn)的查询时间复杂度,需要保持这棵树是平衡二叉树.为了这个保证,更新的时间复杂度也是O(logn).
197+ * 大多数数据存储不使用二叉树,原因是索引不止存在于内存中,还要写到磁盘上.
198+ * InnoDB使用了B+树索引模型,所以数据都是存储在B+树中的.
199+ * 每个索引在InnoDB里对应一颗B+树.
200+ * 索引类型分为主键索引和非主键索引:
201+ * 主键索引的叶子节点存的是整行数据.
202+ * 非主键索引的叶子节点的内容是主键的值.
203+ * 非主键索引查询,需要先搜索非主键索引树,查找到主键后再到主键索引树查询,这个过程叫做回表.
204+ * 主键长度越小,普通索引叶子节点就越小,普通索引占用的空间就越小.
205+ * B+树能够很好的配合磁盘的读写特性,减少单次查询的访问磁盘次数.
206+ 5 . MySQL中全文索引的实现.
207+ * MySQL5.6之后的版本MyIsam和InnoDB都支持全文索引.
208+ * 只有字段类型是char varchar和text才可以创建全文索引.
209+
154210
0 commit comments