公司动态

测试开发校招笔试复盘:从TCP握手到二叉树,一套真题拆解考点与避坑指南

📅 2026/8/29 1:54:49
测试开发校招笔试复盘:从TCP握手到二叉树,一套真题拆解考点与避坑指南
每年到了七八月份就有不少学弟学妹开始焦虑校招笔试的事。测试开发工程师这个岗位在很多人眼里是个“退而求其次”的选择——觉得开发卷不动测开总简单点吧。但我可以明确告诉你这个想法大错特错。就拿360这场2019校招笔试来说客观题涉及的知识面横跨计算机网络、操作系统、数据结构、测试理论、Linux命令、编程语言基础甚至还有一部分智力推理题。我身边的同学里有科班出身、拿了几个大厂开发offer的照样在测开笔试里栽过跟头。这篇文章我就把这套笔试里最有代表性的客观题拿出来逐题拆解一遍。不是为了让你背答案而是把每道题背后的考点和踩坑点讲清楚帮你建立一套属于自己的校招笔试方法论。不管你准备的是360还是其他互联网公司的测开岗这套题目的考察逻辑都八九不离十。1. 从这套题看测试开发笔试的考察逻辑1.1 测试开发笔试不只是考测试先说一个大家最容易误解的地方。很多人以为测开笔试会大量考测试用例设计、黑盒白盒测试方法这些。实际上呢我看了这套题真正直接考测试理论的题目占比并不高更多是考察计算机基础功底。为什么会这样因为测试开发工程师首先是“开发”其次才是“测试”。你要写自动化脚本、搭测试平台、做性能压测工具底层全是编程能力和系统知识。笔试环节只能通过客观题快速筛掉基础不扎实的人所以计算机网络、操作系统、数据结构这些硬核科目就成了重头戏。从这套题来看知识模块的大致分布是计算机网络约25%左右TCP/IP协议、HTTP状态码、DNS解析流程等都是高频考点数据结构与算法约20%左右二叉树遍历、排序算法复杂度、哈希表冲突处理等操作系统约15%左右进程线程区别、死锁条件、内存管理Linux与命令行约10%左右文件权限、常用命令参数软件测试基础约15%左右测试分类、用例设计方法、缺陷生命周期编程语言基础约10%左右C/Java/Python的语法细节其他智力题/逻辑题约5%左右这个分布跟很多互联网公司的测开笔试题型是吻合的。所以备考的时候不要一头扎进测试理论里先把计算机基础夯实了才是性价比最高的策略。1.2 客观题为什么比主观题更“致命”这套题全部是客观题也就是选择、判断这类题型。很多人觉得客观题简单不会还能蒙。但实际上在校招笔试里客观题往往是淘汰率最高的环节。原因在于客观题覆盖面广、单题分值小、容错率低。你可能有80%的知识点都掌握得不错但只要有那么几个冷门考点没复习到再扣掉一些粗心错的题总分一算可能面试线都过不了。而且客观题答完就没了不像主观题还能写点思路拿部分分。我自己的体会是刷客观题一定要有“扫雷”意识。每一道错题都代表一个知识盲区。这套题库里那几道特别容易错的题我到现在还记得清晰它们帮我在后续其他公司的笔试里避免了不少失分。所以这篇文章不只是带着你把题过一遍更希望能帮你建立一个查漏补缺的方向感。2. 计算机网络与操作系统考题复盘2.1 TCP握手和挥手的高频深坑这套题里关于TCP的考点出了一道非常典型的题关于TCP三次握手和四次挥手的过程描述选择正确的一项。题目里的干扰项设置得很有水平专门挖了这几个坑。第一个坑是关于握手次数和SYN标志的对应关系。很多选了错误选项的考生把“第二次握手服务端发送SYNACK”记成了“仅发送ACK”。实际上TCP第二次握手中服务端需要同时发送SYN和ACK两个标志位SYN用于同步服务端的初始序列号ACK用于确认收到客户端的SYN。第二个坑考查四次挥手中的TIME_WAIT状态。主动关闭连接的一方在发送最后一个ACK之后需要进入TIME_WAIT状态等待2MSL最大报文段生存时间后才真正关闭连接。这个状态设计的目的是确保最后的ACK能够到达对方如果丢失还能重发。题目的干扰项里故意把这个状态安排到了被动关闭方身上。实操层面的建议是复习TCP一定不要只看状态名称要能画出来回时序图搞清楚每个状态存在于主动方还是被动方、涉及哪些标志位、序列号如何变化。360这套题刚好把这三个细节都考了一遍算是很经典的“一题三坑”了。2.2 HTTP状态码与DNS解析的连环问另一道让我印象深刻的题把HTTP和DNS结合在了一起。题目说用户在浏览器输入一个域名直到页面出现问整个过程中哪些协议参与工作了。这道题选项里列出了HTTP、DNS、TCP、ARP、IP等协议。正确答案是所有这些协议都会参与。很多考生漏选了ARP因为大家想当然地觉得IP层之上只需要关心IP地址就够了。但实际上在局域网内发送数据包时数据链路层需要知道目标设备的MAC地址这就要靠ARP协议来进行地址解析。还有一个容易漏选的细节是DNS请求本身也走UDP协议而UDP是在IP之上的。所以完整的链条大致是这样的浏览器解析域名发起DNS查询使用UDP也可能用TCPDNS服务器返回IP地址浏览器与目标服务器建立TCP连接TCP连接建立后发送HTTP请求服务器返回HTTP响应浏览器渲染页面整个过程从应用层到传输层、网络层、链路层都有协议在参与。这道题的价值在于帮我把“一次请求背后有多少协议在协同工作”这个问题彻底理解透了后来面试被问到“从输入URL到页面展示发生了什么”我可以答得非常系统。2.3 死锁的四个必要条件与进程线程区别操作系统部分有一道经典题考死锁产生的必要条件。互斥条件、请求与保持条件、不可剥夺条件、循环等待条件这四个条件必须同时满足才会发生死锁。干扰项里出现了“资源分配公平”之类明显凑数的说法这个比较好排除。但真正的难点在后面一道题关于进程和线程的描述选出正确的选项。题目里很多考生被“线程拥有独立的地址空间”这个选项坑住了。实际上同一个进程内的多个线程是共享地址空间的这也正是线程切换比进程切换开销小的根本原因。延伸考了一个关于死锁避免的说法涉及银行家算法。如果你只是背了死锁四个条件这道题很容易丢分。银行家算法的核心思路是系统在分配资源之前先计算这次分配是否会导致系统进入不安全状态只有安全才分配。这是“避免死锁”而不是“预防死锁”。预防是从破坏四个必要条件入手避免是动态检测安全性两者完全是不同层面的策略。3. 数据结构和编程语言考点解析3.1 二叉树遍历和排序算法复杂度的送命题数据结构这块这套题考了二叉树的前序、中序、后序遍历结果推导还有归并排序、快速排序的时间复杂度对比。乍一看都是很基础的题目但错的人还真不少。问题主要出在遍历推导上。题目给了前序和中序序列要求推出后序序列。这类题的做法是先用前序序列确定根节点再到中序序列中找到根节点位置根节点左边是左子树、右边是右子树然后递归处理。整个过程不复杂但在笔试现场时间紧张的情况下很多考生一紧张就开始瞎蒙。排序复杂度方面这道题考的细节比较有意思它问的是“在最好情况下时间复杂度依然为O(nlogn)的排序算法”。答案里有冒泡排序、插入排序、快速排序和归并排序。前两个平均和最坏情况都不是nlogn快速排序在数组已经基本有序时会退化到O(n²)。只有归并排序无论数据原本是什么顺序复杂度始终保持O(nlogn)因为它的分治策略是固定切分不依赖数据的初始排列。3.2 哈希表冲突处理方式的对比陷阱哈希表是笔试宠儿360这套题也没放过。题目问的是线性探测法和链地址法各自的优缺点。有选项说线性探测法在处理冲突时查找效率一定比链地址法高这就是典型的错误说法。线性探测的问题是会出现“聚集效应”冲突的元素在表中连成一片后续的插入和查找都要探测很多位置才能命中。而链地址法把冲突元素挂在同一个桶下面的链表里只要哈希函数设计得好每个桶里元素数量都不会太多。链地址法唯一的劣势是额外存储了指针空间利用率稍微低一些但在查找效率的稳定性上优势明显。这里我建议大家复习哈希表时一定要亲手模拟一遍两种冲突处理的过程。比如用一个容量为7的表依次插入哈希值为3、10、17、24这几个元素用线性探测法模拟一遍你会亲眼看到连续占位的影响。这个过程比背十遍概念都管用。3.3 C/Java/Python的细节考察倾向客观题里还有一部分直接考察语言语法细节的题目。这套题里涉及了C的虚函数机制、Java的String对象不可变性、Python的列表推导式等。C虚函数那道题非常具有迷惑性它问的是“含有虚函数的类的析构函数是否应该声明为虚函数”。正确答案是应该。因为如果通过基类指针删除派生类对象而析构函数不是虚函数那么只会调用基类的析构函数派生类部分申请的资源不会被释放造成内存泄漏。Java String不可变性那道题关键在于要理解String对象一旦创建内容就不可修改。平时看起来像“修改字符串”的操作实际上是创建了一个新的String对象。所以类似“String s abc; s s d;”这行代码并没有改变原来那个“abc”对象而是新建了一个“abcd”对象。Python题目相对简单一些考察了列表推导式的语法和基本的数据结构特性。但要注意的是Python的列表和元组的区别、字典的键必须是不可变类型这些基础点也经常被拿来出题别因为Python平时写得多就轻敌。4. Linux、测试理论和其他考点查漏补缺4.1 Linux文件权限和常用命令的易混淆点Linux命令考察了两道比较基础但又容易记混的题。第一道是文件权限。题目给出一个文件权限表示“rwxr-xr--”问这个文件属主、属组、其他用户分别拥有什么权限。这个知识点记牢一个拆解套路就不会错每三个字符一组第一组是属主权限第二组是属组权限第三组是其他用户权限。r是读4、w是写2、x是执行1。所以“rwxr-xr--”就是属主可读可写可执行7、属组可读可执行5、其他用户只可读4。转换成数字就是754。第二道题考查的是find命令和grep命令的区别。find是在文件系统中按文件名、类型、大小等属性查找文件grep是在文件内容中按模式搜索文本行。很多刚开始接触Linux的同学会把这两个功能搞混。只要记住一个简单的判断标准你想按“文件名”找东西还是按“内容”找东西前者用find后者用grep。4.2 软件测试基础理论的核心考点直接考测试理论的题目虽然不多但这部分反而是最容易拿分的。这次出现了一道关于测试分类的题问的是“对已经开发完成的软件进行测试属于哪种测试类型”。这里关键是弄清楚各种测试的时机和目的。单元测试在编码阶段进行针对的是最小可测试单元集成测试在模块之间进行关注接口交互系统测试在整体完成后进行验证完整系统的功能和性能是否符合规格说明验收测试最终交付前进行由用户或客户确认软件是否满足业务需求。这道题的答案是系统测试。另外一道经典题考查了等价类划分方法。题目要求从身份证号码的输入需求出发选择合理的有效等价类和无效等价类划分方案。这类题的核心是有效等价类要覆盖“格式正确、取值范围合法”的情况无效等价类要覆盖各种异常情况比如空值、格式错误、长度不够、非数字字符等。划分完以后每条用例至少要覆盖一个无效等价类这样设计出来的测试用例才能最大程度地发现缺陷。我自己在复习测试理论时的体会是不要死记硬背概念定义要拿一个熟悉的系统比如一个登录页面去套各种测试方法很快就能理清它们之间的区别。等价类、边界值、因果图、场景法每个方法都实际操作一遍笔试遇到基本就不会丢分。4.3 逻辑推理和智力题的破解套路这套题最后有几道逻辑推理题拿给非技术岗的人看也能做但在紧张的技术笔试里反而容易让人懵掉。有一道经典的“真假话”问题大概意思是几个人分别说了一句话已知只有一个人说真话问谁说真话。这种题在逻辑学里叫“真假话推理”一般从相互矛盾的陈述入手。两个人的话如果互为矛盾必定一真一假其他话就可以快速标记为假再进行推导。还有一道是图形找规律考察的是图形元素的旋转和数量变化。做这类题没有太多技巧就是多练训练自己对图形的敏感度。建议准备校招的同学在笔试前两周每天抽20分钟做几道行测图形推理题效果非常明显。5. 从真题到方法论如何高效刷一套笔试题5.1 刷题复盘的正确姿势如果你只关注“这套题我做对了几个”那这套题的价值就浪费了一大半。一套校招真题最重要的价值在于它能帮你定位自己的知识体系漏洞在哪里。拿到一套题我建议你按照这个步骤来处理第一次做题计时完整做一遍模拟考场状态不要边做边查资料。做完对答案把错题和蒙对的题标出来。第二次不需要整套重做而是针对错题逐题分析搞清楚每道题考的是什么知识点自己的错误在哪个环节。如果是概念混淆回到教材或课程里重新复习对应章节如果是粗心大意记住这个错误模式下次遇到类似表述要重点警惕。最好为每道错题建立一个自己的知识卡片写明考点、我的错误选项、正确答案、原因分析、类似题目还有哪些。这个卡片在笔试冲刺阶段非常有用比再刷十套题都高效。5.2 备考资料的选择和学习节奏结合我和身边同学的备考经验准备测试开发笔试可以参考这些资料计算机网络方面除了教材之外建议把TCP的三次握手四次挥手、HTTP常见状态码、DNS解析流程、HTTPS握手过程这几个知识点用图形自己画一遍。操作系统重点复习进程线程模型、死锁、内存分页分段、虚拟内存原理。数据结构的重点很明确数组、链表、栈、队列、二叉树、哈希表、常见排序和查找算法每一个都要能手撕代码而不是停留在背概念。时间安排上建议分三个阶段。第一个阶段是系统补基础大约三到四周把上面的核心知识点过一遍。第二个阶段是刷题强化大约两到三周每天固定刷一批选择题做完及时总结错题。第三个阶段是模拟冲刺考前一周安排至少三次完整的限时模拟培养考试节奏感。5.3 笔试过程中的考场策略试卷发下来之后建议不要按顺序从头做到尾。先花两分钟快速浏览全部题目把自己特别有把握的题标记出来优先做完。这样既能保证稳稳拿到基础分又能建立信心。遇到不会的题不要死磕。客观题的时间分配非常关键一道题最多不要超过两分钟如果完全没有思路直接标记后跳过。全部做完之后再回头思考这些跳过的题往往在此时能灵感乍现。对于完全没见过的知识点可以根据自己的知识迁移来猜测。比如选项里有两个意思相近的表述通常两个都不选有三个选项是同一个方向只有一个的表述方向不同那这个“另类”选项往往就是正确答案。这不是教你投机取巧而是在知识盲区面前的最后一道防线能多一点胜算是一点。6. 测试开发岗笔试之后还要准备什么6.1 从客观题延伸到面试题客观题只是校招的第一关。360这类公司的面试环节通常会围绕笔试中暴露出来的薄弱点进行提问。如果你在考场上做错了TCP的状态迁移题面试官很可能追问“TIME_WAIT状态出现在哪一端为什么需要2MSL”如果哈希表冲突处理那道题选错了面试官很可能让你现场实现一个简单的链地址法哈希表。所以在复盘笔试题时不仅要知道正确答案还要针对每个知识点准备一下“如果面试官追问我还能答什么”。把笔试题当成面试提纲来用是性价比最高的备考方式。测试开发岗的面试还有一个特殊的环节让你现场设计测试用例。通常会给一个具体的功能或接口比如微信朋友圈点赞、电商购物车结算、扫码登录之类让面试者现场分析测试点。这类问题没有标准答案考察的是思维的系统性和完整性。建议平时多练习从一个功能的需求分析开始逐步拆解功能测试、接口测试、性能测试、兼容性测试、安全测试等维度形成一套自己的框架。6.2 测开岗的能力模型与长期发展最后想聊一下测试开发工程师这个岗位本身。很多人拿它当开发岗的备胎这其实是个很大的误判。真正优秀的测试开发工程师技术栈的广度和深度都是过硬的。日常工作中你需要写自动化测试框架、搭建持续集成流水线、设计性能压测方案、分析线上日志定位问题哪一个拎出来都需要扎实的工程能力。从职业发展角度来看测开岗也是一条很有潜力的路。随着软件开发流程越来越重视质量保障测试基础设施的建设和优化空间非常大。很多公司对测开的需求已经远不只是“点按钮、写用例”而是希望他们能通过技术手段提升整个研发团队的交付质量和效率这背后需要的架构能力和项目管理能力并不亚于开发岗。如果你决定了走测开方向校招笔试只是个开始保持对技术本身的兴趣和持续学习的状态才是这个岗位真正核心的竞争力。希望这篇复盘能给你带来一些实际的收获也祝你校招顺利。