字节跳动后端开发一面面经
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- Redis 的过期删除是否会立即删除 Key?
- 线程池有哪些拒绝策略?
- synchronized 获取失败的线程会怎样,实例方法和静态方法分别锁什么?
- CompletableFuture 如何并行执行多个任务并处理其中一个任务失败?
- G1 垃圾回收器的工作方式是什么?
- Redis 有哪些数据结构和高可用方案,ZSet 为什么使用跳表?
- Redis 内存接近上限时还能否继续写入?
- MySQL 二级索引的叶子节点和非叶子节点分别存什么?
- 联合索引遇到等值和范围条件时如何判断是否生效?
- MySQL 回滚事务时内部会发生哪些操作?
- 如何设计十万人抢一千个座位且优先分配给长途乘客的购票系统?
- 如何每 K 个节点一组反转链表?
《参考解析》
- 异步编排:多个独立任务可使用
allOf汇合,总耗时接近最慢任务。异常策略要明确是快速失败、收集全部结果还是允许部分成功,并为每个任务设置超时和错误上下文。 - Redis 内存:能否继续写取决于
maxmemory和淘汰策略。无淘汰策略时写命令会失败;有淘汰策略时会按规则回收 Key,但不能把淘汰当作容量规划。 - 联合索引:优化器根据索引前缀、范围条件、选择性和成本决定访问路径。应使用
EXPLAIN ANALYZE验证实际扫描行数,不能只靠字段书写顺序判断。 - 抢票系统:入口削峰并校验用户资格,候选请求按业务规则进入可确定排序的队列;座位分配与库存扣减需要原子化,结果写入使用幂等键并提供超时释放机制。
- K 组反转:先检查剩余节点是否满 K 个,再原地反转这一段并连接前后链表;不足 K 个的尾段保持不变。时间复杂度 O(n),额外空间 O(1)。