面灵AI

华为后端开发岗面经

时间
2026-09
来源
牛客网

《面试题目》

  1. QuerySet 是什么,通常在哪些场景使用?
  2. MySQL 和 MongoDB 的数据模型与适用场景有什么区别?
  3. Python 的内存管理和分代回收机制是怎样的?
  4. Python 多继承如何确定方法解析顺序?
  5. Django、Flask 和 FastAPI 有哪些区别?
  6. RAG 的离线建库和在线查询分别包含哪些步骤?
  7. 如何处理高并发和大文件的上传下载?
  8. Agent 与普通 Chatbot、固定 Workflow 有什么区别?
  9. 如何验证 AI 给出的代码和结论?
  10. 分片上传如何记录状态、校验完整性并合并文件?
  11. 多个请求同时修改同一条 MySQL 数据时会出现什么问题?
  12. Redis Stream、Pub/Sub 和 RabbitMQ 在可靠性上有什么区别?

《参考解析》

  1. Django QuerySet 表示延迟执行的查询集合,链式过滤和切片会构建查询表达式,真正访问数据库通常发生在迭代或显式求值时。避免在循环中触发大量隐式查询。
  2. MySQL 适合强结构、事务和关联查询,MongoDB 以文档模型和灵活 schema 见长。选择应根据一致性、查询模式、索引能力和团队运维经验,而不是只看写入速度。
  3. Python 主要通过引用计数回收对象,并用分代垃圾回收处理循环引用。容器对象长期持有引用、缓存无上限或扩展模块未释放都会导致进程内存增长。
  4. 多继承按 C3 线性化生成 MRO,super() 会沿 MRO 协作调用。各父类初始化要遵循同一约定,否则容易漏调或重复初始化。
  5. Django 功能完整、约定较多;Flask 轻量且扩展自由;FastAPI 基于类型标注和 ASGI,适合异步 API。性能之外还要考虑生态、团队熟悉度和部署方式。
  6. 离线阶段负责解析文档、切块、Embedding 和写入向量库;在线阶段对问题向量化、召回和重排,再把证据交给模型生成。切块和召回参数需要用真实问答集调优。
  7. 大文件应使用分片、断点续传、流式读写和对象存储,避免一次性载入内存。服务端要限制并发、校验分片哈希并清理过期上传任务。
  8. Chatbot 通常按固定对话流程响应,Workflow 的节点和分支预先编排;Agent 可以根据目标和观察结果动态选择工具,但必须设置权限、预算和终止条件。
  9. 通过最小复现、单元级验证、官方文档和真实数据对照检查 AI 输出;涉及并发、权限或数据迁移时还要做失败路径演练。不能只因为代码能编译就采纳结论。
  10. 初始化任务时记录文件大小、分片数和校验值,上传接口以分片编号幂等写入,查询缺失列表后再合并。合并前重新校验总大小和哈希,完成后原子更新状态。
  11. 并发更新可能出现丢失更新、脏读或死锁。可用事务隔离、行锁、乐观锁版本号和固定加锁顺序控制,具体方案取决于冲突率和业务重试成本。
  12. Redis Stream 有消费组和确认机制,Pub/Sub 更像不持久化广播;RabbitMQ 提供队列、确认和路由能力。选型要看持久化、顺序、吞吐、重放和运维要求。