1. 这份笔试考的是什么:整体设计与考察思路拆解
广联达2018年那场测试工程师校招笔试,我印象很深。当时岗位面向计算机相关专业,挂在名字里的“计算机相关专业”六个字就很说明问题:他们不想要只会点按钮的功能测试,而是想招能跟开发顺畅沟通、能理解系统底层逻辑、能自己动手解决问题的人。整套卷子做完我的第一反应是——题不难,但很“密”,覆盖范围广,每道题都在逼你把知识用起来,而不是背概念。
作为后来自嘲“用笔试当敲门砖”的过来人,我想把这套题完整复盘一遍。它不只是广联达一家的风格,也是2018年前后国内中大型软件企业测试岗位笔试的典型样本。如果你是正在准备测试笔试的应届生、打算从开发或运维转测试的工程师,或者想系统梳理测试岗位知识体系的朋友,这篇文能帮你少走不少弯路。
1.1 从岗位JD反推笔试重点
当年广联达测试工程师的JD里,明确写了“计算机相关专业”“熟悉软件测试流程”“有自动化测试或性能测试经验者优先”之类的要求。从这条JD回推卷面设计,就能看出笔试在刻意筛选三类能力:技术基础、测试思维、问题定位能力。
广联达是做建筑行业信息化软件的公司,产品线涉及造价、算量、施工管理、BIM协同这类业务逻辑复杂的领域。这类软件不像电商App那样页面简单、流程短,而是存在大量专业术语、角色权限、数据关联。所以笔试里测试理论部分不会只问“什么是黑盒测试”,而是更侧重“给你一个复杂业务场景,你怎么设计用例”。另外,因为建筑软件的数据精度要求高、逻辑链路长,卷子里对数据库和Linux的考查比例也明显偏高,这和互联网公司“重框架、重算法”的风格有一定差异。
这套题从结构上大体分成五个模块:计算机基础、测试理论与用例设计、数据库与Linux操作、编程逻辑题、开放性场景题。分值占比大致是计算机基础30%、测试理论25%、数据库与Linux 20%、编程与逻辑15%、场景题10%。整体看下来,纯背书能拿到的分有限,拉开差距的都在分析和设计题上。
1.2 为什么计算机相关专业要考这么多基础
很多准备测试岗的同学会问:测试不是点点点吗,为什么要考数据结构、考操作系统、考计网?这个问题我在入了行之后才彻底想明白。测试工程师本质上是一个“质量守门员”,日常工作中做的每一件事都需要基础功底托底。
比如定位线上问题,你得会看Linux日志、会用命令查端口和进程;排查数据问题,你得会写SQL去比对预期结果;评估一个接口的性能瓶颈,你得理解并发、锁、内存这些概念;设计自动化测试框架,你又绕不开数据结构、编程语言的运行机制。计算机基础不是用来直接解题的,但它是你理解“系统为什么会这样工作”的底层框架。
有一道我至今记得的投资回报率极高的题:“进程和线程的区别”。这道题几乎年年出现在各种测试笔试里。很多人能背出“进程是资源分配的基本单位,线程是CPU调度的基本单位”,但面试官真正想听的是你能不能结合场景说清楚——为什么一个进程崩溃不一定影响其他进程,而一个线程死锁可能拖垮整个服务。一个测试工程师如果连这点都讲不明白,遇到多线程并发类的bug时基本无从下手。
2. 计算机基础题:看似送分实则是淘汰栏
2.1 数据结构与组成原理的常见出题方式
计算机基础这一块,卷子里出题方式很典型:选择、填空为主,偶尔穿插简答。数据结构部分常考栈与队列的区别、二叉树三种遍历、常用排序算法的时间复杂度与稳定性、哈希表冲突解决方案。这里有一个规律:出题人不会让你手写红黑树,但一定会用选择题考验你“遇到场景选哪种结构”。
比如括号匹配、函数调用、浏览器后退功能,对应的数据结构是栈;打印机任务、消息队列,对应的是队列。这种题目考的不是记忆,而是你能不能把抽象结构映射到现实场景。测试人员在设计用例时恰恰需要这种映射能力——拿到一个功能,你得能快速判断它的数据流、状态流转和边界条件。
计算机组成原理部分会考进制转换、原码反码补码、浮点数精度丢失这些基础题。很多非科班同学看到“浮点数精度”直接懵,但这恰恰是测试工作的高频考点。做财务软件、造价软件,金额计算出现0.30000000000000004这种结果就是严重缺陷。笔试里考这道题,其实是在暗示你:测试这个岗位要有“数据敏感度”,不能放过任何看起来微小但影响用户核心利益的异常。
2.2 Linux与数据库考点及答题盲区
Linux题在2018年的卷子里占比不低,而且题型很务实。我记得有一道题是“从access.log中统计访问次数最多的前10个IP”,要求写出命令。这题放在今天依然是面试经典,标准答案是:
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10这道题考查的知识点其实是一个链条:awk取列、sort排序、uniq去重计数、sort -rn按数字倒序、head取前N行。很多人知道每个命令单独怎么用,但串在一起就卡壳,说明平时只背命令不练场景。测试人员排查线上问题时,这类“组合命令”的使用频率非常高,比如查某段时间的错误日志、统计接口响应码分布、定位CPU占用高的进程,本质都是同样的思路。
数据库题的经典出法是给两张表,让你用SQL查出指定结果。我遇到的是一道“查学生成绩平均分大于80的班级,按平均分降序排列”的题,标准写法是:
SELECT class, AVG(score) AS avg_score FROM student_scores GROUP BY class HAVING AVG(score) > 80 ORDER BY avg_score DESC;这道题最大的坑在于:很多新手会写成WHERE AVG(score) > 80,然后在脑子里纠结为什么报错。WHERE是筛选行的,HAVING才是筛选分组后的聚合结果的。这种细节恰恰是笔试想筛选的——测试人员写SQL不比开发少,如果连这个都分不清,日常验证数据时容易得出错误结论。后来我面试测试岗位候选人时,遇到能主动说出“这里必须用HAVING因为AVG是聚合函数”的,基本印象分都不错。
2.3 网络和操作系统里的高频陷阱
网络题考查的深度不算高,但陷阱多。常见的是“TCP为什么需要三次握手”“HTTP与HTTPS的区别”“Cookie和Session的区别”“301和302的区别”。这里面每一道题都有标准答案,但如果只背答案,遇到变体题就会露馅。
比如“TCP为什么需要三次握手”,比较通透的回答不是“因为要确认双方收发能力”,而是把它讲成一个类比:两个人打电话,至少要经历“你能听到我吗”“我能听到你,你能听到我吗”“我能听到你”三个来回,才能确定双方通信链路都通畅。如果只有两次握手,服务端无法确认客户端的接收能力;如果四次,又浪费了一次往返。测试人员在排查接口超时、连接重置问题时,如果能从握手层面分析,很多疑难问题会豁然开朗。
操作系统部分常考死锁的四个必要条件、进程与线程区别、内存溢出和内存泄漏的区别。内存泄漏这一点,做移动端测试的一定要重点掌握。App长时间运行后内存持续上涨,大概率是内存泄漏;如果程序直接崩溃,可能是内存溢出。2018年移动测试刚进入精细化阶段,广联达这种重度软件公司对这类问题的敏感度比一般公司更高。
3. 测试理论题:怎么把“背概念”答成“有经验”
3.1 测试用例设计的经典套路与答题框架
测试理论部分,几乎每套题都会有“请为XX功能设计测试用例”的大题。广联达那年给的是“登录功能”,这个题目看起来简单,但答得好不好一眼就能看出来。
初级答法是把正常登录、错误密码、用户不存在这些列一遍就完事。高级答法是用系统性的方法组织:先划分等价类和边界值,再画场景流程,再考虑异常和容错。我建议按这个框架作答:
- 功能测试:正常输入、错误输入、为空、超长、特殊字符、前后空格
- 安全性:SQL注入、密码加密传输、验证码失效、多次失败锁定
- 兼容性:不同浏览器、不同操作系统、不同分辨率
- 性能:并发登录、弱网环境、快速重复点击
- 体验:光标定位、错误提示清晰度、回车键默认提交行为
这个框架的价值不在于列得全,而在于体现了测试人员的思维路径:先功能、再安全、再兼容、再性能。面试官看到这种答案,会觉得你是做过事的人,不是背题库的人。
我整理当年答题时常用的表格模板,考场上直接套用可以快速组织思路:
| 编号 | 测试项 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| TC001 | 正常登录 | 已注册账号 | 输入正确用户名密码,点击登录 | 登录成功,跳转首页 | P0 |
| TC002 | 密码错误 | 已注册账号 | 输入正确用户名、错误密码 | 提示“密码错误”,不跳转 | P0 |
| TC003 | 用户名为空 | 登录页面 | 密码填写,点击登录 | 提示“请输入用户名”,不提交 | P1 |
| TC004 | SQL注入 | 登录页面 | 用户名输入' OR '1'='1 | 登录失败,不泄露数据 | P0 |
3.2 冒烟测试、回归测试这些词,面试官想听到什么
简答题里高频出现“什么是冒烟测试”“什么是回归测试”“黑盒白盒的区别”。这类题看似送分,但拿满分不容易。以“冒烟测试”为例,如果只写“冒烟测试是测试主干功能是否可用的验证”,能得基础分,但拿不到高分。
更好的答法是把它放到流程里讲:开发提测之后,测试人员先执行一轮覆盖核心功能的冒烟测试,如果主流程都跑不通,直接打回,不进入详细测试阶段。冒烟用例的选取原则是最小化、最快速度覆盖最高风险路径。这样回答,面试官能看到你理解“冒烟”在项目管理中的价值:它是提测质量的闸门,能帮团队省下大量无效工时。
回归测试也有类似答题逻辑。不要只是说“修改代码后重新测试”,而要补充:“回归测试的范围不完全由本次改动决定,还要评估改动影响到的上下游模块,以及曾经出过问题的历史区域。”这个认知在广联达这类大型软件公司尤其重要——建筑软件模块多、依赖重,一次小的数据字典改动可能影响到报表、打印、权限等多个模块。能写出以上补充的,分数自然不会低。
3.3 Bug报告的艺术:会找问题更要会描述问题
测试理论模块最后一类题,会给你一段描述让你判断是不是一个合格的Bug单,或者让你写一个Bug单。很多人在这里栽跟头,因为平时习惯口头描述Bug,没有形成书面化、结构化的习惯。
一份合格的Bug单至少要包含:标题(概括问题)、环境(操作系统、浏览器版本、软件版本)、前置条件、复现步骤、预期结果、实际结果、严重程度、优先级、日志与截图。我当年第一次写Bug单就被开发怼过:“这个Bug我没法复现,你给的步骤不够完整。”那次教训让我明白:测试人员最大的价值是“可复现地描述问题”。
这里分享一个经验:当你写“我点了按钮就报错”时,开发一定无从下手。但如果写成“在Windows 10 + Chrome 120.0环境下,用已登录账号进入项目列表页,点击第三行项目的‘编辑’按钮,页面在1秒内弹出500错误提示,并停留在当前页,控制台输出Uncaught TypeError: x is not a function”,开发拿到这条Bug单,基本可以不问一句就直接开干。
4. 自动化与性能方向:2018年的加分项,现在的基本功
4.1 自动化测试怎么答才能拿高分
2018年的笔试卷里,自动化属于“加分项”,会的人不多,分会给得很慷慨。现在回头看,那时会自动化的人现在都已经是团队骨干了,这个方向确实值得下功夫储备。
卷子里关于自动化的考题大致是:简述Selenium自动化测试的原理、元素定位的几种方式、什么是隐式等待和显式等待、做App自动化用什么工具。如果只背结论不够,还要会解释为什么。
比如元素定位,Selenium支持id、name、className、xpath、cssSelector等方式。答题时如果能补充一句“优先使用id定位,因为id在页面中唯一且稳定,xpath尽量少用绝对路径,否则页面结构一调整脚本就挂”,这个回答立马有了实战感。关于等待,显式等待和隐式等待的区别不只是“一个等一个不等”这么简单。隐式等待是全局的轮询机制,显式等待可以针对单个元素设置条件和超时时间。我见过很多人在自动化脚本里只用隐式等待,结果页面局部加载慢时用例随机失败,改用显式等待或者结合重试机制才稳定下来。
App自动化方面,当年问的是Appium为主。Appium的核心思路是基于WebDriver协议,通过iOS和Android原生驱动的桥接实现跨平台自动化。答题时能说清楚这个架构,比啰嗦一长串安装步骤要有价值得多。此外,如果能提到真机兼容性测试、机型适配、弱网模拟这类实践概念,会显得不是纸上谈兵。
4.2 性能测试的核心逻辑和答题突破口
性能测试在当年卷子里占比不大,一般就一两道简答题。但凡是考了,分数含金量高。常考的是“性能测试有哪些指标”“如何分析性能瓶颈”。
指标这块,必须覆盖:并发用户数、TPS(每秒事务数)、响应时间、错误率、资源利用率(CPU、内存、磁盘IO、网络带宽)。很多人会漏掉“思考时间”这个概念——用户操作之间的停顿时间。性能测试脚本如果不加思考时间,压出来的TPS可能虚高,和生产环境实际表现差距很大。
分析性能瓶颈的思路可以按层次展开:先看应用层日志有没有异常报错,再看数据库有没有慢查询,然后看中间件(比如Redis、消息队列)是否有堆积,最后看系统资源是否达到瓶颈。这个过程像排查水管的堵点,需要一层层往下探。我当年在卷子上画了一条“用户请求→网关→应用→数据库”的链路,并标注每一层可能的问题点,后来面试时面试官专门问了这题的思路,说这个答法让他印象深刻。
4.3 安全与移动测试的延伸考点
随着热度进来,安全测试、渗透测试、车载测试、App测试这些词现在越来越热,当年卷子里虽然没有专门的安全题,但有两道选择题涉及SQL注入和XSS。只要会区分“被动攻击”和“主动攻击”,基本能答对。
现在准备测试岗的同学,安全方向至少要知道OWASP Top 10里的常见类型,尤其是SQL注入、XSS、CSRF、越权访问。不需要会渗透,但要能从测试角度写验证用例。移动测试除了功能,还要关注启动时间、内存占用、流量消耗、弱网稳定性、崩溃率这些专项。比如弱网测试,可以用Charles或Network Link Conditioner模拟高延迟、丢包等场景,观察App是否有合理的超时和重试机制。
车载测试是这几年兴起的细分方向,它跟互联网软件测试最大的区别在于安全等级高、对实时性和稳定性要求苛刻。如果你对传统软件测试应试已经比较熟练,可以把车载测试作为差异化方向储备。不过2018年那会儿还不需要考虑这些,今天在这里补充,是想让准备笔试的朋友知道:测试领域在快速演进,卷面上不考的东西,面试桌上可能就会聊起来。
5. 实操演示:把自己当成考生走一遍完整答题流程
5.1 选择题的速判技巧,怎么又快又稳
笔试开场是选择题,时间紧,很多人紧张到在选择题上浪费太多时间。我总结了一套速判逻辑,供你参考。
看到“下列排序算法中,哪种是不稳定的”,脑海里要瞬间闪过:堆排序、快速排序、希尔排序、选择排序是不稳定的;冒泡、插入、归并、基数排序是稳定的。只要记“快些选一堆”这个口诀(快排、希尔、选择、堆排),一秒锁定答案。看到“栈的特点”直接反射“先进后出”,看到“队列”直接反射“先进先出”。题目文字再花哨,本质就是考这些基础特性。
看到HTTP状态码时,我的判断顺序是:2开头代表成功,3开头是重定向,4开头是客户端错误,5开头是服务端错误。如果选项里有“404”,立刻联想到“请求的资源不存在”;“500”则对应“服务器内部错误”。这种条件反射式的知识结构,考前对着刷两遍题就能建立,性价比很高。
还有一类常识判断题,比如“64位操作系统最大支持多少内存”,这类题如果拿不准就直接跳过,不要恋战。选择题的规则是“选对得分”,不选不扣分,与其卡在一道题上耽误后续大题,不如先跳过,把时间留给真正的大题。我当年策略是先做完所有有把握的,最后再回头补做拿不准的,整张卷子基本没空题。
5.2 一道典型编程题的完整作答过程
当年编程题大概率的考察方向集中在字符串处理、数组操作、排序。给你一道我记忆很深的典型题:“给定一个字符串,输出每个字符出现的次数,按出现次数降序排序,如果次数相同则按字符的字典序升序排列。”
拿到题先不急着写,理清思路:用字典统计字符频率,再按规则排序,最后格式化输出。我用Python给出一个参考实现:
from collections import Counter def count_and_sort(s: str): if not s: return "" counter = Counter(s) # 先按次数降序,再按字符字典序升序 sorted_items = sorted(counter.items(), key=lambda x: (-x[1], x[0])) return "\n".join(f"{ch}: {cnt}" for ch, cnt in sorted_items) print(count_and_sort("banana"))这道题的关键点有两个:一是排序规则的实现,Python的sorted函数用元组作为key时,可以同时处理两级排序条件;二是空字符串的边界处理,能写上去会让阅卷人觉得你考虑周全。如果编程能力弱,写不出完整代码,也要把思路写出来:“用哈希表统计→按规则排序→格式化输出”,同时标注边界情况。这样做,即使代码没跑通,也能展示逻辑能力,拿到一半左右的过程分。
另外,测试人员写代码和开发写代码有一个明显的区别:测试人员更关注“验证”思维。拿到任何编程题,做完之后要补充自己的验证用例,比如空字符串、单个字符、全是相同字符、包含数字和空格的长字符串。卷面上就算不要求写,我也建议在代码旁边用注释标一下自测用例,这是完全符合测试岗位思维的加分做法。
5.3 面试官视角的评分标准与时间分配
根据我对笔试的复盘和后来参与出题的经验,阅卷人会快速按模块扫分,重点看简答题和编程题里有没有“关键词”“专业感”和“边界思维”。选择题分值有限,决定不了最终结果;大题才是区分点。
时间分配上,我建议60分钟的卷子这样切:选择题15分钟、简答题20分钟、编程题15分钟、场景题10分钟。编程题一定要花时间把思路想清楚再写,不要上来就敲代码,容易漏边界条件。场景题是拉开层次的关键,宁可简答题少写两句,也要给场景题留足时间。
打个比方,笔试就像爬山:选择填空是平缓的山脚,人人可走;简答题是山腰,需要储备;编程题是陡坡,很多人卡在这里;场景题是山顶的雾气,能不能看清全局,靠的是日常积累。很多人不是能力不够,而是时间分配失衡,导致最后两道大题草草收场。
6. 常见问题与避坑指南
6.1 答题中的高频失误,能避一个是一个
我把这些年看过的笔试题和自己踩过的坑,汇总一下。
第一个误区是简答题只写概念不写场景。问“什么是黑盒测试”,低分回答是“不关注内部逻辑,只测试功能是否正常”。更好的回答是:“黑盒测试把被测系统视为黑盒,测试人员通过输入和输出来验证功能是否符合需求,常用方法包括等价类划分、边界值分析、因果图等,主要用于功能测试和系统测试层面,优点是测试角度贴近用户,缺点是可能遗漏代码内部的逻辑分支。”这一对比,后者明显高出几个段位。
第二个误区是SQL题目忽略题目条件。比如要求“按班级分组并筛选平均分大于80”,不少人写完了GROUP BY却忘写HAVING,或者把HAVING写成了WHERE。这类细节在这种基础题上丢分非常可惜。
第三个误区是Linux题只背命令不背参数。awk取列、sort去重、uniq计数,每个工具单独拎出来都知道,合在一起就写不对,说到底还是平时缺少“组合使用”的练习。建议考前专门练三组命令组合:统计日志、查端口进程、看资源占用。
6.2 笔试的时间节奏和应对策略
拿到考卷先别急着动笔,花2分钟浏览全卷,标记一下哪些题有把握、哪些题没思路。我的习惯是:选择题直接顺着做,遇到卡壳超过1分钟的标个记号先跳过;简答题先挑自己最有把握的写,因为大题是按点给分,多写一个关键词就多一分;编程题无论如何留出15分钟;场景题最后答,但也必须答,空题是笔试大忌。
有一个小技巧:不会的简答题也不要空着。把题干中的关键词用自己的话拆开解释,再加一句“从测试角度看,这个问题主要影响XX方面”,往往能触发阅卷人的“关键词给分”,至少不会零分。比如问“什么是兼容性测试”,即使你不太确定,也可以写“在不同操作系统、浏览器、分辨率下验证功能表现一致性的测试”,这句话的核心关键词就是“不同环境”和“一致性”,阅卷人就能给到基础分。
6.3 笔试只是开始:后续的复盘与面试衔接
笔试结束后别光等通知,把没把握的题目默写下来,当晚就翻书查漏补缺。面试官很可能拿着你的笔试卷追问,比如“你SQL题里用了HAVING,能讲讲为什么不用WHERE吗”,这时候如果答得流畅,反而能制造加分点。
如果笔试挂了,也不要只怪题难。复盘自己到底是基础题失分多,还是大题没时间做,然后按模块补短板。我见过不少同学连续面了好几家都挂在同一个环节,问题往往不在运气,而是某个知识模块存在系统性盲区。这次考砸了不要紧,下次面对同样的问题不再犯错,就是实实在在的进步。
最后分享一个个人体会:这套题放在今天看,计算机基础、SQL、Linux、用例设计这些考点依然是测试面试的底子。技术工具会升级,平台会变化,但“理解系统、拆解需求、严谨验证、清晰表达”这四项能力永远不会过时。我当年从功能测试转岗,靠的就是把每一道错题和每一次被拒的面试都当作学习材料,一步步补齐了计算机基础和自动化测试的短板。希望这篇复盘能帮你少走一些我当时走过的弯路。