面灵AI→

百度后端一面(70 分钟):分片上传、布隆过滤器与 Agent harness 连环追问

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

《面试题目》

  1. 你的分片上传是怎么做的?是并行还是串行?前后端流程是怎样的?
  2. 一个很大的文件,你怎么判断它该整体上传还是分片上传?最后怎么合并?
  3. 怎么保证分片不重复上传?
  4. 你的布隆过滤器会存在误判吗?为什么会误判?
  5. 为什么使用 Redis 锁?锁的粒度是怎么样的?锁是怎么释放的,不单单是 unlock,具体说一下。
  6. 你的 CI/CD 搭建流程说一下。
  7. 线程池配置怎么配的,是网上的经验还是压测?
  8. 乐观锁、悲观锁说一下。
  9. 线程、协程、进程说一下;进程包含线程,哪些是共享的?
  10. 了解 Go 吗?
  11. Agent harness 怎么理解?好的 harness 为什么可以更长久地运行?
  12. 高风险审批你是怎么做的?如果让你重新做,你会怎么做?
  13. Claude Code 的记忆体系你有没有看过,讲一下。
  14. memory 你在调研时有哪些评测维度?怎么做 memory 的评测回放?
  15. MySQL 的回表讲一下;为什么要用 B 树和 B+ 树?
  16. Redis 的常见数据结构有哪些?
  17. 冒泡排序的复杂度是多少,怎么做可以降低复杂度?什么排序是稳定的?
  18. 如果不用锁怎么实现计数器正确?CAS 了解吗?
  19. 用户态和内核态说一下。
  20. 后端做一个限流有哪几个角度?
  21. RAG 和图 RAG 有什么区别,你如何理解?RAG 的流程说明一下。
  22. 记忆系统里 schema free 和预定义 schema 有什么不同,两种效果详细说说。
  23. TCP、UDP 的区别讲解一下。
  24. 手撕:三数之和。

《参考解析》

分片上传的四件事要答全:切分(固定大小如 5MB,保留文件 MD5 与分片序号)、并发上传(浏览器 Promise.all 限并发、服务端按分片号写对象存储的临时 key)、幂等(按 uploadId + partNumber 覆盖写,重传同片不产生副本)、合并(服务端按 partNumber 顺序拼成最终对象,只做元数据拼接则更快)。判断整体还是分片:按文件大小阈值 + 网络状况 + 是否支持断点续传,小文件直接直传省一次往返。分片不重传靠「秒传 + 断点续传」:上传前用文件 hash 问服务端已存在哪些分片,只补缺的;hash 用增量或抽样(首尾 + 中间块)降低计算成本。

布隆过滤器一定有误判、但不能漏判:k 个哈希函数映射到位数组的 k 个位置置 1,查询时全为 1 才「可能存在」;误判来自哈希碰撞导致别的元素把位占了,位数组越满(元素数接近容量)误判率越高,公式约 (1-e^(-kn/m))^k,所以要和业务约定可接受误判率来定 m 与 k。它不支持删除(计数布隆才能删),这也是它适合「拦截不存在的 key」而不适合做权限白名单的原因。

Redis 锁的释放要讲原子性:不能「先 GET 判断是我的再 DEL」,中间会过期或被别人抢到,必须用 Lua 脚本把「值等于我的 token 才删」做成原子操作;更进一步是看门狗续期(Redisson)防止业务没跑完锁先过期。锁粒度按「保护的最小临界区」定:按商品 ID / 用户 ID 分段加锁,别用一把全局锁;能靠数据库唯一约束或乐观锁版本号解决的就别上分布式锁。

Agent harness 这题答「它是什么 + 好在哪」:harness 是模型外面那层执行框架——工具注册与调用、上下文拼装与压缩、错误重试与回滚、权限与审批、状态持久化、可观测性。好的 harness 让「长任务不掉线」:把状态写到磁盘而不是只放上下文、把大工具结果摘要后再入上下文、失败步骤可重放、把需要人确认的动作挂起而不是猜。高风险审批的做法是「按动作分级 + 白名单 + 事后审计」:写文件、执行命令、发外部请求这类不可逆动作先暂停等确认,确认信息里必须带具体参数;重做时我会把审批规则配置化、并记录每次决策以便复盘。

memory 评测的维度:检索准确率(该想起的想起了没)、时效性(旧信息是否被覆盖)、冲突处理(新旧矛盾时选谁)、冗余度(上下文膨胀)、成本(token 与延迟)、以及端到端的任务成功率;回放的做法是构造「多轮对话脚本 + 期望记忆点」,固定模型与参数重放,比对检索结果和最终回答,用规则 + LLM 双判。

schema free vs 预定义 schema:前者(JSON / 文档存储)写入灵活、加字段不用迁移,但检索靠语义相似度、容易把无关信息混进来;后者字段固定、可精确查询与打分、压缩好,但需求变化要迁移。实践上常混合:核心字段(时间、实体、类型)结构化,内容与备注走自由文本。

八股要点速记:回表是二级索引只存主键、要按主键再查一次聚簇索引,覆盖索引可以避免;B+ 树比 B 树矮胖(非叶子只存键)、叶子有链表便于范围扫,所以适合磁盘。不用锁做计数器用 CAS 自旋(AtomicInteger / compareAndSwap),要注意 ABA(加版本号)与自旋开销。限流的角度:计数 / 滑动窗口、令牌桶、漏桶、并发数(信号量)、按用户 / IP / 接口分级,位置可放在网关、服务内或 Redis 集中式。协程是用户态轻量线程、由调度器在用户态切换,进程是资源分配单位、线程是调度单位,同进程线程共享堆、全局变量、文件描述符,独享栈、寄存器、errno。