maven:
用nexus搭建私服:上传和下载jar包
依赖冲突:最短路径/最先声明/excusion
spring源码:
bean的解析(生成beanDefinition),bean的注册(放到大map beanFactory中),bean的加载(从beanFactory中拿到bean)
spring中的map
@Transactional
mysql:
索引:是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。
索引能极大的减少存储引擎需要扫描的数据量;
索引可以把随机IO变成顺序IO;
索引可以帮助我们在进行分组、排序等操作时,避免使用临时表。
索引使用的是b+树:
二叉树 —> 平衡二叉树 —>AVL树(完全平衡二叉树,整棵树的高度差不会超过1)—> b树(多路平衡查找树)—> b+树
B+树与B树的区别:
有k个子结点的结点必然有k个关键码;
非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。
树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。
缓存sql是缓存执行计划。
show engines;支持啥引擎
存储引擎:
MyISAM:(5.5之前默认的存储引擎)文件:frm存储表结构(任何引擎都有),myd数据文件,myi索引文件 (数据和索引分开存放,所以非聚族索引),支持压缩,表级锁,支持全文检索。适用场景:非事务型应用(数据仓库,报表,日志数据),只读类应用,空间类应用(空间函数,坐标)
Innodb:(5.5及以后默认的存储引擎)
5.6之前默认系统表空间(所有的表数据放在一个文件中),5.6之后独立表空间 frm(存储表结构) ibd(数据加索引 聚族索引 独立表空间才会单独有这个文件) 系统表空间无法简单的收缩文件大小 独立表空间可以通过optimize table收缩系统文件 系统表空间会产生IO瓶颈 独立表空间可以同时向多个文件刷新数据
是事务型引擎,完全支持事务ACID特性,Redo log和Undo log,行级锁(并发程度更高)
csv:数据以文本方式存储在文件 .csv 存储内容 .csm存储元数据如表状态和数据量 .frm 存储表结构 可以直接编辑数据。
mysql中的锁:
都是悲观锁,没有乐观锁。
表锁:开销小,加锁快;不会出现死锁;锁粒度大 ,发生锁冲突的概率最高,并发度最低
行级锁:开销大,加锁慢;会出现死锁;锁粒度最小,发生冲突的概率最低,并发度也最高。
页面锁:介于行锁和表锁之间。
myisam的表锁:
表共享读锁(table read lock)
表独占写锁(table write lock)
创建读锁:
lock table 表A read;
// 在另一个session查询(查询)
//在同一个session查询表A (查询)
//在同一个session修改表A(报错)
//在同一个session新增表B的记录或者查询表B的记录(报错)
//在另一个session中,新增表A的记录 (会等待)
//在另外的session中,新增其他的表(成功)
如果有别名,锁失效
创建写锁:
lock table 表A write;
总结:
对myisam表的读操作,不会阻塞其他用户对用一表的读请求,但会阻塞对同一表的写请求
对myisam表的读操作,不会阻塞当前session对表读,但对表进行修改会报错。
一个session使用lock table命令给表F加了读锁,这个session可以查询锁定表中的记录,但更新或访问其他表会报错。
读锁情况,另一个session可以查询表中的记录,但更新会出现锁等待。
写锁,会阻塞其他用户对同一表的读和写操作。
写锁,当前session可以对本表做CRUD,但对其他表进行操作会报错。
事务的特性 (ACID):
原子性,一致性,持久性,隔离性。
并发带来的三个问题:
脏读 :事务A读到了事务B未提交的数据
不可重复读:事务A多次读的过程中,事务B更新并提交,导致事务A多次读取的数据不一致
幻读:事务A开始的时候没有的数据,在后来出现,和不可重复读有点类似,侧重新增和删除;比如事务A将所有的成绩从分数换成等级的过程中,事务B新增了一条分数。
innodb对隔离级别的支持程度 innodb中的锁
共享锁和排它锁
innodb行锁的原理
网友评论