面灵AI

滴滴日常后端二面(已 OC)

轮次
二面
时间
2026-08
来源
牛客网

《面试题目》

  1. 如何设计分片上传、流式下载和课件预转码的文件资源保护架构?
  2. 降低内存和线程占用后,量化指标是什么?
  3. 流式下载为什么选择 64KB 缓冲区,能否缩小到 32KB 或 16KB?
  4. 生产者消费者模型本身能实现任务去重吗?
  5. 静态 Set 不断膨胀如何处理?
  6. HashMap 底层如何实现?
  7. Java 拉链法 HashMap 与开放寻址法哈希表有什么优劣?
  8. 为什么 Java HashMap 不采用开放寻址?
  9. 如何判断对象可以被回收?
  10. 老年代对象引用新生代对象会带来什么问题,如何解决?
  11. 如何实现不依赖 BigInteger/BigDecimal 的 Int256 加法和减法?

《参考解析》

  1. 文件服务:分片上传要校验块序号、大小和摘要,合并时校验完整性;下载采用流式读取避免一次性加载,缓冲区大小应以吞吐、内存和系统调用次数实测决定。预转码任务需用持久化幂等键去重,不能依赖进程内静态 Set。
  2. HashMap 对比:拉链法扩容成本可控,删除简单但有额外指针;开放寻址减少对象和指针、缓存局部性好,但删除和高装载因子处理复杂。Java 通用 Map 需要稳定支持空桶、删除和高并发扩容,因此采用链式桶并在高冲突时树化。
  3. GC 卡表:老年代到新生代的引用若不记录,年轻代回收需要扫描整个老年代。卡表把老年代划分为卡页,写屏障标记发生跨代引用的区域,YGC 只扫描脏卡页。
  4. Int256:可用固定长度的 32 位或 64 位无符号数组保存 256 位,逐字按进位完成加减,并显式处理溢出、借位和负数表示。