字节跳动后端开发二面面经
- 轮次
- 二面
- 时间
- 2026-08
- 来源
- 牛客网
《面试题目》
- 请做一下自我介绍。
- 网络空间安全专业主要学习了哪些内容?
- 你如何理解 Harness,它的核心职责是什么?
- Agent 项目使用了哪些中间件和数据库?
- 知识库中的内容是如何切分的?
- 项目使用了什么 Embedding 模型?
- Agent 未来发展的核心方向是什么?项目中最大的前沿技术挑战是什么?
- 平时通过哪些方式提升技术能力?
- 出现消息堆积时应该如何处理?
- 如何分析 MySQL 慢查询?
- 令牌桶限流算法的原理是什么?
- 如何实现滑动窗口限流?
- 常见的系统监控指标有哪些?
- JDK 7 和 JDK 8 的 HashMap 实现有什么区别?
- 如何保证 HashMap 的线程安全?
- 线程池有哪些核心参数?
- ZooKeeper 如何充当注册中心?
- ZooKeeper 分布式锁的原理是什么?
- 如何求最长公共子串并返回该子串?
- 你有什么想了解的问题?
《参考解析》
1. 消息堆积处理:先确认是生产流量突增、消费者故障、下游变慢还是单条坏消息导致阻塞,再根据原因恢复消费能力。可临时扩容消费者,但不能超过分区带来的有效并行度;同时应监控积压量和最老消息年龄,并为过期消息、失败重试和死信队列建立明确处理策略。
2. MySQL 慢查询分析:先通过慢查询日志和监控定位高耗时、高频 SQL,再使用 EXPLAIN ANALYZE 检查实际执行路径、扫描行数、索引选择、排序和临时表。优化时同时检查 SQL 写法、索引设计、数据分布及锁等待,避免只凭执行时间直接加索引。
3. 令牌桶与滑动窗口:令牌桶按固定速率补充令牌,请求只有取得令牌才能通过,因此既能限制长期平均速率,也允许桶容量范围内的瞬时突发。滑动窗口可将时间划分为多个小桶,统计当前时刻向前一个完整窗口内的请求数;桶越细越准确,但存储和计算成本越高。
4. HashMap 的版本差异:JDK 7 采用数组加链表,扩容迁移时使用头插法,多线程误用可能形成环。JDK 8 改为数组、链表和红黑树,链表达到阈值且数组容量满足条件时树化,扩容时根据哈希位将节点拆分到原位置或原位置加旧容量的位置。
5. ZooKeeper 分布式锁:客户端在锁目录下创建临时顺序节点,序号最小者获得锁,其他客户端只监听自己前一个节点,避免所有等待者同时被唤醒。持锁客户端会话结束后临时节点自动删除,后继节点收到通知后继续竞争。