个人理解的技术点总汇
==================================== Mysql Start ====================================
【事务隔离级别】
读未提交:事务A和事务B进行的各种操作在没提交之前相互都能看到,而且对操作的表没有进行加锁。这样会存在脏读的问题。不会加任何锁。
读已提交:事务A和事务B进行的各种操作,必须要在另一个事务提交后,本事务才能看到,会出现不可重复读,两个事务对同一条数据的写操作会有锁进行限制。写会加锁。
可重复读:事务A执行select后就对这张表持有数据快照,事务B对此表执行插入、删除、更新操作提交后,事务A是看不到的,除非对事务B插入的数据执行更新操作加入到快照中就能看到。会出现幻读。增加了数据库快照,写会加锁。
串行化:读会加S锁, 写会加X锁。
【索引结构】
MyISAM引擎
在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。叶子节点 data域保存的是地址。
InnoDB引擎
索引结构其实和MyISAM引擎一样,只有两点区别。1. InnoDB引擎中索引就是数据记录;2. InnoDB引擎中索引的叶子节点的数据域保存的就是行记录。
【索引使用】
全列匹配
最左前缀匹配
查询条件用到了索引中列的精确匹配,但是中间某个条件未提供
查询条件没有指定索引第一列
匹配某列前缀字符串
范围查询
查询条件中含有函数或表达式
索引选择性与前缀索引
在使用InnoDB存储引擎时,如果没有特别的需要,请永远使用一个与业务无关的自增字段作为主键。
==================================== Mysql End ====================================
==================================== JVM Start ====================================
【垃圾回收机制】
对象是否已死:
什么是引用计数?由于难以解决循环引用问题,java中并没有使用引用计数。
可达性分析: 根据方法区和虚拟机栈中作为 root对象,查看那些对象不可达。
强引用,软引用,弱引用,虚引用。
finalize方法。
方法区回收,这一块内存回收的代价比较大,主要回收废弃的常量和无用的类。
垃圾收集算法:标记-清除算法;复制算法;标记整理算法;
Hotspot算法实现
垃圾收集器: 串行垃圾回收器;并行垃圾回收器;并发标记清除垃圾回收器;G1垃圾回收器;
内存分配和回收策略: 新生代和老年代
==================================== JVM End ====================================