帆软后端一面:半小时、没怎么问八股的一场
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 问实习,最难的一个需求是什么?
- AI 代码怎么保证正确?
- 两个 Agent 怎么通信?
- Agent 开子任务,用多线程还是多进程,为什么?
- 手撕:一个数组,和为 0 的子数组有多少个?
《参考解析》
「最难的需求」要选一个有技术取舍的:比如并发下的数据一致性、长任务的超时与重试、或者一次性能优化。讲清楚约束(数据量、延迟要求)、你考虑过的方案、为什么选这个、结果指标。
AI 代码的正确性靠三层:类型检查和 lint 拦住低级错误;测试覆盖关键路径和边界;人工 review 核心逻辑并在真实环境验证。再加一条:让 AI 先写测试再写实现,验收标准前置。
两个 Agent 通信常见三种:共享状态(数据库/Redis/消息队列)、直接调用(HTTP/gRPC)、消息总线(发布订阅)。选择看是否需要解耦、是否需要重放、以及延迟要求。
子任务用多线程还是多进程:IO 密集型(等模型返回、等网络)用多线程或协程,开销小、切换快;CPU 密集型(本地推理、大量计算)用多进程绕开 GIL 或利用多核。Python 里还要考虑 GIL,真正的并行计算只能靠多进程或原生扩展。
和为 0 的子数组个数:用前缀和 + 哈希表,遍历时把当前前缀和的出现次数记下来,答案累加 count[prefix],时间 O(n)、空间 O(n)。注意初始化 count[0] = 1。