新鲜出炉的快手面试!包含许多经典的八股!
2025-06-03 00:00   18

在你阅读之前,先插播个小广告,博主有一个面经专栏,全部都是2024秋招准备的内容,相比于网络上其他的面经,有着面试的所有过程,还有最全的面试答案,不需要再到处找,如果你想获得大厂的offer,认真准备面经是必不可少的, 专栏会持续更新至少100篇内容,现在已经更新10+内容了 ,如果想学习所有的面经,欢迎订阅博主的专栏呀,保证每一篇都是匠心独创,绝对物超所值,下面就开始学习吧~

目录

1、项目相关

2、八股

3、算法

4、八股文答案

为了线程安全,应对并发采取了什么操作?

你能讲一下原子变量吗?

volatile关键字讲一下?

juc包下的关键内容?

Java的反射你了解过吗?什么时候用反射?反射会有什么问题?

开发过程中怎么定位死锁或死锁的过程?

Jvm中,什么时候会发生堆外内存OOM,堆内内存OOM?yong gc 或mix gc什么时候会发生?

熟悉jvm调优,做过哪些工作,达到什么目标?

有哪些场景下索引会失效?

mysql死锁条件是什么,怎么避免?

mysql的分库分表有了解过吗?

redis常用的数据结构底层是怎么实现的?

redis的大key了解过吗?


1、项目相关

  • Cellar和 redis有什么区别?
  • 什么情况下会使用cellar?
  • 底层是怎么实现数据存储?

2、八股

  • 为了线程安全,应对并发采取了什么操作?
  • 你能讲一下原子变量吗?
  • volatile关键字讲一下?
  • juc包下的关键内容?
  • Java的反射你了解过吗?什么时候用反射?反射会有什么问题?
  • 开发过程中怎么定位死锁或死锁的过程?
  • Jvm中,什么时候会发生堆外内存OOM,堆内内存OOM?yong gc 或mix gc什么时候会发生?
  • 熟悉jvm调优,做过哪些工作,达到什么目标?
  • 有哪些场景下索引会失效?
  • mysql死锁条件是什么,怎么避免?
  • mysql的分库分表有了解过吗?
  • redis常用的数据结构底层是怎么实现的?
  • redis的大key了解过吗?

3、算法

  • 无序数组,偶数放前面,奇数放后面

4、八股文答案

  • 为了线程安全,应对并发采取了什么操作?

同步方法和同步块 :使用 synchronized 关键字可以确保在同一时间只有一个线程可以访问被标记的方法或代码块,从而避免多个线程同时修改共享数据。

Volatile关键字 volatile 关键字用于声明一个变量是易变的(volatile variable),这意味着该变量的值可能会被多个线程同时修改。使用 volatile 关键字可以确保多个线程之间的可见性,即一个线程对变量的修改对其他线程是可见的。

原子类 :Java 提供了一些原子类,如 AtomicInteger AtomicLong 等,它们提供了一些原子操作,可以在不使用锁的情况下进行线程安全的操作。

Lock接口 java.util.concurrent.locks.Lock 接口提供了显式的锁机制,如 ReentrantLock 。与 synchronized 关键字相比,使用 Lock 接口更加灵活,可以支持更复杂的锁定和解锁场景。

并发集合类 :Java 提供了一系列的并发集合类,如 ConcurrentHashMap ConcurrentLinkedQueue 等,它们内部使用了各种并发控制机制,保证了在多线程环境下的线程安全性。

  • 你能讲一下原子变量吗?

当多个线程同时访问和修改同一个变量时,会存在 竞态条件(Race Condition) 的问题,可能导致数据不一致或者不确定的结果。为了解决这种问题,Java 提供了一系列原子变量(Atomic Variables)来支持在不使用锁的情况下进行线程安全的操作。

原子变量是一种特殊类型的变量,支持原子性操作,即操作不可被中断。在多线程环境下,原子变量的操作是线程安全的,不需要额外的同步机制。Java 中的原子变量位于 java.util.concurrent.atomic 包下,常见的原子变量包括 AtomicInteger AtomicLong AtomicBoolean 等。

原子变量提供了一系列的原子操作,包括:

  • get() 和 set() :获取和设置变量的值。

  • getAndSet() :原子地设置变量的值,并返回之前的值。

  • compareAndSet(expectedValue, newValue) :如果当前值等于预期值 expectedValue ,则将变量设置为新值 newValue ,否则不做任何操作。这个操作是原子的。

  • incrementAndGet() 和 decrementAndGet() :原子地增加或减少变量的值,并返回增加或减少后的结果。

  • getAndIncrement() 和 getAndDecrement() :先返回当前值,然后再原子地增加或减少变量的值。

使用原子变量可以避免显式地使用锁来保护共享变量,从而提高了并发程序的性能。但需要注意,虽然原子变量能够保证单个操作的原子性,但并不能保证多个操作的原子性,需要根据具体情况进行适当的设计和组合。

  • volatile关键字讲一下?

`volatile` 是 Java 中的一个关键字,用于声明一个变量是易变的(volatile variable)。当一个变量被声明为 `volatile` 时,意味着这个变量可能会被多个线程同时修改,且保证对这个变量的读写操作具有可见性和顺序性,