Java面试题:volatile专题

封面:volatile专题.png

王有志,一个分享硬核Java技术的互金摸鱼侠
加入Java人的提桶跑路群:共同富裕的Java人

今天是《面霸的自我修养》第4篇文章,我们一起来看看面试中会问到哪些关于volatile的问题吧。
数据来源:

  • 大部分来自于各机构(Java之父,Java继父,某灵,某泡,某客)以及各博主整理文档;
  • 小部分来自于我以及身边朋友的实际经历,题目上会做出标识,并注明面试公司。

叠“BUFF”:

  • 八股文通常出现在面试的第一二轮,是“敲门砖”,但仅仅掌握八股文并不能帮助你拿下Offer;
  • 由于本人水平有限,文中难免出现错误,还请大家以批评指正为主,尽量不要喷~~
  • 本文及历史文章已经完成PDF文档的制作,提取关键字【面霸的自我修养】。

理论篇

指令重排

:::info
难易程度:🔥🔥🔥
:::
:::warning
重要程度:🔥🔥🔥
:::
:::success
面试公司:无
:::
指令重排是一种优化技术,通过指令乱序执行(Out Of Order Execution,简称OoOE或OOE)提高处理器的执行效率和性能
以下内容摘自维基百科:

在计算机工程领域,乱序执行错序执行,英语:out-of-order execution,简称OoOEOOE)是一种应用在高性能微处理器中来利用指令周期以避免特定类型的延迟消耗的范式。在这种范式中,处理器根据输入数据的可用性确定执行指令的顺序,而不是根据程序的原始数据决定。在这种方式下,可以避免因为获取下一条程序指令所引起的处理器等待,取而代之的处理下一条可以立即执行的指令。

指令重排的基础建立在保证当线程环境下语义准确性的前提下,而不能保证多线程环境下的语义。


内存屏障

:::info
难易程度:🔥🔥🔥🔥🔥
:::
:::warning
重要程度:🔥🔥🔥
:::
:::success
面试公司:无
:::
内存屏障(Memory barrier),也称内存栅栏内存栅障屏障指令等,是一类同步指令,它使CPU或编译器进行操作时严格按照一定的顺序执行,即保证内存屏障前后的指令不会因为指令重排而导致乱序执行。
JVM中定义了7种屏障:

class OrderAccess : private Atomic {
   
public:
	static void     loadload();
	static void     storestore();
	static void     loadstore();
	static void     storeload();
	
	static void     acquire();
	static void     release();
	static void     fence();
}

其中最重要的是4种基本的内存屏障:

  • LoadLoad,指令:Load1; LoadLoad; Load2。确保Load1在Load2及之后的读操作前完成读操作,Load1前的Load指令不能重排序到Load2及之后的读操作后;
  • StoreStore,指令:Store1; StoreStore; Store2。确保Store1在Store2及之后的写操作前完成写操作,且Stroe1写操作的结果对Store2可见,Store1前的Store指令不能重排序到Store2及之后的写操作后;
  • LoadStore,指令:Load1; LoadStore; Store2。确保Load1在Store2及之后的写操作前完成读操作,Load1前的Load指令不能重排序到Store2及之后的写操作后;
  • StoreLoad:指令:Store1; StoreLoad; Load2。确保Store1在Load2及之后的Load指令前完成写操作,Store1前的Store指令不能重排序到Load2及之后的Load指令后。

至于acquire,release和fence,我们通过一张表格来表示它们与4种基本内存屏障的对应关系:


约束
fence LoadLoad
StoreStore
LoadStore
StoreLoad
release LoadStore
StoreStore
acquire LoadLoad
LoadStore

图1:3种内存屏障.png
Tips

  • 内存屏障的定义位于orderAccess.hpp中,强烈建议阅读注释中的“Memory Access Ordering Model”
  • 重点理解4种基本内存屏障实现的功能即可,JVM源码对的部分了解即可,也别往下卷了,啥时候是个头啊
  • Java中定义的内存屏障屏蔽不同操作系统间内存屏障的差异,使得不同的操作系统表现出一致的语义。

原理篇

🔥volatile是什么?

:::info
难易程度:🔥🔥🔥
:::
:::warning
重要程度:🔥🔥🔥
:::
:::success
面试公司:腾讯
:::
volatile是Java提供的关键字,可以用来修饰成员变量。volatile提供了两个能力:

  • 保证被修饰变量在多线程环境下的可见性
  • 禁止被修饰变量的指令重排
volatile保证可见性的例子
private static volatile boolean flag = true;

