快手秋招一面20230811
# 面试
- 实习项目累积量平台介绍,流量qps是如何下降的。详细介绍底层的存储结构是怎么样的
- 底层结构为什么存储string而不存储map,每次请求来了需要修改对应分片,不是用map更好吗?
- 累积量平台的精度是怎么优化的。
- 为什么redis有string结构,但是没有一个int结构
- LRU算法
- LinkedList底层原理,remove原理,时间复杂度
- mongoDb迁移mysql背景,迁移方案详解,存量数据迁移过程中,update怎么处理。
- 项目中mysql的结构是怎么样的,主从结构吗?读写流量都在主库上吗,如果在从库上读,会有什么问题吗?
# 解决
按照实际讲解
新设计的结构中,每个时间分片需要进行手动逻辑判断是否过期,而map的是无法指定filed过期的。另外string可以进行压缩,map不能进行很好的压缩
解决了读放大问题,也就可以使用更多的分片。
Redis 的设计目标之一是简单性和通用性。在 Redis 的设计哲学中,它希望提供一组通用的数据结构,可以在不同的场景下灵活使用,而不是针对每种数据类型都提供一个独立的数据结构。
这种设计理念在 Redis 中体现为使用 "string" 数据结构来存储任意类型的数据,包括整数。这样的设计有以下几个优点:
- 通用性和灵活性:使用单一的 "string" 数据结构,Redis 可以存储字符串、整数、浮点数、二进制数据等各种类型的数据。这使得 Redis 在各种场景下都可以使用,而不需要针对每种数据类型都引入单独的数据结构。
- 简化实现和维护:引入额外的数据类型会增加 Redis 的复杂性,包括底层的存储和命令解析逻辑。使用统一的 "string" 数据结构可以简化 Redis 的实现和维护,减少代码复杂性。
- 性能优势:Redis 的设计追求高性能和低延迟。通过使用统一的数据结构,可以减少数据类型转换的开销,从而提高性能。
虽然 Redis 中没有单独的 "int" 类型,但通过对 "string" 数据结构进行整数操作,可以实现与整数类型相关的操作,如自增、自减、比较等。这种设计在实际应用中已经得到了验证,并且使得 Redis 在各种场景下都能够胜任。
- 常规数据结构
- 常规数据结构
- upsert语句
- 不太清楚
思考:如果读在从库,写在主库,那么可能会出现主从延迟的问题
# 感悟
面试官听实习的时候很认真,整体都是在稳步的交流中,算法也是很常规的算法。
编辑 (opens new window)
上次更新: 2024/02/22, 14:03:19