栈和队列
20. 有效的括号 class Solution { public boolean isValid(String s) { Map<Character, Character> map = new HashMap<>(); map.put('(', ')');
InnoDB Undo Log
undo log 是什么 数据库事务需要保证原子性,也就是说事务中的操作要么全部完成,要么什么也不做。但是事务执行过程中可能遇到各种错误,这会导致事务提前结束,此时可能已经对记录做了一些修改,为了保证事务的原子性,需要把记录改回到事务执行前的状态,这个过程就叫回滚(rollback)。 想要回滚记录
InnoDB Redo Log
redo log 格式 redo log 介绍 我们知道数据库事务有持久性的要求,也就是一个提交的事务对数据所做的修改应该是永久有效的,即使系统崩溃也能恢复过来。 而 redo log 就是用来保证这个持久性的,redo log 也叫重做日志,意思是系统崩溃重启后按照 redo log 中记录的步骤
链表
链表定义 public class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNod
MySQL 事务
数据库事务 事务是一个抽象的概念,它对应着一个或多个数据库操作,这些操作要么全部成功,要么全部失败。事务有四大特性,即 ACID: 事务特性
InnoDB 的 Buffer Pool
Buffer Pool 是什么 学过操作系统的同学,应该都知道局部性原理,分为时间局部性和空间局部性。时间局部性指的是访问过一次的位置可能在不远的将来被多次访问。空间局部性指的是一个位置被访问,可能不久后它附近的位置也会被访问。 Buffer Pool 正是一个利用了局部性原理的优化设计,当访问某个
MySQL 执行计划
通过 Explain 查看执行计划 一条查询语句在经过 MySQL 查询优化器的基于成本和规则的优化会后会生成一个执行计划,这个执行计划展示了 MySQL 会使用何种方式来执行查询,通过 MySQL 提供的 EXPLAIN 语法可以查看执行计划。 执行计划的生成是 MySQL server 层中的功
查找表
349. 两个数组的交集 class Solution { public int[] intersection(int[] nums1, int[] nums2) { int[] more = nums1.length > nums2.length ? nums1 : num
InnoDB 如何计算统计数据
统计数据的存储 InnoDB 统计数据可以存储在磁盘上,也可以只存储在内存中。MySQL 提供了一个系统变量 innodb_stats_persistent 来控制使用哪种方式来存储统计数据,MySQL 5.7 默认为 ON,表示统计数据默认存储在磁盘上。 由于 InnoDB 以表为单位来收集统计数
MySQL 基于成本的优化
查询成本 我们知道对于同一个 SQL,可以按照不同的方案去执行,MySQL 会选择执行成本最低的那种方案。 一条语句的查询成本由下面两个方面组成: IO 成本:InnoDB 把表存储在磁盘上,查询的时候,需要把数据加载到内存中,这个将数据从磁盘加载到内存的过程花费的时间就是 IO 成本。 CPU 成