大家好,欢迎来到小编的博客,小编在这里总结自己在观看面试和自己面试时总结的面试题,小编会以博客总结一系列的博客。希望大家喜欢!
目录
一,常见的基本数据类型有哪些
二,string,stringBuffer,stringBuilder的关系与区别
三,泛型当中extends与super的区别
四,== 与equals的区别
五,谈谈你对集合的理解
六,ArrayList与LinkedList的区别
七,B树与B+树的区别,为什么MySQL使用的是B+树
八,CopyOnWriteArrayList的底层原理是什么样的
CopyOnWriteArrayList解决问题
CopyOnWriteArrayList的底层原理
首先我们应该知道基本的数据类型有8种,整型有4种(int,short,long,byte),浮点型2种(float ‘ 单精度数’,double ‘双精度数’),char '字符型',Boolean类型。
相同点:都是储存字符串的。
不同点:
string是不可变的,变量储存在字符串常量池当中 ,如果去修改,会产生新的字符串对象:如下例解答。
看源码,可以知道String是使用final修饰的,所有是不可变的。
public class Test{
public static void main(String[] args) {
String s = "字符串"; //字符串就保存在字符串常量池当中,指向s
s = "abcd"; //创建一个abcd字符串,也放在常量池当中,并且指向s,"字符串"的指向就会断开
}
}
(“stringBuffer,stringBuilder“解决String不可改变的问题)
stringBuffer:是可以改变的字符串,是关于线程安全的。(因为方法都使用synchronized关键字上了锁)
stringBuilder: 是可以改变的字符串,是线程不安全的。(因为方法都没有使用synchronized关键字上了锁,所有在单线程下效率高)
extends:
super:
==:
当使用 == 两边是基本数据类型时,判断的是内容是否相等。
当判断的不是基本类型时,判断的两边的内存地址是否相等。
equals:
equals是方法,要看重写equals后的比较逻辑 ,比如String中equals方法就是判断的是两边的字符串的内容是否相等(如下图)。
更多集合了解,请参考小编总结的集合框架https://blog.csdn.net/weixin_47514459/article/details/121596309
首先集合分为三类(List,Set,Map),都是用来储存大量元素或者对象的。
( 唯一 就是不可重复,不唯一就是可以重复)
List : 接口储存一组不唯一,有序(按照索引顺序)的对象。 分为ArrayList与LinkedList
Set : 接口储存一组唯一,无序的对象(可以用来去重)。分为TreeSet与HashSet
Map : 接口储存一组以键值对形式的对象,提供key与value的映射(key :唯一,无序,value : 不唯一,无序): 分为TreeMap与HashMap (当我们需要的value为空时,这个特殊的Map就是Set)
集合框架了解https://blog.csdn.net/weixin_47514459/article/details/121596309
相同点:都是储存元素或者对象的集合,都实现了List接口。
不相同点:
1,ArrayList的底层使用的数据结构是数组结构(查询快,增加与删除比较麻烦)更适合随机查找,LinkedList的底层数据结构是双向链表(查询慢,增加与删除比较快)。
2,LinkedList还额外实现了Deque接口,所以LinkedList还可以当队列来使用。
B+树其实上是B树的升级版
B树 :
1,节点排序(左边小,右边大)
2,一个节点也可以储存多个元素,多个元素也进行了排序。
B+树 :
1,拥有B树的特点
2,叶子节点之间有指针
3,非叶子节点上的数,在叶子节点上都做了冗余(叶子节点上储存了所有的数,并且排好序)
MySQL索引使用B+数,因为索引是用来加快查询的。B+数叶子节点储存所有数据,并且叶子节点之间存在指针。更好的进行了全表的扫描,范围查找sql语句。
因为ArrayList是线程不安全的,所以需要一个线程安全的就出现了CopyOnWriteArrayList。
1,CopyOnWriteArrayList底层结构也是数组来实现,在CopyOnWriteArrayList添加元素时,会复制一个新的数组,写操作在新数组上进行,读操作在原数组上进行。
2,在写操作时会加锁,防止出现并发写入数据丢失的问题
3, 写操作完成后新的数组会指向原数组
4,CopyOnWriteArrayList支持在写操作时读取数据,大大提高了读的性能,CopyOnWriteArrayList占内存较大,而且读取数据不能是实时的数据,所有在实时性项目中不推荐使用