面灵AI→

虎牙测开一面:AI 用例生成平台深挖与二十连问

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

《面试题目》

  1. 做的最深入或最熟悉的一段实习经历或者项目经历是什么?
  2. AI 智能测试用例生成平台属于什么性质的系统?
  3. 这个平台有算过召回率和准确率分别是多少吗?
  4. 引入的大模型视觉引擎 midscene,这一块现在的效果怎么样?
  5. 这个方案跟你原来传统的 UI 自动化,两种方案的效果对比怎么样?
  6. 有没有考虑过另外的方案,比如通过 AI 去读开发的代码,来自动找到那些控件的元素?
  7. 你是哪里人?
  8. 你知道虎牙现在在哪里吗?能接受在佛山工作吗?为什么投虎牙?
  9. 一共有 100 个物品,两个人轮流拿,每次最少拿 1 个、最多拿 5 个,拿到最后 1 个的人赢,两人足够聪明,先手有没有必胜策略?
  10. 现在有两个数据表,一个是学生表(学生 ID、姓名、出生年月日等),一个是科目表(科目 ID、名称、介绍),两个表是多对多关系,如果要存成绩,字段应该放在哪里比较合适?中间表要包含哪些字段?
  11. 查询张三所有科目的平均成绩,SQL 怎么写?
  12. HTTP 和 HTTPS 有什么区别?
  13. 什么是编程的动态特性?
  14. 操作系统里并行和并发有什么区别?
  15. 对于春节的场景,要你对微信红包进行压测,你会关注哪些指标?
  16. Git 回滚代码用什么命令?
  17. Docker 里有哪些常用的网络模式?
  18. 什么叫做 AI harness 工程?它跟 prompt 工程的核心区别是什么?
  19. AI Agent 连续调用相同的工具怎么办?怎么去处理?如何防止子 Agent 爆炸?

《参考解析》

AI 用例生成平台的价值要落到「覆盖率与维护成本」两个指标上。 这类平台的定位是「把需求文档、接口定义、页面结构喂给模型,产出可执行的用例骨架」,性质属于测试生产力工具而不是替代品:它解决的是人工编写用例耗时长、回归用例随版本漂移而失效的问题。被追问召回率和准确率时,答法要具体到口径:召回率按「人工评审认定的有效用例里,模型产出的命中比例」算,准确率按「模型产出的用例里可直接执行且断言正确的比例」算;两条都要说明标注集怎么来(历史用例库加重放缺陷单)、样本量有多少、是不是按模块分层统计。更关键的是要说清「怎么把指标做上去」:检索增强带入页面元素与接口 schema、把断言生成交给确定性规则而不是模型、用历史用例做 few-shot、把人工驳回的样本回灌成回归集。只报一个数字而没有口径和样本说明,是这类追问最容易露怯的地方。

视觉方案与 DOM 方案是互补关系,不是谁替代谁。 midscene 这类视觉引擎通过截图理解页面、由模型给出坐标来操作,优势是对自绘控件、Canvas、跨端(小程序、移动端、桌面端)都能覆盖,不依赖稳定的选择器;劣势是每次调用都要推理,慢且贵,识别稳定性受分辨率、主题、动画影响,失败时难以定位原因。传统 UI 自动化(Selenium、Playwright、Appium)快、稳、可调试,但依赖选择器,前端一改就大批失效。合理的工程结论是分层:主流程与高频回归用 DOM 选择器保证速度和确定性,DOM 拿不到的控件(自绘、iframe 内嵌、视觉验证码类)走视觉兜底,并且给视觉路径加缓存(同一页面结构复用定位结果)与失败截留以便复盘。至于「让 AI 读开发代码自动找控件元素」,思路成立但落地要看收益:静态分析源码能拿到组件树、test-id、路由与 API 定义,适合生成稳定的选择器和接口级用例,但前端构建产物、动态渲染与权限分支会让静态推断失真,而且跨仓读码的工程成本高。更现实的是「读代码补全选择器与接口契约,运行时再用视觉兜底」,把两者按成本从低到高排成一条链路。

