面灵AI→

字节跳动 广告后端 一面:RPM/TPM、Agent 记忆与括号生成

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. RPM、TPM 如何计算和控制?
  2. TPM 的前置检查是否过于宽松?
  3. 为什么不用输入 Token 预扣?
  4. 项目拷打:你负责的部分和关键取舍是什么?
  5. Skill 的作用是什么?Agent 已经有提示词,为什么还需要 Skill?
  6. 工具调用由代码、Agent 还是 LLM 决定?哪些情况下由 LLM 自主决定调用?
  7. Agent 的记忆机制如何实现?
  8. 使用 Redis 的意义是什么?LLM 耗时是秒级,缓存节省毫秒级还有什么价值?
  9. 代码题:LeetCode 22《括号生成》,先说解题思路。

《参考解析》

RPM/TPM 限流:RPM 是每分钟请求数,TPM 是每分钟 Token 数。控制方式可以是固定窗口、滑动窗口、令牌桶或漏桶;分布式环境用 Redis + Lua 保证原子性,按用户/租户/模型多维度限流。TPM 的难点是 Token 数在请求前未知,常见做法是先按输入 Token 估算预占,生成过程中再按实际用量结算;前置检查如果只看历史均值,确实会放过突发大请求。为什么不用输入 Token 预扣?因为输出 Token 才是大头且不可预知,预扣过多会误伤,预扣过少会超卖;更稳的是「输入预扣 + 输出上限预留 + 事后结算 + 租户配额」。

Skill 与工具调用:提示词是常驻的行为约束,Skill 是按需加载的任务方法论,包含步骤、工具用法、边界和示例,能避免把所有领域知识都塞进系统提示。工具调用可以由代码编排(固定流程)、Agent 规划(多步任务)或 LLM 自主决定(开放式探索)。高风险写操作、涉及权限和金钱的调用应由代码或人确认,低风险只读查询可以放开给 LLM。

Agent 记忆与 Redis:记忆可以分为对话缓冲、摘要记忆、结构化事实和向量检索记忆;短期放 Redis,长期放数据库/向量库,按重要性和时间淘汰。Redis 节省的是每次请求的往返和数据库压力,LLM 总耗时秒级不代表缓存没价值:高并发下省下的连接、带宽和尾延迟会放大,缓存还能挡住热点 key 和重复计算;但缓存要考虑一致性、击穿和内存成本。

括号生成:回溯,维护 open、close 和当前字符串;只要 open < n 就可以放左括号,只要 close < open 就可以放右括号,结束时收集。复杂度是第 n 个卡特兰数,空间是递归深度 O(n)。先说思路再写代码,写完跑 n=0、1、3 的边界。