清微智能AI测开一面:量化、RAG、pytest

  • 日期:2026-10-15
  • 企业与岗位:清微智能|AI测试开发(一面)
  • 适用层级:中级
    本篇为社区对用户分享面经的整理汇编,旨在帮助求职者了解面试考察方向。问题部分力求忠实还原原帖问答脉络;「参考答案 / 复盘思路」为整理方结合工程实践原创补充,仅供交流参考,不代表官方标准答案。
  1. 自我介绍。
    参考答案 / 复盘思路:
    按岗位相关性介绍测试开发、Python、模型部署或AI项目经历。突出自己写过的工具、处理过的异常和验证结果,控制在一到两分钟;遇到不熟悉的硬件细节可以说明职责边界,避免把团队技术栈都说成个人能力。
  2. VLA模型边端部署时如何选择硬件?
    参考答案 / 复盘思路:
    先明确VLA模型规模、视觉输入分辨率、动作控制周期、功耗、内存和实时性要求,再评估CPU/GPU/NPU算力、算子支持与部署工具链。用真实输入测P95端到端时延、峰值内存、温升和降频;不能只看标称TOPS。控制闭环还需考虑超时安全动作与异常恢复。
  3. 量化有什么好处,常见算法和量化对象有哪些?
    参考答案 / 复盘思路:
    量化把权重或激活由FP32/FP16映射到INT8、INT4等低位宽表示,减少存储和带宽,有时提升推理吞吐。常见PTQ、QAT,以及按通道/按张量、对称/非对称量化。需对权重、激活及KV Cache分别评估精度损失、算子兼容性、溢出和校准数据代表性。
  4. RAG知识库是否由自己搭建?
    参考答案 / 复盘思路:
    说明自己实际负责的环节:文档清洗、切分、向量化、检索、重排、引用与答案生成。若使用现成框架,也要讲清选型与改动。验证至少区分检索Recall@K、答案事实一致性、引用可追溯和拒答表现,并准备知识库更新、权限隔离及空召回的测试方案。
  5. Flask是否用在测试项目,项目流程是什么?
    参考答案 / 复盘思路:
    Flask可用于提供测试工具API、数据管理页面或模型服务封装。描述路由层、业务层、存储与异步任务边界,说明请求校验、鉴权、异常码和日志追踪。测试时用Flask test_client或HTTP接口分别验证正常、非法参数、超时、并发与权限,避免只证明页面能访问。
  6. 使用过哪些测试框架,例如pytest?
    参考答案 / 复盘思路:
    可从pytest的断言、fixture、参数化、marker、插件、报告和CI集成展开,并举一个自己真实运行过的回归任务。说明如何组织测试数据、隔离环境和管理失败重试;失败重跑只用于识别偶发性,不能把重跑通过当成缺陷消失。
  7. Python的list、tuple、set有何区别?
    参考答案 / 复盘思路:
    list可变且有序、允许重复;tuple通常用于不可变序列,但其中可变对象仍可修改;set无序语义且元素唯一,适合去重和成员查询。选型要结合更新频率、顺序需求和哈希约束;不能把set直接用于需要稳定位置索引的场景。
  8. Python切片的start、stop、step是什么?
    参考答案 / 复盘思路:
    表达式seq[start:stop:step]从start开始,stop不包含,按step跳跃;负step表示逆向遍历。省略边界有默认值,负索引从末尾计数。测试要覆盖空序列、越界索引、负步长和step=0抛ValueError,尤其避免把右边界误认为包含。
  9. Python的is与==区别?
    参考答案 / 复盘思路:
    ==比较对象的值是否相等,is比较是否为同一个对象身份。判断None应使用is None;字符串和整数可能因为驻留机制出现is为True,但不能依赖这种偶然行为。自定义类的__eq__可改变相等规则,因此写断言时先明确比较值还是身份。
  10. 浅拷贝与深拷贝有什么区别?
    参考答案 / 复盘思路:
    浅拷贝新建外层容器但共享内部引用,深拷贝递归复制可复制的嵌套对象。用copy.copy和copy.deepcopy对含嵌套列表的数据做变更测试,可直观看出差别。注意文件句柄、锁及自定义对象未必能安全深拷贝;大对象深拷贝还会增加内存成本。
  11. 多线程修改同一个变量会怎样规避问题?
    参考答案 / 复盘思路:
    典型风险是读改写竞争导致丢失更新,不能因为使用Python就认定所有复合操作线程安全。可使用threading.Lock保护临界区、队列传递消息或让单线程聚合写入。验证时通过并发压力、随机调度和结果不变量检查,不要只运行一次就判定安全。
  12. 了解数据库中的锁吗?
    参考答案 / 复盘思路:
    区分共享锁/排他锁、行锁/表锁、悲观锁与乐观版本控制。事务隔离级别、索引命中与SQL执行计划会影响锁范围;测试要覆盖并发更新、超时、死锁和重试幂等。观察数据库锁等待、慢SQL与死锁日志,避免用盲目加大超时掩盖竞争。
  13. pytest fixture有哪些作用?
    参考答案 / 复盘思路:
    fixture用于组织测试依赖和生命周期,例如创建客户端、准备数据、启动浏览器并在yield后清理资源。scope可设function、class、module、session;跨用例共享时要警惕状态污染。结合参数化、autouse与依赖注入可以减少重复代码,但不要把所有初始化都塞进全局fixture。
  14. pytest的公共配置可以怎么实现?
    参考答案 / 复盘思路:
    通用对象可封装fixture并通过参数注入;pytest.ini或pyproject.toml配置标记、日志和默认参数;conftest.py集中提供可复用fixture,独立配置模块管理环境数据。密钥放环境变量或密钥服务,不能写进仓库;不同环境运行前应检查配置来源与覆盖优先级。
  15. Python如何主动抛出异常?
    参考答案 / 复盘思路:
    使用raise ValueError(“…”)等明确异常类型,捕获后需要保留上下文可用raise … from exc。只在能恢复或补充上下文时捕获异常,不建议except Exception后直接pass。测试要断言异常类型、错误信息和清理行为,防止异常被吞掉导致假通过。
  16. C语言的函数指针和指针函数有什么区别?
    参考答案 / 复盘思路:
    函数指针是指向函数的指针,例如int (*fp)(int);指针函数是返回指针的函数,例如int *func(int)。括号决定声明的结合方式。函数指针常用于回调和策略表,需检查签名匹配与空指针;返回指针则要关注指向对象的生命周期,避免返回局部栈变量地址。
  17. 接触陌生领域时如何学习并推进工作?
    参考答案 / 复盘思路:
    先拆业务目标、输入输出和失败代价,再画最小数据流与依赖图;用官方文档和小型实验验证关键假设,最后形成可复现用例和验收标准。对无法独立确认的结论及时找领域同事评审,并把学习成果沉淀为脚本、检查表或排障手册。
    延伸思考(社区补充)
    如果把这类面试考察落到真实项目中,你会怎样准备可重复的数据、保留失败证据,并在CI里区分环境问题和产品缺陷?建议选自己做过的项目,画出依赖链路,给出可验证的指标和边界。