📅 2026-07-21 | 🏷️ Python · AI Agent 方向 | ⏱️ 建议 5-6h | 🎯 Python 方向收官——系统设计 + 算法 + 面试软技能


📌 今日知识地图

Python AI/Agent 方向收官日
│
├── 模块一:Agent 系统设计 5 大题
│   ├── ① 多 Agent 智能客服系统
│   ├── ② 企业级 RAG 知识库平台
│   ├── ③ 可扩展 Agent 开发平台
│   ├── ④ Agent 安全体系设计
│   └── ⑤ Computer Use Agent
│
├── 模块二:LeetCode 算法 30 题速刷
│   ├── 数据结构:数组/哈希/链表/栈/堆/树
│   ├── 算法:双指针/滑动窗口/二分/DFS+BFS/DP
│   └── 每类一道代表题 + 思路 + 代码
│
├── 模块三:项目深挖 & 行为面试
│   ├── STAR 法则 + 量化指标模板
│   ├── 常见追问 & 预设答案
│   └── 反问面试官的话术
│
└── 模块四:Python 方向 7 天总复习
    └── 完整知识图谱 + 自测清单

模块一:Agent 系统设计 5 大题

系统设计是面试中区分"会用工具"和"能设计系统"的分水岭。每道题按 需求分析 → 架构设计 → 技术选型 → 关键细节 → 容量估算 五步展开。

题目 1:设计多 Agent 智能客服系统(字节/阿里/腾讯 高频)

需求分析

功能需求:
  - 用户通过 Web/App/企微/飞书 等多个渠道接入
  - 支持售前咨询、售后支持、投诉处理等场景
  - 复杂问题自动升级到人工客服
  - 支持文本、图片、文件等多种消息类型

非功能需求:
  - 响应延迟 < 2s(非流式)/ 首 token < 500ms(流式)
  - 支持 10,000+ 并发用户
  - 准确率 > 90%(自动解决的工单比例)
  - 7×24 小时可用

架构设计

┌─────────────────────────────────────────────────────┐
│                    接入层                             │
│   Web Chat │  App SDK  │  企微/飞书  │  API         │
└──────────────────────┬──────────────────────────────┘
                       │
┌──────────────────────▼──────────────────────────────┐
│                   路由层(Router Agent)              │
│   意图识别 → 场景分类 → 路由到对应的子 Agent          │
│   • 售前咨询 → Sales Agent                          │
│   • 售后支持 → Support Agent                        │
│   • 投诉处理 → Complaint Agent(+ 人工审核)          │
│   • 查订单/查物流 → Order Agent(直接调 API)         │
└──────────────────────┬──────────────────────────────┘
                       │
        ┌──────────────┼──────────────┐
        ▼              ▼              ▼
   Sales Agent   Support Agent   Complaint Agent
   (商品/价格)    (退换/维修)     (投诉/升级)
        │              │              │
        └──────────────┼──────────────┘
                       │
┌──────────────────────▼──────────────────────────────┐
│                  共享能力层                            │
│  ┌──────────┐ ┌──────────┐ ┌──────────────────┐    │
│  │ RAG 知识库│ │ 订单 API │ │ Human Handoff    │    │
│  │(产品文档) │ │(CRM对接) │ │ (飞书/企微通知)   │    │
│  └──────────┘ └──────────┘ └──────────────────┘    │
│  ┌──────────┐ ┌──────────┐ ┌──────────────────┐    │
│  │ 用户画像  │ │ 对话记忆  │ │ 监控 & 评估       │    │
│  │(Redis)   │ │(向量库)   │ │ (LangFuse)       │    │
│  └──────────┘ └──────────┘ └──────────────────┘    │
└─────────────────────────────────────────────────────┘

关键设计决策

1. Router Agent 怎么做意图识别?
   → 轻量模型(GPT-4o-mini)+ Few-shot Prompt 做快速分类
   → 分类结果置信度 < 0.8 时追问用户确认
   → 规则兜底:关键词匹配("退款" → 售后,"多少钱" → 售前)

2. 怎么处理 Agent 回答不了的问题?
   → 三级升级策略:
     Level 1: Agent 自查(换关键词重新检索 RAG)
     Level 2: 追问用户("您是指订单编号 TK2024 吗?")
     Level 3: 升级人工(转接真人客服,附带对话摘要)

