微派-二面-后端开发

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 上海

相关推荐

03-28 18:58
已编辑
华中师范大学 golang
3.21微派贪吃蛇大作战go后端实习生面了大概一个小时计网被狠狠拷打了,怎么这么难1. 自我介绍2. OSI七层模型是什么?3. 每层是干什么的?解决了什么问题?(开始答得每层有什么协议,他说不对,问我每层解决了什么问题,比如网络层,物理层。答得不好)4. 为什么要分七层?(解耦合,专注自己每一层的职责)5. OSI分层的思路对开发有什么帮助?(举例MVC中各层的处理逻辑独立)6. 应用层协议有什么?(http,https,ws,grpc,我为什么要说ws啊,我艹了)7. ws,grpc是基于什么的?(答得http2,但是ws是http1.1握手+tcp通信)8. TCP三次握手流程?具体报文变化?(报文真不会啊)每一步的意义?9. TCP怎么实现的面相连接与可靠?(讲了ACK应答,拥塞控制,滑动窗口啥的,拥塞控制忘了好几个名词)10. TCP和UDP哪个传输字节流,那个传输报文(搞反了...很好,被看出来计网学的一坨了)11. ws的底层实现(只知道是http1.1做的连接,之后的传输是ws自己处理的)12. 基于udp做一个可靠的传输协议(直接抄TCP的,应用层手动拆分)13. http1->http1.1->http2->http3的变化14. 讲一下GMP模型15. 为什么要提出协程(用户态,轻量无感实现线程同样的效果)16. 讲一下channel的实现17. 为什么go语言鼓励通过通信实现共享内存,而不是通过共享内存实现通信?(答得各个协程之间互相隔离)18. 项目里面redis用了什么?什么数据结构?(做单聊,用的List)19. 还用过什么数据结构?(String做缓存)20. 为什么不考虑使用hash?(直接操作redis更新需求小,大多是直接覆盖)21. redis是单线程还是多线程的?(IO多线程,事件处理单线程)22. redis多路复用怎么实现的?(各个操作系统不同,linux上用的epoll)23. 为什么redis使用单线程而其他的数据库使用锁?(基于内存,性能主要瓶颈不同)24. redis怎么实现一个排行榜?如果分数一样按照时间排序怎么处理?(用Zset,Val直接存一个json字符串,时间字段在前,比较完时间字段就得到比较结果了)25. 为什么项目用微服务重构?(机器带宽问题,多人协作问题)26. 你觉得什么时候才需要用到微服务?(没想明白,只说没钱,服务器资源不够)27. 微服务的优劣势(部分更新而不是导致所有服务挂掉,运维成本比较高)28. 拆分微服务的关键,是如何做拆分的?(水平拆分和垂直拆分)29. leetcode最长公共前缀反问:1. 游戏后端和一般的业务有什么区别?(看业务,做活动的和一般的后端没差,其他的不太一样,但是我没记住)2. ZSet的那题的优雅解决方案?(float类型,小数点前用分数,后面用时间戳)3. 什么时候要拆微服务?(不同服务之间的流量大小不同,需要消耗的资源不同,所以当业务体量很大,出现严重的流量不等的时候适合拆分)
查看29道真题和解析
点赞 评论 收藏
分享
评论
1
23
分享

创作者周榜

更多
牛客网
牛客企业服务