For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
又开始了新的面试热潮,以下内容是长沙达内小编总结的“2022年最新Java工程师面试题”~
(1) 能用Java创建易失性数组吗?
可以用Java创建volatile数组,但它只是对数组的引用,而不是整个数组。我的意思是,如果您更改引用所指向的数组,它将受到volatile的保护,但是如果多个线程同时更改数组的元素,volatile标识符将不会扮演以前的保护角色。
(2) volatile可以使非原子操作成为原子操作吗?
一个典型的例子是类中long类型的成员变量。如果您知道成员变量将被多个线程访问,例如计数器、价格等,那么最好将其设置为volatile。为什么?因为在Java中读取长变量不是原子的,所以需要分为两个步骤。如果一个线程正在修改long变量的值,那么另一个线程可能只能看到该值的一半(前32位)。但易变长或双变量的读写是原子的。
(3) 挥发性调节剂的使用方法是什么?
一种做法是用volatile修改long和double变量,这样就可以用原子类型读写它们。double和long都是64位宽,因此这两种类型的读取分为两部分。第一次读取前32位,然后读取剩余的32位。这个过程不是原子的,但是Java中易变长变量或双变量的读写是原子的。volatile fixer的另一个功能是提供内存屏障,例如分布式框架中的应用。简言之,在编写易失性变量之前,JAVA内存模型将插入一个写屏障,在读取易失性变量之前,将插入一个读屏障。也就是说,当您编写volatile字段时,它可以确保任何线程都可以看到您编写的值。同时,在写入之前,它还可以确保所有线程都能看到任何值的更新,因为内存屏障会将所有其他写入的值更新到缓存中。
(4) volatile类型变量提供了什么保证?
可变变量提供顺序和可见性保证。例如,JVM或jit将对语句进行重新排序以获得更好的性能,但volatile类型变量不会与其他语句一起重新排序,即使它们在分配时没有同步块。Volatile提供了before的保证,以确保一个线程的修改对其他线程可见。在某些情况下,volatile还可以提供原子性,例如读取64位数据类型。例如,long和double不是原子的,但是volatile类型的double和long是原子的。
(5) 对于包含10个线程和2个线程的同步代码,哪个更容易编写?
从编写代码的角度来看,两者的复杂性是相同的,因为同步代码和线程数是相互独立的。然而,同步策略的选择取决于线程的数量,因为更多线程意味着更大的竞争,所以需要使用同步技术,例如锁分离,这需要更复杂的代码和专业知识。
(6) 如何调用wait()方法?如果使用块还是循环?为什么?
wait()方法应该在循环中调用,因为当线程获得CPU开始执行时,可能不满足其他条件,所以最好在处理之前检查这些条件是否满足。以下是使用等待和通知方法的标准代码
以上内容就是“2022年最新Java工程师面试题”的总结啦,有任何问题都可以咨询客服,会为您安排最专业的老师进行解答~