网易互娱 AI 应用开发实习一面凉经
- 轮次
- 一面
- 结果
- 已挂
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
Agent 项目
- 现场画出 Agent 的整体架构和工作流程图。
- 顺着流程图继续追问:内部运行流程是怎么设计的?
Python 并发
- Python GIL 锁是什么?
- 异步并发和同步并发有什么区别?
操作系统
- 进程和线程有什么区别?
- 僵尸进程是怎么产生的?
计算机网络
- 介绍一下 HTTPS 协议及相关原理。
推荐算法
- 微信推荐场景中的排序算法相关问题。
算法基础
- 快速排序的原理与实现。
Agent Memory
- Agent 中的长期记忆是怎么实现的?
- Memory 的遗忘机制应该怎么处理?
个人项目
- 简历中的个人项目具体是怎么实现的?
反问环节
- 反问环节。
《参考解析》
把 Agent 架构画成一条能讲 10 分钟的数据流。 面试要求现场画图,说明对方想验证的是你对自己系统的真实掌控,而不是概念复述。建议按「输入 → 编排 → 能力 → 记忆 → 输出 → 观测」六层来画:入口负责会话管理与意图澄清,编排层(Planner/Workflow)决定是单轮直答还是多步规划,能力层包含工具/函数调用、检索与外部系统对接,记忆层分成短期上下文与长期存储,输出层处理流式返回与格式化,横切的是日志、Trace、评测与成本控制。画的时候标出每一层的关键取舍:为什么用工作流而不是纯 ReAct、工具集怎么裁剪、上下文超限怎么截断、失败怎么重试与兜底。追问通常集中在「并发时同一会话怎么保证顺序」「工具报错模型怎么恢复」「多轮任务中间状态存在哪」,提前准备这三问的答案,基本能接住大部分追问。
GIL 与并发模型要讲清楚「为什么还有用」。 GIL 是 CPython 解释器里的一把全局互斥锁,保证同一时刻只有一个线程执行字节码,目的是简化内存管理与 C 扩展的线程安全。它不意味着多线程没价值:IO 等待(网络、磁盘、模型调用)时线程会释放 GIL,所以 IO 密集型任务用多线程仍能显著提升吞吐;CPU 密集型任务则需要多进程(每个进程独立解释器)或者把热点下沉到 C/Rust 扩展(如 NumPy 在计算时释放 GIL)。同步并发是「一个任务阻塞等待结果」,异步并发是「发起后立刻让出控制权、在事件循环里回调继续」,对应 asyncio + async/await,适合高并发 IO、单线程即可支撑大量连接,但要求整条链路都异步(一个同步阻塞调用就会卡住事件循环)。答题时把「IO 密集 → 协程/多线程,CPU 密集 → 多进程」这条选型判据摆出来,再补一句「GIL 是 CPython 的实现细节,不是 Python 语言规范」,会显得更扎实。
进程线程与僵尸进程:先给定义,再给产生条件与回收手段。 进程是资源分配的最小单位,拥有独立地址空间;线程是 CPU 调度的最小单位,共享进程内存,因此通信便宜但需要自己处理竞态(锁、原子操作)。僵尸进程指子进程已结束、但父进程没有调用 wait/waitpid 回收其退出状态,内核里仍保留一条 task 结构(状态 Z),占用进程表项。它的成因是父进程忘了回收或长期阻塞,危害是耗尽 pid 资源;处理方式有:父进程显式 wait、用 signal(SIGCHLD) 处理或在父进程里忽略 SIGCHLD(注意这会改变 wait 语义)、以及让 init/systemd 接管孤儿进程。面试里常顺着问「孤儿进程和僵尸进程的区别」(孤儿是父进程先死、被 init 收养,不会留下僵尸),这两个概念成对出现,最好一起讲。
HTTPS 的答题骨架是「握手换密钥 + 证书防中间人 + 对称加密传数据」。 非对称加密(RSA/ECDHE)慢,只用来在握手阶段协商出一个会话密钥,之后的数据用对称加密(AES-GCM/ChaCha20)传输,兼顾安全与性能。身份认证靠证书链:服务器出示由 CA 签名的证书,客户端用内置根证书逐级验签,并校验证书域名、有效期与吊销状态(CRL/OCSP),这一步防的是中间人冒充。TLS 1.2 的握手大致是 ClientHello(含随机数、密码套件)→ ServerHello + 证书 → 密钥交换 → Finished;TLS 1.3 把往返压缩到 1-RTT 并支持 0-RTT 会话恢复。追问方向一般是「为什么不用纯非对称」「证书怎么验证」「HTTPS 能否防重放」,回答里带上随机数、时间戳与 AEAD 就够了。
Agent Memory:长期记忆的关键是「写什么、怎么取、怎么忘」。 长期记忆通常由三层构成:原始交互日志(可用于回溯与再加工)、结构化画像/事实(用户偏好、项目背景,写成键值或三元组便于精确命中)、以及向量化的经验片段(检索式记忆)。写入策略上要做重要性与新颖度判断,避免把每轮闲聊都落库;检索上常用「向量召回 + 关键词/时间过滤 + 重排」,并把召回结果压进有限的上下文预算。遗忘机制不是简单删除,而是分层处理:按 TTL 过期、按访问频率与时间做衰减(如指数衰减或 Ebbinghaus 式遗忘曲线)、把多条细节合并成摘要(summary 覆盖原文)、对相互冲突的事实以时间较新者为准并保留修订记录。还要考虑隐私与合规(可删除、可导出)与一致性(记忆写入失败不能影响主流程)。
推荐排序与快速排序:一个是业务理解,一个是代码基本功。 微信推荐场景的排序通常可以按「召回 → 粗排 → 精排 → 重排」四段来讲,精排多用多目标模型(点击、时长、互动、负反馈)加权融合,重排处理多样性、打散、频控与冷启动;面试官常追问「多目标怎么融合」「新内容怎么冷启动」「负反馈怎么处理」,答不上细节时把框架与权衡讲清楚也可以得分。快速排序要能默写并解释:选基准、分区(Hoare/Lomuto)、递归处理两侧,平均 O(n log n)、最坏 O(n²),通过随机基准或三数取中避免有序输入退化,原地排序但不稳定;再补一句小数组切换插入排序、三路分区处理大量重复元素的优化。这场整体反馈是「工程基础与项目实现问得深、不只考概念」,复盘建议是把简历里的 Agent 项目练到能白板画图并解释每个模块的取舍,同时把 Python 并发、操作系统、网络、算法这四块基础至少各过一遍高频题。