字节后端八股
字节 / TikTok 后端口头技术题,每题有 30 秒版、展开讲解、追问和英文说法。
共 255 题 · 掌握 0 · 做过 0 · 没做 255。左边的小按钮依次是「没做 · / 做过 做 / 掌握 ✓」。
题单说明
按字节跳动 / TikTok 后端面试整理的口头技术题,覆盖操作系统、网络、MySQL、Redis、并发、Java 与 JVM、C++、Go、Python、分布式、线上排查和海量数据场景题。每题先自己口头答一遍,再对照:30 秒版答案、展开讲解、常见追问和英文说法。
频次标签是怎么来的
「高 / 中 / 低」来自 GitHub 上 keepoi/interview-questions 仓库按 1500 多篇面经统计的题目热度,每题的「面经统计」写了具体出处,比如「字节 22 · 腾讯 58」表示这道题在字节的面经里被提到 22 次、在腾讯的面经里 58 次。这批面经以国内校招和社招为主,年份偏早(大约 2020 年前后),所以它反映的是「哪些题是八股里的常青题」,不代表 2026 年北美的真实比例。「补充」是统计里没有、但常被追问的知识点。优先级按标签换算:高 → A,中 → B,低和补充 → C。
TikTok 北美实际问多少
各组差别很大:MLE 和 SRE 方向会在写代码前先口头问 30 分钟以上的基础题;后端岗位有人被问到锁、进程管理、内存管理、数据库分片,有人被问 TCP 和 UDP、HTTP 和 HTTPS 的区别,也有人说几乎不问 OS 和网络、主要深挖项目。Ads 组的面经提到「没问八股,围绕简历项目」,所以 Ads 方向以项目深挖和 coding 为主,八股更多是兜底准备。
建议的用法
先过一遍所有 A,保证 30 秒版能脱口而出(中英文都要);然后按简历相关度补:C++、操作系统、网络、MySQL、Redis、分布式优先,Java / JVM 和 Go 视岗位 JD 而定。
原始页面:字节后端八股题库(2026-10-11 导入)。
操作系统 0 / 29 掌握
- A 进程和线程有什么区别? 高频
- A 进程间通信(IPC)方式 高频
- A select、poll、epoll 的区别 高频
- A 操作系统的内存管理 高频
- A 死锁的条件与处理 高频
- B 虚拟地址到物理地址映射 中频
- B 缺页中断的处理过程 中频
- B 虚拟内存的好处 中频
- B 页面置换算法 中频
- B mmap 的原理和使用场景 中频
- B 用户态与内核态 中频
- B 进程调度与 Linux CFS 中频
- B 进程状态与转换 中频
- B 上下文切换的开销 中频
- B 自旋锁和互斥锁的区别与使用场景 中频
- B 同步异步与 I/O 模型 中频
- B 堆和栈有什么区别? 中频
- B 线程同步方式有哪些 中频
- B 协程和线程有什么区别? 中频
- C 零拷贝:sendfile 与 mmap 低频
- C 系统调用的过程是怎样的? 低频
- C 进程的虚拟地址空间 低频
- C malloc 的实现原理 低频
- C 孤儿进程与僵尸进程 补充
- C fork 与写时复制 补充
- C 匿名管道与命名管道 低频
- C 中断和异常有什么区别? 补充
- C 文件描述符、inode 与链接 补充
- C page cache 与 fsync 落盘 补充
计算机网络 0 / 30 掌握
- A TCP 三次握手与四次挥手 高频
- A TCP 是如何保证可靠传输的? 高频
- A TCP 拥塞控制算法 高频
- A TCP 与 UDP 的区别 高频
- A 输入 URL 到页面显示 高频
- A HTTPS 加密与 TLS 握手 高频
- B TIME_WAIT 与 2MSL 中频
- B 大量 CLOSE_WAIT 的原因 中频
- B TCP 滑动窗口与流量控制 中频
- B UDP 可靠传输与 QUIC 中频
- B 常见 HTTP 状态码 中频
- B 对称加密与非对称加密 中频
- B HTTP/1.0、1.1、2、3 的主要区别 中频
- B GET 和 POST 的区别 中频
- B 跨域与 CORS 中频
- B DNS 解析与 DNS 劫持 中频
- B OSI 七层与 TCP/IP 四层 中频
- B Cookie、Session、JWT 的区别 中频
- B SYN Flood 攻击与防御 中频
- B REST 与 RPC 的区别 中频
- B 长连接和短连接的区别和使用场景 中频
- C TCP 与 HTTP 的 keepalive 低频
- C TCP 粘包与拆包 补充
- C WebSocket 与长轮询、SSE 低频
- C ARP 协议是做什么的? 低频
- C ping 和 traceroute 的原理 低频
- C 延迟确认与 Nagle 算法 低频
- C XSS 与 CSRF 攻击防御 低频
- C TCP 报文头部有哪些关键字段? 低频
- C 四层与七层负载均衡 低频
MySQL 0 / 28 掌握
- A MySQL 为什么用 B+ 树做索引 高频
- A 事务的隔离级别 高频
- A MVCC 的实现 高频
- A 脏读、不可重复读与幻读 高频
- A 乐观锁和悲观锁的区别与使用场景 高频
- B ACID 及 InnoDB 的实现 中频
- B 聚簇索引与回表 中频
- B 什么是覆盖索引和索引下推? 中频
- B 联合索引与最左前缀 中频
- B 哪些情况会导致索引失效? 中频
- B 唯一索引与普通索引 中频
- B redo/undo/binlog 与两阶段提交 中频
- B InnoDB 的锁类型 中频
- B 数据库死锁与排查 中频
- B InnoDB 与 MyISAM 的区别 中频
- B 慢 SQL 优化与 EXPLAIN 中频
- B MySQL 主从复制与延迟 中频
- B 分库分表:时机与分片键 中频
- B SQL 与 NoSQL 的选择 中频
- C 读写分离与读旧数据 低频
- C INNER/LEFT/RIGHT JOIN 区别 低频
- C 数据库三大范式与反范式 低频
- C LIMIT 深分页为什么慢 补充
- C COUNT 几种写法的区别 补充
- C MySQL 语句的执行流程 补充
- C LIKE 查询与索引、全文检索 低频
- C 主键用自增 ID 还是 UUID 补充
- C Buffer Pool 与脏页刷盘 补充
Redis 0 / 20 掌握
- A RDB 与 AOF 的区别 高频
- A 缓存穿透、击穿与雪崩 高频
- A 缓存与数据库的一致性 高频
- A Redis 分布式锁与 Redlock 高频
- A Redis 哨兵机制 高频
- B Redis 数据类型与底层结构 中频
- B Redis ZSet 为何用跳表 中频
- B Redis 单线程为什么快 中频
- B Redis 过期 key 的删除 中频
- B Redis 的内存淘汰策略有哪些? 中频
- B Redis Cluster 分片与哨兵 中频
- B Redis 主从复制原理 中频
- B 热点 key 问题怎么发现和处理? 中频
- B 怎么用 Redis 实现延时队列? 中频
- B Redis 序列化方式与 RESP 中频
- B 怎么用 Redis 实现实时排行榜? 中频
- C Redis 主节点宕机与数据丢失 低频
- C Redis 大 key 问题 补充
- C Redis 事务与 Lua 脚本 补充
- C Redis Pipeline 与事务 补充
并发编程 0 / 22 掌握
- A synchronized 的实现与锁升级 高频
- A 线程池核心参数与流程 高频
- B volatile 的原理与局限 中频
- B Java 锁与 volatile 的选择 中频
- B ReentrantLock 与 AQS 中频
- B ThreadLocal 与内存泄漏 中频
- B Array/Linked BlockingQueue 中频
- B Java 线程的状态转换 中频
- B sleep() 和 wait() 有什么区别? 中频
- B Java 线程与虚拟线程 中频
- B Java 线程之间有哪些通信方式? 中频
- B 怎么保证线程安全?有哪些手段? 中频
- B 写一个生产者消费者模型 中频
- B 两线程交替打印 中频
- B 双重检查锁与 volatile 中频
- B 线程安全的 List 与 Map 中频
- C CAS 与 ABA 问题 低频
- C JMM 与 happens-before 低频
- C 设计一个阻塞队列 低频
- C 读写锁是什么?什么场景适合? 补充
- C 伪共享(false sharing) 补充
- C CountDownLatch 等的区别 补充
Java 基础与集合 0 / 18 掌握
- A HashMap 的实现原理 高频
- A HashMap 与 Hashtable 区别 高频
- A ConcurrentHashMap 原理 高频
- B HashMap 1.7 与 1.8 的区别 中频
- B ArrayList 与 LinkedList 中频
- B hashCode 与 equals 的关系 中频
- B String 不可变与 StringBuilder 中频
- B Java 反射的用途与代价 中频
- B 重载和重写的区别 中频
- B BIO、NIO、AIO 的区别 中频
- B 遍历时删除集合元素 中频
- B 常见设计模式及场景 中频
- C == 和 equals() 的区别 低频
- C 接口和抽象类的区别 低频
- C final 关键字的作用 低频
- C 装箱拆箱与 Integer 缓存 低频
- C checked 与 unchecked 异常 补充
- C Java 泛型擦除 补充
JVM 0 / 15 掌握
- A JVM 运行时内存区域 高频
- A 对象回收判定与 GC 算法 高频
- B 分代回收与对象晋升 中频
- B 垃圾收集器:CMS、G1、ZGC 中频
- B 类加载与双亲委派 中频
- B 哪些情况会发生 OOM?怎么排查? 中频
- B JVM 里堆和栈有什么区别? 中频
- B JVM 调优与线上排查工具 中频
- C Java 四种引用类型 补充
- C Stop-The-World 与 safepoint 补充
- C 对象的创建过程与内存布局 补充
- C JIT 编译与解释执行 补充
- C 逃逸分析与优化 补充
- C Minor/Major/Full GC 触发时机 补充
- C 元空间替代永久代 补充
C++ 0 / 25 掌握
- A C++ 多态与虚函数表 高频
- A 右值引用与移动语义 高频
- A const 与 static 的用法 高频
- A 类模板与模板特化 高频
- A 智能指针的区别与实现 高频
- B 哪些函数不能是虚函数 中频
- B new 与 malloc 的区别 中频
- B vector 扩容与迭代器失效 中频
- B C++11 有哪些重要的新特性? 中频
- B C++ 编译与链接过程 中频
- C 虚函数与纯虚函数 低频
- C 内存对齐的作用 低频
- C C++ 内存泄漏的检测 低频
- C map 与 unordered_map 低频
- C 深拷贝和浅拷贝的区别 低频
- C 重载、重写(覆盖)、隐藏的区别 低频
- C 菱形继承与虚继承 低频
- C 默认成员函数与 Rule of Five 低频
- C std::move 与完美转发 补充
- C 什么是 RAII? 补充
- C C++ 内存模型与 atomic 补充
- C 指针与引用、struct 与 class 补充
- C C++ inline 与 volatile 补充
- C C++ lambda 捕获方式 补充
- C 四种 C++ 类型转换 补充
Go 0 / 16 掌握
- A Go 的 GMP 调度模型 高频
- A channel 的底层与读写行为 高频
- A slice 底层与扩容机制 高频
- B goroutine 与线程的区别 中频
- B Go 垃圾回收与三色标记 中频
- B map 并发安全与 sync.Map 中频
- B defer 执行顺序与返回值 中频
- B Go context 的用法 中频
- C select 语句是怎么工作的? 低频
- C interface 底层与 nil 陷阱 低频
- C 什么是内存逃逸?怎么分析? 低频
- C sync.Mutex 的两种模式 低频
- C WaitGroup、Once、Pool 低频
- C goroutine 泄漏的排查 低频
- C panic 与 recover 的用法 低频
- C new 和 make 有什么区别? 低频
Python 0 / 8 掌握
- C Python GIL 的影响 补充
- C Python 并发模型的选择 补充
- C Python 内存管理与 GC 补充
- C dict 的底层实现 补充
- C 深浅拷贝与可变默认参数 补充
- C Python 装饰器的写法 补充
- C 生成器与迭代器的区别 补充
- C list 与 tuple 的区别 补充
分布式与消息队列 0 / 22 掌握
- A CAP 理论与取舍 高频
- A 秒杀系统与防超卖 高频
- B 什么是 BASE 和最终一致性? 中频
- B 接口幂等性的设计 中频
- B 一致性哈希与虚拟节点 中频
- B 分布式事务方案 中频
- B Kafka 如何保证消息不丢 中频
- B Kafka 为什么吞吐这么高? 中频
- B Kafka 如何保证消息顺序 中频
- B 消息重复消费与积压 中频
- B 限流算法:令牌桶与漏桶 中频
- B 分布式锁实现方式对比 中频
- C 分布式 ID 与 Snowflake 补充
- C Raft 算法原理 补充
- C Kafka 和 RabbitMQ 怎么选 低频
- C 常见的负载均衡算法有哪些? 低频
- C 熔断、降级、限流 补充
- C 服务注册与发现是怎么实现的? 补充
- C QPS 涨 10 倍怎么办 低频
- C MapReduce 的原理是什么? 低频
- C gRPC 相比 REST 的优势 补充
- C CDC 与 Outbox 模式 补充
Linux 与线上排查 0 / 9 掌握
- B 常用 Linux 命令 中频
- B 线上 CPU 高占用排查 中频
- B 内存占用过高怎么排查 中频
- B 服务响应变慢怎么排查 中频
- C 查看负载、进程和端口占用 低频
- C 实时查看并过滤滚动日志 低频
- C Too many open files 排查 补充
- C OOM Killer 的排查处理 补充
- C 磁盘满或 I/O 高的排查 补充
海量数据与场景题 0 / 13 掌握
- A 10 亿数里找最大和第 K 大 高频
- A 海量 URL 统计 Top K 高频
- B 两个大文件找相同 URL 中频
- B 40 亿整数的排序与查找 中频
- B 亿级记录算每秒在线人数 中频
- B 赛马:64 匹马找最快 4 匹 中频
- B 不均匀硬币造公平结果 中频
- B 怎么用 Rand7() 实现 Rand10()? 中频
- B 排序算法复杂度与稳定性 中频
- B 哈希表复杂度与冲突解决 中频
- B AVL 树与红黑树的区别 中频
- B LRU Cache:带过期时间 中频
- C 布隆过滤器与误判率 补充