3. 怎么保证 RAG 检索的时效性?
   → 商品/价格/政策等信息:定时同步到向量库(5分钟增量更新)
   → 订单/物流等实时信息:不经过 RAG,Agent 直接调 API 查询
   → 知识库更新后自动触发 Re-index

4. 怎么评估客服 Agent 的质量?
   → 自动解决率 = 未升级人工的工单 / 总工单
   → 用户满意度评分(对话结束后打分 1-5)
   → LLM-as-Judge 抽样评估(准确性、礼貌度、效率)

容量估算

假设:10,000 并发用户,平均每用户 5 轮对话

QPS = 10,000 × 5 / 60s ≈ 833 requests/s

LLM API 调用:
  每次对话 = 1 次 Router + 3 次 Agent 决策 + 1 次生成 ≈ 5 次 LLM 调用
  总 LLM 调用 = 833 × 5 ≈ 4,165 次/s
  → 需要 LLM API 的并发限额 > 1,000 RPM

向量检索:
  每次对话 = 2 次 RAG 检索
  每次检索 < 100ms
  → 检索 QPS ≈ 1,666,单节点 ChromaDB/Milvus 可支撑

带宽:
  流式输出,每用户 < 1KB/s → 总带宽 < 10 MB/s

题目 2:设计企业级 RAG 知识库平台(字节/阿里)

┌─────────────────────────────────────────────────────┐
│               数据摄入管道(Ingestion Pipeline)       │
│                                                      │
│  PDF/Word/HTML → 解析器 → 清洗 → Chunking → Embedding│
│                                  │                   │
│                           ┌──────▼──────┐           │
│                           │  父子文档    │           │
│                           │ 子(检索用)   │           │
│                           │ 父(生成用)   │           │
│                           └──────┬──────┘           │
│                                  │                   │
│                    ┌─────────────┼──────────┐       │
│                    ▼             ▼          ▼       │
│              Milvus(向量)   ES(全文)   PostgreSQL   │
│              Dense检索     Sparse检索   (元数据)     │
└─────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────┐
│                   在线查询管道                        │
│                                                      │
│  Query → 改写(HyDE) → Dense检索 → Sparse检索         │
│              │              │            │           │
│              └──────────────┼────────────┘           │
│                             │                        │
│                    RRF 融合 → Top-50                  │
│                             │                        │
│                    Cross-Encoder Rerank → Top-5       │
│                             │                        │
│                    Prompt组装 → LLM生成 → 引用标注    │
└─────────────────────────────────────────────────────┘

关键设计点

1. 多租户隔离:
   → 每个企业/团队一个 Collection(Milvus)/ Index(ES)
   → API Key 绑定租户,检索时只查自己的数据
   → Embedding 模型可租户级别自定义

2. 知识更新策略:
   → 全量更新:周级(适合不频繁变更的知识库)
   → 增量更新:分钟级(适合FAQ、政策文档)
   → 版本管理:每次更新创建新版本,可回滚

3. 权限控制:
   → 文档级别权限(某些文档只有特定部门可检索)
   → 检索时注入权限过滤条件(WHERE department IN (...))
   → 生成时标注来源和权限级别

4. 评估闭环:
   → 离线评估:Recall@K, MRR, NDCG(用标注数据集)
   → 在线评估:用户反馈(点赞/踩)、Ragas Faithfulness
   → A/B 测试:不同 Chunking 策略的效果对比

题目 3:设计可扩展 Agent 开发平台(字节 Coze / 阿里百炼 类)

┌─────────────────────────────────────────────────────┐
│                   用户层                              │
│   Web IDE (低代码)  │  API/SDK  │  CLI              │
└──────────────────────┬──────────────────────────────┘
                       │
┌──────────────────────▼──────────────────────────────┐
│                  Agent 构建层                         │
│  ┌──────────┐ ┌──────────┐ ┌──────────────────┐    │
│  │ Prompt   │ │ 工具绑定  │ │ Memory 配置       │    │
│  │ 编辑器   │ │ (MCP/API)│ │ (短期/长期)       │    │
│  └──────────┘ └──────────┘ └──────────────────┘    │
│  ┌──────────┐ ┌──────────┐ ┌──────────────────┐    │
│  │ 工作流    │ │ 知识库    │ │ 发布 & 版本管理   │    │
│  │ (DAG)    │ │ (RAG)    │ │                  │    │
│  └──────────┘ └──────────┘ └──────────────────┘    │
└──────────────────────┬──────────────────────────────┘
                       │
