微派-二面-后端开发
Redis 压缩列表缺点? 为了能够倒序遍历,entry里的长度记录的是前一个entry的长度。
- 不能保存过多的元素,否则查询效率就会降低;
- 新增或修改某个元素时,压缩列表占用的内存空间需要重新分配,甚至可能引发连锁更新的问题。
Redis字符串怎么扩容的?
当SDS需要进行空间扩展的时候,程序不仅会为SDS分配修改锁必须要的空间,还会为SDS分配额外的未使用空间。分配公式1. 如果对SDS进行修改之后,SDS的长度小于1MB,那么程序分配和len属性同样大小的未使用空间,这时SDS的len属性的值和free相同2. 如果对SDS进行修改之后,SDS的长度大于1MB,那么程序会分配1MB的未使用空间。
Redis 持久性,RDB方式 为什么fork一个子进程,为什么fork一个子进程就不阻塞主进程了?怎么样不影响主进程的?子进程与主进程有什么关系?(共享主进程的内存空间)
fork一个子进程生成一个快照与主进程共享内存空间,这时如果有修改操作主进程会复制出
对应的内存页(写时复制),没有修改的内存页不会复制,子进程就是利用这个机制,不会阻塞主进程。
Redis AOF缓存区 刷盘时机?如果交给操作系统,操作系统如何决定什么时候刷盘?
默认是everysec。
操作系统有两种:缓存区满了,还有定时刷。
Redis IO多路复用机制了解吗?
服务端进行listener之后,执行accept等待连接,客户端连接,连接进行三次握手之后,accept那里就可以拿到一个连接,就是一个Socket,然后把这个连接会放到IO多路复用里面管理这个连接,通过IO多路复用监听这个连接的事件,比如说发了一个命令,就有了一个可读事件,触发一个回调,会把可读事件缓存区里面的东西读出来 就是一个命令,在通过对应的事件处理器去解析,去处理这个命令。
IO多路复用里的select, poll,epoll了解吗 之间的区别?(看操作系统)
你对分布式怎么理解的?分布式是一种什么样的模式,做成分布式需要考虑的问题?
**分布式怎么哈希的? **
Redis一致性哈希是如何用的?怎么判断slot是属于哪个节点。初始化的时候怎么分配的slot的?
一致性哈希算法(带虚拟节点的一致性哈希分区)将整个哈希值空间组织成一个虚拟的圆环。根据key计算hash值,确定数据在环上的位置,然后从此位置沿环顺时针行走,找到的第一台服务器就是其应该映射到的服务器。
一个节点除了会将自己负责处理的槽记录在clusterNode结构的slots属性和numslots属性外,他还会将自己的slots数组通过消息发送给集群中的其他节点,以此来告知其它节点自己目前负责处理哪些槽。
#软件开发2023笔面经#