public static void main(String[] args) throws InterruptedException {
   
	new Thread

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/398000.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于uniapp微信小程序的汽车租赁预约系统

随着现代汽车租赁管理的快速发展,可以说汽车租赁管理已经逐渐成为现代汽车租赁管理过程中最为重要的部分之一。但是一直以来我国传统的汽车租赁管理并没有建立一套完善的行之有效的汽车租赁管理系统,传统的汽车租赁管理已经无法适应高速发展,…

leetcode面试题 02.07. 链表相交

leetcode面试题 02.07. 链表相交 题目 思路 方案一:使用哈希表储存一个链表节点,在另一个链表进行查询是否有相同节点方案二:统计两个链表长度,然后末尾对齐,判断是否有相同节点 代码 使用哈希表set # Definition…

新手搭建服装小程序全攻略

随着互联网的快速发展,线上购物已经成为了人们日常生活中不可或缺的一部分。服装作为人们日常消费的重要品类,线上化趋势也日益明显。本文将详细介绍如何从零开始搭建一个服装小程序商城,从入门到精通的捷径,帮助你快速掌握小程序…

compile 未产生 target 目录

Problem 执行compile操作之后未产生对应的target目录 右击Project → Tree Appearance → Show Excluded Files

vue3项目配置按需自动导入API组件unplugin-auto-import

场景应用:避免写一大堆的import,比如关于Vue和Vue Router的 1、安装unplugin-auto-import npm i -D unplugin-auto-import 2、配置vite.config import AutoImport from unplugin-auto-import/vite//按需自动加载API插件 AutoImport({ imports: ["…

C# Winfrom实现的肺炎全国疫情实时信息图

运行结果: using System; using System.Drawing; using System.Text; using NSoup; using NSoup.Nodes; using System.IO; using System.Net; using System.Text.RegularExpressions; using System.Windows.Forms;namespace Pneumonia {public partial class MainFo…

Arcmap excel转shp

使用excel表格转shp的时候,如果你的excel里面有很多字段,直接转很大概率会出现转换结果错误的情况,那么就需要精简一下字段的个数。将原来的表格文件另存一份,在另存为的文件中只保留关键的经度、纬度、和用于匹配的字段即可&…

Java基于SpringBoot+Vue的图书管理系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

阿里云幻兽帕鲁Windows 服务器怎么上传存档文件?

通过控制台远程连接到 Windows 服务器桌面后,你可以打开文件夹,将本地的存档 zip 文件,直接拖拽到浏览器中,即可将存档文件传到服务器中的 workbench 文件交换目录。 替换存档前要先停止服务。 然后将 Saved.zip 文件解压&#xf…

芋道-------如何实现工作流退回后重新提交到之前退回的节点

一、概述 上一节,我们讲过了工作流如何退回到申请人,接下来我们来讲一讲,如何重新提交。这里重新提交可以是再走一遍正常流程,同时也可以是直接跳过中间的步骤,直接继续给上一步退回的人审批。文章中会提及这两种情况。…

4.5 Verilog 条件语句

关键词:if,选择器 条件语句 条件(if)语句用于控制执行语句要根据条件判断来确定是否执行。 条件语句用关键字 if 和 else 来声明,条件表达式必须在圆括号中。 条件语句使用结构说明如下: if (conditio…

软件自动化运行工具开发需要用到的代码!

在软件开发领域,自动化运行工具扮演着至关重要的角色,这些工具不仅提高了开发效率,还降低了人为错误的风险,为了实现软件自动化运行,开发者需要掌握一系列编程语言和工具,并编写相应的代码。 本文将分享一…

Nginx网络服务

一、Nginx概述 1.1Nginx介绍 Nginx: 一款高新能、轻量级Web服务软件稳定性高系统资源消耗低对HTTP并发连接的处理能力高单台物理服务器可支持30 000~50 000个并发请求。 Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部…

Day22--learning English

一、积累 1.wool 2.stern 3.resolute 4.feisty 5.pickle 6.quail 7.frame 8.hose 9.ravish 10.Base on what 11.nimble 12.shutter 13.spawn 14.shiver 15.blanket 16.squat 17.braise 18.jam tomorrow 19.drip 20.repercussion 二、练习 1.牛津原译 Wool [ wʊl ] [名词] 1.…

Linux篇:指令

一 基本常识: 1. 文件文件内容文件的属性 2. 文件的操作对文件内容的操作对文件属性的操作 3. 文件的类型: d:目录文件 -:普通文件 4. 指令是可执行程序,指令的代码文件在系统的某一个位置存在的。/u…

鸿蒙-基于ArkTS声明式开发的简易备忘录,适合新人学习,可用于大作业

本文地址:https://blog.csdn.net/qq_40785165/article/details/136161182?spm1001.2014.3001.5502,转载请附上此链接 大家好,我是小黑,一个还没秃头的程序员~~~ 不知不觉已经有很长一段时间没有分享过自己写的东西了&#xff0…

Nginx操作

文章目录 Nginx使用操作1. 安装nginx2. docker启动nginx3. 目录介绍4. 更改站点内容,初试一下(此步骤可以省略)5. nginx配置文件结构5.1 http配置示例5.2 server配置 Nginx使用操作 服务器: ubuntudocker内操作nginx 1. 安装nginx # 1. 查询nginx版本 sudo docker…

Atcoder ABC340 C - Divide and Divide

Divide and Divide(分而治之) 时间限制:2s 内存限制:1024MB 【原题地址】 所有图片源自Atcoder,题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【样例…

《Solidity 简易速速上手小册》第5章:智能合约的安全性(2024 最新版)

文章目录 5.1 安全性的重要性5.1.1 基础知识解析深入理解安全性的多维度影响智能合约安全的关键要素 5.1.2 重点案例:防止重入攻击案例 Demo:构建一个防重入的提款合约案例代码WithdrawContract.sol 测试和验证拓展功能 5.1.3 拓展案例 1:预防…

拿捏c语言指针(下)

前言 此篇讲解的主要是函数与指针的那些事~ 书接上回 拿捏c语言指针(上)和 拿捏c语言指针(中) ​​​​​​没有看的小伙伴要抓紧喽~ 欢迎关注​​个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误&#x…