摘要:
Java类加载的过程?类加载器? JVM类加载机制大致分为:加载、验证、准备、解析(其中验证、准备和解析都为链接)、初始化、使用、卸载。 详细过程的拆解 1. 加载 通过类加载(也有叫装载)器,将java代码加载成.class文件到内存中。 将读取到的.class数据存储到运行时内存区的方法区。 然 阅读全文
摘要:
如何实现ACID? 前言 最近在面试,有被问到,MySQL的InnoDB引擎是如何实现事务的,又或者说是如何实现ACID这几个特性的,当时没有答好,所以自己总结出来,记录一下。 事务的四大特性 事务的四大特性ACID分别是,A-原子性(Atomicity),C-一致性(Consistency),I- 阅读全文
摘要:
并发时常见的死锁及解决方法 死锁是并发系统中常见的问题,同样也会出现在数据库MySQL的并发读写请求场景中。**当两个及以上的事务,双方都在等待对方释放已经持有的锁或因为加锁顺序不一致造成循环等待锁资源,就会出现“死锁”。**常见的报错信息为 Deadlock found when trying t 阅读全文
摘要:
锁 锁机制 事务与锁是不同的。事务具有ACID( 原子性、一致性、隔离性和持久性),锁是用于解决隔离性的一种机制。事务的隔离级别通过锁的机制来实现。 为了保证数据并发访问时的一致性和有效性,任何一个数据库都存在锁机制。锁机制的优劣直接影响到数据库的并发处理能力和系统性能,所以锁机制也就成为了各种数据 阅读全文
摘要:
索引 索引(Index)是什么?为什么要使用索引? 索引是提高数据库性能的重要方式,用来快速找出数据表中的特定记录。如果在表中查询的列有一个索引,MySQL 能快速到达一个位置去搜寻数据,而不必查看所有数据。一个表可以创建多个索引,一个索引可以包含一个或者多个字段。 从表面上看,索引类似于书的目录, 阅读全文
摘要:
事务 当多个用户访问同一数据时,一个用户在更改数据的过程中可能有其它用户同时发起更改请求,为保证数据的一致性状态,MySQL 引入了事务。 在银行业务中,有一条记账原则,即有借有贷,借贷相等。为了保证这种原则,每发生一笔银行业务,就必须确保会计账目上借方科目和贷方科目至少各记一笔,并且这两笔账要么同 阅读全文
摘要:
线程是什么? 线程被称为轻量级进程,是程序执行的最小单位,它是指在程序执行过程中,能够执行代码的一个执行单位。每个程序程序都至少有一个线程,也即是程序本身。 线程的状态 Java语言定义了5种线程状态,在任意一个时间点,一个线程只能有且只有其中一个状态。这5种状态如下: 新建(New):创建后尚未启 阅读全文
摘要:
并发编程中,锁是经常需要用到的,今天我们一起来看下Java中的锁机制:synchronized和lock。 synchronized Synchronized 是Java 并发编程中很重要的关键字,另外一个很重要的是 volatile。Syncronized 的目的是一次只允许一个线程进入由他修饰的 阅读全文
摘要:
由秒杀引发的一个问题 秒杀最大的一个问题就是解决超卖的问题。其中一种解决超卖如下方式: update goods set num = num - 1 WHERE id = 1001 and num > 0 我们假设现在商品只剩下一件了,此时数据库中 num = 1; 但有100个线程同时读取到了这个 阅读全文
摘要:
索引优化 索引结构 要搞明白这个问题,需要大家首先明白 MySQL 中索引存储的数据结构。这个其实很多小伙伴可能也都听说过,B+Tree 嘛! B+Tree 是什么?那你得先明白什么是 B-Tree,来看如下一张图: 前面是 B-Tree,后面是 B+Tree,两者的区别在于: B-Tree 中,所 阅读全文