java知识汇总(五)

112 阅读4分钟

java知识汇总

核心篇

数据存储

  • MySQL 索引使用的注意事项

    insertupdate语句在拥有索引的表中执行会花费更多的时间,而select语句会执行的更快
    
    唯一索引:不可以出现相同的值,可以有null一般是id字段
    普通索引:允许出现相同的索引内容
    主键索引:不允许出现相同的值
    全文索引:可以针对值中的某个单词,但效率很低
    组合索引: 将多个字段建到一个索引里,列值的组合必须唯一
    
    使用alter table name add index name (字段名)
    1.索引不会包含有null的列,只要列中有null值,都将不会被包含在索引中,复合索引只要有一列含有null
    那么这一列对此复合索引就是无效的
    
    2.使用短索引 某个char的列,前10个或者20个字符内多数值是唯一的,那么久不要对整个列进行索引
    短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作
    
    3.索引列排序,mysql查询只使用一个索引,如果where后使用了索引的话,order by中的列是不会使用
    索引的
    
    4.like语句 like'%aa%'不会使用索引,而like'aa%'会使用索引
    5.不要在列上进行运算操作
    6.不使用NOT IN<>,!=操作,但是<,<=,=,>,>=,BETWEEN,IN是可以用到索引的
    7.索引要建在经常select的字段上  增加索引会影响系统的维护速度
    8.索引要建在值比较唯一的字段上
    9.wherejoin中出现的列需要建立索引
    10.mysql的where后使用不等于或者函数将无法使用索引
    
  • 说说反模式设计

    反模式就是让我们系统恶化的场景总结,数据库优化的时候首先关注的就是long sql,、
    long sql
    会长时间占用一个connection,如果long sql多了就会将连接耗尽
    
    为了降低响应时间,系统往往在本地内存中缓存很多数据,缓存数据越多命中率就越高,
    平均响应时间就越快,为了降低平均响应时间,有些开发者会不加限制的缓存各种数据,
    在正常流量情况下,系统的响应时间和吞吐量都有很大改进。但当流量高峰来临时,系
    统内存使用开始增多,触发jvm进行full GC进而导致大量缓存被释放,而大量请求又使
    得缓存被迅速填满,这就是反复缓存,导致了频繁的full GC
    
  • 说说分库与分表设计

  • 分库与分表带来的分布式困境与应对之策

    避免联合查询,通过在程序中拼装或者通过反范式化设计进行规避
    分页和排序问题,将不同分表的返回结果集进行汇总和再排序
    分布式事务问题,保证数据一致性
    
    分库与分表主要用于两个场景:海量数据和高并发
    
    建议:结合实际需求,不宜过度设计,在项目一开始不采用分库与分表设计,而是随着业务增长
    无法继续优化的情况下再考虑分库和分表
    
  • 说说 SQL 优化之道

    1.使用explain判断sql是否合理使用索引,尽量避免extra列出现
    2.必须被索引 updatedeletewhere条件列,order bygroup bydistinct字段
      以及多表join字段
    3.避免在where字句中对字段进行null值判断,也不要对字段进行表达式操作,这样会让
      引擎放弃索引而进行全表扫描
    4.避免like使用%前导查询,无法利用索引,避免使用or
    
  • MySQL 遇到的死锁问题

    mysql三种锁的级别:页级,表级和行级
    表级锁:开销小,加锁快,不会出现死锁,锁定粒度大,发生锁冲突概率高,并发度低
    行级锁:开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突概率低,并发度高
    
  • 存储引擎的 InnoDB 与 MyISAM

    前者支持事务,后者不支持
    前者适合执行大量的insert或者update,后者适合大量的select
    前者不会保存表的具体行数,需要扫描表来计算后者会保存
    前者有表锁和行锁,后者只有表锁
    前者清空表是一行行删除,效率慢,后者则会重建表
    
  • 数据库索引的原理

    索引是帮助mysql高效获取数据的数据结构
    mysql普遍采用B+tree来实现其索引结构
    
  • 为什么要用 B-tree

  • 聚集索引与非聚集索引的区别

  • limit 20000 加载很慢怎么解决

  • 选择合适的分布式主键方案

  • 选择合适的数据存储方案

  • ObjectId 规则

  • 聊聊 MongoDB 使用场景

  • 倒排索引

  • 聊聊 ElasticSearch 使用场景