万类智生 AI Agent开发 一面

1. 自我介绍

2. HTTP 请求正文包含哪些内容

HTTP 请求正文就是 body,通常出现在 POSTPUTPATCH 这类请求里。它承载的是业务数据,具体格式由 Content-Type 决定。常见的有:

  • application/json:最常见,适合接口调用和 Agent 服务通信
  • application/x-www-form-urlencoded:表单编码
  • multipart/form-data:上传文件、图片、附件
  • text/plain:纯文本
  • application/octet-stream:二进制流

比如一个 Agent 问答接口,请求正文常见长这样:

POST /api/agent/chat HTTP/1.1
Content-Type: application/json

{
  "session_id": "s_1001",
  "query": "帮我总结这份文档",
  "stream": true,
  "tools": ["search", "retrieval", "python"]
}

3. Redis 中常用的数据结构

Redis 常用的数据结构有五个核心类型:StringHashListSetZSetString 适合做缓存、计数器、分布式锁;Hash 适合存对象,比如用户会话信息;List 适合消息队列、任务队列;Set 适合去重、标签集合;ZSet 适合排行榜、延迟任务、优先级队列。

在 AI Agent 场景里,Redis 很常用于:

  • 缓存会话上下文
  • 存工具调用状态
  • 存 SSE 流式结果片段
  • 做分布式锁
  • 做任务队列和延迟重试

比如缓存会话:

import redis, json

r = redis.Redis(host='localhost', port=6379, decode_responses=True)

session_key = "agent:session:s_1001"
messages = [
    {"role": "user", "content": "帮我查一下北京天气"},
    {"role": "assistant", "content": "正在为你查询"}
]

r.set(session_key, json.dumps(messages), ex=3600)

4. 有序集合 ZSet 的底层数据结构

Redis 的有序集合 ZSet 底层不是单一结构,而是组合实现。通常由 跳表 skiplist + 哈希表 dict 组成。哈希表负责根据 member 快速查 score,时间复杂度接近 O(1);跳表负责按 score 排序,支持范围查询、排名查询,复杂度通常是 O(logN)

所以 ZSet 很适合这种场景:

  • 按时间排序的消息流
  • Agent 工具调用优先级队列
  • 热度榜
  • 延迟任务调度

示例:

r.zadd("agent:task_queue", {
    "task_1001": 1712001000,
    "task_1002": 1712001100
})

# 取最早到期任务
tasks = r.zrange("agent:task_queue", 0, 0, withscores=True)
print(tasks)

5. TCP 和 UDP 的区别

TCP 是面向连接、可靠传输、字节流协议,保证数据不丢、不乱序、不重复,适合对可靠性要求高的场景,比如 HTTP/1.1、数据库连接、文件传输。UDP 是无连接、不保证可靠、面向报文的协议,特点是轻量、开销小、延迟低,适合实时性强的场景,比如音视频、实时语音、游戏同步。

核心区别主要在这几个点:

  • TCP 需要三次握手,UDP 不需要
  • TCP 有重传、确认、流量控制、拥塞控制,UDP 默认没有
  • TCP 保证顺序和完整性,UDP 不保证
  • UDP 更适合低延迟场景

AI Agent 里,如果是普通问答接口一般还是 HTTP/TCP;如果是实时语音 Agent、实时多模态交互,UDP 相关协议价值更大。

6. 用 UDP 如何实现 TCP

UDP 本身不可靠,但可以在应用层补齐 TCP 的关键机制,让它“像 TCP 一样工作”。核心就是自己实现:

  • 序列号:解决乱序问题
  • ACK 确认:确认哪些包收到了
  • 超时重传:丢包后重新发送
  • 滑动窗口:控制发送速率
  • 流量控制:避免接收端被压垮
  • 拥塞控制:避免网络拥塞
  • 校验和:校验数据正确性

这也是很多基于 UDP 的可靠传输协议的思路,HTTP/3 底层的 QUIC 本质上就是在 UDP 之上自己实现了可靠传输、多路复用和加密握手。