┌──────────────────────▼──────────────────────────────┐
│                  运行时引擎                           │
│  ┌──────────────────────────────────────────────┐   │
│  │              Agent Executor                    │   │
│  │  ReAct循环 │ 工具调度 │ 记忆管理 │ 错误处理    │   │
│  └──────────────────────────────────────────────┘   │
│  ┌──────────┐ ┌──────────┐ ┌──────────────────┐    │
│  │ 模型路由  │ │ 工具网关  │ │ 上下文管理器      │    │
│  │(多模型)  │ │(限流/鉴权)│ │(Token预算)       │    │
│  └──────────┘ └──────────┘ └──────────────────┘    │
└──────────────────────┬──────────────────────────────┘
                       │
┌──────────────────────▼──────────────────────────────┐
│                  基础设施层                           │
│  ┌──────────┐ ┌──────────┐ ┌──────────────────┐    │
│  │ LLM 网关  │ │ 工具市场  │ │ 可观测性          │    │
│  │(多Provider)│ │(MCP集成) │ │(Trace/Cost)      │    │
│  └──────────┘ └──────────┘ └──────────────────┘    │
└─────────────────────────────────────────────────────┘

关键设计点

1. 工具热插拔:
   → 工具注册中心:每个工具独立 Docker 容器
   → MCP Server 标准化接入(本地 stdio / 远程 SSE)
   → 工具发现:Agent 启动时自动拉取可用工具列表

2. 多模型支持:
   → 模型路由层:根据任务类型自动选模型
     (简单问答→GPT-4o-mini, 复杂推理→Claude Opus, 代码→DeepSeek)
   → Fallback 链:主模型不可用时自动切换备用模型

3. Token 预算管理:
   → 每个 Agent 实例设置 Token 上限(如 100K tokens/次)
   → 接近上限时触发压缩(摘要旧消息)
   → 硬上限到达时优雅终止并返回部分结果

4. 多租户 & 安全:
   → Agent 实例隔离(每个租户独立的执行环境)
   → 工具权限绑定租户(租户A不能调用租户B的数据库工具)
   → 速率限制(每租户每分钟最多 N 次 LLM 调用)

题目 4:Agent 安全体系设计

┌─────────────────────────────────────────────────────┐
│                  Agent 安全体系                       │
│                                                      │
│  第一层 · 输入安全                                    │
│  ┌──────────────────────────────────────────────┐   │
│  │ 输入净化 → 注入检测 → 敏感信息脱敏 → 长度限制  │   │
│  └──────────────────────────────────────────────┘   │
│                         │                            │
│  第二层 · 权限控制                                    │
│  ┌──────────────────────────────────────────────┐   │
│  │ RBAC(角色权限) → 工具分级(读/写/管理)           │   │
│  │ 最小权限原则 → 动态权限(按需申请)               │   │
│  └──────────────────────────────────────────────┘   │
│                         │                            │
│  第三层 · 执行安全                                    │
│  ┌──────────────────────────────────────────────┐   │
│  │ 沙箱隔离(Docker/E2B) → 网络白名单              │   │
│  │ 参数校验(Pydantic) → 操作审计日志               │   │
│  └──────────────────────────────────────────────┘   │
│                         │                            │
│  第四层 · 人工兜底                                    │
│  ┌──────────────────────────────────────────────┐   │
│  │ HITL(高危操作确认) → 异常行为告警              │   │
│  │ 熔断机制(连续失败自动停止) → 回滚能力          │   │
│  └──────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────┘

安全设计自检清单

□ 用户输入是否和 System Prompt 分离?
□ 外部数据(网页/文档)是否经过沙箱解析?
□ 敏感操作(删/改/付费)是否有人工确认?
□ Agent 用的 API Key 是否有最小权限?
□ 日志中敏感信息是否已脱敏?
□ 是否有速率限制防止滥用?
□ 是否有熔断机制(连续 N 次失败 → 停止)?
□ 代码执行是否在独立沙箱中?

题目 5:Computer Use Agent

设计一个能自动操作电脑的 Agent(类 Anthropic Computer Use / OpenAI Operator)

核心流程:
  截图(屏幕状态) → 视觉理解(定位元素) → 操作规划(决定动作)
  → 执行动作(点击/输入/滚动) → 等待结果 → 截图 → 循环

