认识达内从这里开始

认真做教育 专心促就业

2022年最新Java工程师面试题

又开始了新的面试热潮,以下内容是长沙达内小编总结的“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工程师面试题”的总结啦,有任何问题都可以咨询客服,会为您安排最专业的老师进行解答~

2022年最新Java工程师面试题

<  上一篇:Linux常用面试小技巧
下一篇:网络运维工程师面试常见问题  >
相关推荐
最新资讯
免费试听课程
  • 全部课程
  • IT课程
  • 设计课程
  • 运营课程
Free courses
最新开班时间
  • 北京
  • 上海
  • 广州
  • 深圳
  • 南京
  • 成都
  • 武汉
  • 西安
  • 青岛
  • 天津
  • 杭州
  • 重庆
  • 厦门
  • 哈尔滨
  • 济南
  • 福州
  • 沈阳
  • 合肥
  • 郑州
  • 长春
  • 苏州
  • 大连
  • 长沙
  • 昆明
  • 温州
  • 太原
  • 南昌
  • 无锡
  • 石家庄
  • 南宁
  • 中山
  • 兰州
  • 佛山
  • 珠海
  • 宁波
  • 贵阳
  • 保定
  • 呼和浩特
  • 东莞
  • 洛阳
  • 潍坊
  • 烟台
  • 运城
  • 开课名称
  • 开班时间
  • 抢座
  • 咨询
  • 开课名称
  • 开班时间
  • 抢座
  • 咨询
预约申请试听课