滴滴Java开发工程师面试经验

滴滴 · Java开发工程师 · 二面 · 2026-04

面试题目

一面

  • 讲解一下HashSet的原理;如何保证不重复;为什么说它不安全;
  • 说一下你对锁的理解;如何保证并发可见性;
  • 说一下你对MySQL的理解;
  • 项目拷打:针对极端情况的应对方案;
  • 手撕:鸡兔同笼问题。

二面

  • 项目拷打:深挖项目架构与难点;
  • 频繁发生Full GC如何解决?
  • 有没有遇到线上问题?怎么解决的?
  • 手撕:SQL编写;二叉树两个节点的公共祖先。

参考解析

  • HashSet原理:底层基于HashMap实现,使用Key存储对象,Value存一个常量对象。通过hashCode()和equals()保证唯一性。因其非线程安全,并发环境下可能导致数据覆盖或丢失,应使用ConcurrentHashMap或Collections.synchronizedSet。
  • 并发可见性:通过volatile关键字保证变量修改对所有线程立即可见;此外,synchronized和ReentrantLock在释放锁之前会将工作内存数据刷新回主内存,也能保证可见性。
  • Full GC排查:检查是否存在内存泄漏(如长生命周期对象)、频繁创建大对象、或元空间溢出。工具可使用jstat分析GC频率,jmap/jhat导出堆转储文件,通过MAT分析对象引用链。
  • 二叉树公共祖先:利用递归思想,若当前节点为null或等于其中一个目标节点则直接返回。若左右子树递归结果均不为null,说明当前节点即为最近公共祖先;否则返回非空的那一侧结果。