┌──────────────────────────────────────────────┐
│              Computer Use Agent               │
│                                               │
│  ┌──────────┐    ┌──────────┐   ┌─────────┐ │
│  │ 截图模块  │ →  │ 视觉理解  │ → │ 操作规划 │ │
│  │(全屏/区域)│    │(VLM定位) │   │(动作序列)│ │
│  └──────────┘    └──────────┘   └────┬────┘ │
│                                      │       │
│  ┌──────────┐    ┌──────────┐   ┌───▼────┐ │
│  │ 结果验证  │ ←  │ 动作执行  │ ← │ 安全检查 │ │
│  │(是否达成) │    │(pyautogui)│   │(敏感操作)│ │
│  └──────────┘    └──────────┘   └────────┘ │
└──────────────────────────────────────────────┘

关键挑战:
  1. 元素定位:VLM 需要识别屏幕上的按钮/输入框/文字
     → 方案:Set-of-Mark(在截图上叠加可交互元素的标记)
  2. 操作精度:点击坐标偏差几个像素可能点错
     → 方案:Accessibility Tree + 截图双重定位
  3. 安全边界:不能让它随便删文件/发邮件/访问敏感网站
     → 方案:操作白名单 + 敏感操作暂停确认 + 虚拟机隔离
  4. 异步等待:点击后页面加载需要时间
     → 方案:视觉变化检测(等待页面稳定后再截图)

模块二:LeetCode 算法 30 题速刷

AI/Agent 开发的算法面试通常考察中等难度,重点是字符串、哈希表、树、DFS/BFS。以下按类别各选一道代表题。

数据结构类

1. 两数之和 (Two Sum) — 哈希表

def twoSum(nums, target):
    seen = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in seen:
            return [seen[complement], i]
        seen[num] = i
# 时间 O(n), 空间 O(n)

2. LRU 缓存 — 哈希表 + 双向链表

class Node:
    __slots__ = ('key', 'value', 'prev', 'next')
    def __init__(self, k=0, v=0):
        self.key = k; self.value = v; self.prev = self.next = None

class LRUCache:
    def __init__(self, capacity: int):
        self.cap = capacity
        self.cache = {}
        self.head = Node(); self.tail = Node()
        self.head.next = self.tail; self.tail.prev = self.head

    def _remove(self, node):
        node.prev.next, node.next.prev = node.next, node.prev

    def _add_to_head(self, node):
        node.next = self.head.next; node.prev = self.head
        self.head.next.prev = node; self.head.next = node

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        node = self.cache[key]
        self._remove(node); self._add_to_head(node)
        return node.value

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self._remove(self.cache[key])
        node = Node(key, value)
        self.cache[key] = node
        self._add_to_head(node)
        if len(self.cache) > self.cap:
            removed = self.tail.prev
            self._remove(removed); del self.cache[removed.key]

3. 反转链表 — 链表基础

def reverseList(head):
    prev, curr = None, head
    while curr:
        nxt = curr.next; curr.next = prev
        prev = curr; curr = nxt
    return prev

4. 有效的括号 — 栈

def isValid(s):
    pairs = {')': '(', ']': '[', '}': '{'}
    stack = []
    for c in s:
        if c in pairs:
            if not stack or stack.pop() != pairs[c]:
                return False
        else:
            stack.append(c)
    return not stack

5. 二叉树的层序遍历 — BFS

from collections import deque

def levelOrder(root):
    if not root: return []
    result, q = [], deque([root])
    while q:
        level = [node.val for node in q]
        result.append(level)
        for _ in range(len(q)):
            node = q.popleft()
            if node.left: q.append(node.left)
            if node.right: q.append(node.right)
    return result

算法类

6. 无重复字符的最长子串 — 滑动窗口

def lengthOfLongestSubstring(s):
    seen, left, max_len = {}, 0, 0
    for right, c in enumerate(s):
        if c in seen and seen[c] >= left:
            left = seen[c] + 1
        seen[c] = right
        max_len = max(max_len, right - left + 1)
    return max_len

7. 三数之和 — 排序 + 双指针

def threeSum(nums):
    nums.sort()
    res, n = [], len(nums)
    for i in range(n - 2):
        if i > 0 and nums[i] == nums[i-1]: continue
        left, right = i + 1, n - 1
        while left < right:
            total = nums[i] + nums[left] + nums[right]
            if total < 0: left += 1
            elif total > 0: right -= 1
            else:
                res.append([nums[i], nums[left], nums[right]])
                while left < right and nums[left] == nums[left+1]: left += 1
                while left < right and nums[right] == nums[right-1]: right -= 1
                left += 1; right -= 1
    return res

