基础面试题
程序老T
这个作者很懒,什么都没留下…
展开
-
你知道为什么String被设计为是不可变的
3.缓冲hashcode,在java中很多地方都会使用到,所以在String创建的时候就会计算hashcode值,然后保存在hash上,使用的时候直接取,提高效率。1.利用常量池的特性,达到复用,节省内存空间,比如S1和S2的值相同,那么会指向同一个常量。String是一个常量,一旦我们创建就没有办法改变它的值(不考虑反射特殊场景)2.用作HashMap的k的时候,k有一个最重要的特性就是不可变。4.线程安全,因为不可变,所以天然的保证线程安全。原创 2023-06-01 17:21:17 · 93 阅读 · 1 评论 -
CAS的ABA问题
一、什么是ABA问题?考虑如下操作:并发1(上):获取出数据的初始值是A,后续计划实施CAS乐观锁,期望数据仍是A的时候,修改才能成功并发2:将数据修改成B并发3:将数据修改回A并发1(下):CAS乐观锁,检测发现初始值还是A,进行数据修改上述并发环境下,并发1在修改数据时,虽然还是A,但已经不是初始条件的A了,中间发生了A变B,B又变A的变化,此A已经非彼A,数据却成功修改,可能导致错误,这就是CAS引发的所谓的ABA问题。二、解决办法ABA问题的优化ABA问题导.原创 2021-03-19 17:04:54 · 180 阅读 · 0 评论 -
sleep()、wait()、join()、yield()的区别
原创 2021-03-19 17:02:07 · 167 阅读 · 0 评论 -
sleep和wait的区别
一、sleep是线程方法,wait是Object方法二、sleep不释放lock,wait会释放三、sleep不依赖同步方法,wait需要四、sleep不需要被唤醒,wait需要原创 2021-03-19 16:59:22 · 76 阅读 · 0 评论 -
抽象类和接口的区别
抽象类:抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:a、抽象类不能被实例化只能被继承;b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;e、抽象类可以包含属性、方法、构造方法,但是构原创 2021-03-19 16:57:15 · 64 阅读 · 0 评论