虎牙测开一面:AI 用例生成平台深挖与二十连问
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 做的最深入或最熟悉的一段实习经历或者项目经历是什么?
- AI 智能测试用例生成平台属于什么性质的系统?
- 这个平台有算过召回率和准确率分别是多少吗?
- 引入的大模型视觉引擎 midscene,这一块现在的效果怎么样?
- 这个方案跟你原来传统的 UI 自动化,两种方案的效果对比怎么样?
- 有没有考虑过另外的方案,比如通过 AI 去读开发的代码,来自动找到那些控件的元素?
- 你是哪里人?
- 你知道虎牙现在在哪里吗?能接受在佛山工作吗?为什么投虎牙?
- 一共有 100 个物品,两个人轮流拿,每次最少拿 1 个、最多拿 5 个,拿到最后 1 个的人赢,两人足够聪明,先手有没有必胜策略?
- 现在有两个数据表,一个是学生表(学生 ID、姓名、出生年月日等),一个是科目表(科目 ID、名称、介绍),两个表是多对多关系,如果要存成绩,字段应该放在哪里比较合适?中间表要包含哪些字段?
- 查询张三所有科目的平均成绩,SQL 怎么写?
- HTTP 和 HTTPS 有什么区别?
- 什么是编程的动态特性?
- 操作系统里并行和并发有什么区别?
- 对于春节的场景,要你对微信红包进行压测,你会关注哪些指标?
- Git 回滚代码用什么命令?
- Docker 里有哪些常用的网络模式?
- 什么叫做 AI harness 工程?它跟 prompt 工程的核心区别是什么?
- 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 自己做而不是再派发」。