TikTok 最新 OA 复盘:4 大高频题型拆解 + Python 实战模板 + 2026 上岸案例(字节跳动在线笔试)
面经来源:一亩三分地匿名帖(2025-09-22)
关键词:TikTok OAByteDance 在线笔试字符串模拟矩阵枚举单调栈
目录
- 这份 OA 到底在考什么
- 题型 1:字符串规则变换(模拟)
- 题型 2:来回移动过程(方向与边界)
- 题型 3:矩阵图案变换(枚举 + 最优)
- 题型 4:最大“容纳面积”(单调栈)
- 2026 上岸案例:17 天拿下 TikTok 面试
- 7 天冲刺执行方案
- 立即预约一对一诊断
- 面试救急
这份 OA 到底在考什么
这次 TikTok OA 的信息很典型:题面不一定难,但对实现完整性要求极高。核心筛选维度不是“会不会算法”,而是:
- 你能否把规则翻译成稳定代码。
- 你能否在边界条件下不出错。
- 你能否在有限时间里做出可验证的实现。
一句话总结:中等算法 + 高强度工程细节。
题型 1:字符串规则变换(模拟)
这类题关键不是技巧,而是“规则驱动 + 单次遍历 + 可回退”。
def transform(s: str) -> str:
"""
示例规则(按真实题面替换):
1) '^x':输出 x 的大写
2) '*' :复制上一个已输出字符
3) '!' :删除上一个已输出字符
4) 其他字符:原样输出
"""
out = []
i = 0
n = len(s)
while i < n:
ch = s[i]
if ch == "^" and i + 1 < n:
out.append(s[i + 1].upper())
i += 2
elif ch == "*":
if out:
out.append(out[-1])
i += 1
elif ch == "!":
if out:
out.pop()
i += 1
else:
out.append(ch)
i += 1
return "".join(out)
高频失分点:
- 指针
i增量不一致导致漏读或死循环。 - 删除/复制时没有判空。
- 先后顺序写反,结果和题面不一致。
题型 2:来回移动过程(方向与边界)
这是典型“方向状态机”问题。建议固定三元组:位置 pos、方向 dir、下一步 nxt。
def simulate(n: int, steps: int, start: int = 0) -> int:
"""
在线段 [0, n-1] 上移动,触边反弹,返回最终位置。
"""
pos = start
direction = 1 # 1 向右, -1 向左
for _ in range(steps):
nxt = pos + direction
if nxt < 0 or nxt >= n:
direction *= -1
nxt = pos + direction
pos = nxt
return pos
高频失分点:
- 到边界时“先反向再走”还是“先走再反向”没对齐题意。
n=1这类退化输入没单独验证。- 循环次数和状态更新顺序写错。
题型 3:矩阵图案变换(枚举 + 最优)
这类题核心是“把目标图案函数化”,然后在候选方案中取最优。
from typing import List
def rotate90(mat: List[List[str]]) -> List[List[str]]:
n = len(mat)
return [[mat[n - 1 - c][r] for c in range(n)] for r in range(n)]
def cost_to_x_pattern(grid: List[List[str]], diag_val: str) -> int:
"""
目标图案:主对角线 + 副对角线为 diag_val,其余为另一个字符
"""
n = len(grid)
other = "1" if diag_val == "0" else "0"
cost = 0
for r in range(n):
for c in range(n):
expected = diag_val if (r == c or r + c == n - 1) else other
if grid[r][c] != expected:
cost += 1
return cost
def min_cost_all_rotations(grid: List[List[str]]) -> int:
best = float("inf")
cur = grid
for _ in range(4):
best = min(best, cost_to_x_pattern(cur, "0"), cost_to_x_pattern(cur, "1"))
cur = rotate90(cur)
return best
高频失分点:
- 行列下标写反。
- 旋转后矩阵覆盖错误。
- “最小代价”只算了一种图案,漏枚举。
题型 4:最大“容纳面积”(单调栈)
面经里这题本质是直方图最大矩形变体。标准解法是单调递增栈,时间复杂度 O(n)。
from typing import List
def largest_rectangle_area(heights: List[int]) -> int:
stack = [] # 存索引,保证对应高度递增
ans = 0
arr = heights + [0] # 哨兵,触发清栈
for i, h in enumerate(arr):
while stack and arr[stack[-1]] > h:
mid = stack.pop()
left = stack[-1] if stack else -1
width = i - left - 1
ans = max(ans, arr[mid] * width)
stack.append(i)
return ans
高频失分点:
- 宽度公式写错:
i - left - 1。 - 忘记加哨兵,尾部柱子没结算。
>和>=选错导致重复高度处理异常。
2026 上岸案例:17 天拿下 TikTok 面试
候选人:L 同学(化名),杭州,3 年 Python 后端,目标岗位 TikTok Data Infra。 起点:OA 模拟正确率 52%,主要问题是模拟题边界漏判。 我们服务介入时间:2026-01-29。 执行路径:
- 第 1 天:90 分钟全量诊断,建立“题型-错误模式”映射。
- 第 2-10 天:每天 2 题高频模拟 + 1 次代码复盘。
- 第 11-14 天:单调栈、矩阵枚举专项纠偏。
- 第 15-17 天:两轮 OA 全真计时演练。
结果:
- 2026-02-15 完成 TikTok OA,4 题通过 4 题。
- 2026-02-27 进入技术面试流程。
- 2026-03-21 拿到录用结果(平台工程方向)。
这类上岸不是“刷题更多”,而是“错误更少 + 输出更稳”。
7 天冲刺执行方案
- 第 1 天:只做字符串与模拟,建立统一模板。
- 第 2 天:边界专项,专练极小输入与退化输入。
- 第 3 天:矩阵枚举题,要求每题写出
check()函数。 - 第 4 天:单调栈模板默写 + 变体 3 题。
- 第 5 天:混合套题计时 90 分钟。
- 第 6 天:错题重做,只看自己错因标签。
- 第 7 天:全真 OA 演练,提交前做 3 分钟边界审计。
立即预约一对一诊断
你可以把最近一次 OA 代码直接带来,我会按真实面试官标准给出可落地修正方案。
面试救急
笔试倒计时 72 小时内,建议直接走“面试救急”通道:
- 90 分钟极速问题定位。
- 4 类高频题现场手写纠偏。
- 给出你下一场 OA 的逐分钟作答策略。