8. 岛屿数量 — DFS/BFS

def numIslands(grid):
    if not grid: return 0
    rows, cols, count = len(grid), len(grid[0]), 0

    def dfs(r, c):
        if 0 <= r < rows and 0 <= c < cols and grid[r][c] == '1':
            grid[r][c] = '0'
            for dr, dc in [(1,0),(-1,0),(0,1),(0,-1)]:
                dfs(r+dr, c+dc)

    for r in range(rows):
        for c in range(cols):
            if grid[r][c] == '1':
                count += 1; dfs(r, c)
    return count

9. 爬楼梯 — 动态规划

def climbStairs(n):
    if n <= 2: return n
    a, b = 1, 2
    for _ in range(3, n + 1):
        a, b = b, a + b
    return b

10. 全排列 — 回溯

def permute(nums):
    res = []
    def backtrack(path, used):
        if len(path) == len(nums):
            res.append(path[:]); return
        for i, n in enumerate(nums):
            if used[i]: continue
            used[i] = True; path.append(n)
            backtrack(path, used)
            path.pop(); used[i] = False
    backtrack([], [False] * len(nums))
    return res

速刷清单(30 题)

必刷(按出现频率排序):
□ 1. 两数之和           □ 11. 最大子数组和
□ 2. LRU 缓存           □ 12. 合并区间
□ 3. 反转链表           □ 13. 二叉树的最近公共祖先
□ 4. 有效的括号         □ 14. 二分查找
□ 5. 层序遍历           □ 15. 岛屿数量
□ 6. 最长无重复子串     □ 16. 爬楼梯
□ 7. 三数之和           □ 17. 全排列
□ 8. 接雨水             □ 18. 环形链表
□ 9. K 个一组翻转链表   □ 19. 最长回文子串
□ 10. 买卖股票最佳时机  □ 20. 搜索旋转排序数组

选刷(有余力):
□ 21. 字符串相加        □ 26. 二叉树的直径
□ 22. 比较版本号        □ 27. 打家劫舍
□ 23. 最小栈            □ 28. 零钱兑换
□ 24. 前 K 个高频元素   □ 29. 课程表(拓扑排序)
□ 25. 二叉树的右视图    □ 30. 单词搜索

模块三:项目深挖 & 行为面试

3.1 STAR 法则

S — Situation(背景)  :项目背景,解决什么问题
T — Task(任务)       :你的角色和职责
A — Action(行动)     :你做了什么,技术决策和理由
R — Result(结果)     :量化成果(数字!)

错误示例(没有 STAR):
  "我做过一个智能客服系统,用了 LangChain 和 RAG。"

正确示例(STAR + 量化):
  "S: 公司客服团队 50 人,每天处理 2000+ 工单,人工成本高且响应慢。
   T: 我作为项目技术负责人,负责设计和实现智能客服 Agent 系统。
   A: 我设计了 Router + 子 Agent 的多 Agent 架构,Router 用轻量模型做意图分类,
      子 Agent 各自绑定专属工具和 RAG 知识库。RAG 采用父子文档策略提升检索精度,
      引入 Rerank 精排,关键操作(退款、删单)加了 Human-in-the-loop。
   R: 上线后自动解决率 73%,人工工单减少 60%,用户满意度从 3.8 提升到 4.3,
      Token 成本控制在 ¥0.15/对话。"

3.2 常见追问 & 预设答案

追问 回答方向
“为什么用 X 而不用 Y?” 场景对比:X 在 A 方面比 Y 好,我们的核心需求正是 A。提一下 Y 在其他场景的适用性表示了解。
“遇到的最大挑战是什么?” 技术挑战(不是"需求变更"这种万金油)+ 你的解决思路 + 反思收获
“如果重新做,会怎么改进?” 展示成长:现在知道了 X,当时如果有 Y 会更好,具体说哪里会不一样
“怎么衡量项目效果?” 上线前后的数据对比 + 用户反馈 + 业务指标
“团队有分歧怎么办?” 数据驱动决策(做 A/B 测试对比),而非谁职位高听谁的

3.3 反问面试官的话术

不要问:
  ✗ "公司福利怎么样?"(问 HR,别问面试官)
  ✗ "我能拿多少钱?"(问 HR)
  ✗ 官网能查到的问题

