目录
3.谈谈你对垃圾回收机制的了解,什么时候发生垃圾回收,回收过程
6.看你们公司使用的是MySQL,你们使用的是哪种存储引擎,为
1.JVM内存模型
JVM
内存分为线程私有区和线程共享区
线程私有区 程序计数器 虚拟机栈 本地方法区
线程共享区 堆 方法区
2.CMS和G1有没有了解过,它们有什么区别
算法不同:
- CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片
- G1收集器使用的是“标记-整理”算法,进行了空间整合,降低了内存空间碎片。
收集区域不同
- CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用;
- G1收集器收集范围是老年代和新生代,不需要结合其他收集器使用;
STW的时间
- CMS收集器以最小的停顿时间为目标的收集器;
- G1收集器可预测垃圾回收的停顿时间
3.谈谈你对垃圾回收机制的了解,什么时候发生垃圾回收,回收过程
什么是垃圾回收机制 、在系统运行过程中,会产生一些无用的对象,这些对象占据着一定的内存,如果不对这些对象清理回收无用对象的内存,可能会导致内存的耗尽,所以垃圾回收机制回收的是内存。同时GC回收的是堆区和方法区的内存。
当对象对当前使用这个对象的应用程序变得不可触及的时候,这个对象就可以被回收了.
垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。如果你仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。
判断对象是否可以被回收?
- 引用计数器法:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引用的问题;
- 可达性分析算法:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是可以被回收的。
1.
⾸先把字节码⽂件内容加载到⽅法区
2.
然后再根据类信息在堆区创建对象
3.
对象⾸先会分配在堆区中年轻代的Eden区,经过⼀次Minor GC后,对象如果存活,就会进⼊
Suvivor
区。在后续的每次Minor GC中,如果对象⼀直存活,就会在
Suvivor
区来回拷⻉,每移动
⼀次,年龄加1
4.
当年龄超过15后,对象依然存活,对象就会进⼊⽼年代
5.
如果经过Full GC,被标记为垃圾对象,那么就会被GC线程清理掉
4.对于数据的一致性是怎么保证的
5. Redis集群有没有了解过,主从和选举是怎么样子的
6.看你们公司使用的是MySQL,你们使用的是哪种存储引擎,为
什么?MyISAM和InnoDB的区别
7.索引的底层数据结构是什么,为什么选择这种数据结构
索引数据结构选择B+树
B树的特点:
1.
节点排序
2.
⼀个节点了可以存多个元素,多个元素也排序了
B+树的特点:
1.
拥有B树的特点
2.
叶⼦节点之间有指针
3.
⾮叶⼦节点上的元素在叶⼦节点上都冗余了,也就是叶⼦节点中存储了所有的元素,并且排好顺序
Mysql索引使⽤的是B+树,因为索引是⽤来加快查询的,⽽B+树通过对数据进⾏排序所以是可以提⾼查 询速度的,然后通过⼀个节点中可以存储多个元素,从⽽可以使得B+树的⾼度不会太⾼,在Mysql中⼀ 个Innodb⻚就是⼀个B+树节点,⼀个Innodb⻚默认16kb,所以⼀般情况下⼀颗两层的B+树可以存2000 万⾏左右的数据,然后通过利⽤B+树叶⼦节点存储了所有数据并且进⾏了排序,并且叶⼦节点之间有指 针,可以很好的⽀持全表扫描,范围查找等SQL语句。