多对多关系下成绩字段该放哪,取决于「成绩是谁的属性」。 学生和科目是多对多,中间表(选课表)承载的是「某个学生选了某门课」这条关系,成绩恰好是这条关系的属性,所以应该放在中间表上,典型字段是:学生 ID、科目 ID、成绩、以及业务需要的学期、考试类型、学分、创建与更新时间,并把(学生 ID、科目 ID、学期、考试类型)做成联合主键或唯一索引来防重。如果一门课有多次考试、还要保留每次成绩,那就再拆一张成绩明细表,中间表只存选课记录——这是「关系与其多次发生的事件分开建模」的一般原则。追问常见于索引与范式:查询「某学生全部成绩」要在学生 ID 上建索引,「某科目排名」要在(科目 ID, 成绩)上建索引;不要为了省一次 join 把科目名冗余进中间表,除非是明确的读多写少报表场景。平均成绩的 SQL 是 SELECT s.name, AVG(sc.score) FROM student s JOIN score sc ON sc.student_id = s.id WHERE s.name = '张三' GROUP BY s.id, s.name;,要提一句:用 AVG 会忽略 NULL 成绩,如果缺考要按 0 计就得用 AVG(COALESCE(sc.score,0)),以及按姓名过滤有重名风险,实际要用学号。

HTTP 与 HTTPS 的差别不止「有没有加密」。 HTTPS 是 HTTP 加 TLS:传输层用非对称握手协商出对称会话密钥,之后正文用对称加密(AES-GCM 之类),并用证书链与 CA 签名解决身份认证,靠 MAC 或 AEAD 保证完整性,因此能防窃听、防篡改、防冒充;代价是握手多几个 RTT、有证书与加解密开销(HTTP/2 与 TLS 1.3 已把这点压得很低)、以及证书链管理成本。要顺带讲清证书校验的环节(域名匹配、有效期、吊销状态)和常见的「抓包为什么能看明文」(客户端信任了自定义根证书)。追问还可能落到「HTTPS 能不能防重放」(靠 nonce、时间戳、序列号)、「为什么会话密钥用对称」(性能)。

其余基础题的答法要短而准。 编程的动态特性一般指「运行期才确定」的那些能力:动态类型与鸭子类型、动态绑定与虚函数分派、反射与元编程、动态加载(插件、热更新)、以及运行期改变对象结构(Python 的 __getattr__、JS 的原型链)。并行是「同一时刻真的同时执行」,需要多核或多处理器;并发是「同一时间段内交替推进」,单核也能并发,目标是提高吞吐与响应性,代价是上下文切换与竞态。微信红包压测关注的指标要按链路分层报:入口 QPS 与 P99/P999 延迟、错误率、发红包与拆红包的成功率、库存扣减的一致性与超卖数、Redis/DB 的 QPS 与慢查询、连接数与线程池排队情况、下游支付与账务的限流与失败重试量、以及资源水位(CPU、内存、网络、GC 时间)。还要提「秒杀式尖峰要测预热与扩容速度」和「幂等:同一用户重复拆同一个红包只能成功一次」。Git 回滚视语义选命令:git revert 生成反向提交、安全可用于已推送的分支;git reset --hard 改写历史只适合本地未推送;git checkout -- <file> 丢弃工作区改动。Docker 常用网络模式是 bridge(默认,做 NAT)、host(共享宿主网络栈)、none(无网络)、container(复用另一个容器的网络命名空间)、overlay(跨主机,Swarm/K8s 场景)、macvlan(给容器真实 MAC 使其像物理机)。AI harness 工程指的是把模型调用、工具、上下文装配、重试降级、评测与可观测性统一编排起来的一层框架,目标是行为可控、可复现、可回滚;与 prompt 工程的区别是后者只优化「单次输入怎么写得让模型答得更好」,前者管的是「整条任务链路怎么执行、出错怎么办、怎么度量」。Agent 反复调同一个工具要在框架层治:给每个工具调用做参数指纹与结果缓存,在 prompt 里回灌「这个工具刚调用过、结果是什么」,加步数上限与重复检测,把「同一动作连续 N 次就中断并降级」写成硬约束;子 Agent 爆炸的控制手段是限制递归深度、给每个子任务设 token 与时间预算、用共享的任务队列而不是层层派生、以及明确「什么情况下应该由主 Agent 自己做而不是再派发」。