可以问:
  ✓ "团队目前的技术栈是怎么样的?Agent 相关的技术债主要在哪些方面?"
  ✓ "团队目前在 Agent 方向上最大的技术挑战是什么?"
  ✓ "团队是怎么评估 Agent 产品的效果的?有专门的评估体系吗?"
  ✓ "这个岗位前 3 个月的预期产出是什么?"

模块四:Python AI/Agent 方向 7 天总复习

4.1 完整知识图谱

Python AI/Agent 面试知识体系(7天)
│
├── Day 1 · Python 基础
│   ├── GIL / GC / is vs == / 深浅拷贝 / 可变vs不可变
│   ├── 装饰器(手写) / 闭包陷阱 / *args **kwargs
│   ├── MRO & super / __new__ vs __init__ / 元类
│   ├── 迭代器 vs 生成器 / yield from
│   ├── asyncio (gather/create_task/as_completed)
│   └── Pydantic BaseModel / typing
│
├── Day 2 · 工程化
│   ├── FastAPI (路由/Depends/中间件/生命周期)
│   ├── SQLAlchemy 2.0 async (selectinload防N+1)
│   ├── Redis (5结构/穿透击穿雪崩/分布式锁Lua)
│   ├── Docker多阶段构建 / Gunicorn+Nginx
│   └── pytest (fixture作用域/TestClient/mock)
│
├── Day 3 · LLM 基础
│   ├── Self-Attention推导(手写) / MHA→MQA→GQA
│   ├── RoPE (旋转位置编码+长度外推)
│   ├── Pre-Norm vs Post-Norm / SwiGLU
│   ├── RLHF三阶段 / DPO / GRPO
│   ├── KV Cache / Flash Attention / 量化
│   ├── MoE(稀疏激活) / Top-P+Temperature
│   └── 评估 (MMLU/HumanEval/AgentBench)
│
├── Day 4 · Agent 核心
│   ├── ReAct = Reasoning + Acting (手写实现)
│   ├── Function Calling (LLM输出JSON→代码执行)
│   ├── Planning(分解/反思/自适应)
│   ├── Memory(短期/工作/长期三层)
│   ├── Tools(六大设计原则)
│   └── 决策策略对比 (ReAct/P&E/Reflexion/LATS)
│
├── Day 5 · RAG
│   ├── RAG流水线 / vs微调 / vs Long Context
│   ├── Chunking五策略 / 父子文档(生产推荐)
│   ├── Embedding选型 / 向量库对比
│   ├── 混合检索(Dense+Sparse+RRF)
│   ├── Rerank(Cross-Encoder) / HyDE
│   ├── Lost in the Middle / 上下文压缩
│   └── Agentic RAG (Self-RAG/Corrective RAG)
│
├── Day 6 · 进阶
│   ├── Multi-Agent四模式 / CrewAI/AutoGen/LangGraph
│   ├── MCP (Tool/Resource/Prompt三层)
│   ├── A2A (Agent↔Agent vs MCP的LLM↔工具)
│   ├── Prompt Injection (三层攻击+五层防御)
│   ├── 可观测性 (Trace/Metrics/Logs)
│   └── SSE流式输出 (StreamingResponse+Nginx配置)
│
└── Day 7 · 收尾
    ├── 系统设计5大题
    ├── LeetCode 30题速刷
    ├── STAR法则 + 追问应对
    └── 完整知识图谱自测

4.2 自测清单(面试前一天对着过一遍)

Python 基础
□ GIL 是什么?CPU 密集和 IO 密集分别怎么处理?
□ is vs == 区别?什么时候必须用 is?
□ 深拷贝和浅拷贝区别?默认参数陷阱怎么修复?
□ 装饰器怎么写?带参数和不带参数的有什么区别?
□ asyncio 的 gather 和 create_task 有什么区别?
□ Pydantic 的 model_validator 和 field_validator 有什么区别?

LLM 基础
□ 推导 Self-Attention,为什么除以 sqrt(d_k)?
□ MHA / MQA / GQA 的区别?LLaMA 为什么用 GQA?
□ RoPE 为什么能外推到更长序列?
□ RLHF 三阶段流程?KL 惩罚项为什么重要?
□ DPO 和 PPO 的区别?GRPO 的创新点?
□ KV Cache 和 Flash Attention 各自解决什么问题?
□ MoE 的核心思想?DeepSeek MoE 有什么创新?

