简单介绍jvm

为java语句提供了运行的场地,实现一次编译,到处运行

  1. 运行时数据区
  2. 类加载器(启动类、扩展类、应用类)
  3. 执行引擎(垃圾回收器、编译器、解释器)

Tomcat打破双亲委派

定义了许多类加载器,其中webapp类加载器重写了load方法,规定加载器优先加载自己的类,而不是向上委派

java线程和操作系统线程的区别

  1. java线程和操作系统在jdk21前都是一一对应的关系,对一个java线程和操作系统线程的联系会通过jvm调用内核函数的方式实现
  2. java线程更轻量,本质只是os线程的映射
  3. java线程收到jvm的统一调配,os线程不会受到jvm的影响

聚簇索引和非聚簇索引

用字典举例的话,聚簇索引就是将信息直接写在目录的索引,在目录里找到这个字就可以知道这个字的信息了,一般对应主键索引或唯一索引。非聚簇索引在拿到这个字的页号后,就需要翻开字典再找一次才能拿到信息。

进程线程协程

你需要烧水+切菜

进程就是你先烧水,再去切菜

线程就是你烧水,雇另一个人去切菜

协程就是你在烧水的间隙把菜切了

协程就是线程执行的不同任务,协程之间可以相互切换,切换时会保留现场等待下次被执行

分布式事务及其解决方案

分布式事务是原本一条业务被拆分,需要与多个数据库进行交互,需要开启事务保证这些数据库的一致性

  1. 2pc:协调者在提交前询问各个执行者,得到所有执行者的确认答复后才提交事务,这期间由于事务开始了,数据一直阻塞
  2. 3pc:和2pc差不多,多了一个提前询问,提前询问参与者,确保其可用性,后续流程与2pc一致
  3. ttc:核心思想也是询问,然后确认,但ttc是业务层的冻结,本质不会影响数据库,不会加物理锁
  4. saga:直接做,做不了全都回滚