乐趣区

关于java:Java中常见面试题一困难

Java 中常见面试题一(艰难)

Redis 的缓存击穿及解决方案

  • 缓存击穿:
    这个跟缓存雪崩有点像,然而又有一点不一样,缓存雪崩是因为大面积的缓存生效,数据库解体了, 而缓存击穿不同的是缓存击穿是指存在一个热点数据 Key,有申请一直来拜访这个 Key,这么多申请在同一段时间内拜访这个热点数据,当这个 Key 生效工夫到了的时候,继续的这么多申请间接怂到数据库上了,就在这个 Key 值上击穿了缓存。
  • 解决方案:
    设置热点数据永不过期或者加上互斥锁就搞定了。

索引的建设准则, 如何防止索引生效

  • 索引的建设准则
    索引的设计须要遵循一些已有的准则,这样便于晋升索引的应用效率,更高效的应用索引。
    (1)对查问频次较高,且数据量比拟大的表,建设索引。
    (2)索引字段的抉择,最佳候选列该当从 where 子句的条件中提取,如果 where 子句中的组合比拟多,那么该当筛选最罕用,过滤成果最好的列的组合。
    (3)如果 where 后有多个条件常常被用到,倡议建设合乎索引,复合索引须要遵循最左前缀法令,N 个列组合而成的复合索引,相当于创立了 N 个索引。
    复合索引命名规定 index_表名_列名 1_列名 2_列明 3
    比方:createindexidx_seller_name_sta_addrontb_seller(name,status,address)
    复合索引须要遵循最左前缀法令,N 个列组合而成的复合索引,相当于创立了 N 个索引。最左前缀法令前面会具体介绍~
    (4)应用惟一索引,区分度越高,应用索引的效率越高。
    (5)索引并非越多越好,如果该表赠,删,改操作较多,谨慎抉择建设索引,过多索引会升高表保护效率。
    (6)应用短索引,进步索引拜访时的 I / O 效率,因而也相应晋升了 Mysql 查问效率。
    (7)多表连贯的字段上须要建设索引,这样能够极大进步表连贯的效率。
    (8)排序字段上,因为排序效率低,增加索引能进步查问效率。
  • 如何防止索引生效
    (1) 遵循最左前缀法令
    如果在查问的时候,应用了复合索引,要遵循最左前缀法令,也就是查问从索引的最左列开始,并且不能跳过索引中的列。如果不蕴含最右边的索引列,则其余索引不失效; 如果蕴含了最右边的索引列,然而跳过了一列间接索引了复合索引的第三列,则第三列的索引不失效。
    (2)不要在索引上应用运算,否则索引也会生效。
    (3)字符串不加引号,造成索引生效。
    (4)尽量应用笼罩索引,防止 select*,这样能进步查问效率。
    (5)or 关键字连贯
    用 or 宰割开的条件,如果 or 后面的列有索引,or 前面的列没有索引,那么查问的时候索引会生效,如果肯定要用 or 查问,能够思考下 or 连贯的条件列都加索引,这样就不会生效了。
    (6)like 含糊查问
    在应用 like 含糊查问时,如果 like% 也就是 % 加在前面索引不会生效,如果 %lik 或%like% 也就是 % 加在后面,索引会生效。
    如果查问的列占整张表的绝大多数,那么就会全表扫描,不会走索引。所以在查问的时候走不走索引不能百分百必定。
    也就是说如果查找一个罕见数据,如果建设了索引,就会走索引。如果查问的数据表白绝大多数都符合条件,就全表扫描,不走索引。
退出移动版