尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

搜狗校招测试岗笔试复盘:从Linux命令到自动化测试全考点解析

搜狗校招测试岗笔试复盘:从Linux命令到自动化测试全考点解析 2020年秋天我参加了搜狗校招测试岗的第一场笔试。那套题给我留下的印象比后来面的好几家大厂都深——它不像某些公司那样只考八股文也不像另外一些公司那样一上来就是Hard算法题。搜狗这张卷子更像是“用测试的视角去量你整个计算机基础”从Linux命令到SQL从网络协议到自动化测试框架从一道简单编程题到让你写测试用例全部串在了一起。现在回头看这套笔试题基本就是测试工程师校招的“标准照”难度适中但覆盖面极广而且非常考察“能不能站在用户和系统的角度去发现问题”。这篇文章我把当时记得的考点、踩过的坑、复盘后的总结全部整理出来无论你是准备测试校招、社招转岗还是想系统梳理测试基础都有参考价值。1. 这场笔试在考什么整体设计与核心考点拆解1.1 搜狗测试岗的定位为什么这样出题搜狗做输入法、搜索、浏览器这类C端产品用户量大、迭代快、兼容性要求高所以测试岗不仅仅是“点点点”还需要对客户端、服务端、算法侧都有基本认知。笔试题目就是围绕这个定位来设计的既要看你对测试理论的理解用例设计、bug生命周期、测试流程又要看你的硬功底Linux、网络、数据库、编程。我当时拿到卷子第一感觉是“杂”但后来仔细复盘发现每个模块都不是随便出的。比如Linux题考的是日志查看、进程管理和文件处理网络题考的是TCP握手和HTTP状态码SQL题考的是常见的关联查询和去重统计。这些知识点恰恰是测试工程师日常工作中最高频使用的能力。如果你只背了测试概念不熟悉这些基础工具很多题会直接卡住。1.2 考点分布与题型构成这场笔试大约120分钟题型分为以下几类我根据记忆整理成表格题型数量主要考点难度选择题20题左右计算机基础、数据结构、网络、操作系统、测试概念中等偏低简答题3-4题测试用例设计、bug定位思路、测试流程中等编程题2题字符串处理、数组操作、逻辑题中等偏低综合设计题1题针对某个功能设计完整测试方案中等偏上从题型分布可以看出搜狗的笔试更看重“测试思维”而不是纯刷题能力。比如编程题本身不难但题目会要求你写出核心代码后再补充几个典型测试用例。这一点非常“测试岗”因为测试工程师考虑的不只是“代码能不能跑通”而是“哪些输入会出问题”、“边界情况怎么覆盖”。2. 必考的计算机基础Linux、网络与数据库2.1 Linux命令高频题与实战记忆法Linux在测试笔试里基本是必考搜狗这场考了不少。我印象最深的几道题查看占用8080端口的进程lsof -i:8080或netstat -anp | grep 8080实时查看日志文件并过滤关键字tail -f app.log | grep ERROR统计日志文件中出现次数最多的IPawk {print $1} access.log | sort | uniq -c | sort -nr | head -10修改文件权限为755chmod 755 file这些命令看起来简单但笔试一般不会直接问你“命令是什么”而是给你一个实际场景让你选正确的命令组合。比如“某个服务启动失败需要查看启动日志最后的50行并持续跟踪输出”对应的命令就是tail -50f如果你只记得tail不记得-f可能就选错了。我后来总结了一套“场景化记忆法”。不要死背命令而是把常用命令按场景分类查日志less、tail -f、grep -C 5显示上下文5行查进程/端口ps -ef、netstat -tlnp、lsof -i分析文本awk、sort、uniq -c、wc -l排查网络ping、telnet、curl -v、traceroute笔试时遇到Linux题先确认题目是“要你完成什么目的”再去匹配命令。很多选项看起来相似但参数不一样结果就差很远。比如head和tailsort和sortedgrep和egrep考试特别喜欢在参数细节上设坑。当时有一道题问如何查看一个很大的日志文件而不把整个文件加载到内存答案是less因为less是分页加载cat会把整个文件读进去内存容易爆。这个点平时写脚本的人会知道但只背命令的人可能踩坑。2.2 网络协议与抓包分析从理论到实战网络题是测试笔试的重头戏因为测试经常要定位问题是前端、后端还是网络链路。搜狗这场考了TCP三次握手、HTTP状态码、DNS解析流程和简单的抓包分析。我记得有题是这样的用户反馈搜索页面经常转圈很久才加载出来作为测试你首先应该排查什么选项包括“看后端日志”“看网络耗时”“直接提bug”“重新部署服务”。正确答案自然是看网络耗时和请求链路因为“转圈很久”说明请求发出去了但响应慢可能是网络、服务端处理或第三方接口的问题。这类题考察的不是死记硬背而是排查问题的思路。三轮握手和数据传输过程的对应是必考题。你需要清楚SYN客户端请求建立连接SYNACK服务端同意建立连接ACK客户端确认连接建立挥手是四次FIN、ACK、FIN、ACK笔试喜欢考“为什么挥手是四次而不是三次”。因为TCP是全双工的双方需要独立关闭连接。测试岗不要求你把TCP/IP卷一整本背下来但握手挥手、超时重传、滑动窗口的基本概念要能说清楚。HTTP状态码也是送分题但很容易混状态码含义测试中的常见场景200成功正常请求301/302重定向网页跳转注意是永久还是临时400请求参数错误接口测试传错参数401未认证没带token403禁止访问权限不足404资源不存在路径错误500服务端内部错误后端异常502/504网关错误/超时挂了代理或者服务超时我当时错了一道题503和504的区别。503是服务不可用比如过载504是网关超时。这两个在实际测试中经常碰到定位思路完全不一样。另外网络题还会结合抓包工具来出比如给你一个Wireshark截图或者tcpdump文本问你“这个请求是否成功”“哪一步耗时最多”。这种题只需要会看基本的TCP三次握手包和HTTP Request/Response结构就能答。你得知道报文里SYN标志位为1表示连接请求ACK标志位为1表示确认连续几个TCP包之间有时间戳可以算RTT如果笔试时间充裕建议你提前在本地用Wireshark抓一次访问网页的包自己数一数三次握手用了几个包DNS请求和HTTP请求的顺序是什么。这种体验比背十遍概念都有用。2.3 数据库SQL测试常用查询与验证数据库也是测试笔试常客因为测试结果需要验证数据落库是否正确。搜狗这场考了SQL的简单查询、关联查询、去重统计和聚合函数。我记得有两道题表student(id, name, age, class_id)查询每个班级的平均年龄按班级正序排列SELECT class_id, AVG(age) FROM student GROUP BY class_id ORDER BY class_id;查询所有没有选课的学生表student和表course中间表scoreSELECT * FROM student WHERE id NOT IN (SELECT student_id FROM score);这类题不算难但有个细节WHERE和HAVING的区别。WHERE是在分组前过滤HAVING是在分组后过滤。笔试经常挖这个坑。测试岗用SQL最多的场景其实是“造数据”和“验数据”。面试官可能不会直接考你复杂的多表连接但一定会让你写一个“统计今天新增用户数”或“查询最近7天订单量趋势”的SQL。所以 GROUP BY 日期函数 聚合函数是必须熟练的。另外笔试还考了“索引的作用”和“慢查询”的基础概念。答案是“加快查询速度但会降低插入和更新速度慢查询指的是执行时间超过阈值的SQL通常通过慢查询日志发现”。测试调bug的时候如果接口响应慢很多时候就是SQL没用上索引你要会看执行计划至少知道EXPLAIN这条命令是怎么回事。数据库这一块我建议你准备一个“测试SQL速查清单”包括增删改查、去重、排序、分组、聚合、多表连接、子查询、limit分页。不要只背语法每个类型的SQL都在本地数据库跑一遍加深印象。3. 测试理论与自动化从概念到框架3.1 测试用例设计与边界值分析法测试理论是测试岗笔试的“本命”板块但恰恰是很多人容易丢分的地方因为它不是背概念而是给你一个场景让你写用例。搜狗这场笔试有一道简答题为“输入框只能输入6-12位字母或数字”设计测试用例。我当时写得比较全现在复盘这类题有一个固定套路功能测试正常输入6位、12位、字母数字混合、纯字母、纯数字边界值分析5位、6位、7位、11位、12位、13位异常输入空值、空格、中文、特殊字符、emoji、超长字符串、SQL注入语句兼容性不同浏览器、不同操作系统、移动端和PC端交互场景输入后回车、输入后失去焦点、粘贴输入、快速连续输入、输入过程中切换窗口边界值分析法是测试笔试的核心考点一定不能只答“正常和异常”。你要把“上点、离点、内点”说清楚。上点就是边界上的值离点是边界附近的值内点是边界内的值。比如6-12位上点是6和12离点是5和13内点可以选9。测试用例至少要覆盖这三个点位。因果图法、正交实验法、场景法也可能会考但最常考的还是等价类和边界值。如果题目问“一个输入框有多种输入条件”你会用判定表或者正交实验来减少用例数量这就比普通同学高一级。我当时还总结了“测试用例设计六问”笔试和面试都通用这个功能要处理哪些正常流程哪些异常输入会导致系统出错有没有边界值和极限值数据之间有没有依赖关系并发操作会怎样用户可能怎么误操作3.2 自动化测试框架Appium、pytest、Selenium自动化测试是校招笔试中的“加分项”也是近年来的热门考点。搜狗2020年这场笔试虽然没有直接让写自动化代码但简答题里有“你了解哪些自动化测试框架并简述适用场景”。这就考察你是否真的用过而不是报菜名。我建议你至少深入掌握一个框架的原理比如Appium和pytest。Appium是移动端UI自动化的主流框架。它的核心架构是Appium Server启动一个HTTP服务通过WebDriver协议把客户端指令转发到手机上的bootstrap再通过UiAutomatorAndroid或XCUITestiOS执行操作。笔试如果考Appium大概率会问你“如何定位元素”答案包括id、className、xpath、 accessibility id和UIAutomator的UiSelector。你最好能说出driver.find_element_by_id(com.example:id/button)这种代码而不只是说“我会用”。pytest是Python最常用的测试框架。它有两个让测试更优雅的特性fixture和参数化。fixture可以解决setup/teardown的复用参数化可以一条用例跑多组数据。比如import pytest pytest.mark.parametrize(username,password, [ (admin, 123456), (test, 123456), (, 123456), ]) def test_login(username, password): # 登录测试逻辑 pass这样的代码笔试写出来会很加分。它展示了你会用参数化去覆盖多组测试数据而不是复制粘贴用例。Selenium是Web端自动化测试的主流框架。笔试题常问Selenium的等待方式有哪些答案是强制等待sleep、隐式等待implicitly_wait和显式等待WebDriverWait。重点是后两种的区别隐式等待是全局的轮询判断元素是否存在显式等待是局部的可以等待某个条件成立。如果你能写一段显式等待的代码会更吸引人。另外Jenkins集成持续集成也是高频考点。你要知道自动化测试脚本可以放在Jenkins上定时执行失败时自动发送邮件通知。这个在笔试中可能会以“如何保证回归测试的稳定性”的形式出现。3.3 性能测试与常见指标性能测试在搜狗笔试题中占比不大但有一道选择题考了QPS和响应时间的计算我印象很深。题目大概是一个接口的平均响应时间是200ms单机并发数是100问一秒钟最多能处理多少请求这就引出了并发和QPS的关系。如果你之前没接触过性能测试需要补几个核心概念并发用户数同时发起请求的用户数TPS/QPS每秒事务数/每秒查询数响应时间从发送请求到收到响应的时间错误率失败请求占总请求的比例吞吐量单位时间内处理的请求数量性能测试的一般流程是先做基准测试单用户跑接口看看正常情况下耗时多少再做负载测试逐步增加并发观察什么时候吞吐量到顶、响应时间开始恶化最后做压力测试跑到系统崩溃找出极限值。笔试喜欢用场景判断题比如“接口从50并发增加到100并发响应时间从100ms变成800ms吞吐量几乎不变说明系统可能遇到了什么瓶颈”答案通常是数据库连接池满了或者线程池不够用。解决思路是加缓存、加机器、优化SQL、调大连接池。你可以记住一个简单公式QPS 并发数 / 平均响应时间。如果并发数是100响应时间是0.2秒理论QPS就是500。但实际中因为锁、带宽、CPU竞争通常达不到理论值。性能测试的核心就是找到这个“理论值和实际值之间的差距在哪里”。4. 笔试中的编程题从刷题到测试思维4.1 典型算法题与测试用例编写搜狗2020校招测试笔试的编程题不算难我印象里有两道一道是字符串去重并保持原有顺序另一道是给定一个数组找出只出现一次的数字。这两道题在LeetCode上都是简单或中等难度但你注意测试岗的编程题和开发岗的评判标准不太一样。开发岗只要跑通测试用例就行测试岗还会要求你“写出你想到的测试用例”。比如字符串去重给定字符串abacdbc输出去重后的abcd。最常见的解法是用一个set记录出现过的字符然后遍历字符串不在set里的就加入结果。代码很简单def remove_duplicate(s: str) - str: seen set() res [] for ch in s: if ch not in seen: seen.add(ch) res.append(ch) return .join(res)但笔试之后还有一道隐藏题请为这个函数设计测试用例。你不能只说“输入abcabc输出abc”你得覆盖空字符串全部相同字符无重复字符大小写是否敏感函数默认区分大小写特殊字符、数字字符串长度很大时性能这就是测试思维和开发思维的差别。你在笔试时即使编程题没完全通过如果你能写出清晰的测试用例面试官会认为你有测试敏感度这比AC一道难题更值钱。4.2 手写代码的注意事项校招笔试通常是在牛客网或者赛码网写代码编译器不会给你太明显的提示。我踩过几个坑提醒一下第一注意输入读取方式。有些题目是核心代码模式只让你补全函数有些是ACM模式需要自己处理input()。搜狗那场是核心代码模式相对友好但你还是得提前熟悉牛客的代码编辑器别在考试时花时间找提交按钮。第二手写代码别追求花哨保证可读性。测试岗的代码不要求性能极致但要求逻辑清晰。你的变量名要见名知意不要写一堆a、b、c。如果题目没有明确要求尽量用Python写因为Python代码量少看起来清爽不容易写错。第三一定在本地跑几组测试用例再提交。即使最简单的字符串题也可能因为边界条件出错。我建议你在笔试时养成一个习惯代码写完先在注释里列出计划的测试用例然后逐一代入。比如字符串去重至少要试空串、单个字符、连续重复、不连续重复。第四注意时间复杂度和空间复杂度的说明。有些题目会问“你能否用O(1)空间解决”如果你只会用set去重那空间复杂度就是O(n)。这时候如果时间允许你可以在答案里补充“如果要求O(1)空间可以先将字符串排序再遍历去重”这样即使不是最优解也展示了你对复杂度有意识。4.3 用测试思维解编程题一个实战例子我想再分享一个编程题的例子这道题是“给定一个包含1到n的整数数组其中有一个数字重复找出这个数字”。很多人第一反应是排序后遍历或者用set。但你有没有想过如果数组是只读的而且空间复杂度要求O(1)怎么办这时候可以用“快慢指针”找环的解法也可以直接用数学方法重复数字 数组和 - 1到n的和。sum(nums) - (n*(n1)//2)。因为数组从1到n只有一个重复数字其他数字正好是1到n的排列。这个解法简单、高效、不易错笔试里特别吃香。但作为测试工程师你还需要进一步思考如果重复的数字是负数怎么办如果数组里有多个重复数字怎么办如果n非常大sum(nums)会溢出怎么办这就是测试思维对代码的挑战。笔试不会要求你解决所有情况但你在答案里可以指出这些边界条件并说明在当前条件下你的解法的局限性。面试官看到这样的回答会觉得你是真的在思考问题而不是只会背题。5. 搜狗笔试的现场复盘与避坑经验5.1 时间分配与答题顺序搜狗这场笔试120分钟题量不算大但题目信息量大有些人会在选择题上磨太久导致后面编程题时间不够。我当时的顺序是先快速扫一遍所有题目标记出哪些是送分题、哪些是模棱两可的题、哪些是完全没有思路的题。我建议解题顺序是先做编程题因为编程题分值比例高而且需要大脑清醒时写代码。再做简答题和综合设计题因为这类题需要组织语言输出内容多。最后做选择题因为选择题即使时间不够也可以蒙答案。不过这个顺序因人而异如果你对选择题基础很熟也可以先做选择热身。关键原则是不要在一道题上卡超过5分钟。如果真的没有头绪先在草稿纸上写下已知条件再往下走回头再看可能会豁然开朗。5.2 遇到不会的题怎么办测试笔试考的内容太广总会有盲区。我记得当时有一道题问“tcpdump抓包如何抓取特定端口的流量”我其实只写过基础命令没有专门练过tcpdump就凭印象选了tcpdump -i any port 8080这个选项结果后来验证是对的算是运气好。但运气不能一直指望。更好的方法是遇到不会的题用排除法。选择题通常有四个选项至少能排除一个明显不对的、一个不完整的剩下两个里面再结合“测试的直觉”去猜。比如问“一个bug优先级为P0应该满足什么条件”你肯定知道“系统崩溃、主流程不可用”是P0“界面文案错误”是P2这样即使没背标准定义也能选对。如果简答题不会也不要留白。可以写上你的排查思路“如果遇到这个问题我会先复现再查看日志然后定位是前端还是后端最后提交bug单。”这种答案虽然不够深入但至少展示了你的逻辑框架比空着好。5.3 面试官角度笔试到底想筛什么样的人站在面试官角度一套笔试题目其实想考察三件事第一基础是否扎实。计算机基础这个模块对测试工程师来说非常重要因为测试过程中要接触日志、数据库、网络报文、Linux服务器如果基础薄来了之后什么都要手把手教很难上手。第二是否有测试思维。这一点比单纯会几道题更关键。测试思维体现在给你一个需求你能立刻想到异常路径、边界值、兼容性、性能风险。笔试中的“为函数设计测试用例”“为功能写测试方案”就是专门用来筛这类人的。第三是否能持续成长。校招生经验不多很正常但解决问题的能力更重要。你有没有面对一个含糊不清的问题时主动去定义输入输出有没有在做题时注意到边界条件这些都能看出潜力。我记得搜狗笔试最后一道综合设计题是给一个“输入法候选词排序”的模块设计测试方案。这道题没有标准答案考察的是你能否把“正确性、性能、兼容性、模糊输入、用户习惯”都纳入考量。如果你只回答“输入一个字看候选词对不对”那肯定挂掉。你需要拆分成功能测试单个汉字、词组、长句、拼音全拼/简拼、语音输入等排序测试用户点击率高的词是否排前、固定词库与用户词频如何结合性能测试候选词刷新延迟、内存占用、启动速度兼容性测试不同输入方式、不同系统版本、不同屏幕分辨率异常测试无网络时、服务器返回空时、词库加载失败时如果你能写出这种分层的方案即使有些细节不对面试官也能看出你有结构化的测试思维。5.4 考后复盘我与真题的距离考完当天晚上我专门把记忆中的题复盘了一遍发现自己有四个薄弱点TCP状态迁移中的TIME_WAIT和CLOSE_WAIT区别我当时只有一个模糊印象。数据库索引和最左前缀匹配我背了概念但没有真正执行过explain。Appium的元素定位方式只知道xpath不知道还有resource-id和UIAutomator的解析方式。编程题虽然做出来了但没有写足够多的测试用例导致提交后心里没底。后来我在一个月内用Linux虚拟机把所有高频命令过了一遍用本地MySQL把关联查询和分组统计写了几十遍用Appium在模拟器上跑了一个自动化登录的demo。这些补强动作让我在二面聊自动化和Linux时底气足了很多。所以如果你现在正准备测试岗笔试我强烈建议不要只刷“测试理论”的题而是要拉通基础。毕竟测试工程师是一个“什么都要懂一点”的岗位笔试就是你在短时间内展示综合实力的舞台。6. 一些实用的准备建议6.1 用“测一个功能”的方法去学一条知识链我在准备校招时发现单纯背Linux命令、SQL语法很容易忘。一个更好的方式是把它们组合进一个场景里假设一个用户登录接口出问题了你怎么排查复现问题时你通过浏览器F12看到网络请求500然后用curl -v命令复现接口确认返回500接着登录服务器用tail -f /var/log/app.log查看日志发现空指针异常然后你去数据库查用户表发现用户名带了隐藏空格你再用SQL更新数据修正这个问题重新请求接口返回200。这个完整链路里你会用到网络、Linux、数据库、接口测试的知识还培养了“从用户问题到根因定位”的能力。这种练习方式比刷题高效很多。你不需要真的搭建一套完整服务在本地启动一个简单的Flask应用写几个接口再配合MySQL就可以自己模拟出很多问题场景。6.2 重视简历项目中的“测试细节”搜狗笔试虽然没有直接考简历但后续面试官会拿着你的简历深挖项目经验。如果你简历里写了“使用pytestselenium做过自动化测试”一定会被问到“用例失败时如何截图”“如何保证用例稳定性”“用例执行时间多久”。这些细节才是拉开差距的地方。我当时写了一个简单的UI自动化项目但没有记录“显式等待和隐式等待混用导致元素超时”的坑面试官一问就露馅了。所以笔试准备期间最好把简历里提到的每一项技术都真的用起来至少能讲出“遇到过什么问题、怎么解决”的故事。6.3 笔试刷题推荐与学习路线如果你时间有限我建议按优先级排序第一优先级测试理论中的等价类、边界值、场景法网络基础中的TCP、HTTPLinux高频命令SQL基础。第二优先级自动化框架的原理和简单使用性能测试的基本指标编程题的常见字符串和数组题目。第三优先级单元测试、白盒测试概念安全测试基础移动端适配和弱网测试。刷题平台方面牛客网有专门的测试岗笔试题库可以先从“软件测试岗真题”开始刷。LeetCode只用刷Easy和部分Medium重点是字符串、数组、哈希表和双指针。编程能力是测试工程师的加分项不是决定性因素不要沉迷刷Hard题。我个人还有一个习惯每刷一道题就在旁边写“如果我是测试我会怎么测这个函数”。这个习惯能让你从“做题的人”变成“测试的人”思维转变很重要。7. 写在最后从这场笔试里我带走的东西最近几年搜索这个赛道变化很大搜狗后来也有了自己的新故事。但现在回想起来那场笔试给我的收获远比一个offer本身更重要。它让我第一次意识到“测试”不是随便点点鼠标而是需要用工程化的方法去评估一个系统是否可靠、一个好用的功能是否经得起各种折腾。我在那次笔试里得到的最大教训是不要试图把每个知识点都背得滚瓜烂熟再开始答题这不现实。更有效的状态是你清楚地知道每个模块的大致框架遇到不会的题能快速定位到“这是哪一块的知识”然后沿着框架去推理。比如看到一道关于TCP的题你可以先回忆“TCP有三个阶段——建立连接、传输数据、断开连接”再去想题目落在哪个阶段答案方向基本不会错。如果你也在准备测试岗的校招希望这篇复盘能帮你少走一些弯路。笔试只是第一步但它像是给未来的自己画了一幅地图让你知道还有哪些地方需要补全。把每一道做错的题都变成一次学习的机会这条路不会亏待你。
返回列表