又到一年秋招季后台收到不少读者留言问测试开发方向到底怎么准备笔试这让我想起手头一直存的一套老题——爱奇艺2019秋招测试开发方向笔试题B。之所以一直留着这套题是因为它在大厂测试开发笔试里非常有代表性既有常规的计算机基础又有大量测试理论、用例设计、手写代码的实操考察整体难度中等偏上考察面很全。对于想投测试开发岗位的同学来说把这套题吃透基本就能摸清大厂笔试的套路和出题人的思路。这篇博文就借着这套题把考点拆开揉碎讲一遍希望能给正在准备秋招的你一些实际帮助。1. 这套B卷到底在考什么先看清出题人的底牌爱奇艺的测试开发笔试题B卷整体结构和绝大多数大厂测试开发笔试题基本一致分为选择填空、简答与用例设计、编程题三大块。但和普通开发岗笔试题有明显区别它不追求算法题的极致难度而是侧重“你能不能发现别人发现不了的问题”、“你能不能把业务场景拆成可执行的测试动作”。这一点从题目占比就能看出来。模块大致题量与分值占比考察核心计算机基础选择/填空10-15题约30%操作系统、网络、数据库、Linux、Java基础测试理论简答与用例设计3-5题约35%测试流程、测试方法、具体场景用例设计编程题2-3题约35%字符串、数组、简单算法要求写出可运行代码这个占比说明一个道理测试开发不是“会写几个测试用例就能进”的岗位它要求你同时具备开发能力和测试思维。我当时答这套题最大的感受就是时间很紧尤其是程序题部分题目本身不难但要求考虑周全、边界处理干净这就很考验平时的代码功底。可能有人会问A卷和B卷有什么差别从当年考生反馈来看两张卷子考察范围基本一致差别主要在具体题目和部分用例设计的业务场景上。爱奇艺会同时出多套题防止作弊考点纬度是统一设计的。所以如果你是今年秋招刷任何一套往年题都有参考意义重点不是背原题而是掌握每道题背后的考点。还有一个值得注意的点这套题里“测试开发”的“开发”二字占比不低。简答题里会让你写一段接口测试代码编程题里也会默认你至少熟练掌握一门语言。因此那些准备只背测试理论就上考场的同学基本第一轮就被刷掉了。我在后续几节会按题型逐一拆解每个部分都给到具体的答题思路和需要注意的坑。2. 基础知识选择题那些看似送分却最容易丢分的点基础部分往往是笔试的第一道关卡也是很多科班出身同学最容易大意的模块。其实这部分题目并不难但出题人会设置不少“陷阱选项”和“概念混淆点”。我按考点纬度把这部分题归类每一类给出典型例题和解析逻辑帮你在考场上快速避坑。2.1 操作系统与Linux命令操作系统常考的包括进程与线程区别、死锁条件、内存管理方式、进程调度算法。爱奇艺B卷中有一道题很典型给出四个关于线程的描述选出错误的一项。选项里有一个是“同一进程内的多个线程共享该进程的地址空间”这个是对的还有一个是“线程是系统进行资源分配的基本单位”这个就是错的因为系统资源分配的基本单位是进程线程是CPU调度的基本单位。这道题就是考察概念精确度如果你只记了个大概很容易在这类选项上犹豫。Linux命令的考察点集中在文件操作、权限管理、进程查看、端口占用这几类高频场景。比如会问你“查看当前目录下占用空间最大的文件用哪个命令”正确答案是du -sh * | sort -rh但选项里会混入ls -lh和df -h。ls只是列出文件大小df是查看文件系统磁盘空间使用情况都不符合“当前目录下文件排序”的需求。我的建议是复习Linux时不要只背命令本身要把命令的“适用场景”和“输出格式”一起记住笔试才不会混淆。2.2 计算机网络网络部分几乎是必考的重点集中在TCP三次握手与四次挥手、TCP与UDP区别、HTTP常见状态码、DNS解析过程、Cookie与Session的区别。爱奇艺B卷考了一道非常经典的题一个HTTP请求从输入URL到页面展示经历了哪些过程。选项给了各种打乱顺序的组合正确答案是DNS解析 → 建立TCP连接 → 发送HTTP请求 → 服务器处理并返回 → 浏览器渲染。这题本身不难但选项里会加入“TCP四次挥手”插在中间当干扰项还有的把DNS解析放在TCP连接之后需要注意。状态码的考察也比较细。有一道题给出多个状态码要求选出一个表示“服务器内部错误”的正确答案是500。但选项中会混入404未找到、302临时重定向、304未修改。我的经验是状态码不能只背数字要连使用场景一起记忆。比如304在HTTP缓存中非常常见笔试经常拿它和200做对比而301和302的区别也是高频考点一个是永久重定向、一个是临时重定向对搜索引擎SEO的影响完全不同。2.3 数据库数据库是测试开发笔试的重头戏因为做测试必然要查库验证数据从SQL到索引原理都要掌握。B卷中SQL相关的题占了不小比重比如给你两张表要求查“选了某门课并且成绩大于80分的学生姓名”这需要用到JOIN和WHERE的组合筛选考察的多表联查能力。还有一类是给出一个错误的SQL语句要求找出问题所在比如GROUP BY配合WHERE对聚合结果再筛选——正确做法应该是用HAVING但很多人习惯性地写WHERE。索引这部分有个非常经典的误区题给出一段SQL问它是否会走索引。比如SELECT * FROM user WHERE name LIKE %张%这题考察的是索引失效的条件。前导通配符会导致索引失效这是常考的点。与之类似的还有对索引列进行函数运算、隐式类型转换等都会让索引失效。准备这部分时建议把索引失效的几种常见场景整理成清单考前过一遍正确率会高很多。2.4 Java基础与面向对象爱奇艺技术栈以Java为主所以B卷里Java语言基础题是少不了的。考察点包括与equals的区别、String、StringBuilder、StringBuffer的差异、集合框架常见的类区别ArrayListvsLinkedList、HashMapvsHashtable、异常分类、线程创建方式等。有一道典型的题以下关于HashMap的说法正确的是。正确选项是“HashMap允许键或值为null”但很多人会选“HashMap是线程安全的”这就是概念混淆——Hashtable才是线程安全的HashMap在多线程环境下需要额外同步处理。我记得B卷里还有一道关于finally块的题目问“在try块中执行return语句finally块是否还会执行”答案是“会执行且finally块在return之前执行”。这道题正确率不高因为很多时候面试者对try-catch-finally的执行顺序只停留在概念层面没有深究过return与finally的执行时序。要记住如果finally里也包含return它会覆盖try块中的return值这是Java面试中极其经典的考点。3. 测试理论与用例设计题测试开发的招牌菜也是拉分项基础题考察的是你作为“开发”的底子而简答和用例设计题才是真正区分“普通开发”和“测试开发”的关键。这一部分没有标准答案但判卷时会重点看你的思考是否全面、结构是否清晰、边界条件是否覆盖到位。3.1 测试基础理论不能只会背概念要会用B卷的简答题里有一道很典型的理论题“黑盒测试和白盒测试的区别是什么请各举一个适用场景。”大部分人能写出区别——黑盒关注功能是否满足需求不考虑内部实现白盒关注代码逻辑结构和路径覆盖。但第二问“适用场景”很多人答得稀烂。正确的答法应该是结合业务场景黑盒测试适用于系统级功能验证比如对登录模块进行功能测试输入正确的用户名密码能登录、输入错误密码有提示白盒测试适用于单元测试阶段开发对自己写的函数进行分支覆盖测试比如一个if-else分支判断函数白盒测试要确保每个分支都被执行到。这样的答案既有理论高度又有实际操作依据能给判卷官留下“这个人真的干过测试”的印象。还有一个高频理论题是“等价类划分和边界值分析的区别”。等价类是把输入域划分成若干等价类从每个类中取一个代表数据进行测试边界值分析则是专门针对边界条件设计用例因为大量缺陷都聚集在边界附近。举个例子一个输入框要求输入1到100的整数等价类划分会取一个有效等价类如50和两个无效等价类如0和101、负数和非整数边界值分析则要测1、100、0、101这四个数字。二者往往结合使用边界值是对等价类划分的补充和细化。3.2 测试用例设计题从登录功能到视频播放器的完整思路爱奇艺B卷的用例设计题非常有意思因为它结合了自身业务场景。记得题目大致是“设计登录功能的测试用例”这个题目看起来简单但想得高分其实很难。满分答案需要从功能测试、界面测试、兼容性测试、性能测试、安全测试、易用性测试多个维度展开我自己的答题框架可以分享给大家功能测试正确的用户名和密码能登录成功错误的用户名或密码有明确错误提示空用户名或空密码的校验用户名和密码是否区分大小写“记住密码”和“自动登录”功能是否生效登录成功后能否正常跳转到首页退出登录后能否正确清除登录状态。界面测试输入框长度限制、按钮置灰状态、密码的密文显示、错误提示信息的排版是否清晰。兼容性测试不同浏览器Chrome、Firefox、Safari、不同操作系统Windows、macOS、iOS、Android、不同屏幕分辨率下页面是否正常显示。安全测试SQL注入攻击的防护、密码是否加密传输、多次登录失败后是否有验证码或账号锁定机制、登录状态是否有超时失效。性能测试多用户同时登录时的响应时间、服务器并发压力下的稳定性。如果你能按这个维度组织答案同时每条都写出具体的输入和预期结果这道题的分数基本就拿到了。更深一步你还可以结合爱奇艺的业务特性补充“登录后推荐页是否个性化”“会员账号的登录态在多个设备间如何保持”等业务相关用例这样更能体现你对该公司的理解。3.3 业务场景用例题视频播放器的测试切入角度作为视频平台爱奇艺的测试题里涉及播放器场景非常正常。有一道题大意是“设计一个视频播放功能的测试用例”这个比登录功能更考验对业务的理解。我当时是这么拆解的播放核心链路是“点开视频 → 加载 → 播放 → 暂停/拖动 → 结束”。围绕这个主流程功能测试要覆盖视频能否正常加载播放暂停、播放、倍速切换是否正常拖动进度条后音画是否同步清晰度切换流畅、高清、超清、蓝光是否生效弹幕开闭与透明度调节全屏/小窗切换播放结束后是否自动推荐下一集。异常场景要覆盖网络断线后的恢复策略、弱网下的缓冲提示、播放中途来电或切后台后的状态保持、非会员点播会员内容时的付费引导跳转。兼容场景要覆盖iOS、Android、iPad、TV端、网页端不同设备不同分辨率下的播放表现。性能和安全同样重要首帧耗时、启动耗时、卡顿率、播放器是否内置了防劫持和防盗链这些都是视频类产品特有的测试点。这类题目的得分关键在于“业务感”。你要让判卷人觉得你不仅仅是在做通用的功能测试而是真正理解了视频播放这个场景里的用户痛点和异常链路。我当时答题时特意写了一条“播放过程中切换网络从4G到WiFi播放是否无缝衔接不断流”这道题之后在面试中还被面试官单独拎出来问过可见有业务思考的答案是会被注意到的。4. 编程题实操复盘难度不高但“写完就对”很难编程题是整套卷子的压轴部分也是最能拉开分数差距的部分。爱奇艺B卷编程题整体难度要比互联网开发岗的笔试题低一档大体相当于LeetCode中等偏下难度但要求应聘者在有限时间内写出完整、健壮的代码。我按照当年的题型风格还原几道典型题目并给出完整的解题思路和工程化考量。4.1 字符串处理题写代码前先考虑边界有一道题归类为字符串处理要求实现一个函数删除字符串中重复的字符并保持原有顺序。例如输入“abracadabra”输出“abrcd”。这道题的核心解法是使用一个HashSet记录已经出现过的字符然后遍历原字符串首次出现的字符保留重复出现的跳过。下面是参考实现public static String removeDuplicateChars(String input) { if (input null || input.isEmpty()) { return input; } SetCharacter seen new HashSet(); StringBuilder sb new StringBuilder(); for (char c : input.toCharArray()) { if (seen.add(c)) { sb.append(c); } } return sb.toString(); }这题看起来很简单但实际写代码时有一个很容易忽略的边界问题输入为null或空字符串时程序会不会报空指针题目没有明确说明输入范围所以你必须自己判断是否要做空值保护。我当时在这道题上不仅做了空值判断还在注释里写明了“假设输入为null则返回null”这就是一种工程习惯的体现。还有一种常见变形判断一个字符串是否是回文字符串或者找出字符串中最长的不含重复字符的子串长度。后者需要用到滑动窗口难度会高一级但如果能在笔试中写出来会是一个不小的加分项。4.2 数组与简单算法题复杂度的取舍数组操作题也几乎是必考的常见类型包括数组去重、求两个数组的交集、找到数组中第二大的数、将数组中的0移动到末尾。有一道题我记得很清楚要求找出数组中只出现一次的数字其他数字都出现两次要求尽量降低时间复杂度和空间复杂度最优解是使用异或运算。这个题考察的不仅仅是编码能力更是对“位运算”这一底层知识的掌握程度——同样是解决一个问题用HashMap能解但时间和空间复杂度明显更高这时候就有区分度了。我的答题策略是如果时间充裕我会同时写两种解法并附上说明第一种是常规的HashMap计数逻辑直观容易理解时间复杂度O(n)、空间复杂度O(n)第二种是异或法空间复杂度降到O(1)“利用相同的数异或为0的性质把数组中所有元素异或一遍最终结果就是只出现一次的那个数”。在代码注释里写清楚两种方案的取舍判卷人一眼就能看出你具备一定的算法优化意识。4.3 编程题里的“测试思维”写代码时就要想怎么测编程题和测试岗位最常见的结合点是“要求你给自己写的代码设计测试用例”。这个要求通常以附加题的形式出现比如“请为上面实现的函数设计至少5个测试用例”。我认为这才是整套卷子里测试开发属性最明显的题目。以删除重复字符那道题为例可以设计这样的用例输入“abracadabra”预期输出“abrcd”覆盖正常输入输入“aaaa”预期输出“a”覆盖全重复字符串输入“abcabcabc”预期输出“abc”覆盖重复出现的非连续分布输入空字符串或null预期输出空值覆盖异常输入输入包含数字和特殊字符的字符串如“a1b1c2d2”预期输出“a1bc2d”覆盖非字母字符的情况输入超长字符串验证算法性能是否满足要求很多考生忽略这种附加题或者只写一两个基本用例就交卷了。其实对于测试开发岗位来说这道题恰恰是展示自己测试素养的绝佳机会。你设计的用例越全面越能证明你已经具备“测试思维”——也就是说你不是只会写代码还会批判性地思考自己的代码在哪些场景下可能出问题。这正是测试开发岗区别于普通开发岗的核心竞争力。5. 应试实战经验从时间分配到避坑清单聊完具体题目再聊点实际的应试经验。这些经验是我当年自己踩坑踩出来的也和后来带过的许多应届生交流过发现大量重复的共性错误。这里整理成一份可复用的应试清单希望能帮你少走弯路。5.1 时间分配基础题别恋战编程题留足时间整套卷子的答题时间通常是90到120分钟。很多考生的死法是死在基础题上遇到一道不确定的题目就反复纠结结果到编程题时只剩20分钟手忙脚乱。我的建议是选择题遇到不确定的先标记跳过等所有题目做完再回头思考。基础题每题建议控制在1到2分钟内整个基础模块不超过30分钟。简答与用例设计控制在30分钟左右剩下至少40分钟留给编程题。编程题即使写不完完整代码也要把思路写清楚、写出关键部分这也能拿到不少分。5.2 代码题常见的三个丢分习惯第一个丢分习惯是不写输入校验。给定一个数组或者字符串时很多直接开始写核心逻辑没有判断null和空值。在判卷人眼中这种代码“跑起来有隐患”直接体现在代码规范分上。第二个丢分习惯是不写注释。笔试题代码不需要长篇注释但核心逻辑处两三行注释能极大提升阅卷效率也向判卷人传递了“这人有工程意识”的信息。第三个丢分习惯是不考虑题目的潜在规模。如果题目没有明确说明数据规模但要求复杂度尽量低时应优先使用O(n)解法而不是O(n^2)的暴力解法并写清楚复杂度的取舍。5.3 考前一周复习什么最有效最后一个针对性建议考前一周不建议再大量刷偏题怪题而是应该回到基础高频考点上。我当年复习用的清单可以供你参考TCP三次握手与四次挥手的完整流程和状态变化、进程与线程的基本概念和区别、SQL常用联表查询和聚合函数的编写、HashMap底层原理和线程安全性、常见HTTP状态码及对应场景、Linux高频命令top、grep、awk、sed、find、netstat、Java中常见异常分类和集合类区别。这些考点在这套B卷中几乎全部出现也是各大厂测试开发笔试最高频的出题范围。把这份清单吃透笔试通过率会有很大的保障。写这套题的复盘时我自己也又做了一遍当年没答好的几道题发现很多东西在工作几年后回头看才有更深的体感——比如用例设计不再是纸上谈兵而是每天在生产环境上真实上演编程题的边界处理也不再是考试技巧而是线上事故的教训。希望大家能通过这篇复盘不只是记住知识点更能理解测试开发这个岗位到底在考察什么能力然后有针对性地去补足。秋招不易祝看到这里的你笔试顺利早日拿到心仪的offer。