一个极简版思路如下:

# 伪代码:发送端
packet = {
    "seq": 1001,
    "data": "hello"
}
send(packet)

start_timer(seq=1001)

if timeout(seq=1001):
    resend(packet)

# 接收端
if packet.seq == expected_seq:
    deliver(packet.data)
    send_ack(packet.seq)
    expected_seq += 1
else:
    cache_or_drop(packet)

7. HTTP/3 了解吗

HTTP/3 是 HTTP 协议的一个新版本,它不再基于 TCP,而是基于 QUIC,而 QUIC 是跑在 UDP 上的。HTTP/3 的重点不是只换了个底层协议,而是把过去 TCP + TLS + HTTP/2 里一些问题重新设计了,尤其是连接建立延迟、多路复用阻塞和弱网恢复能力。

它的几个关键特点是:

  • 基于 QUIC,底层走 UDP
  • 默认集成 TLS 1.3
  • 建连更快
  • 多路复用更彻底,减少队头阻塞
  • 更适合弱网、移动网络和高丢包场景

如果 AI Agent 产品有大量流式输出、移动端接入、实时交互,HTTP/3 的价值会比传统 HTTP/1.1 更明显。

8. HT

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

AI-Agent面试实战专栏 文章被收录于专栏

本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.

全部评论

相关推荐

从一月份开始准备项目,到不断地整理简历背诵八股,整理面经。学习牛客等平台面试经验,刷Leetcode,CodeTop,再到开学后不断的投递简历,不断地面试/笔试。终于在这一周结束了所有的流程,恭喜自己,也感谢字节的收留,终于终于。我的实习春招告一段落,有了去处。给字节的效率点一个大大的赞,也给字节的面试官点一个大大的赞!速度真的很快,每次也真的可以学到很多!先讲一下个人整个的流程吧二月底的时候在BOSS直聘上被字节HR直接打电话邀请面试,但是那会儿由于个人觉得自己的准备状况还不足以支撑大厂,而且Leetcode和八股什么的还没有背得很充分,所以拒绝了。过了一周到两周后,字节的另外一个部门的差说他的同事把我的简历给了,他邀请我面试个人觉得准备的已经差不多了,便约了几天后进行面试。✅3月18日一面 第二天约二面✅3月20日二面 三十分钟约三面✅3月24日三面 第二天约HR面✅3月25日HR面✅3月27 OC+offer+背调由于非常感谢这一次面试。也是为了遵循规定。遵守面试承诺。所以这边的面经就不详细展开发了,简单地说一下每一轮面试的侧重点,第一轮面试面试官非常好,侧重基础,并且耐心的询问每个八股底层和个人的知识边界。大概了解了我的每个项目的构成,第二轮面试官非常的友善平和,着重的和我聊了很多项目的细节,并且拓申到了真实的业务场景里,整体来说都是非常好的场景问题,也给了我很多思考,并且给了很多有用的建议,比如我们常用一些组件为什么要这样用。它的底层原理,让我着重地回去深入了解,整体来说学习到了很多。三面的话就主要的是聊一些其他的问题。Hr面就是简单谈谈说规划和入职这些。最后和牛友们分享下个人的准备,希望能帮到有需要的人:项目方面:点评+全栈Agent(自己的原创项目)刷题算法:LeetCode Hot100*3,着重刷了下CodeTop前两页,自己整理了一份易错的反复刷八股方面:自己整理了Hot100,着重背了这些,没有完全看小林Coding,然后是一些Agent八股,也是自己整理的。其他准备:面试回答的话术,包括每一次面试完,希望友友们养成复盘的习惯,感觉这个很有帮助。大概就是这么多,目前已经准备拒绝剩下的笔试/面试了,感谢字节的收留,也不留二心了,双向奔赴哈哈哈。希望各位UU加油,早日收获心仪的offer!ps:xhs,mt我恨你们,简历都给我直接筛了。我去字节不会想你们的!
点赞 评论 收藏
分享
查看7道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务