- 日期:2025-06-09、06-11、06-13
- 企业与岗位:字节跳动|TikTok测试开发三轮
- 适用层级:初级/中级
本篇为社区对用户分享面经的整理汇编,旨在帮助求职者了解面试考察方向。问题部分力求忠实还原原帖问答脉络;「参考答案 / 复盘思路」为整理方结合工程实践原创补充,仅供交流参考,不代表官方标准答案。
面试问题与复盘
1. 一面|自我介绍
用一分钟讲清项目背景、个人负责模块、技术栈和可验证结果,避免只背框架名。针对测试开发岗位,可补充如何设计关键链路用例、如何验证高并发正确性。即使经历偏Java后端,也可以把可测试性、监控和异常处理经验转成岗位匹配点。
2. 一面|项目超卖问题怎么解决
参考答案 / 复盘思路:
库存扣减需要保证并发下不出现负库存。常见做法是数据库条件更新UPDATE ... SET stock=stock-1 WHERE id=? AND stock>0,并检查受影响行数;高流量可结合Redis预扣与消息队列异步落库,但要设计对账、失败补偿和重复消费幂等。测试需并发压测、核对订单数与库存变化并注入超时重试。 关键验收可以定义为“初始库存-最终库存=已确认且未退款订单数量”,但异步补偿期要考虑处理中订单。用相同用户多次点击、客户端超时重试和MQ重复投递做故障注入,验证幂等键与最终对账是否有效。
3. 一面|算法:把长度为n的数组分成m个和相等的子数组,求m最大值
参考答案 / 复盘思路:
首先澄清“子数组”是否必须连续、每个子数组是否非空及元素是否允许负数。若要求连续且元素非负,可枚举分段数量并检查总和可整除,再线性扫描能否按目标和切段;零和、负数会改变贪心可行性,需要额外状态处理。面试中先讲约束与反例,避免把题目直接套成LeetCode 698的非连续分组。 若输入允许负数,前缀和会重复出现,简单“达到目标就切”不一定正确;需根据题目限制使用动态规划或前缀和状态。若总和为0还要单独处理分段目标为0的情形,不能简单枚举整除。
4. 一面|高考成绩如何排序,比较排序方案复杂度
参考答案 / 复盘思路:
分数取值范围有限时可用计数排序:统计每个分数出现次数,再按分数从高到低输出,时间O(n+K)、空间O(K)。若还要稳定排序同分考生,可用稳定桶分组并按原序输出。相比通用比较排序O(nlogn),利用分数值域有限这一业务特点更合适;需考虑总分上限与同分规则。
5. 一面|反问环节
可以问团队的测试开发职责、线上质量指标、自动化平台覆盖范围和新人成长路径。优先问能帮助判断岗位的具体问题,例如是否参与线上故障复盘,而不是泛泛问“平时忙不忙”。
6. 二面|自我介绍
二面可缩短基础背景,突出一面未充分展开的项目决策和技术取舍。例如讲清为什么采用某种并发控制、如何设计失败补偿、如何证明性能优化有效。准备两分钟版与三十秒版,根据面试官兴趣切换。
7. 二面|项目做过哪些优化
参考答案 / 复盘思路:
按瓶颈发现、方案选择、实验验证和回滚方案回答。若优化了缓存命中率,要提供命中率、P95延迟、数据库QPS等前后对照;若优化线程池,要交代排队长度和拒绝策略。测试角度需覆盖冷启动、峰值流量和依赖故障,避免只报平均耗时改善。
8. 二面|算法:岛屿数量
参考答案 / 复盘思路:
将二维网格中上下左右相连的陆地视为同一岛屿。遍历每个格子,遇到未访问陆地就用DFS/BFS标记整块连通区域,答案加一。时间O(mn),访问数组最坏O(mn);若允许原地修改可降低额外空间。边界包括空网格、全海洋、单点岛屿和大网格递归栈溢出。
9. 二面|研究生期间遇到的最大困难
采用背景—目标—行动—结果的结构,选择真实的实验失败、协作冲突或项目延期案例。重点说明如何拆分问题、求证假设和协调资源,避免只描述情绪。若结果未完全成功,也可以展示复盘与后续调整;回答应与实际经历一致。
10. 二面|研究生课题介绍
先用非本领域工程师能理解的话说明课题要解决什么问题,再讲输入数据、方法、评价指标和个人贡献。若课题涉及模型,可解释训练集与测试集如何隔离、如何避免数据泄漏、如何验证改进有统计意义。最后联系岗位所需的工程实现与验证能力。
11. 二面|反问环节
可以追问团队最棘手的质量问题是性能、数据一致性还是跨端兼容,以及新同学会先参与哪类任务。若面试中讨论过具体项目,可围绕该项目的质量门禁和上线流程提问。
12. 三面|自我介绍
三面更适合突出责任边界、跨团队合作和业务理解,避免再次完整复述前两轮技术细节。准备一个“推动问题闭环”的故事,说明如何从发现风险到制定验证方案,再到复盘和防止复发。
13. 三面|是否测试过自己的项目,如何设计核心功能用例
参考答案 / 复盘思路:
从业务不变量入手,例如下单成功后订单、支付和库存必须一致;再覆盖正常、边界、并发、重试、回滚与权限。自动化层面把单元测试验证规则、接口测试验证状态、端到端测试验证关键路径。测试结果应通过数据库与事件日志双重核对,避免只看HTTP状态码。 举例:用户支付成功后服务端超时,客户端重试应返回同一订单结果而非再次扣款;订单取消时若库存回补失败,应通过补偿任务和对账发现异常。测试数据必须能追踪到用户、订单和支付流水。
14. 三面|抖音App长期无响应,可能是什么原因
参考答案 / 复盘思路:
先区分启动卡死、页面无响应和网络内容加载慢。客户端查ANR、主线程阻塞、死锁、内存和磁盘IO;网络查DNS、连接超时和接口延迟;服务端查依赖超时与限流。用时间戳关联设备日志、网络请求ID和后端Trace,按设备型号、版本、网络条件复现,不要直接认定是网络差。 若是Android ANR,重点看主线程堆栈、Binder调用和锁等待;若页面能操作但视频不出图,优先排查播放器初始化、CDN和解码链路。把“无响应”细分为可观测症状,比一次性罗列几十个原因更有效。
15. 三面|设计兑奖系统测试用例
参考答案 / 复盘思路:
核心不变量是一次有效兑换只能扣一次积分和一次库存,不能超发。覆盖资格校验、积分不足、库存临界、并发抢兑、重复点击、超时重试、补偿回滚与过期规则。压测时统计成功数、库存变化、流水与奖品发放记录,验证幂等键和最终一致性;还要测试刷接口与越权兑换。 可以构造100个请求同时争抢仅剩1份奖品,验证只有1个成功且库存不为负;对支付或积分扣减成功但发奖失败的情况,检查重试与补偿后是否保持账实一致。明确订单状态机能帮助避免漏掉异常分支。
16. 三面|25匹马、5条赛道,最少几场找出前三名
参考答案 / 复盘思路:
经典题在没有计时器、只能比较同场名次的条件下,最少7场。先分5组各跑一次,再让5组冠军跑第6场,确定全场第一;随后排除不可能进入前三的马,从候选中挑出最多5匹跑第7场,得到第二、第三。回答时应说明排除依据,而非只背“7”。 假设冠军组为A,组冠军赛排名A1>B1>C1>D1>E1,那么第一名是A1;第二、第三只可能来自A2、A3、B1、B2、C1这5匹,因其余马已有至少三匹跑在前面。第7场在这5匹中决出前二。
17. 三面|算法:最大子数组乘积
参考答案 / 复盘思路:
动态规划同时维护以当前位置结尾的最大乘积和最小乘积,因为负数会使两者互换。遍历元素x时,新最大值是max(x,旧最大x,旧最小x),新最小值取min,维护全局最大。时间O(n)、空间O(1)。注意0会自然重启乘积区间,测试全负、单元素、含0和溢出边界。
18. 三面|反问环节
可了解测试开发团队的工程定位、业务链路的质量难点以及如何衡量自动化平台的实际收益。对于跨国业务,还可关注多地区部署、语言与网络差异带来的验证挑战。
延伸思考(社区补充)
如果要为字节跳动相关岗位准备一份可执行的回归验证方案,你会如何把上述问题中的关键风险转换为测试数据、断言、失败证据和CI门禁?请区分业务正确性、环境不稳定和工具误报,并给出至少一项可衡量的质量指标。
