超参数

后端开发二面面经

完整信息

46 条问法 · 30 道题

本篇目录

时间:2026.9.4

难度很大很大的一次面试,我确实被问懵逼了,这个技不如人了,但是这个难度是真的夸张啊,怎么都开始算上redis的zset的问题了

项目深挖

  • 你挑一个在百度实习期间做的具体方向或功能模块展开讲一下:包括背景、角色职责、参与的功能模块、用了什么技术、解决什么问题、达到什么效果、怎么评估的?
  • 原来采用的数据结构,它的查询过程是怎样的?为什么性能会那么低?
  • 索引改成了 RoaringBitmap 之后,会不会涉及到更新、删除以及并发操作?
  • 优化结论提到了提升 QPS 和降低 P99,你的压测环境和统计口径是怎样的?是单机还是集群?数据量有多大?是离线还是在线环境?
  • 不同地区之间的流量模型是怎样的?你们有没有在上面做过对照实验?
  • 简历里提到 Redis 集群 CPU 突刺,根本原因是什么?你是怎么定位的?
  • 针对这个 CPU 突刺问题,你们具体是怎么解决的?
  • 手动将大 key 打散后,接下来是通过手动做负载均衡吗?
  • 重构广告词表缓存链路时引入了两级缓存,你怎么保证两级缓存底层数据的一致性?
  • 全量更新的时候,MySQL 的数据量大概是多少?
  • 全量更新一次大概要花多少时间?
  • 你提到的单机 QPS 提升,具体指的是纯查询性能的提升吗?
  • 这种二级缓存的更新与兜底做法,你觉得存在什么潜在问题吗?

技术栈与基础组件

  • 之前常规的组件你都接触过对吧,消息队列这块有用过吗?
  • K8s 之前有接触过吗?
  • 你的 K8s 大概了解到什么程度?是以使用为主,还是有基于 K8s 做过二次开发?

MySQL 底层与优化

  • (贴出一段深分页 SQL)可以先解释一下这条 SQL 想要做的事情是什么吗?
  • 假如 account 表的主键是 id,且在 update_time 列加了普通索引,从存储引擎层或索引层解释一下,这条 SQL 的底层查询过程是怎样的?
  • 你提到了回表操作,那么 OFFSET 和 LIMIT 操作具体发生在执行流程的哪一步?
  • 你觉得这条 SQL 存在性能问题吗?
  • 针对这种深分页 SQL,通常可以怎么优化?
  • MySQL InnoDB 的默认隔离级别是多少?
  • 可重复读(RR)底层具体是怎么实现的?
  • 读已提交(RC)隔离级别在底层又是怎么实现的?它与可重复读在 Read View 生成时机上有什么区别?

Redis 与核心数据结构(跳表极限推导 & 淘汰策略)

  • Redis 里面的 zset 底层是用什么数据结构实现的?
  • 跳表是一个什么样的数据结构?它的查找过程和插入操作是怎么做的?
  • 跳表插入时每次向上建立索引的概率是 (Redis 中为 ):假如 非常接近于 0,跳表会退化成什么样的数据结构?假如 非常接近于 1,跳表又会退化成什么样的数据结构?
  • 跳表查找的时间复杂度怎么算? 的底数是多少?在物理/数学上分别代表什么含义?
  • 假设跳表一共有 个元素,晋升概率 :跳表的索引层数(向下走的次数)应该怎么推导?在每一层需要横向遍历比较的区间数期望是多少?综合起来的时间复杂度是多少?
  • 如果 ,每层遍历的区间数期望是多少?
  • 为什么 Redis 的跳表把晋升概率 设置为 ,而不是 ?
  • 可以简单说一下什么是 LRU,什么是 LFU 吗?
  • LRU 和 LFU 各自的适用场景是什么?
  • 在你百度实习的词表本地缓存场景中,只能二选一的话,用 LRU 好还是用 LFU 好?为什么?

分布式系统与一致性协议(Kafka & Raft)

  • Kafka 在你实际使用的过程中,是在什么项目场景下用的?
  • 你提到保证数据最终一致性,这里的“最终一致性”具体指的是什么?
  • 抛开业务消费端的幂等处理,Kafka 本身是通过什么机制实现副本数据一致性与高可用的?底层依赖什么共识算法?
  • Raft 选举或投票时,为什么判定条件必须是法定多数派()?
  • 你什么时候看过 Raft 相关的内容?有没有自己动手实现过?
  • 针对这种在实际业务工作中基本碰不到的底层技术,你平时是怎么学习的?
  • Kafka 的消费者组 Rebalance 机制有了解过吗?什么时候会触发?

