前言
今天我们来说说Redis为什么高性能?如何做高可用?
Redis为什么这么快?
- Redis是单线程的,避免了多线程的上下文切换和并发控制开销;
- Redis大部分操作时基于内存,读写数据不需要磁盘I/O,所以速度非常快;
- Redis采用了I/O多路复用机制,提高了网络I/O并发性;
- Redis提供高效的数据结构,如跳跃表、哈希表等;
volatile相关经典面试题
- 谈谈volatile的特性
- volatile的内存语义
- 说说并发编程的3大特性
- 什么是内存可见性,什么是指令重排序?
- volatile是如何解决java并发中可见性的问题
- volatile如何防止指令重排
- volatile可以解决原子性嘛?为什么?
- volatile底层的实现机制
- volatile和synchronized的区别?
谈谈volatile的特性
volatile的内存语义
- 当写一个 volatile 变量时,JMM 会把该线程对应的本地内存中的共享变量值刷新到主内存。
- 当读一个 volatile 变量时,JMM 会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。
说说并发编程的3大特性
- 原子性
- 可见性
- 有序性
什么是内存可见性,什么是指令重排序?
- 可见性就是指当一个线程修改了共享变量的值时,其他线程能够立即得知这个修改。
- 指令重排是指JVM在编译Java代码的时候,或者CPU在执行JVM字节码的时候,对现有的指令顺序进行重新排序。
volatile是如何解决java并发中可见性的问题
底层是通过内存屏障实现的哦,volatile能保证修饰的变量后,可以立即同步回主内存,每次使用前立即先从主内存刷新最新的值。
volatile如何防止指令重排
也是内存屏障哦,跟面试官讲下Java内存的保守策略:
- 在每个volatile写操作的前面插入一个StoreStore屏障。
- 在每个volatile写操作的后面插入一个StoreLoad屏障。
- 在每个volatile读操作的前面插入一个LoadLoad屏障。
- 在每个volatile读操作的后面插入一个LoadStore屏障。
总结
对于面试,一定要有良好的心态,这位小伙伴面试美团的时候没有被前面阿里的面试影响到,发挥也很正常,也就能顺利拿下美团的offer。
小编还整理了大厂java程序员面试涉及到的绝大部分面试题及答案免费分享给大家,希望能帮助到大家,有需要的朋友可以看下面的免费领取方式!
↓↓↓
点击这里免费下载
mg-V9MKRclr-1624434546009)]
[外链图片转存中…(img-iZmFOSjh-1624434546011)]
最后感谢大家的支持,希望小编整理的资料能够帮助到大家!也祝愿大家都能够升职加薪!