首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java面试官最爱问的volatile关键字

Java内存模型中有序性归纳为这样一句话:如果在本线程内观察,所有操作都是有序的,如果在一个线程中观察另一个线程,所有操作都是无序的。 有序性是指对于单线程的执行代码,执行是按顺序依次进行的。...面试官:你多次提到指令重排,能举例说明? CPU和编译器为了提升程序执行的效率,会按照一定的规则允许进行指令优化。但代码逻辑之间是存在一定的先后顺序,并发执行时按照不同的执行逻辑会得到不同的结果。...有人说,volatile不是会使缓存行无效的?但是这里线程A读取之后并没有修改inc值,线程B读取依旧是10。又有人说,线程B将11写回主存,不会把线程A的缓存行设为无效?...只有在做读取操作,发现自己缓存行无效,才会去读主存的值,而线程A的读取操作在线程B写入之前已经做过了,所以这里线程A只能继续做自增了。...小结 当然,针对volatile关键字还有其他方面的拓展,比如讲到JMM拓展到JMM与Java内存模型的区别,讲到原子性扩展到如何查看class字节码,讲到并发扩展到线程并发的方法面面。

66521

MyBatis面试题

Dao接口里的方法,参数不同时,方法能重载 MyBatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理? MyBatis是如何进行分页的?分页插件的原理是什么?...6)MappedStatement 对象: Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息...为什么需要预编译 SQL 预编译指的是数据库驱动发送 SQL 语句和参数给 数据库 之前对 SQL 语句进行编译,这样 数据库 执行 SQL ,就不需要重新编译。...如果仅仅是insert语句中使用但是返回,此时keyProperty=“任意自定义变量名”,resultType 可以写。...2)二级缓存与一级缓存机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同之处在于其存储作用域为 Mapper(Namespace),并且自定义存储源,如 Ehcache。

96620
您找到你想要的搜索结果了吗?
是的
没有找到

C++:04---内联函数

牺牲代码空间,赢得了时间 内联说明只是向编译器发出一个请求,编译器可以选择忽略这个请求 2.关键字:inline 声明时写了inline,定义省略。...将内联函数放入头文件 关键字 inline 必须与函数定义体放在一起才能使函数成为内联,仅将 inline 放在函数声明前面起任何作用。...编译调用点内联展开函数的代码,必须能够找到 inline 函数的定义才能将调用函数替换为函数代码,而对于头文件中仅有函数声明是不够的。...头文件中加入或修改 inline 函数,使用了该头文件的所有源文件都必须重新编译。 8. 慎用内联 “如果所有的函数都是内联函数,还用得着“内联”这个关键字?...内联函数的定义必须放在头文件中, 编译器才能在调用点内联展开定义. 然而, 实现代码理论上应该放在 .cc 文件中, 我们希望 .h 文件中有太多实现代码, 除非在可读性和性能上有明显优势.

1.2K40

Java面试题 - 03前言:三、框架篇:

Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。 mybatis解决:将Sql语句配置mapper.xml文件中,与java代码分离。...答: 使用${参数}就是单纯的字符串拼接,拼接完成后才会对SQL进行编译、执行,所以性能较低;#{参数名}SQL中相当于一个参数占位符“?”...,用来补全预编译语句,所有这种方式可以防止SQL注入,它补全预编译语句,会在此参数值两端加了单引号。...并且自定义存储源,如 Ehcache。启动二级缓存mapper配置文件中加上:。 6. 进行插入操作如何回传ID?...处于session的管理,数据库中有对应的记录;调用update方法后又变成持久态。 3. 你知道hibernate的缓存

1K10

java面试题 --- Mybatis&Hibernate

什么叫预编译,为什么要预编译? 预编译就是在数据库驱动把 SQL 发给数据库之前,先对其进行编译,数据库就可以直接执行,提高效率,同时预编译可以防止 SQL 注入攻击。 ---- 6....Mybatis 支持延迟加载? 仅支持 association 和 collection 的延迟加载。...原理是使用 cglib 创建目标对象的代理对象, 调用目标方法时会进入拦截方法,比如调用 a.getB().getName() ,发现 B 对象为空,就会发送事先保存的查询 B 的 SQL,查出来然后调用...Mybatis 支持缓存? 支持,它有一级缓存和二级缓存,一级缓存用 HashMap 存储,作用域是 session;二级缓存自定义存储源,作用域是 namespace。...瞬时态:对象刚被 new 出来,数据库没有对应记录,也不在 session 管理中; 持久态:数据库中有对应记录,也 session 的管理中; 游离态:数据库中有对应记录,但不在 session 的管理中

