头图来源:ILLUSTRATION 2018-loundraw


  • 自我介绍
  • 之前做过的项目有哪些难点?
  • mysql慢查询的情况
    造成慢查询有以下几种因素:

    1. 网络丢包、重传
    2. 受到磁盘IO影响,磁盘IO被其他进程占用
    3. 没有索引,或者索引不正确、索引失效
    4. 数据量大
    5. 出现死锁
  • 索引失效的情况

    1. where语句中包含or时,可能会导致索引失效
    2. where语句中索引列使用了负向查询,可能会导致索引失效(负向查询包括:NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等。)
    3. 索引字段可以为null,使用is null或is not null时,可能会导致索引失效(如:select * from user where user_id is not null or age is not null;
    4. 在索引列上使用内置函数,一定会导致索引失效
    5. 隐式类型转换导致的索引失效
    6. 对索引列进行运算,一定会导致索引失效
    7. like通配符可能会导致索引失效
    8. 联合索引中,where中索引列违背最左匹配原则,一定会导致索引失效
  • 联合索引需要注意什么问题?
    一般情况下,将查询需求频繁或者字段选择性高的列放在前面。
  • Redis中有哪些数据结构?
    字符串、list、hash、set、zset
  • Redis中Zset怎么实现的?
    跳表
  • 如果不用跳表有其他实现方式吗?
    答了B+树
  • Redis中有哪些缓存淘汰的方法?
    8种

    1. volatile-lru 设定超时时间的数据中,删除最不常用的数据;
    2. allkeys-lru 查询所有的key 中最不常使用的数据进行删除,这是应用最广泛的策略;
    3. volatile-random 在已经设定了超时的数据中随机删除;
    4. allkeys-random 查询所有的 key 之后随机删除;
    5. volatile-ttl 查询全部设定超时时间的数据,追后马上排序,将马上将要过期的数据进行删除操作;
    6. noeviction (默认) 如果设置为该属性,则不会进行删除操作,如果内存溢出则报错返回;
    7. volatile-lfu 从所有配置了过期的时间的键中驱逐使用频率最少的键;
    8. allkeys-lfu 从所有键中驱逐使用频率最少的键;
  • LRU算法是如何实现的?
    双向链表+哈希
  • 哈希是干啥用的?
    判断键是否已经缓存
  • 为什么使用双向链表?
    双向链表删除效率高
  • Go中的recover什么情况下执行失效?

    1. recover不在defer中
    2. recover跨协程
  • 算法题
    leetcode--33.搜索旋转排序数组
Last modification:June 21st, 2022 at 06:43 pm
If you think my article is useful to you, please feel free to appreciate