20道高频面试题(含答案),已有千人收藏

Posted springboot全家桶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20道高频面试题(含答案),已有千人收藏相关的知识,希望对你有一定的参考价值。

前言

今天我们来说说Redis为什么高性能?如何做高可用?

Redis为什么这么快?

  1. Redis是单线程的,避免了多线程的上下文切换和并发控制开销;
  2. Redis大部分操作时基于内存,读写数据不需要磁盘I/O,所以速度非常快;
  3. Redis采用了I/O多路复用机制,提高了网络I/O并发性;
  4. 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-mGztJeEv-1624591481073)]

[外链图片转存中…(img-GsoLYLAU-1624591481076)]

最后感谢大家的支持,希望小编整理的资料能够帮助到大家!也祝愿大家都能够升职加薪!

以上是关于20道高频面试题(含答案),已有千人收藏的主要内容,如果未能解决你的问题,请参考以下文章

腾讯T3手把手教你!20道高频面试题(含答案)

精选Hive高频面试题11道,附答案详细解析(好文收藏)

精选Hive高频面试题11道,附答案详细解析(好文收藏)

2019年12道RabbitMQ高频面试题你都会了吗?(含答案解析)

2023金三银四1000道java面试必考题(附答案,赶紧收藏)包含所有大厂高频面试知识点

2万字高频MySQL面试题总结(含答案),金九银十成为offer收割机!建议收藏