14020

巧用 Nginx 实现大规模分布式集群的高可用性

Nginx与scalability 讨论Nginx的负载均衡策略前,我们先来了解AKF扩展立方体,它能使我们对此建立整体思维。...CM进程负责淘汰过期缓存。 当下游有一份过期资源,它会来询问Nginx:此资源还能用?能用的话,通过304告诉我,不要返回响应body(可能很大!)了。...当Nginx缓存的资源可能过期,它也可以问上游的web应用服务器:缓存还能用?能用的话通过304告诉我,我来更新缓存Age。...其含义我《Nginx核心知识150讲》第72课有介绍,关于框架提供的变量第73、74课中有介绍。...而Openresty中的ngx_http_lua_module和ngx_stream_lua_module模块给Lua语言提供了编程接口,Lua语言通过它们编译为C代码Nginx中执行。

3.1K31

JavaScript 的时间消耗

Service Worker 缓存技术能使你的应用具备网络弹性, 并且能使用像 V8 code cache 一样的特性....同时, 也可以了解下通过 文件哈希名 实现长久缓存. cache 解析/编译 脚本下载之后, JavaScript 最消耗时间的地方就是 JS 引擎对代码的解析/编译....parse3 花费很长时间去解析/编译代码会严重延迟用户在网站上的交互时间....但是大多数移动设备上, JS 更有可能对页面的交互性产生负面影响. parse5 当我们谈论脚本的解析和编译很慢, 上下文是很重要的–我们说的是普通的手机设备....phones4 获取和处理 JS 以及其他资源所需的时间中, 用户需要在页面交互之前等待一段时间, 这一点也奇怪, 但我们可以在这里做得更好.

80370

面试:第十一章:缓存

redis的具体使用场景? 1.主要应用在门户网站首页广告信息的缓存。因为门户网站访问量较大,将广告缓存到redis中,可以降低数据库访问压力,提高查询性能。 2.应用在用户注册验证码缓存。...3.用在购物车模块,用户登陆系统后,添加的购物车数据需要保存到redis缓存中。 redis中对一个key进行自增或者自减操作,它是原子性的? 是原子性的。...13加了范围会失效 14JOIN操作中(需要从多个数据表提取数据),MYSQL只有主键和外键的数据类型相同时才能使用索引,否则即使建立了索引也不会使用。...缓存,先从redis中获取数据,无数据就从数据库中查询后再保存到redis中 ​​​​​​​你有了解mysql的隔离级别?...用了CAS,所有应用项目中如果需要登录web.xml中配置过滤器做请求转发到cas端工作原理是cas登录后会给浏览器发送一个票据(ticket),浏览器cookie中会缓存这个ticket,登录其他项目时会拿着浏览器的

80220

巧用 Nginx 实现大规模分布式集群的高可用性

Nginx与scalability 讨论Nginx的负载均衡策略前,我们先来了解AKF扩展立方体,它能使我们对此建立整体思维。...CM进程负责淘汰过期缓存。 当下游有一份过期资源,它会来询问Nginx:此资源还能用?能用的话,通过304告诉我,不要返回响应body(可能很大!)了。...当Nginx缓存的资源可能过期,它也可以问上游的web应用服务器:缓存还能用?能用的话通过304告诉我,我来更新缓存Age。...其含义我《Nginx核心知识150讲》第72课有介绍,关于框架提供的变量第73、74课中有介绍。...而Openresty中的ngx_http_lua_module和ngx_stream_lua_module模块给Lua语言提供了编程接口,Lua语言通过它们编译为C代码Nginx中执行。

1.1K20

Android 复习笔记(五)—— OutOfMemoryError 可以被 try catch