Agent 核心
□ ReAct 框架的 Thought → Action → Observation 循环?
□ Function Calling 中 LLM 真的调用了函数吗?
□ Agent 四要素(Planning/Memory/Tools/Action)各自职责?
□ 记忆系统的三层设计?什么时候触发压缩?
□ 工具调用失败怎么处理?(校验→重试→Fallback)
□ 怎么防止 Agent 死循环?

RAG
□ Chunking 五种策略?父子文档为什么是生产推荐?
□ 混合检索是什么?为什么需要 Rerank?
□ Lost in the Middle 怎么缓解?
□ Self-RAG 和传统 RAG 的核心区别?

进阶
□ Multi-Agent 四种协作模式及框架选型?
□ MCP 和 A2A 分别解决什么问题?本质区别?
□ Prompt Injection 的防御体系?
□ SSE 流式输出 Nginx 需要注意什么?

系统设计
□ 多 Agent 客服系统的架构能画出来吗?
□ RAG 知识库平台的数据流能讲清楚吗?
□ STAR 法则准备好了吗?每个项目有量化数据吗?

面试题精选(系统设计 + 行为 5 道)

Q1. 设计一个多 Agent 客服系统(字节 系统设计高频)

见上文题目 1。核心考察:Router 设计、升级策略、评估体系。

Q2. RAG 系统的 Chunking 策略怎么选?父子文档怎么实现?

标准回答

通用场景用递归分割(RecursiveCharacterTextSplitter)做 baseline。对精度要求高 → 父子文档:子文档 200 字符用于检索(精确匹配),父文档 1000 字符用于生成(完整上下文)。实现上,检索时用子文档的 Embedding 做向量匹配,返回对应的父文档给 LLM。存储时建立 child_chunk_id → parent_chunk_id 的映射。

Q3. Agent 的可扩展性怎么设计?(字节/阿里)

标准回答

三个层面:① 工具热插拔(MCP 标准化接入,注册中心自动发现);② 模型路由(按任务类型+成本+延迟自动选模型,主模型挂掉自动 Failover);③ 多租户隔离(每租户独立的 Agent 实例、工具权限、速率限制、Token 预算)。

Q4. 如果让你重新做这个项目,会怎么改进?

标准回答

以 RAG 系统为例:“当时用的是固定大小 Chunking,现在我会用父子文档策略提升检索精度。当时没有 Rerank,检索到的 Top-5 里有 30% 是不相关的噪声,现在会加 Cross-Encoder 精排。当时没有评估体系,上线后才发现检索质量在中文文档上比英文差很多——现在会先建标注数据集,每次变更前跑离线评估。”

Q5. 介绍一下你最自豪的项目?

标准回答

STAR 法则 + 量化数据 + 技术决策的 trade-off。重点不是项目有多大,而是你为什么做那些技术选择。面试官想听到的是"我选了 X 因为 A,放弃了 Y 因为 B,最终数据证明这个选择是对的/如果再来一次我会选 Z"。


📊 Python AI/Agent 方向 7 天总数据

总博客行数:5,500+ 行
总内容量:约 120,000+ 字
覆盖面试题:60+ 道(含公司标签)
代码实战练习:25+ 道
系统设计题:5 道完整方案
知识图谱节点:200+ 个

🔜 明日预告

Day 8 — Java 基础 + 集合框架全通

Python 方向完结!明天开始 Java 后端 7 天速通:

  • Java 语言特性 + 8 种基本类型 + 自动装箱拆箱(IntegerCache)
  • String/StringBuffer/StringBuilder + 字符串常量池
  • OOP(封装/继承/多态)+ 重载 vs 重写 + 抽象类 vs 接口
  • 集合源码深挖:ArrayList/HashMap 1.8/ConcurrentHashMap/LinkedHashMap(LRU)
  • 泛型类型擦除 + 反射 + 动态代理 + 注解
  • IO/NIO(BIO/NIO/AIO 区别 + Buffer/Channel/Selector)
  • 10 道 Java 基础 + 集合高频真题

💡 7 天 Python 方向收官:从 Python 基础语法到企业级 Agent 系统设计,这 7 天你走完了别人 3 个月的自学路径。关键不在于记住了多少细节,而在于建立了完整的知识框架——面试官问任何一个点,你都能定位到它在知识图谱中的位置,并展开说 3-5 分钟。明天 Java 方向,同样的方法,7 天速通!

更多推荐