系统设计题(Go 实现并发延时队列 DelayQueue)

  • 如果让你在 Go 里面实现一个延时队列(包含 Put(val, delay) 和阻塞的 Get() 方法),整体的设计思路是怎样的?
  • Put 方法底层会选用什么数据结构来组织数据?内部按照什么维度去排序?
  • 传入的 delay 是相对时长,排序时应该用相对时间还是绝对到期时间戳?
  • Get 方法如何高效实现阻塞与按时唤醒?如果不用低效的死循环轮询,可以用什么机制?
  • 在高并发场景下(多生产者并发 Put,单个消费者 Get),可能会遇到什么问题?
  • 锁应该加在哪里?对哪个对象加锁?
  • 如果消费者正在等待堆顶元素休眠(比如还剩 5 秒),此时有新的协程 Put 进一个过期时间更短的元素(比如 1 秒后到期,即插队现象),如何正确打断并重置等待时间?

AI 研发工具与 Agent 实践

  • 你平时开发时用什么 AI Coding 工具比较多?
  • 用 Claude Code 的话,你配置的是什么底层模型?
  • 在实际使用 Cursor、Claude Code 等 AI 工具或 Harness 的过程中,你觉得哪些环节好用,哪些效果还不够理想?有什么心得体会?
  • Claude Code 本身有用到 Multi-Agent(多智能体)架构吗?
本篇目录
  1. 01
  2. 02
  3. 03
    优化结论提到了提升 QPS 和降低 P99,你的压测环境和统计口径是怎样的?是单机还是集群?数据量有多大?是离线还是在线环境?
  4. 04
  5. 05
  6. 06
  7. 07
  8. 08
    重构广告词表缓存链路时引入了两级缓存,你怎么保证两级缓存底层数据的一致性?
  9. 09
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
    你的 K8s 大概了解到什么程度?是以使用为主,还是有基于 K8s 做过二次开发?
  16. 16
    你提到了回表操作,那么 OFFSET 和 LIMIT 操作具体发生在执行流程的哪一步?
  17. 17
  18. 18
  19. 19
  20. 20
    追问
    读已提交(RC)隔离级别在底层又是怎么实现的?它与可重复读在 Read View 生成时机上有什么区别?
  21. 21
  22. 22
    跳表是一个什么样的数据结构?它的查找过程和插入操作是怎么做的?
  23. 23
    追问
    跳表插入时每次向上建立索引的概率是 (Redis 中为 ):假如 非常接近于 0,跳表会退化成什么样的数据结构?假如 非常接近于 1,跳表又会退化成什么样的数据结构?
  24. 24
    追问
    跳表查找的时间复杂度怎么算? 的底数是多少?在物理/数学上分别代表什么含义?
  25. 25
    追问
    假设跳表一共有 个元素,晋升概率 :跳表的索引层数(向下走的次数)应该怎么推导?在每一层需要横向遍历比较的区间数期望是多少?综合起来的时间复杂度是多少?
  26. 26
  27. 27
  28. 28
    追问
    在你百度实习的词表本地缓存场景中,只能二选一的话,用 LRU 好还是用 LFU 好?为什么?
  29. 29
  30. 30
  31. 31
    抛开业务消费端的幂等处理,Kafka 本身是通过什么机制实现副本数据一致性与高可用的?底层依赖什么共识算法?
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
    如果让你在 Go 里面实现一个延时队列(包含 Put(val, delay) 和阻塞的 Get() 方法),整体的设计思路是怎样的?
  37. 37
  38. 38
  39. 39
    追问
    Get 方法如何高效实现阻塞与按时唤醒?如果不用低效的死循环轮询,可以用什么机制?
  40. 40
  41. 41
  42. 42
    追问
    如果消费者正在等待堆顶元素休眠(比如还剩 5 秒),此时有新的协程 Put 进一个过期时间更短的元素(比如 1 秒后到期,即插队现象),如何正确打断并重置等待时间?
  43. 43
  44. 44
  45. 45
    在实际使用 Cursor、Claude Code 等 AI 工具或 Harness 的过程中,你觉得哪些环节好用,哪些效果还不够理想?有什么心得体会?
  46. 46

同作者面经

相关公司