OOM 可以被 try catch ?... View.java 的 buildDrawingCacheImpl() 方法中有这么一段代码: try { bitmap = Bitmap.createBitmap(mResources.getDisplayMetrics...构建 Bitmap 对象的时候,如果捕捉到了 OOM ,就放弃生成 Bitmap 缓存,因为 View 的绘制过程中 Bitmap Cache 并不是必须存在的。... 《Java 虚拟机规范》中对 Java 堆的描述是:“所有的对象实例以及数组都应当在堆上分配”。 Java 堆以处于物理上连续的内存空间,但在逻辑上它应该被视为连续的。...方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译编译后的代码缓存等数据。

52920

【日更计划094】数字IC基础题【SV部分】

上期答案 [191] 下面的systemverilog代码中有什么错误?...function void do_print(); wait_packet(); $display("packet received"); endfunction function中不能使用任何延时语句...new()systemverilog中类的构造函数。他类中定义,并初始化对象。 new[]用于动态数组的内存分配。 [193] 什么是systemverilog中的前置声明?...有时候,一个类有可能引用另一个尚未编译的类,这会导致编译错误。例如,如果按照下面的顺序编译Statistics和Packet,由于在编译Statistics,Packet尚未定义,编译器将为报错。...[200] interface是综合的? 欢迎留言区给出你的答案,正确答案将在下一期公布,或者到下面的文章获取答案

67610

Python从入门到入土-基础知识准备

)组织代码 Python名称由来 Python的创始人为 Guido van Rossum,当时他阿姆斯特丹的荷兰数学和计算机科学研究学会工作。...例如Perl6),好在Python挺过来了。...这里忽略展开。 如果一个模块被import过,Python 会将导入的模块缓存在sys.modules字典里缓存起来,再次导入的时候不会重新执行导入动作,直接从缓存里取。...良好的包/模块组织程序开发中有重要的作用。随着项目代码的逐渐增加,一开始的单文件程序会逐渐膨胀,所幸 Python 提供当包模式可以良好应对通常的代码分层组织。...但是,当目录层次增加后,在下层目录里的代码引用其他目录的模块,总是要输入全部路径有时并不方便,此时可以考虑使用 Python 的包相对路径来导入模块。

68420

Arm首代AI架构如此彪悍!集英伟达、英特尔、赛灵思三位优势于一体

然后,编译器为不同的组件生成命令流(由ARM控制处理器进行编配),到达寄存器以控制这些组件。 简而言之就是:不需要缓存。...此外还有一个好处是流量控制流程被大大简化,可以进一步降低能耗,提升处理器性能的预测性。 处理卷积化的方式可以进一步提高效率。下图中的SRAM突出了编译器是如何为输入特征映射和压缩模型分配部分资源的。...我们已经讨论了这一点的重要性,但是在这些操作中有很多零,可以MAC引擎中进行检测和调整,以避免浪费更多的能量。 ARM芯片还具备可编程层引擎,旨在通过可编程性“预见”处理器的。...压缩结果保留在内部SRAM中,并且SRAM中保留了网络修剪技术,以便在需要使用。...对这类技术进行授权时的选择并不多,同时ARM也要确定,现有的神经网络处理器中有哪些最成功的、值得汲取的技术和组件。

53440

serialVersionUID 是干什么的?

我们有时候代码的时候,对于一个需要序列化的类,如果不去写 serialVersionUID,编译器可能就会提示我们 The serializable class ClassName does not...有使用过 MyBatis-plus 框架的同学应该也发现,使用反向代码生成,所生成的实体类也都带有 static final 进行修饰的 long 类型 serialVersionUID 。...但是,强烈建议所有序列化类显式声明serialVersionUID值,因为默认的 serialVersionUID 计算对类详细信息高度敏感,这些详细信息可能因编译器实现而异,因此反序列化过程中可能会导致意外的...因此,为了保证不同的java编译器实现中SerialVersionId值是一致的,序列化类必须声明一个显式的SerialVersionId值。...,还需要指定

1.1K20

Spring 夺命连环18问

14.为什么要使用三级缓存,二级缓存不能解决? 15.@Autowired 和 @Resource 有什么区别? 16.spring 事务隔离级别有哪些?...Spring AOP 是运行时增强,是通过「动态代理实现」的 AspectJ AOP 是编译增强,需要特殊的编译器才可以完成,是通过「修改代码来实现」的,支持「三种织入方式」 「编译织入」:就是在编译字节码的时候织入相关代理类...「编译后织入」:编译完初始类后发现需要 AOP 增强,然后织入相关代码 「类加载织入」:指在加载器加载类的时候织入 主要区别 Spring AOP AspecjtJ AOP 增强方式 运行时增强...编译增强 实现方式 动态代理 修改代码 编译器 javac 特殊的编译器 ajc 效率 较低(运行时反射损耗性能) 较高 织入方式 运行时 编译编译后、类加载 12.spring 中 Bean...「必须是单例」(否则无法保证是同一对象) 14.为什么要使用三级缓存,二级缓存不能解决?

