1.MySQL存储引擎 InnoDB 和 MylSAM
InnoDB引擎是(5.5以后默认使用)特点:
- 灾难恢复性好
- 支持事务
- 使用行级锁
- 支持外键关联
- 支持热备份
对于InnoDB引擎中的表其数据的物理组织形势是簇表,主键索引和数据是在一起的,数据按主键的顺序物理分布,实现了缓冲管理,不仅能缓冲索引也能缓冲数据,并且可以自动创建散列索引加快数据的获取,支持热备份。
MyISAM索引特点:
- 不支持事务
- 使用表级锁,并发性差
- 主机宕机后,MyISAM表容易损坏,灾难恢复性不佳
- 可以配合锁,实现操作系统下的备份复制,迁移
- 只缓存索引,数据的缓存是利用操作系统缓冲区来实现的,可能引发过多系统调用且效率不佳数据紧凑存储,因此可以获得更小的索引和更快的全表扫描性能。
两种存储引擎区别:
- InnoDB支持事务,MyISAM不支持事务
- InnoDB支持外键,MyISAM不支持
- InnoDB不保存表行数,MyISAM只需要简单读出保存好行数即可,但当加选择条件时也需要扫描整个表
- 对于自增长字段,InnoDB必须包含该字段索引,但是在MyISQM中可以和其他字段组合索引
- 清空表时InnoDB是一行一行删除,但是MyISAM则会重新建表
总结:MyISAM不支持事务处理等高级处理,但是InnoDB支持;MyISAM强调是性能,执行速度比InnoDB快,但是不提供事务支持,但是InnoDB提供事务支持及外键等高级数据库功能。
行级锁,表级锁,页级锁区别:
表级锁:开销小,加锁快,不会出现死锁;锁定粒度大,发生冲突概率高,并发度低;
行级锁:开销大,加锁慢,会出现死锁,发生锁冲突较低,并发度也最高;
页级锁:开销和加锁时间介于表锁和行锁之间,会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般
2.MySQL索引
主键索引,唯一索引,普通索引,全文索引,联合索引
3.hashMap原理
hashMap是一个键值对集合,每个节点用Node<k,v>表示,node是一个内部类,在其内部类还包含了下一元素的引用
其数据结构是数组+(链表或红黑树);原理是数组查询效率高,插入删除效率低,链表查询效率低,插入删除效率高;
hashMap存储过程:先计算其数据的hashCode值,确定将该元素放到什么位置,当不存在该hashCode值时则可以将数据直接存入,若存在则使用equals方法比较两个数据是否相同,如果相同则直接覆盖该元素,输入不同则在该节点下存储该元素。
hashMap:初始容量和加载因子
初始容量大小是创建时给数组分配的容量大小,默认值是16,用数组容量大小乘以加载因子得到一个值,一旦存储元素超过这个这就会调用rehash方法将数组增加到原来的两倍,专业术语叫扩容。
4.jdk8的新特性
Lambda表达式;Date/Time API;stream流
具体可参考:https://www.runoob.com/java/java8-new-features.html
5.springBoot的bean注入方式
注解方式注入;使用配置类注入bean对象;使用原生spring配置文件写bean对象,或者扫描包;
配置文件植入自己的值:@Value("${}");@ConfigurationProperties(preix="my")需要set方法
6.mysql事物隔离机制及特性
特性:原子性,一致性,隔离性,持久性
隔离级别:
- 读未提交:事务的修改,即使没有提交,对其他事务也都是可见的
- 读已提交:事务已提交数据,大多数数据库的默认隔离级别
- 可重复的:mysql默认级别,解决了脏读,保证了同一个事务多次读取记录的同样性
- 可串行化:事务隔离最高级别