微派-二面-后端开发

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笔面经#

#软件开发2023笔面经#
全部评论
你是写了精通redis吗,怎么问的这么难
3 回复 分享
发布于 2023-04-22 19:21 北京
你的最后一个问题回答的是插槽迁移的过程,和问题不匹配: 使用Redis集群时,可以通过CLUSTER SLOTS命令查看当前集群节点的插槽分配情况,初始情况会依据 hash(key) % N 将哈希槽进行等分。一个插槽只会被分配给一个节点处理。当一个节点需要处理一个未分配的插槽时,它会向其他节点发送一个“槽迁移”请求,将该插槽从原节点迁移到自己的节点上。槽迁移的过程是自动的,不需要用户干预。
1 回复 分享
发布于 2024-01-03 02:18 湖北
一共几面啊
点赞 回复 分享
发布于 2023-04-25 12:18 上海

相关推荐

04-06 16:43
已编辑
北京中南海业余大学 Java
实习拷打 1:你在**实习主要做了哪些工作?2:有没有记忆比较深的方案设计案例,讲讲你是怎么设计的?3:你说的库存这块,其实就是乐观锁的概念,对吧?当初这么设计是考虑性能优化吗?4:你提到的优惠券规则引擎是什么?5:注册发券逻辑从同步改成异步后,怎么保证券的成功发放?八股6:讲一下 Java 里 Map 的实现,主要是 HashMap 的底层结构?7:HashMap 的扩容流程是怎样的?最新版本里对 rehash 过程有什么优化吗?8:讲一下 JVM 内存模型,内存里有哪几个部分?9:类加载的过程是怎样的?有几个步骤?10:Java 是怎么进行垃圾回收的?11:MySQL 索引的结构是什么?12:索引失效的场景有哪些?13:MySQL 事务是怎么实现的?14:MySQL 实现可重复读、读已提交隔离级别是怎么做到的?15:你提到了 Read View,它的作用是什么?读提交和可重复读下 Read View 的创建时机有什么区别?16:MVCC 在 InnoDB 里是怎么实现的?Read View 是怎么找到有效版本的?17:Redis 的基础数据类型有哪些?18:Redis 的 ZSET 是如何实现通过 member 快速查找分数的?(底层数据结构)19:RabbitMQ 怎么实现消息不丢失和不重复消费?AI相关20:开发中有没有使用 AI 相关工具?除了开发还做过什么?21:你提到的 Skill 和 MCP 用起来的区别是什么?项目拷打22:你做的自然语言转 SQL 的 MCP 服务,实现流程是怎样的?23:大模型生成的 SQL 直接执行吗?会不会出现一些索引问题,导致查询量很大?24:这个项目是什么时候做的?现在重新设计有哪些优化方向?手撕leecode88:两个升序的数组 a 和 b,合并到数组 a 中,保持升序,a 数组的末尾有足够的空位,长度正好可以容纳两个数组的所有元素
查看24道真题和解析
点赞 评论 收藏
分享
评论
1
23
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务