考察点:java关键字
volatile关键字是用来保证有序性和可见性的。这跟Java内存模型有关。比如我们所写的代码,不一定是按照我们自己书写的顺序来执行的,编译器会做重排序,CPU也会做重排序的,这样的重排序是为了减少流水线的阻塞的,引起流水阻塞,比如数据相关性,提高CPU的执行效率。需要有一定的顺序和规则来保证,不然程序员自己写的代码都不知带对不对了,所以有happens-before规则,其中有条就是volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作;有序性实现的是通过插入内存屏障来保证的。可见性:首先Java内存模型分为,主内存,工作内存。比如线程A从主内存把变量从主内存读到了自己的工作内存中,做了加1的操作,但是此时没有将i的最新值刷新会主内存中,线程B此时读到的还是i的旧值。加了volatile关键字的代码生成的汇编代码发现,会多出一个lock前缀指令。Lock指令对Intel平台的CPU,早期是锁总线,这样代价太高了,后面提出了缓存一致性协议,MESI,来保证了多核之间数据不一致性问题。 考点:java关键字synchronized修饰静态方法以及同步代码块的synchronized (类.class)用法锁的是类,线程想要执行对应同步代码,需要获得类锁。synchronized修饰成员方法,线程获取的是当前调用该方法的对象实例的对象锁。
本文向大家介绍请你介绍一下B+树?相关面试题,主要包含被问及请你介绍一下B+树?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: B+是一种多路搜索树,主要为磁盘或其他直接存取辅助设备而设计的一种平衡查找树,在B+树中,每个节点的可以有多个孩子,并且按照关键字大小有序排列。所有记录节点都是按照键值的大小顺序存放在同一层的叶节点中。相比B树,其具有以下几个特点: 每个节点上的指针上限为2d而不
本文向大家介绍请你来介绍一下STL的allocaotr?相关面试题,主要包含被问及请你来介绍一下STL的allocaotr?时的应答技巧和注意事项,需要的朋友参考一下 STL的分配器用于封装STL容器在内存管理上的底层细节。在C++中,其内存配置和释放如下: new运算分两个阶段:(1)调用::operator new配置内存;(2)调用对象构造函数构造对象内容 delete运算分两个阶段:(1)
本文向大家介绍请你介绍一下策略模式?相关面试题,主要包含被问及请你介绍一下策略模式?时的应答技巧和注意事项,需要的朋友参考一下 考察点:策略模式 策略模式也叫政策模式,是一种行为型设计模式,是一种比较简单的设计模式。策略模式采用了面向对象的继承和多态机制。略模式适合使用在:1.多个类只有在算法或行为上稍有不同的场景。2.算法需要自由切换的场景。3.需要屏蔽算法规则的场景。 使用策略模式当然也有需要
本文向大家介绍java volatile关键字的含义详细介绍,包括了java volatile关键字的含义详细介绍的使用技巧和注意事项,需要的朋友参考一下 java volatile关键字 在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入
本文向大家介绍请你介绍一下mysql的MVCC机制相关面试题,主要包含被问及请你介绍一下mysql的MVCC机制时的应答技巧和注意事项,需要的朋友参考一下 参考回答: MVCC是一种多版本并发控制机制,是MySQL的InnoDB存储引擎实现隔离级别的一种具体方式,用于实现提交读和可重复读这两种隔离级别。MVCC是通过保存数据在某个时间点的快照来实现该机制,其在每行记录后面保存两个隐藏的列,分别保存
本文向大家介绍请介绍一下ThreadLocal?相关面试题,主要包含被问及请介绍一下ThreadLocal?时的应答技巧和注意事项,需要的朋友参考一下 ThreadLocal简介 通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK中提供的类正是为了解决这样的问题。 类主要解决的就是让每个线程绑定自己的值,可以将类形象的比喻成