1 线程和进程的区别?Java多线程的内存管理
进程是资源分配的最小单位,线程是CPU调度的最小单位,一个进程中包含多个线程。
内存管理:MM(java内存模型) 描述Java程序中各种内存(线程共享变量)的访问规则。所有变量都存在于主内存中,每个线程都有自己独立的工作内存,线程间不可以直接互相操作其工作内存中的变量,以及主内存的变量,只能以主内存为媒介做改变。
多线程的可见性实现有两种方式
1) synchronized给线程加锁,实现可见性
获取互斥锁–清空工作区内存–从主内存copy值到工作内存–执行代码–把值放回到主内存中–释放互斥锁。
2)volatile关键字,实现可见性不实现原子性
volatile通过加入内存屏障和禁止重排序实现可见性,store是在写之后强制把工作内存的值刷新到主内存中,load相反先从主内存取值到工作内存,然后再读。
如何实现原子性?加锁 synchronize或者reentranlock。
2 mysql的索引作用?为什么?mysql的隔离机制?什么是聚簇索引,介绍一下B+树。
索引类似于字典中的目录,可以快读定位所要查找的内容,提高查询速度。
聚簇索引:将索引和数据放在一起,通过找到索引值直接找到数据。
索引的实现是B+ 树,B+ 树非叶子节点不存储数据,仅存储键值,叶子节点存储数据,按照顺序排列。B+ 树索引是聚簇索引。
隔