
顺丰科技2019秋招测试工程师客观题这套题在当年刷题圈里流传得挺广。我前阵子帮一个学弟做模拟面试辅导又把这份合集翻出来过了一遍发现一个很有意思的现象虽然题目是好几年前的但里面考查的核心知识点跟现在大厂测试岗笔试的主流方向几乎没有本质变化。考的无非还是软件测试基础、计算机网络、操作系统、数据库、编程语言基础再加上一点测试工具和自动化相关的内容。换句话说这套题的价值不在于题目本身有多新而在于它把测试工程师笔试的高频考点浓缩到了一张卷子里。面试官出题风格会变但用来筛选候选人基本功的知识点就那么多把这份题吃透再去做近几年其他公司的测试笔试题你会发现很多题目只是换了层皮。这篇文章我不打算把题目逐字逐句粘贴出来那是违规的也没啥意义。我更想做的是从这套题里提炼出高频考点结合每类题目的典型考法、易错点、以及背后的原理做一次完整的复盘。你可以把它当成一份“测试工程师笔试考点地图”来用无论是准备秋招春招还是单纯想补一补计算机基础都值得花一晚上过一遍。1. 顺丰科技这套题到底在考什么1.1 从题型分布看测试笔试的出题逻辑先说结论这套客观题合集的题型分布大致是软件测试基础约占四成计算机网络和操作系统合起来约三成数据库约两成编程语言和测试工具占一成左右。这个比例其实很有代表性顺丰科技虽然是物流行业的科技公司但测试工程师笔试考查的内容和数据类互联网公司非常接近。为什么会有这样的分布核心逻辑在于测试工程师的第一职责是保证软件质量但软件质量问题的根源往往不在软件本身而在系统与系统之间的协作。比如一个接口返回超时你往深了排查会发现是数据库连接池耗尽或者服务器负载过高又或者是网络层丢包重传。这些问题要能快速定位就必须对操作系统、网络、数据库这些底层知识有足够的理解。所以笔试阶段考这些不是故意刁难人而是为了筛掉那些只会点页面、execute用例、却对问题根源毫无感知的人。1.2 客观题备考的正确姿势当判断题做不如当知识点记很多人在刷客观题的时候有个坏习惯就是只看答案对不对把题刷完对一下答案就过了。我备考的时候也这么干过后来发现效率极低。一套题做下来记住的只是“这道题选B”而不理解“为什么B是对的A错在哪里”换一道变体题就懵了。正确的做法是把每一道客观题当成一个知识切片做完之后不仅要记录正确选项还要把错误选项为什么错也搞清楚。比如一道题问“HTTP状态码404代表什么”你选了“服务器找不到请求的资源”这没毛病但你要顺手把403、500、502、504这几个状态码的区别也过一遍因为下次考试可能就换一个状态码来问。这套顺丰科技的题目好在它考查的知识点密度很高把一道题拓展开来往往能覆盖一串相关知识点特别适合用“一题带一串”的方式去复习。2. 软件测试基础客观题的高频出题区2.1 等价类划分和边界值分析年年必考的核心考点测试基础部分最没悬念的高频考点是测试用例设计方法尤其是等价类划分和边界值分析。这套题里至少有五六道题在变着法子考这两个概念。比如输入框要求输入1到100之间的整数问哪些数据属于有效等价类、无效等价类或者边界值测试应该选取哪些数据。这类题目本身不难但有几个细节特别容易踩坑。第一边界值的选取不是简单取上限下限而是要覆盖边界点、边界两侧的值。拿1到100这个例子来说标准的边界值应该是0、1、2、99、100、101这六个点其中1和100是上点0和101是离点2和99是内点。很多参考答案只写0、1、100、101严格来说不够完整。第二要注意输入条件的类型如果是实数而不是整数边界值的选法又不一样比如1.00和1.01可能要同时考虑。考场上遇到这种题先别急着选看清楚是整数还是小数、有没有说闭区间还是开区间。注意边界值分析常见的坑是只考虑数值范围的边界忽略枚举类型、字符串长度等场景。凡是有“取值范围”的地方都应该下意识地去找边界。2.2 缺陷生命周期与优先级送分题里暗藏杀机缺陷管理相关题目在这套题里属于送分题出题方式通常是给一个缺陷场景问它的严重程度和优先级怎么划分。比如“购物结算时金额计算错误导致用户多扣了钱”这应该算什么级别大部分人会选“严重”因为涉及资金正确性。但也有题目会挖坑把它描述成“仅在某些特殊情况下出现且用户还能通过其他方式完成支付”那就要结合复现概率和影响范围来判断了。这里要记住一个原则严重程度描述的是缺陷对系统的破坏程度优先级描述的是修复的紧急程度两者并不总是一一对应。一个界面文案错误严重程度很低但如果这个文案出现在用户首次注册的必经流程上影响转化率那优先级可能被调到很高。笔试题目里问“这个缺陷应该怎么处理”时多半不是考标准答案而是考你有没有这种多维度的判断意识。2.3 测试类型与开发流程模型别把V模型和敏捷模型搞混测试类型相关考题也是高频区包括单元测试、集成测试、系统测试、验收测试以及它们的执行顺序和对应阶段。还有开发流程模型瀑布模型、V模型、W模型、敏捷开发的区别。这题看起来基础但每年都有不少人丢分原因在于概念之间太像了。V模型和W模型是重灾区。V模型强调开发和测试的阶段性对应编码阶段对应单元测试详细设计对应集成测试概要设计对应系统测试需求分析对应验收测试。W模型则在V模型基础上加了一条开发层面的平行线强调测试与开发同步进行。考场上碰到这类题快速判断的方法是看选项里有没有“需求分析阶段就开始编写测试计划”这类描述如果有多半是在指W模型。敏捷模型则完全不同强调迭代、持续集成、测试驱动开发如果选项里出现“短周期迭代”“持续反馈”基本可以锁定敏捷方向。3. 计算机网络必考但最容易混淆的考点3.1 TCP三次握手与四次挥手从背步骤到理解状态网络部分的客观题TCP三次握手是绝对的钉子户。但顺丰这套题出了个很刁钻的考法不直接问你握手步骤而是给你一个状态变化序列让你判断哪个是正常的三次握手过程。这就把死记硬背的同学筛掉了。我在复习的时候总结了一个口诀SYN、SYNACK、ACK发送方先进入SYN_SENT收到SYNACK后进入ESTABLISHED接收方收到SYN进入SYN_RCVD发出SYNACK后等ACK收到后进入ESTABLISHED。四次挥手则是FIN、ACK、FIN、ACK主动方先进入FIN_WAIT_1收到ACK后进FIN_WAIT_2再收到对方的FIN后进TIME_WAIT。这里还有一个高频考点为什么TIME_WAIT需要等2MSL。答案是确保最后一个ACK能被对方收到以及让本连接的所有报文在网络中自然消失避免影响后续连接。做这类题的时候建议顺手在草稿纸上把状态转换图默写一遍写不出来的回去翻书。因为这些状态名SYN_SENT、ESTABLISHED、FIN_WAIT_2、TIME_WAIT在笔试里常作为选项出现你只熟悉一部分就容易蒙。3.2 HTTP状态码从背诵到举一反三HTTP状态码是网络部分的另一个高频考点。这套题里的考法很直接给一个访问场景问应该返回什么状态码。常见的有200成功、301永久重定向、302临时重定向、304未修改、400请求错误、401未认证、403禁止访问、404不存在、500服务器内部错误、502网关错误、504网关超时。最容易出幺蛾子的是301和302、401和403这两对。301是永久重定向比如网站迁移域名后旧地址返回301浏览器会自动缓存这个跳转302是临时重定向比如未登录用户访问需要登录的页面跳转到登录页这时候一般用302因为用户登录后还能跳回来。401是未认证意思是“我知道你是谁的需求还没满足请先登录”而403是禁止访问意思是“你认证了也没用你的权限不够”。考场上如果遇到“用户已登录但访问admin页面被拒”应该选403而不是401。注意有些题目会混着问“503”和“504”的区别。503是服务暂时不可用通常是服务器过载或维护中504是网关超时即代理服务器等待上游服务器响应超时。这两个经常出现在运维场景题里别选反了。3.3 DNS解析与IP地址基础细节比想象中多网络部分还有一类容易被轻视的题目是DNS和IP地址。DNS题目常考的是解析过程浏览器缓存、操作系统缓存、本地DNS服务器、根域名服务器、顶级域名服务器、权威域名服务器这一条链路的顺序要能排出来。IP地址题目则常考子网掩码计算和私有地址范围比如192.168.x.x属于C类私有地址10.x.x.x属于A类私有地址以及给定一个IP和掩码判断它属于哪个子网。这里有一个很实用的计算技巧把子网掩码转成二进制跟IP地址做按位与运算得到的就是网络地址。比如192.168.1.35加上255.255.255.0按位与之后得到的网络地址是192.168.1.0主机号是35。考题如果问“以下哪台机器和192.168.1.35在同一子网”你就看哪个选项的IP跟这个网络地址按位与结果一致。考场上时间紧练熟了心算这类题基本十秒内能出答案。4. 操作系统与数据库客观题里的拉分项4.1 进程与线程这题不看仔细真的会选反操作系统部分进程和线程的区别是必考项。这套题里有一道题问“同一进程内的多个线程共享什么不共享什么”选项包括代码段、数据段、堆、栈、文件描述符。正确答案是共享代码段、数据段、堆和文件描述符不共享的是栈因为每个线程都有自己的栈空间用来保存局部变量和函数调用信息。这里有个容易混淆的点堆是共享的栈是独立的。很多人在复习时记反了原因是被“局部变量”这个概念带偏了。局部变量确实是线程私有的但它的存储位置在栈上而堆上分配的对象是所有线程通过指针都能访问的。概念理顺了做题就不会错。另外进程间通信方式管道、消息队列、共享内存、信号量、socket和线程同步方式互斥锁、条件变量、读写锁、信号量也是高频题要注意区分“通信”和“同步”两个概念。4.2 死锁的四个必要条件理解比背口号更重要死锁相关题目在操作系统的客观题里出镜率很高。四个必要条件是互斥、持有并等待、不可剥夺、循环等待。考题通常有两种形态第一种是直接问“以下哪个不是死锁产生的必要条件”第二种是给一个实际场景问“破坏的是哪个条件”。第二种考法更考验理解。比如“一个进程在请求资源失败时主动释放已经占有的资源”这个描述破坏的是“持有并等待”还是“不可剥夺”答案是“持有并等待”。因为它的意思是进程不再死抱着资源等新资源而是先放手等条件满足了再一次性申请。如果描述是“资源管理器强制回收某个进程占用的资源”那破坏的是“不可剥夺”。死锁的避免算法也常考银行家算法是典型代表核心是安全性检查系统在分配资源前先判断是否存在一个安全序列即使其中一个进程暂时无法完成只要最终所有进程都能完成就认为是安全状态。4.3 SQL查询与索引多表连接和聚合函数是重点数据库部分几乎每套测试笔试题都考SQL顺丰这套也不例外。题型集中在SELECT语句的编写通常给四个选项让选正确的、WHERE和HAVING的区别、多表连接的JOIN类型、聚合函数和GROUP BY的使用。这里最值得展开的是WHERE和HAVING的区别。WHERE在分组之前过滤行HAVING在分组之后过滤组。这个区分在题目中的考法非常直接让你判断“查询平均分大于80分的班级”应该用哪个条件。答案是HAVING因为平均分是分组后的聚合结果where没法直接引用聚合函数。还有LEFT JOIN和INNER JOIN的区别LEFT JOIN返回左表全部记录右表没有匹配就补NULLINNER JOIN只返回两边都匹配的记录。这些概念光靠背容易混建议刷题时多画两个小表格手动模拟一遍连接后的结果集印象会深得多。索引部分的高频考点是什么情况下索引会失效。常见答案包括在索引列上使用函数、进行隐式类型转换、OR条件中包含非索引列、LIKE以通配符开头等。这个考点在客观题里通常以“以下哪个查询可能无法使用索引”的形式出现做题时逐项检查有没有上述关键字就行。5. 编程语言与测试工具基础不牢地动山摇5.1 Java与Python基础笔试中的送分与送命题编程语言基础在测试笔试里占比不大但几乎一定会出几道。顺丰这套题里Java考查了基本数据类型、String和StringBuilder的区别、异常处理机制Python考查了列表和元组的区别、字典操作、深浅拷贝。容易翻车的点在Java的String问题上。String是不可变对象每次拼接都会生成新对象StringBuilder可变拼接效率高StringBuffer可变且线程安全。题目问“频繁拼接字符串应该用哪个类”答案是StringBuilder但如果题目强调多线程环境就要选StringBuffer。Python的深浅拷贝也是经典坑b a是引用赋值b和a指向同一个对象b copy.copy(a)是浅拷贝嵌套的可变对象还是共享的b copy.deepcopy(a)是深拷贝全部独立。考题常问“修改b中的嵌套元素a会不会变”只要判断清楚拷贝类型就能拿分。5.2 接口测试与自动化测试题目背后的趋势信号工具部分虽然占比不高但出题方向很有参考价值。这套题里出现了关于HTTP接口测试的题目比如GET和POST的区别、如何验证接口返回结果。还有自动化测试相关的概念题比如UI自动化中Page Object模式的作用。我个人的看法是这部分题目不指望你写出多么高深的框架而是考查你有没有接触过实际的测试工作流。如果你在简历里写了“熟悉接口测试”但连HTTP方法对应什么语义都说不清楚面试官对你的信任度会直线下降。笔试阶段考这些也起到了同样的筛选作用。关于GET和POST的区别这里多说一句。最准确的描述是语义层面的区别GET通常用于读取资源请求参数放在URL上有长度限制POST通常用于创建或修改资源参数放在请求体里没有长度限制。网上流传的“GET安全POST不安全”这个说法不准确所谓安全是指该请求不会修改服务器数据跟密码会不会被抓包是两回事。考题如果问“以下关于GET和POST的说法正确的是”要优先选语义描述最精确的那个选项而不是带“安全性”字眼的选项。6. 从这套题延伸出的复习策略6.1 用“错题反向扩展法”把一套题榨干把这套题做过一遍之后我强烈建议做一个动作把错题或者蒙对的题拿出来给每道题写三行笔记。第一行写核心知识点第二行写我当时为什么错第三行写一个由这道题延伸出来的新问题。比如我做错了一道关于TCP状态迁移的题第三行就问自己“如果客户端在TIME_WAIT状态收到SYN怎么办”。答不上来的就去查资料。这个过程比盲目刷十套新题还管用。这个方法的底层逻辑是人的记忆对“被自己加工过的信息”保持时间最长。简单的对答案只停留在浅层加工而写笔记逼你用自己的语言重新组织知识记忆效果完全不同。我当年用这个方法复习一个秋天下来整理了几十道扩展题秋招笔试通过率肉眼可见地提高了。6.2 时间分配建议把力气花在产出比最高的部分如果你也是近期要笔试、时间有限我的建议是先把测试基础、HTTP、数据库SQL这三块复习透。原因很简单这三块是客观题的出题大户而且知识点相对固定复习投入产出比最高。操作系统和编程语言可以排在第二优先级这些科目内容范围广但深度要求不高掌握高频考点即可。做题的节奏上建议第一遍不限时目的是把所有不会的知识点都暴露出来第二遍限时模拟真实考试环境训练做题速度和题目间的取舍能力。千万别在第一遍的时候就直接做限时训练那样会为了赶时间草率作答复盘价值大打折扣。顺利的话第二遍做完之后你对考点的熟悉程度会有质的提升。6.3 最后分享一个实操技巧题目选项里藏着答案线索最后说一个我刷客观题时发现的小规律纯属个人经验不一定绝对但值得参考很多测试基础类的客观题正确答案往往是最“讲原则”的那个选项。比如问缺陷处理流程正确答案大概率包含“提交、确认、修复、回归、关闭”这条完整链路问测试用例设计正确答案通常强调“覆盖需求”而不是“覆盖代码”。如果某个选项的描述流露出“省事”“跳过”“以后再补”的意思那基本可以排除。这个技巧背后其实有逻辑因为测试工程师这个岗位天然要求严谨和周全出题人在设计正确选项时也会下意识地把这种职业特质放进答案里。当然这只是辅助手段在主观判断时有帮助但真正做题还是得靠实打实的知识点储备。我个人的体会是笔试刷题的意义不在于“押中原题”而在于通过做题把自己头脑中的知识网络重新织一遍。这套顺丰科技的题目帮我做到了这一点。如果你正在准备测试工程师的秋招不妨按我上面说的思路找一套类似的真题认真过一遍把错题背后的知识点一个一个拎出来嚼透。等你做完两三套这样的题再去看新题时会发现大部分题目都似曾相识不是因为题目重复而是因为考点背后那些底层的原理是通的。