[2]Java开发实习面试打卡
Posted Leida_wanglin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[2]Java开发实习面试打卡相关的知识,希望对你有一定的参考价值。
1.数据库三范式
第一范式:如果每列(或者每个属性)都是不可再分的最小数据单元
第二范式:如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键
第三范式:如果一个关系满足第二范式,并且不依赖于除了主键以外的其它列
2.引擎:mysql存储引擎MyISAM与InnoDB区别
- Innodb引擎:Innodb引擎提供了对数据库ACID事务的支持.并且还提供了行级锁和外键的约束.它的设计的目标就是处理大数据容量的数据库系统.
- MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键.
3.MyISM索引与InnoDB索引的区别
InnoDB索引是聚集索引,MyISAM索引是非聚集索引.
InnoDB的主键索引的叶子节点存储的是行数据,因此主键索引非常高效.
MyISAM索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据.
InnoDB非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效.
InnoDB引擎的4大特性:1.插入缓存 2.二次写 3.自适应哈希索引 4.预读
存储引擎的选择:如果没有特别的需求,使用默认的Innodb即可.
MyISAM:以读写插入为主的应用程序,比如播客系统,新闻门户网站.
InnoDB:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键.比如OA自动化办公系统.
4.索引
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.
索引相当于目录,是一个文件,要占据物理空间.
优点:可以大大加快数据的检索速度,可以在查询的过程中,使用优化隐藏器,提高系统的性能.
缺点:
时间方面:创建索引和维护索引要耗费时间,具体地,当对表中的数据进行增加,删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率
空间方面:索引需要占物理空间.
4.1. 索引使用场景(重点)
4.1.1. where
where:SQL执行可选的索引只有主键索引,如果有多个,最终会选一个较优的作为索引的依据.
4.1.2. order by
当我们使用order by将查询结果按照某个字段排序时,如果该字段没有建立索引,那么执行计划将会查询出的所有数据使用外部排序(将数据从硬盘分批读取到内存使用内部排序,最后合并排序结果),这个操作很影响性能.
如果对该字段建立索引,那么由于索引本身是有序的,因此直接按照索引的顺序和映射关系逐条取出数据即可.而且如果是分页的,只用取出索引表某个范围内的索引对应的数据.
4.1.3. join
对join语句匹配广西(on)涉及的字段建立索引能够提高效率
4.1.3.1. 索引覆盖
如果要查询的字段都建立过索引,那么引擎会直接在索引表中查询而不会访问原始数据(否则是要有一个字段没有建立索引就会做全表扫描),这叫索引覆盖.
因此我们需尽可能在select后只写必要的查询字段,以增加索引覆盖的几率.
4.2. 索引的类型
主键索引:数据列不允许重复,不允许为NULL,一个表只能有一个主键.
唯一索引:数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引.
普通索引:基本的索引类型,没有唯一性的限制,允许为NULL值.
全文索引:是目前搜索引擎使用的一种关键技术.
- 可以通过
ALTER TABLE table_name ADD UNIQUE(column);
创建唯一索引 - 可以通过
ALTER TABLE table_name ADD UNIQUE(column1,column2);
创建唯一组合索引 - 可以通过
ALTER TABLE table_name ADD INDEX index_name(column);
创建普通索引 - 可以通过
ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);
创建组合索引 - 可以通过
ALTER TABLE table_name ADD FULLTEXT(column);
创建全文索引
4.3. 索引的数据结构(b树, hash)
索引的数据结构和具体的存储引擎的实现有关,在MySQL中使用较多的索引有`Hash索引`,B+树索引等......
InnoDB存储引擎的默认索引实现为:B+树索引.
4.4. 索引的基本原理
索引的原理很简单,把无序的的数据变成有序的查询
1.把创建了索引的列的内容进行排序
2.对排序结果生成倒排表
3.在倒排表内容上拼上数据地址链
4.在查询的时候,先拿到倒排表的内容,再取出数据地址链,从而拿到具体数据
4.5. 索引算法
索引算法有BTree算法和Hash算法
BTree算法:
是最常用的mysql数据库索引算法,也是mysql默认的算法.因为它不仅可以被用在=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符,只要它的查询条件是一个不以通配符开头的常量
- 只要它的查询条件是一个不以通配符开头的常量
select * from user where name like 'jack%';
- 如果一通配符开头,或者没有使用常量,则不会使用索引,例如:
select * from user where name like '%jack';
Hash算法:
Hash索引只能用于对等比较,例如=,<=>操作符.
4.6. 索引设计的原则
1.适合索引的列是出现在where子句中的列,或者连接子句指定的列
2.基数较小的类,索引效果较差,没有必要在此列建立索引
3.使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间
4.不要过度索引.索引需要额外的磁盘空间,并降低写操作的性能.在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长.
以上是关于[2]Java开发实习面试打卡的主要内容,如果未能解决你的问题,请参考以下文章