快手后端一面面经

快手 · 后端开发 · 一面 · 2026-05

面试题目

项目拷打

  • Agent项目与传统后端项目的架构差异。

八股文

  • Redis集群部署中Key如何定位到节点?
  • Redis单副本/双副本节点宕机后的访问情况。
  • HashMap底层结构、扩容机制、节点遍历顺序及排序规则。
  • 如何计算桶位?自定义对象作为Key时的情况。
  • 创建线程的方式,线程间同步的方法。
  • 加锁的方式有哪些?
  • synchronized临界区抛出OOM或异常,锁会自动释放吗?
  • OOM是什么?可以捕获处理吗?能否防止程序退出?
  • Java进程的退出条件是什么?
  • 方法内创建线程,方法返回时线程是否会随之退出?
  • 虚拟线程与操作系统线程的对应关系。
  • 线程崩溃是否会导致整个进程退出?异常如何处理?
  • 操作系统任务调度流程及上下文切换内容。
  • 为什么使用虚拟内存?

手撕代码

  • 判断B树是否为A树的子树。

参考解析

  • Redis定位:通过CRC16算法计算Key的槽位(Slot),集群共16384个槽,由不同节点分片存储。
  • HashMap遍历:HashMap本身是无序的。若使用LinkedHashMap则维护插入顺序,TreeMap则按Key的自然顺序或Comparator排序。
  • 锁与异常:synchronized在代码块执行结束(无论正常还是抛出异常)时,JVM会自动释放锁。OOM(OutOfMemoryError)是Error,属于JVM无法恢复的严重问题,虽然可捕获,但不建议且通常难以处理。
  • 进程退出:Java进程通常在所有非守护线程(User Thread)运行结束时退出。若存在正在运行的子线程,主线程方法返回不会导致进程退出。
  • 上下文切换:包括寄存器状态(PC指针、堆栈指针)、虚拟内存页表信息、内核栈及程序执行现场的保存与恢复。