2024年秋招淘天工程岗第一批笔试,考完最大的感受就一个字:稳。倒不是说题目简单,而是整个流程、题型设置都相当规范,和很多互联网大厂的校招笔试比起来,淘天这套题属于“看着不慌、做起来冒汗、复盘全是细节”的类型。
先说结论:如果你正在准备淘天或者阿里系其他集团的工程岗笔试,重点抓三块——算法题的手速和正确率、Java技术栈的八股深度、还有对高并发场景的理解。别的都是锦上添花,这三样决定了你能不能进面试。
这篇文章不是题目答案的搬运,我不会把原题贴出来(也记不全),而是从“题型分布、考点逻辑、备考策略、实操避坑”四个维度,把这次笔试拆开揉碎讲清楚。无论你是26届想提前了解,还是25届正在等结果,这篇都能给你一个相对完整的参考坐标。
1. 笔试整体观察与核心考点分析
1.1 考试平台与基础信息
淘天这次第一批笔试用的是牛客网系统,线上双机位监控,总时长两个半小时。题型分为三大部分:单选题、多选题、编程题。题量不算夸张,但覆盖面非常广,从Java基础到JVM调优,从TCP握手到Redis集群,从MySQL索引到系统设计,几乎把后端工程岗的各个技术栈都扫了一遍。
我整理了一下题型分布:
| 题型 | 数量 | 分值占比(估) | 考察重点 |
|---|---|---|---|
| 单选题 | 20道 | 约30% | Java基础、网络、操作系统、数据库 |
| 多选题 | 10道 | 约20% | 分布式、中间件、场景判断 |
| 编程题 | 4道 | 约50% | 数据结构、算法设计、编码能力 |
笔试时间分配上,选择题大概控制在35到40分钟,剩下的时间都砸在编程题上。我旁边一个同学就是选择题抠太久,最后一道编程题直接没时间提交,这属于典型的失误,后面我会细说时间管理。
1.2 考察范围与难度定调
从整体难度来说,淘天这批笔试属于“中上偏稳”的水平。什么意思呢?就是不会像某些公司那样搞一堆偏题怪题,但也不是那种你背背八股就能过的水平。它的难点在于两点:一是选择题的陷阱很多,选项之间的区分度很高,很多题你看一眼觉得会,再读一遍发现两个选项都对,需要非常扎实的基础才能选准;二是编程题虽然题型都是常规的(数组、字符串、链表、二叉树),但数据范围卡得比较紧,对时间复杂度的要求很明确。
这里要特意说一下,淘天的工程岗笔试非常看重Java方向。选择题里至少有60%的题目和Java相关,包括但不限于HashMap的底层结构、并发编程的锁机制、JVM内存区域划分、类加载过程、Spring Bean的生命周期等。这不是说用C++或者Go就没机会,而是整体题目倾向很明确——大厂的核心电商业务场景,Java依然是主力语言。
2. 核心题型解析与考点拆解
2.1 算法编程题是真正的分水岭
编程题一共4道,如果你经常刷LeetCode或者是牛客网的剑指offer,题目类型你肯定眼熟。但关键是,眼熟不代表能AC,这里面有几个非常致命的细节。
第一道题是数组相关的,本质上是“求满足某种条件的子数组的最大长度”,典型的滑动窗口思路。说实话这题本身不难,但数据范围给到了10的5次方,意味着O(n^2)的解法直接超时,必须上双指针。很多人栽就栽在没仔细看数据范围,上来就写暴力解,样例过了但提交全超时。
我当时的写法是这样的:
public int maxLength(int[] nums, int k) { int left = 0, right = 0; int sum = 0, maxLen = 0; while (right < nums.length) { sum += nums[right]; while (sum > k && left <= right) { sum -= nums[left]; left++; } maxLen = Math.max(maxLen, right - left + 1); right++; } return maxLen; }代码本身没什么难度,但你在笔试那种高压环境下,要一次性把边界条件想清楚(比如left超过right的情况,比如sum恰好等于k的情况),还是要靠平时大量练习形成肌肉记忆。这题我大概花了12分钟写完,中间因为边界条件卡了一下,最后通过率是100%。
第二道题是字符串处理,要求实现一个类似“字符串去重并保持相对顺序”的功能,但加了一个限制:相同字符只能保留第一次出现的位置,且结果必须是原字符串的一个子序列。这题考察的是对哈希表和贪心算法的理解,本质上和LeetCode的“去除重复字母”是同一类题目。思路是用栈维护结果,用数组记录每个字符是否已在栈中,同时统计剩余字符数量来决定出栈时机。
第三题是二叉树的层序遍历变种,要求按“之字形”输出每一层节点,也就是之字形遍历。这题属于二叉树的经典题型,用双向队列或者两个栈交替都能实现。但淘天这题在输出格式上做了一点变化:要求输出的每一层内部也要保持特定顺序,从右往左那一层不仅节点遍历要反向,子节点的入队顺序也要对应调整。细节题,一不小心就会“半AC”。
第四题是压轴题,图论的拓扑排序应用,场景是“给定一组任务和依赖关系,输出一种可行的执行顺序”。其实拓扑排序本身不复杂,Kahn算法加队列就能搞定。但这题的数据结构给得比较绕:不是直接给你邻接表,而是给你一个字符串数组表示依赖关系,需要先自己解析。解析那一层就卡住了不少人。
我总结了一下,这4道题的核心考点可以归纳成一个表格:
| 题号 | 核心考点 | 时间复杂度要求 | 易错点 |
|---|---|---|---|
| 第一题 | 滑动窗口/双指针 | O(n) | 边界条件、数据范围 |
| 第二题 | 贪心+栈+哈希 | O(n) | 子序列性质、顺序保持 |
| 第三题 | 二叉树之字形遍历 | O(n) | 层内顺序反转、子节点入队方向 |
| 第四题 | 拓扑排序+字符串解析 | O(n+m) | 依赖关系解析、环检测 |
2.2 Java八股文:选择题里的暗坑
选择题部分,淘天明显是“重基础、抠细节”。很多题不是问你“什么是对的”,而是“哪个是错的”,或者是“在某个特定情况下会怎样”,这就非常考验你对底层原理的掌握水平。
举几个我印象比较深的考点:
HashMap的扩容机制。这个几乎是大厂必备题,淘天也不例外。但淘天问的不是“默认负载因子是多少”这种送分题,而是问“当hash冲突严重时,链表转红黑树的阈值是8,为什么不是16或者4”,这就是深入到底层原理的考察了。你需要知道,8这个数字来自泊松分布的概率计算,在负载因子0.75的默认设置下,链表长度达到8的概率已经极低,设置8是为了兼顾查找效率和空间成本的平衡。
线程池参数。这道题也很有意思,不是直接问你核心线程数、最大线程数、阻塞队列怎么配,而是给了一个实际场景:“线程池核心线程数为4,最大线程数为8,阻塞队列容量为100,当同时提交50个任务时,实际有多少任务会立即执行?”答案是10个,核心线程4个立即执行,队列满了之后才会创建新线程到最大线程数,因此前4个核心线程执行,其余最多104个任务中,队列先占满100个,另外4个创建非核心线程执行。这种题考的就是你真正理解Executor线程池的工作流程,而不是死记参数。
JVM内存模型。问的是“以下哪些区域是多线程共享的”,选项包括堆、虚拟机栈、本地方法栈、方法区。考察的是你对JVM运行时数据区的划分是否清晰,堆和方法区是线程共享的,虚拟机栈和本地方法栈是线程私有的。这道题不难,但它和一倒题为“创建一个对象时,内存分配过程是什么”,考的是指针碰撞和空闲列表两种分配方式的适用场景,以及TLAB(Thread Local Allocation Buffer)的作用。
Spring这块也占了不小比例。淘天毕竟是阿里系,对Spring的理解是刚需。有一道题问的是“@Autowired和@Resource的区别”,这两者的区别在于注入方式不同——@Autowired默认按类型注入,@Resource默认按名称注入。还有一道问“Spring Bean的默认作用域是什么”,答案是singleton,这个都知道,但它接着问“在什么场景下应该使用prototype”,这个就需要结合业务来理解了,比如有状态的对象就不适合在多线程环境下共享单例。
MySQL和Redis也考了。MySQL问的是InnoDB索引结构,为什么使用B+树而不是B树或者红黑树。核心答案在于B+树的数据都集中在叶子节点,非叶子节点只存索引键,这样每一层能存储更多键值,树的高度更低,磁盘IO次数更少,而且叶子节点之间有指针相连,适合范围查询。Redis问的是持久化机制,RDB和AOF的区别以及各自的优缺点,还有一道关于缓存穿透的解决方案——布隆过滤器。
坦白说,这些题目如果平时有系统性复习,做起来是稳的;如果只是碎片化刷博客,很容易被选项绕进去。我个人建议,备考阿里系笔试时,八股文不要只背结论,一定要理解“为什么”,否则多选题基本拿不到分。
3. 实操准备与现场应对全流程
3.1 笔试前的设备与环境准备
很多人觉得笔试考的是脑力,但我这次最大的体会是:笔试考的还有你“能不能在一个小时内不遇到环境问题”。牛客网笔试系统支持网页端和客户端,我强烈建议提前一天把客户端装上,并且用模拟题试跑一遍,确认摄像头、麦克风、屏幕共享授权都正常。不要等到考试当天才装,万一公司网络有防火墙限制下载,你就只能临时用网页端,体验会差很多。
设备方面,双机位要求意味着你需要一台主电脑(答题)+ 一台手机或平板(副机位),副机位放在侧后方45度角,确保你的双手和屏幕都在监控范围内。这些细节在平时看起来不算什么,但考试当天你手忙脚乱的时候,任何一个环节出问题都会影响心态。
还有一个细节:草稿纸。考试系统允许使用草稿纸,但要求考试结束后在白纸上写上“本人已草稿纸销毁”并展示给摄像头。这个逻辑有点敏感但其实很合理,就是为了防止你把题目带出考场。建议提前准备两张A4白纸,考试时写字清晰一点,结束后按要求展示即可。
3.2 选择题的时间分配与答题策略
淘天这套选择题共30道,覆盖单选和多选。我的策略是“先易后难,五分钟原则”——每道题如果5分钟内没有思路,先标记跳过,等所有题目过一遍再回来处理。
为什么这么设计?因为选择题里有些题确实比较偏,比如有一道问“Kafka中partition和consumer group的对应关系”,如果你对消息中间件不熟悉,可能想两分钟也拿不准。与其在这里耗时间,不如先看后面的编程题,编程题一道就能顶好几道选择题的分值。
整体时间分配上,我的建议是:选择题最多40分钟,剩余时间全力做编程题。编程题4道,按照A4纸稿→核心逻辑→提交验证的顺序来做。先花2分钟读题和确定数据范围,再花2分钟想算法,然后直接上手写代码。写的时候先保证核心路径,再补边界条件,最后再跑测试用例验证。
3.3 编程题的提交与调试技巧
牛客网的编程题提交方式和LeetCode不一样,LeetCode是“填空式”的函数实现,牛客网很多题是ACM模式的“完整代码”,需要你自己导入包、定义Main类、处理输入输出。这一点一定要提前适应,不然你写对了核心算法,但因为输入输出格式不对,整题判0分,哭都没地方哭。
具体来说,淘天的编程题输入输出都是标准的System.in和System.out,但有几道题需要你自己解析输入格式。比如第四道题,依赖关系的输入长这样:
3,2 A,B,C A->B B->C第一行是任务数和依赖边数,第二行是任务列表,后面是具体的依赖关系。你自己要处理逗号分隔、箭头解析、以及可能存在的空行。这种解析代码我建议提前准备好模板,比如用正则表达式分割字符串、用Map存邻接表、用数组存入度,考场上直接套模板比现场写要快得多。
提交策略上,我强烈建议“保底分策略”:先AC一道半,再回头优化。也就是如果你明确知道某道题只能暴力解,先提交暴力解拿部分分,然后继续做下一道。不要死磕一道题,因为笔试系统是按“最后一次提交”来判分的,你在这道题上纠结太久,后面哪怕有更简单的题也没时间写了。
4. 常见问题与避坑经验实录
4.1 这些坑我踩过,请你避开
坑一:选择题对多选题的畏惧。多选题在牛客网系统里的判分规则通常是“少选得部分分,多选、错选、不选得0分”。如果你不确定某个选项,宁可不选。但是淘天题目给的分值很高,少选扣分很疼,这就逼着你在不确定时做出取舍。我的经验是:多选题里表述得“绝对正确”的选项往往是对的,但表述里带有“一定”“必然”“所有”这类字眼的,多半是错的。这不是迷信,而是出题人设置陷阱的常用手法。
坑二:编程题不关注数据范围。这是最致命的问题。很多题目的数据范围是10的9次方这种量级,你还在用递归或者暴力枚举,必然超时。做题第一步一定是看数据约束,然后倒推需要的算法级别。比如n ≤ 1000,O(n^2)可以接受;n ≤ 10^5,必须O(nlogn)或O(n);n ≤ 10^9,基本上就是数学公式题或者二分、位运算这种级别的优化了。
坑三:依赖IDE的自动补全。牛客网笔试系统虽然有代码编辑器,但它的自动补全能提供的帮助比较有限。如果你平时习惯了Idea的万能和补全,考试时写代码效率会大打折扣。建议考前两周,每天都用不带智能提示的编辑器(比如最简单的文本编辑器或者牛客网的在线编辑器)刷三道题,强制自己手写常用API和包名。比如HashMap和ArrayList的常用方法import那些语句,一定要背到肌肉记忆。
坑四:忽视了系统的防作弊机制。牛客网笔试系统会检测屏幕切换、复制粘贴异常、异常高分等行为。我之前有朋友在笔试时想搜索一下,结果切屏立刻被系统记录,虽然没直接判0分,但后台会标记。这种标签一旦被HR看到,基本就没有后续了。所以老老实实答题,别动歪脑筋。
4.2 考后复盘:给你一套“体检清单”
考试结束后,趁热打铁做一次复盘,比你焦虑地等结果有用得多。我的复盘方法是:把每一道题按“完全不会、会但做错、做对了但不熟练”三个等级分类,然后针对每一类制定下一步的复习重点。
- 完全不会的题→说明知识盲区,需要系统补基础,而不是零散刷题。
- 会但做错→大概率是细节问题,比如边界条件、类型转换、输入输出格式,需要标注出来,下次考试前专门看。
- 做对了但不熟练→说明你的“题感”还不够,需要加大刷题量,把常见题型练到条件反射。
4.3 关于实习经历的加成分
如果你有实习经历,尤其是电商、高并发相关的项目,笔试选择题里的一些场景题会变得非常容易理解。比如有一道关于订单超时关闭的场景题,实际上就是典型的延迟消息处理,你在实习中如果接触过RocketMQ的延迟消息,就很容易判断出应该用事务消息还是定时任务。所以如果你离秋招还有时间,强烈建议去实习,而且实习时要刻意关注业务背后的技术方案,这对应对大厂笔试的“场景题”很有帮助。
5. 后续面试衔接与备战建议
笔试只是秋招的第一道关卡,过了笔试之后,紧接着就是面试环节。淘天工程岗的面试通常有两到三轮技术面加一轮HR面,技术面主要围绕简历项目、Java基础、并发编程、JVM调优和系统设计展开。笔试中暴露出的薄弱点,恰恰就是面试中容易被深挖的地方。
我在准备面试时发现,笔试选择题里那些让你犹豫的考点,全部整理成“问题清单”,然后逐个写出答案要点,会非常高效。比如你笔试时对“线程池参数怎么配”拿不准,那面试前就要把线程池的七大参数、拒绝策略、任务提交流程、以及实际业务中怎么设置核心线程数(CPU密集型还是IO密集型)全部梳理清楚。这种从笔试题衍生出面试题库的方法,针对性极强,比漫无目的地背八股高效很多。
另外,如果你想在面试中展示亮点,可以考虑把笔试中某道编程题的最优解法扩展成一篇简短的实现笔记,面试时主动聊起“笔试那道题我当时是这么优化的”,会给人留下“善于总结复盘”的好印象。
最后我个人还想强调一点:淘天笔试只是把你领进门,真正的戏都在面试里。笔试能体现出你的基础扎实与否,但面试才能体现你的技术深度和思考方式。所以不要把全部精力押在笔试刷题上,一面是基础,二面是深度,三面是潜力,每一轮都有它独特的考察逻辑,你需要同步准备。祝你顺利。