TikTok AI后台开发二面

TikTok · AI后台开发 · 二面 · 2026-04

面试题目

一、经历拷打

  1. 实习经历拷打
  2. 项目经历拷打

二、基础知识

  1. MCP 和 Skills 的区别
  2. ping 命令在网络底层做了什么
  3. C 文件编译执行的过程
  4. 协程是什么?Java 里有类似的实现吗?它有什么优点和缺陷?
  5. K8s、Docker 相关问题

三、手撕代码

  1. 手撕 sqrt —— 要求使用牛顿迭代法实现
  2. 手撕 —— 一个人开枪 10 次,总共打了 80 环,问有多少种可能(每次 0~10 环)

参考解析

Q3. MCP 和 Skills 的区别

  • MCP(Model Context Protocol)是一种标准化协议,用于 AI 模型与外部工具/数据源之间的通信,强调上下文传递与工具调用的规范化。
  • Skills 通常指 AI Agent 的能力单元,是对某一具体功能的封装(如搜索、计算),更偏向业务逻辑层。
  • 简言之:MCP 是通信协议层,Skills 是能力实现层。

Q4. ping 命令的网络底层原理

  • ping 基于 ICMP 协议(Internet Control Message Protocol),发送 Echo Request,目标主机返回 Echo Reply。
  • 底层流程:应用层构造 ICMP 报文 → 网络层封装 IP 头 → 数据链路层封装以太网帧 → 经路由转发到目标 → 目标回包,计算 RTT。
  • 不涉及 TCP-UDP,属于网络层协议,可用于测试可达性和延迟。

Q5. C 文件编译执行过程

  • 预处理:展开宏、头文件(#include#define),生成 .i 文件。
  • 编译:将预处理后的代码转为汇编代码,生成 .s 文件。
  • 汇编:将汇编代码转为机器码目标文件,生成 .o 文件。
  • 链接:将多个 .o 文件及库文件合并,生成可执行文件。
  • 执行时由 OS 加载器将程序载入内存,分配栈/堆,跳转到入口点执行。

Q6. 协程及 Java 实现

  • 协程是用户态轻量级线程,切换由程序自身控制,无需内核介入,切换开销极小。
  • 优点:高并发、低开销、避免回调地狱、代码同步风格。
  • 缺点:不能利用多核(单线程协程)、若有阻塞系统调用会卡住整个线程、调试复杂。
  • Java 实现:Project Loom 的虚拟线程(Java 21 正式发布),Thread.ofVirtual() 创建,底层由 JVM 调度,类似协程语义。

Q8. 牛顿迭代法求 sqrt

double mySqrt(double n) {
    double x = n;
    while (Math.abs(x * x - n) > 1e-7) {
        x = (x + n / x) / 2.0;
    }
    return x;
}
  • 核心迭代公式:x_{n+1} = (x_n + n/x_n) / 2,二阶收敛,速度极快。
  • 注意初始值选取和精度终止条件。

Q9. 10 次射击共打 80 环的可能数

  • 每次得分范围 0~10 环,共 10 次,总分 = 80,等价于总分 缺少 20 环(满分 100)。
  • d_i = 10 - x_i,则 d_i ∈ [0,10],求 d_1 + d_2 + ... + d_10 = 20 的非负整数解数。
  • 容斥原理 + 隔板法:先求无上界方案数 C(29,9),再减去至少一个 d_i ≥ 11 的方案数。
  • 至少一个超限:令 d_i' = d_i - 11,方案数 C(10,1)×C(18,9);两个超限:20 - 22 < 0,无解。
  • 答案 = C(29,9) - 10×C(18,9) = 10015005 - 10×48620 = 9528805 种。