39310

如何快速快速地将MAGENTO 1迁移到MAGENTO 2

magento.png 要迁移还是迁移? 自Magento 2问世以来,这个问题无疑已经引起您的注意。...如果没有损坏,请不要修复,对? 尽管现实情况是Magento 2征服了市场,但企业主正在逐渐将其商店迁移到新版本,以获得更多收益。...与Magento 1相比,它显着节省了时间,Magento 1系统上花费了宝贵的时间查找图片,对其进行优化并在前端进行显示。...该内存数据结构存储库使您可以存储缓存和会话。事实证明,Redis数据库的生产力大大高于使用文件的生产力。相比之下,Magento 1缓存存储功能是通过第三方扩展实现的,但并不总是很方便。...另一方面,Magento 2中的开箱即用的代码编译能使您可以从每种方法中收集必要代码的各个部分,以获取最终的可执行代码

2.5K00

杨校老师课堂之Spring框架面试题【开发工程师面试前必看】

14.为什么要使用三级缓存,二级缓存不能解决? 15.@Autowired 和 @Resource 有什么区别? 16.spring 事务隔离级别有哪些?...Spring AOP 是运行时增强,是通过「动态代理实现」的 AspectJ AOP 是编译增强,需要特殊的编译器才可以完成,是通过「修改代码来实现」的,支持「三种织入方式」 「编译织入」:就是在编译字节码的时候织入相关代理类...「编译后织入」:编译完初始类后发现需要 AOP 增强,然后织入相关代码 「类加载织入」:指在加载器加载类的时候织入 主要区别 Spring AOP AspecjtJ AOP 增强方式 运行时增强...编译增强 实现方式 动态代理 修改代码 编译器 javac 特殊的编译器 ajc 效率 较低(运行时反射损耗性能) 较高 织入方式 运行时 编译编译后、类加载 12.spring 中 Bean...「必须是单例」(否则无法保证是同一对象) 14.为什么要使用三级缓存,二级缓存不能解决?

41540

为什么面试官这么爱问性能优化?

你们的业务都这么复杂?怎么动不动就要性能优化? 你们的代码写的这么拉优化都不能使? 性能优化是一个高级前端的必要技能?...性能优化、react性能优化 2.异步组件 3.tree shaking 4.服务端渲染 代码实现 1.按需加载,逻辑后移,优先保证首屏内容渲染 2.复杂计算使用web worker 3.接口缓存、计算结果缓存...2.代码开发中尽量保证写出的代码清晰、维护,比如:清晰的目录和文件结构、添加必要的注释、提取公共函数公共组件、组件单向数据流、组件功能尽量单一等。...那么我就自然的做了一些优化,比如: 思维导图场景,大部分情况下操作的其实就是其中一个或部分节点,所以不需要重新删除创建所有元素,那么就可以通过节点复用的方式来优化,将真实节点缓存起来,渲染通过数据唯一的...,导致激活操作需要重新计算节点大小,更新节点样式,多选和全选操作下非常耗时,所以后期改为只允许修改不改变节点大小的样式属性 其他一些细节优化:对于数据没有改变的操作触发赋值或函数调用,一些不起眼的操作可能也是需要耗费时间的

19420

Java中int和Integer的区别

,Integer i = 127,会将127进行缓存,下次再写Integer j = 127,就会直接从缓存中取,就不会new了。...所谓语法糖,简单理解为Java平台为我们自动进行了一些转换,保证不同的写法在运行时等价。因此它们是发生在编译阶段的,也就是说生成的字节码是一致的。...可以通过将代码编译后,再反编译加以证实。 原则上,建议避免无意中的装箱、拆箱行为,尤其是性能敏感的场合,创建10万个Java对象和10万个整数的开销可不是一个数量级的。...顺带说一下,32位环境下,Integer对象占用内存16字节;64位环境下则更大 2.值缓存 我们知道,String,Java也为Integer提供了值缓存 Integer num1 = 1; Integer...以Integer为例,默认情况下只会缓存-128到127之间的值。当然如果你愿意也可以通过以下JVM参数进行设置:-XX:AutoBoxCacheMax=N 3.原始类型操作线程安全

72110
领券