头图来源:ILLUSTRATION 2018-loundraw
- 自我介绍
- 之前做过的项目有哪些难点?
mysql慢查询的情况
造成慢查询有以下几种因素:- 网络丢包、重传
- 受到磁盘IO影响,磁盘IO被其他进程占用
- 没有索引,或者索引不正确、索引失效
- 数据量大
- 出现死锁
索引失效的情况
- where语句中包含or时,可能会导致索引失效
- where语句中索引列使用了负向查询,可能会导致索引失效(负向查询包括:NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等。)
- 索引字段可以为null,使用is null或is not null时,可能会导致索引失效(如:
select * from
userwhere user_id is not null or age is not null;
) - 在索引列上使用内置函数,一定会导致索引失效
- 隐式类型转换导致的索引失效
- 对索引列进行运算,一定会导致索引失效
- like通配符可能会导致索引失效
- 联合索引中,where中索引列违背最左匹配原则,一定会导致索引失效
- 联合索引需要注意什么问题?
一般情况下,将查询需求频繁或者字段选择性高的列放在前面。 - Redis中有哪些数据结构?
字符串、list、hash、set、zset - Redis中Zset怎么实现的?
跳表 - 如果不用跳表有其他实现方式吗?
答了B+树 Redis中有哪些缓存淘汰的方法?
8种- volatile-lru 设定超时时间的数据中,删除最不常用的数据;
- allkeys-lru 查询所有的key 中最不常使用的数据进行删除,这是应用最广泛的策略;
- volatile-random 在已经设定了超时的数据中随机删除;
- allkeys-random 查询所有的 key 之后随机删除;
- volatile-ttl 查询全部设定超时时间的数据,追后马上排序,将马上将要过期的数据进行删除操作;
- noeviction (默认) 如果设置为该属性,则不会进行删除操作,如果内存溢出则报错返回;
- volatile-lfu 从所有配置了过期的时间的键中驱逐使用频率最少的键;
- allkeys-lfu 从所有键中驱逐使用频率最少的键;
- LRU算法是如何实现的?
双向链表+哈希 - 哈希是干啥用的?
判断键是否已经缓存 - 为什么使用双向链表?
双向链表删除效率高 Go中的recover什么情况下执行失效?
- recover不在defer中
- recover跨协程
- 算法题
leetcode--33.搜索旋转排序数组