简介:这份资源是腾讯测试开发工程师笔试题的回忆版整理,面向准备互联网大厂测试开发岗位面试与笔试的求职者,尤其适合需要系统梳理Linux、开发技术、数据库、中间件与软件测试五大知识模块的初中级考生。压缩包内共1个docx文档,体积约18KB,以文字题目与参考答案的形式呈现,便于打印或导入笔记软件反复查阅。内容覆盖Linux常用命令与目录区别、HTML行块标签与JavaScript运行环境、Session与Cookie差异、数据库三范式与事务、MySQL优化及SQL增删改查语句、Apache日志重定向问题,以及用等价类划分法设计三角形测试用例等典型考点,基本还原了笔试的题型结构与考察重点。目前已有1550人学习下载,可作为刷题自测与查漏补缺的参考材料,帮助读者快速定位薄弱环节并针对性复习。
1. 测试开发笔试题到底在考什么:从一道“三角形”题说起
如果你拿到一份测试开发工程师的笔试题,第一眼看到“输入三角形三条边,判断能否构成三角形、属于哪种类型,请用等价类划分法设计测试用例”,可能会觉得这题也太简单了——不就是判断三角形吗?但真正动笔时你会发现,问题不在于三角形本身,而在于你能否系统地把“所有可能的情况”拆干净:边长是正数还是负数?三条边能不能构成三角形?等边、等腰、普通三角形怎么分?边界值取多少?这就是测试开发岗笔试的核心逻辑——它不考你会不会写一个判断三角形的函数,而是考你能不能站在“找茬”的角度,把功能拆成可验证的输入输出组合。
这份“腾讯测试开发工程师笔试题回忆版”整理的正是这类考题的真实面貌。它覆盖了 Linux 常用命令、前端与 JavaScript 基础、数据库 SQL 与范式、中间件日志行为、软件测试方法五大板块,是一份典型的测试开发岗位知识面切片。搞懂它,你不仅能看清这类笔试的出题套路,还能顺带把日常开发中那些“好像知道但说不清楚”的概念一次性厘清。下面就从这份回忆版里出现频率最高的几个知识域入手,把每个概念讲透。
2. Linux 命令与目录:为什么测试岗总爱考这些
2.1 从 top 和 free 看“系统状态”怎么读
测试开发岗考 Linux,不是要你成为运维专家,而是要求你能在排查环境问题时快速定位。回忆版里第一道 Linux 题就是“动态显示当前系统进程用户的使用情况”,标准答案是top命令。top像一个实时仪表盘,每隔几秒刷新一次,把 CPU 占用、内存消耗、运行中的进程按资源使用率排序展示出来。和它容易混淆的是ps,ps更像拍一张快照,执行那一刻有哪些进程、各自什么状态,打完就结束,不会持续刷新。所以题目里“动态”两个字是关键区分点——要持续观察就用top,要一次性抓取进程列表就用ps aux或ps -ef。
紧接着的free -m考的是内存查看。free命令输出里有一列叫“available”,很多人只看“free”那一列,以为空闲内存就是剩余内存,其实free列只统计了完全没被碰过的内存,而 Linux 会把大量内存拿去做缓存(buff/cache),这些缓存随时可以回收。-m参数只是把单位从 KB 换成 MB,让数字更易读。测试环境里如果发现服务变慢,先跑一次free -m看 available 还剩多少,比盯着 free 列靠谱得多。
2.2 crontab 与 find:周期任务和文件检索的固定套路
“查看周期执行的任务”对应crontab -l,列出当前用户配置的定时任务。这里有个容易翻车的点:crontab -l只显示当前用户的,要看系统级的定时任务得去/etc/crontab和/etc/cron.d/下面找。测试岗考这个,是因为很多测试数据清理、日志轮转、定时回归任务都靠 cron 驱动,你得知道去哪儿确认任务到底配没配、配得对不对。
文件查找题给的是“在/usr/proc目录下找名称包含 test 的文件”,答案find /usr/proc -name "*test*"。-name后面跟的是通配模式,星号代表任意字符,所以*test*能匹配test.log、mytest.txt、contest等各种形态。如果只想找普通文件不想带目录,可以加-type f;想忽略大小写就换成-iname。这些参数在排查“配置文件到底放哪了”的时候特别顺手。
2.3 /etc 和 /proc 的区别:一个存配置,一个存状态
这道题问的是两个目录的本质差异。/etc是静态配置的家,里面的文件是人为写好的、重启后依然存在的,比如网络配置、服务启动参数、用户账户信息。/proc则是内核暴露出来的虚拟文件系统,里面的内容不在磁盘上,而是内存中系统状态和进程信息的实时映射,比如/proc/cpuinfo看 CPU 信息、/proc/meminfo看内存详情、/proc/[pid]/看某个进程的运行状态。打个比方,/etc像家里的装修图纸和说明书,/proc像墙上挂的实时监控屏——一个是你设定的,一个是系统正在发生的。测试环境里想确认某个参数改没改,去/etc找配置文件;想确认进程实际用了多少内存,去/proc里翻。
提示:
/proc下的文件大多只读,不要试图用编辑器修改,改了也不会持久化。
3. 前端与 JavaScript:那些“好像会但说不清”的考点
3.1 行标签与块标签:布局行为的底层分水岭
回忆版里问“html 中的行标签和块标签分别有哪些”,标准答案给的是行标签<span>、<a>、<label>,块标签<p>、<div>、<h1>。但光背名字没用,关键是理解行为差异:块标签默认独占一行,宽度自动撑满父容器,可以设置宽高和外边距;行标签则跟文字排在同一行里,宽高由内容决定,垂直方向的 margin 往往不生效。测试时如果发现某个元素“怎么调都不换行”或者“设了高度没反应”,先确认它是不是行标签,这比盲目改 CSS 高效得多。
3.2 Session 与 Cookie:一个在服务器,一个在浏览器
这道题几乎是测试岗笔试的常客。Cookie 是服务器发给浏览器的一小段数据,浏览器存下来,之后每次请求自动带上,所以它存在客户端,大小通常限制在 4KB 左右。Session 则是服务器端开辟的一块存储空间,用来记录某个用户的会话状态,浏览器手里只拿一个 session id(通常也是通过 Cookie 传递)。通俗地说,Cookie 像你手里的一张会员卡,Session 像商家后台的消费记录本——卡上只有卡号,具体消费明细在商家那里。测试登录态相关功能时,清掉 Cookie 往往等于退出登录,但服务器上的 Session 可能还没过期,这个时间差就是很多“退出后还能访问”缺陷的根源。
3.3 Get 与 Post:不只是“参数放哪”的区别
回忆版里问 Get 和 Post 提交的区别,标准答案说 Get 把参数附加到 URL,Post 以表单形式提交。这没错,但测试岗更该关注的是行为差异:Get 请求可以被浏览器缓存、可以存书签、会留在历史记录里,URL 长度受浏览器和服务器限制;Post 请求默认不缓存、不留在历史记录,参数放在请求体里,理论上没有长度上限(实际受服务器配置约束)。所以涉及敏感信息或大量数据提交时用 Post,单纯查询用 Get,这是设计层面的约定,也是测试用例该覆盖的边界。
3.4 一道容易被忽略的 DOM 操作题
document.getElementById("").style.fontSize="1.5em"这句代码考的是 DOM 操作的基本链路:先按 id 拿到元素,再访问它的 style 对象,最后设置 fontSize 属性。1.5em是相对单位,表示当前元素字体大小的 1.5 倍。测试前端功能时,如果某个字号调整没生效,先确认 id 写对没有、元素是否真的存在,再检查是不是被更高优先级的 CSS 规则覆盖了。这类题看似简单,实际考的是“你能不能把一行代码拆成可验证的步骤”。
4. 数据库与 SQL:范式、事务和那几道手写题
4.1 三范式到底在约束什么
回忆版里对三范式的解释比较简略,这里补全一下通俗版本。第一范式要求每个字段不可再分,比如“地址”不能塞成“省市区街道”一长串,得拆成独立列;第二范式要求非主键字段完全依赖于主键,不能只依赖主键的一部分(针对联合主键场景);第三范式要求非主键字段之间不能有传递依赖,比如有了“部门编号”就不该再存“部门名称”,否则部门改名时两处数据可能不一致。测试岗考范式,是因为很多数据冗余和更新异常缺陷,根源就是表设计没满足范式,你能看出设计问题,就能提前预判哪些操作可能出脏数据。
4.2 事务的四个特性与测试关注点
事务被定义为“一系列数据库操作,具有原子性、一致性、隔离性和持久性”。原子性指要么全做要么全不做;一致性指事务前后数据满足约束;隔离性指并发事务之间互不干扰;持久性指提交后即使断电也不丢。测试支付、下单这类涉及多表写入的功能时,重点验证的就是“中间某一步失败,前面已写的能不能回滚”,这就是原子性的实际体现。
4.3 三道 SQL 手写题的参数说明
回忆版给了三组操作:更新张三生日为当前时间、删除李四、插入王五记录。对应 SQL 如下:
-- 将名称为张三的记录生日更新为系统当前时间 UPDATE user SET birthday = NOW() WHERE name = '张三'; -- 删除名称为李四的记录 DELETE FROM user WHERE name = '李四'; -- 插入一条王五的记录,性别女,生日 2012-3-3 INSERT INTO user (name, sex, birthday) VALUES ('王五', '女', '2012-3-3');NOW()返回数据库服务器当前时间,注意它和CURDATE()的区别:前者带时分秒,后者只有日期。WHERE name = '张三'如果匹配到多条同名记录会全部更新,测试时要确认业务上是否允许重名。插入语句里列名和值必须一一对应,字符串用单引号包裹。
查询访问 id 较高的前 10 条记录,用ORDER BY id DESC LIMIT 10,先按 id 降序排,再取前十条。字符串拼接题用CONCAT(Firstname, '.', familyname)把姓和名用点号连起来,输出形如J.J.Jack的结果。这类题考的是对CONCAT、ORDER BY、LIMIT这些基础函数的熟练度,测试岗日常写校验 SQL 时天天用。
5. 中间件与测试方法:日志行为和等价类划分
5.1 Apache 日志被 mv 之后到底写去哪了
回忆版里这道题很有意思:Apache 正在运行时执行mv access_log access_log.bak,日志会打在哪里?答案是仍然写在原来的文件描述符指向的位置,也就是被重命名后的access_log.bak里。因为 Linux 下进程打开文件后持有的是文件描述符,重命名不改变描述符指向的 inode,所以 Apache 感知不到文件名变了,继续往“老地方”写。但如果重启 Apache,它会按配置重新打开access_log这个路径,此时如果原文件不存在就新建一个,日志就回到新文件里了。这个知识点在排查“日志突然不更新”时特别有用——先看是不是有人挪了文件但没重启服务。
5.2 等价类划分:把无穷输入变成有限用例
回到开头那道三角形题。等价类划分的核心是把输入域切成若干“等价”的集合,每个集合里任取一个值,测试效果相同。对三角形判断函数,有效等价类包括:能构成普通三角形、能构成等腰三角形、能构成等边三角形;无效等价类包括:任意一边小于等于零、两边之和等于第三边、两边之和小于第三边。每条无效等价类至少设计一个用例,有效等价类覆盖到每种输出类型。这样既不会漏掉关键分支,又不会把用例数堆到爆炸。测试开发笔试考这个方法,看的是你有没有“分类思维”,而不是死记硬背用例模板。
6. 什么时候该用这份回忆版,什么时候别把它当题库背
这份回忆版的价值在于它勾勒出了测试开发岗笔试的知识轮廓:Linux 命令要能说清用途和参数差异,前端概念要理解行为而不只是背标签名,数据库要能手写基础 SQL 并解释范式与事务,中间件要懂文件描述符这类底层行为,测试方法要能落到具体用例设计上。它适合两类人:一是准备测试开发岗位笔试、想快速摸清考察范围的人;二是日常开发中遇到这些概念总是似懂非懂、想借机厘清边界的人。
但它也有明确的边界。首先,这是一份“回忆版”,题目顺序和表述未必和真实试卷完全一致,个别答案的深度也有限,比如三范式的解释就偏简略,不能替代系统学习。其次,它覆盖的是知识面,不是解题技巧大全——等价类划分只给了一个三角形例子,真到笔试里遇到登录框、搜索框、文件上传,还得自己套用分类思路。最后,技术细节有时效性,比如 IE 并发线程数这类题,放在今天参考价值已经不大,重点应该放在“为什么当年会考这个”背后的并发与性能意识上。
我自己的习惯是,拿到这类回忆版先不急着背答案,而是把每道题改写成“如果我是面试官,我想确认候选人哪项能力”,然后再回头对照自己的理解有没有缺口。比如mv日志那题,表面考命令,实际考的是对文件描述符和进程行为的理解;三角形等价类那题,表面考测试方法,实际考的是分类是否完备。从那以后我每次整理笔试题,都强制自己先写一句“这题到底在考什么”,再去看标准答案,避免陷入背题却不理解的老路。希望这份梳理能帮到你。
本文还有配套的精品资源,点击获取