ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

滴滴测开笔试全攻略:题型解析与备考经验分享

滴滴测开笔试全攻略:题型解析与备考经验分享 2018年那个秋天我也坐在牛客网的在线笔试页面里盯着滴滴出行测试开发工程师一行字心里七上八下。那会儿移动出行正火滴滴的校招门槛也水涨船高内推虽然免了简历筛选这一刀但笔试照样刷人。我后来顺利走完了流程也把这套卷子的脾气摸了个七七八八。这篇文章就把我当时看到的、考到的、以及事后复盘出来的东西全盘托出给准备走测试开发方向、尤其是目标盯在滴滴这类大厂的学弟学妹做个参考。虽然标题写着2018但这类笔试的底层逻辑这几年基本没变计算机基础扎实不扎实、测试思维成体系不成体系、代码能不能在高压下快速跑通翻来覆去考的就是这些。1. 先看清这场笔试的底牌题型、题量与时间分配1.1 笔试总体格局一套卷子考什么滴滴的测试开发工程师笔试用的是牛客网的在线笔试系统。卷面结构大体上分三块选择题、编程题、简答题。选择题记不清具体是二十几道还是三十道了但基本覆盖了数据结构、算法、操作系统、计算机网络、数据库、C/Java/Python语言特性这些计算机基础科目编程题一般是一到两道难度中等偏上简答题通常是测试用例设计题也可能是一道测试理论相关的开放题。这里有个很关键的认知测开岗的笔试试卷不是按测试工程师的标准出的而是按工程师的标准出的。也就是说你和后端开发岗进入的是同一个竞争池子只是编程题的难度和侧重点稍有不同。很多同学以为测开笔试会简单很多实际上选择题的计算机基础难度和开发岗是一致的该考的红黑树、TCP拥塞控制、数据库索引原理一道都不会少。1.2 答题顺序和时间管理的实际策略我当时拿到卷子先花两分钟把整张卷子扫了一遍然后定了自己的节奏。我的建议是先做简答题再做编程题最后回头啃选择题。为什么简答题是采分点明确的主观题你写三行有逻辑的要点就可能拿到一半分数而且它不需要长时段的连续思考适合先把确定的分数装进口袋。编程题则需要完整的时间块所以第二优先。选择题虽然分值大但每道题都是孤立的你在任何剩余时间都能做哪怕最后只剩十分钟也能抢几道。这里要特别提醒在线笔试的选择题很多时候是不定项选择漏选和错选都不得分。所以拿不准的选项宁可少选不要为了凑分去赌一个大概率错误的选项。我当时在好几道4个选项里正确2个的题目上就吃了多选的亏丢了不少冤枉分。1.3 牛客网在线笔试环境注意事项笔试环境这块很多人不以为意但恰恰是翻车重灾区。我当时提前半小时就进了考试房间做了三件事第一关掉所有弹窗软件和IM防止答题过程中被会议邀请之类的东西打断第二把浏览器缓存和插件清理了一遍避免因为插件冲突导致代码编辑器无法弹出第三准备好本地编译器因为牛客网的在线编辑器在代码量大的时候偶尔会有卡顿我在本地写好再粘过去会更安心。还有一个细节牛客网的答题系统会在切出浏览器窗口时弹出警告多次切出甚至会被强制交卷。所以哪怕你想用本地编译器也建议先测试一下切窗会不会触发异常。我当时为了保险全程没切过一次窗口代码都是先在脑子里过一遍再直接打进去的。这种谨慎在笔试这种一锤子买卖的场合永远不亏。2. 选择题里最容易被拉分的隐藏考点计算机基础真的会考到细节2.1 数据结构与算法考的是能手算的能力数据结构的选择题滴滴的卷子出得挺有水平不是那种请选择堆排序的时间复杂度的送分题而是给你一个具体场景让你算清楚结果。比如二叉树的题我记得考了一道已知前序遍历和中序遍历求后序遍历的题。这种题本不复杂但如果你只是背过前序中序恢复二叉树的结论没有真正常写过递归代码很容易在推导过程中绕晕。我的建议是复习阶段不要只看结论把每一类基础操作的推导过程都走一遍前中后序遍历的递归和迭代写法、层序遍历的队列实现、求树的高度、判断平衡二叉树这些都得能手推。哈希表也是个高频考点但考的不是哈希表查改时间复杂度O(1)这种背诵题而是给你一个哈希函数和处理冲突的方式让你计算某个元素存在数组的哪个位置。这种题考的是你对装载因子链地址法开放定址法这些概念的理解深度只有真正写过哈希表的人才能准确算出来。图这块我印象中考了一道最短路径的题给定一个邻接矩阵让你用Dijkstra算法求源点到各点的最短路径。这题不考代码考你手动演算的过程能不能算对。对于这种题我的经验是在草稿纸上老老实实画表格一行一行更新dist数组不要心算心算必错。2.2 操作系统与网络贴近实战的查考方式操作系统选择题的主角永远是进程与线程、死锁、内存管理、页面置换这几块。死锁那四道题我愿称之为背了就会没背必错四个必要条件互斥、持有并等待、不可剥夺、循环等待必须能默写还得能判断给定场景是否满足某个条件。我记得卷子里有一道题描述了一个经典的生产者消费者场景问该场景涉及哪些死锁必要条件这题如果不理解只看字面场景很容易被绕进去。进程和线程的区别滴滴会结合具体场景考。比如同一个进程内两个线程共享什么不共享什么这种经典题。这个知识点说难不难但选项里经常埋着共享栈共享寄存器这种错误选项对底层细节不熟的人很容易中招。网络这边TCP三次握手是必考中的必考。我记得有题问的是第三次握手的ACK中序号是多少。这种题需要你精确掌握SYN、ACK两个标志位的语义以及seq的初始值和递增逻辑。另外TCP和UDP的对比、HTTP状态码的语义尤其是301、302、403、404、503这组也都是高频考区。2.3 数据库SQL不是写出来的是算出来的数据库的选择题主要靠SQL语句、索引机制、事务特性三者撑场。SQL的题永远不是让你直接写一句select而是给你两张表加几个条件问你返回几行、哪些列。这类题的特效在于你得自己把表展开模拟数据库引擎的执行过程。我曾经在这类题上栽过跟头——有个自连接加上group by的题我漏了去重结果算多了几行。复习的时候多找一些多表连接和聚合函数组合的题练手就对了。索引那块考的是B树的查询过程。你得脑子里有那棵树的结构非叶子节点存索引叶子节点存数据且按序排列再加上聚簇索引和非聚簇索引在数据存储上差异。京东滴滴这级别的笔试特别喜欢问以下哪些情况索引会失效这就是靠左侧前缀原则和索引选择性的理解了。事务的ACID特性是送分题但隔离级别和对应的问题脏读、不可重复读、幻读就不是了。我记得当时一道题问在可重复读隔离级别下哪种现象依然存在答案是幻读。这些概念之间的精确边界是要花时间理清的。2.4 语言基础C虚函数、Java集合、Python那些坑语言特性的选择题看你简历上写的什么语言。我当时写的C和Python所以卷子里C考了虚函数机制、智能指针、容器底层实现Java考了HashMap的put过程和并发安全Python考了深拷贝浅拷贝和GIL。虚函数那块高频题是含有虚函数的类对象模型里多了什么答案是虚表指针vptr。接着会问vptr存放在对象的哪个位置、虚表存放在哪个存储区。这种题就是考你对编译型语言对象内存布局的熟悉程度不写几个类看下内存布局光背书很难理解到位。HashMap的题Java方向的同学应该烂熟于胸put过程大致是先算hash定位桶再判断该位置是否有元素有就拉链或转红黑树超过阈值就扩容。问的稍微深一点的就是为什么线程不安全、在并发扩容时会发生什么。我建议用画图的方式把resize过程理一遍理解了链表迁移的过程这类问题就通了。Python的GIL是一个经典的存在。我印象中卷子问的是GIL对多线程性能的影响而不是直白地问什么是GIL。这要求你不仅知道GIL是一个全局解释器锁还得知道它对CPU密集型和I/O密集型任务的影响差异。3. 算法编程题测开岗的题照样可以难倒一片3.1 高频出题类型与实际案例测开岗的编程题难度通常比开发岗低半个档但绝对不水。常见的出题类型有这么几类字符串处理、数组与矩阵操作、模拟题、经典的动态规划题。字符串处理是测开岗的最爱因为测试用例设计里离不开字符串的各种边界情况。我当年那道题就是字符串类的给一个由数字和空格组成的字符串要求按某种规则提取并转换数字再输出结果。这类题表面上不难但空格在开头、结尾、中间有连续多个空格的情况都测试用例里最常见的陷阱。数组和矩阵操作也经常出现比如旋转矩阵、顺时针打印矩阵、数组去重并且保持相对顺序、求连续子数组最大和。动态规划这边常见的有青蛙跳台阶、最长公共子序列、背包问题这类进阶题。测开岗考DP一般不会直接让你写完整的状态转移过程太复杂的题但考到的概率存在不能完全不准备。3.2 在线笔试的输入输出陷阱编程题翻车最多的点在输入输出格式而不是算法本身。牛客网和LeetCode不一样LeetCode给你封装好了函数你只需要写核心逻辑牛客网需要你自己处理标准输入输出。这个差别很多第一次在线笔试的同学会措手不及。我的血泪经验是第一读题时先看题目给的输入示例判断一行能拿几个数第二使用while循环不断读取直到没有下一行不要假设只处理一组输入第三输出的时候严格按照示例的格式该有的空格、换行、小数点位数一个都不能差。我当时就有一道题第一次跑通过但因为少打了一个换行被判格式错误浪费了一整轮的重新提交机会。另一个常见坑是数据范围。题目说数组长度n最大是10的5次方那么你的算法复杂度必须控制在O(nlog n)或O(n)。如果你上了个O(n²)的暴力解法在n范围小时能通过范围大时就会超时。写代码前先看数据范围再决定用哪种解法这是在线笔试的基本素养。3.3 时间不够时的保分策略编程题是部分通过的规则不是全对才给分。所以哪怕你只能写出暴力解也要提交。我当时的时间分配是先用5分钟读懂题再用5分钟在纸上理清思路接着花15到20分钟写代码和调试。如果到整体剩余时间不足时还没有跑通我会马上简化思路写一个只能处理小数据、但逻辑正确性很高的暴力版本先把部分分数抢到手。我个人强烈建议笔试前在牛客网刷至少50道真题尤其是输入输出处理和常见算法模板这两类。刷的时候严格要求自己在只能打开一个编辑器、不能看别的资料的条件下写代码模拟真实笔试的压力。刷多了以后你会形成条件反射看到连续子数组反转链表合并有序数组这些固定搭配脑子里立刻就有模板浮现出来。4. 测试用例设计题这道题筛掉的不是代码能力是测试思维4.1 典型的考察形式与评分逻辑简答题基本就是一道测试设计题。滴滴的卷子当时给了一个业务场景让我设计测试用例。这种题的评分逻辑和选择题编程题完全不同它不是看对错而是看你思维的完整性和层次感。阅卷人通常是测开团队的工程师拿到你的答案心里有几个默认的评分维度功能层面能不能覆盖正常流程和分支流程异常输入考虑得是否周全有没有性能、兼容性、安全这些非功能层面的视角用例描述是否清晰有明确的输入、步骤、预期结果。所以这题答题的核心不是写多写少而是有没有一个完整的测试思维框架。4.2 万能的分层设计法从需求到异常我在笔试中总结出一套分层设计法在这里分享给大家。拿到任一个待测对象按下面这个顺序展开第一层功能正常流程。需求文档描述的主路径是什么把一个正常用户从头到尾的操作路径列出来。第二层功能分支流程。主路径上的每个判断点都有是和否两条路把所有否的分支覆盖掉。第三层异常输入与极端值。一句话概括就是把等价类和边界值结合用。对于长度有限的输入测长度上限、下限、中间值、空值、超长值对于类型测类型正确和类型异常。第四层状态与交互。被测对象在不同状态之间切换会不会出错多次点击、快速连续操作、中断操作后恢复这些场景有没有漏洞第五层非功能属性。性能上同一时间大量并发访问会不会卡死兼容性上不同机型、不同浏览器、不同系统版本能不能正常工作安全上敏感数据有没有加密传输越权访问能不能被拦截。这套框架一旦建立你面对任何测试设计题都能至少写出三四十条有理有据的用例而不是像大多数考生那样憋半天只能写出十几条点一下按钮看看行不行的水用例。4.3 结合滴滴业务场景的实战拆解当时题目的具体场景我记不完全了但滴滴的业务特点很明显位置、供需匹配、支付、用户行为路径复杂。我按着框架把一类类似设计滴滴APP顺风车/快车拼车功能的测试用例的题目拆一遍你感受一下这个思路。功能正常流程用户发起行程→系统匹配附近车辆→司机接单→用户上车→到达目的地→支付完成→评价。这七步走通是主路径。分支流程用户取消订单开始后多久取消取消是否收费、司机取消订单对用户的补偿策略、用户迟到、司机爽约、多条路线的选择。异常输入出发地和目的地填同一个地点、定位信号丢失、兴趣点搜索无结果、网络切换4G切WiFi时页面状态。状态与交互订单进行中来电、应用被杀掉后重启、支付页面重复点击防止重复扣款、同一个账号在多个设备上的登录状态。非功能高峰期的派单响应时间、地下室和地铁里无信号时的表现、iOS和Android两个端的行为一致性、优惠券金额能否被篡改。写到这里你应该发现了这套框架的思路本质上是把测试工程师日常在工作中怎么思考搬到了考卷上。阅卷人看到的就不再是干巴巴的几条case而是一个已经具备基本测试素养的候选人。这一题如果答得好比编程题满分更能让考官记住你。5. 测开岗位笔试之外的隐藏分简历、内推流程与后续衔接5.1 内推笔试和正式批到底差在哪回到标题里的内推笔试这四个字。很多人误以为内推笔试和正式批笔试是同一套卷子只是流程上提前了。实际情况是内推笔试和正式批笔试在题目范围上高度重合形式上也都是牛客网在线笔试但有一些潜在差异值得了解。内推笔试最大的特点是时间早、竞争者少、机会多。早批次的面试官通常有更多时间打量你笔试通过后面试流程也相对宽松。正式批则是在系统里统一筛面试官的精力被分摊对候选人容错率更低。所以有条件走内推一定要走内推不是为了免筛选这么简单而是整个流程的体验和通过率都有区别。内推笔试的另一个特点是简历上项目经历和技术栈会影响你在笔试后收到的面试邀约方向。如果你的简历上写了曾经使用Appium或Selenium做过自动化测试面试官很可能会在面试时重点考察你在自动化框架上的设计能力如果写了做过性能测试那面试必问性能监控指标。5.2 笔试完到面试之间该准备什么笔试结束后的等待期一般是一到两周。这段时间千万不要干等最重要的一件事是复盘笔试题目。我当时笔试结束后凭着记忆把能记起来的题目都写在备忘录里然后挨个去查正确答案不会的当场补。这样做有两个好处第一如果笔试通过了面试时很可能会问到笔试里的某些题目特别是简答题你当时为什么这么设计用例第二如果笔试没通过你也要知道自己死在哪个知识点上避免再战再败。刷面试题也是这个阶段的重头戏。测开面试算法题会继续考只是场景更偏向工程测试理论的深度比笔试更深比如会问自动化测试框架的设计思路如何衡量测试覆盖率如何保证测试用例的优先级合理性。我当时把常见面试题按模块整理成一个笔记面试前三天集中过了三遍效果非常明显。5.3 面试高频追问方向走到面试这一步滴滴测开岗的面试官通常会沿几个方向追问。测试理论这块面试官会先抛一个功能让你设计测试用例然后在你设计的基础上不断加条件、挖细节考察你的反应。你的框架感在笔试时发挥了一次作用面试时还要能现场再发挥一次。技术基础这块面试官会考你一门语言的底层机制比如C的虚函数底层是怎么实现的、Python里的GIL为什么存在、Java的HashMap扩容时的并发问题。这些知识笔试选择里见过面试还要你能讲得清楚。自动化与测试工具是测开岗位面试的独特部分。如果你简历里写了熟悉Selenium、Appium、JMeter、Postman这些工具面试官一定会让你现场讲讲某个工具的底层原理。比如Selenium的WebDriver协议是怎么工作的、Appium和iOS的XCUITest怎么交互。这些知识如果不提前准备就算工作了几年的人也未必答得上来。6. 我的备考清单与踩坑记录如果你现在开始准备6.1 按优先级排序的复习路线如果现在离笔试还有一个月我会建议按这个优先级走先把计算机网络和操作系统的选择题基础打牢再把数据结构与算法的核心题型刷透然后是数据库和语言特性最后是测试理论和测试设计题。前两项是选择题的大半壁江山也是编程题的地基值得投入最多精力。具体到每天的时间分配我当时是上午刷算法题、下午过计算机基础知识点、晚上专门练测试用例设计。晚上的测试用例练习我会拿身边的APP下手比如导航软件、外卖软件、支付软件每天挑一个核心功能用分层设计法写用例写完之后对照行业公开的测试报告查漏补缺。这个方法对我后来在笔试简答题的表现帮助极大。6.2 三个我亲测有效的刷题方法第一个方法是错题本优先级。遇到做错的题不要急着看下一道先把错误原因归类。我分了三类概念理解不到位、计算过程容易马虎、思路完全没想到。概念类的错题我会翻回教材找到对应的理论部分通读一遍计算类的错题我会在两天后重新做一遍思路类的错题我会把题目的解法模板单独记在一个页面里反复看。第二个方法是限时模拟。笔试前一周我严格按照正式笔试的时间长度和题型分布做了三轮模拟卷。模拟卷用的是牛客网上往年的校招真题做题的时候我不查资料、不吃东西、不开消息完全模拟考试状态。做多了之后你对时间的掌控感会自然形成到真实笔试时不会慌。第三个方法是向同行取经。我在牛客网和几个技术社区里找到同届准备测开校招的同学和朋友建了一个小群每天互相分享一条自己觉得会考的点。你别小看这种交流往往别人一句话点醒的你就是笔试考卷上的一道坎。我当时对HTTP状态码中的301和302一直分不清就是一个同学用一句301是永久的搬家302是暂时的挪窝帮我彻底解决的。6.3 心态与体力管理最后说点偏经验层面的东西。笔试说到底是一场在有限时间、有限精力、有限资源下的综合性挑战你不是要把每道题都做对而是要在绝大多数和你竞争的人中做得更好。我在那次笔试中有一道编程题没完全跑通只拿了部分分选择题也有好几道不确定。但我当时的策略是不确定的选择题就用排除法把最不可能的选项删掉在剩余选项中选一个。考完之后我没有反复回想那道没做出来的题而是第一时间去准备面试。后来的结果证明这个心态帮我稳住了节奏。再分享一个体力上的细节笔试前那一晚建议大家放下复习资料去跑个三公里或者做点别的运动。在线笔试是一场持续两小时的高强度脑力活动精力不济的人在后半程会出现注意力涣散、做题失误率上升的情况。我当时就是因为前一晚睡得早、当天下午还去跑了个步所以整场考试脑子一直保持清醒的状态。提示在线笔试的系统会记录你的切屏行为开始做题前请务必关掉所有可能弹窗的应用浏览器也建议只保留答题页面。这个细节看起来不起眼但每年都有人因为一次不小心被红牌罚下。写在最后测开岗位本身和这场笔试一样讲究系统化回头看这场笔试它真正想筛选的其实不是会做多少题的人而是是否具备系统化思维能力的人。选择题考的是你大学四年计算机基础有没有织成网编程题考的是你能不能把网上的知识落在代码里测试设计题考的则是你有没有一套稳定的方法来拆解未知问题。这三件事恰恰是测试开发工程师日常工作中的核心能力。如果你现在正筹备着大厂测开校招别把时间耗在焦虑上按着上面的思路把基础再过一遍把用例设计框架练熟把过往真题刷透该拿的分数自然就拿到手了。我当年从一个只会写简单脚本的懵懂学生到后来能独立负责整个模块的测试设计和自动化框架搭建就是靠这一场场笔试面试逼出来的系统性成长。你也要相信你现在认真做的每一道题、认真写的每一条用例都会在未来的某一天以某种方式回报给你。
返回列表