
2017年秋招那会儿我前后把阿里、腾讯、百度三家的技术岗面试都走了一遍拿到两个offer也挂了两轮。现在回过头看最值的不是那几个offer而是逼着自己在短时间内把基础捡起来、把项目讲清楚、把心态磨平的这个过程。那一年算法岗还没像后来这么卷但大厂面试的基本盘已经定了数据结构和算法是门票项目深挖是分水岭场景设计题是拉开差距的地方。这篇面经我会按备战时间线、三家公司风格差异、核心题目复盘、常见问题排查几个方面写尽量还原当时的真实情况给准备秋招的同学一个参考。这篇文章适合两类人一类是准备冲互联网大厂技术岗的应届生尤其是投后端、算法、数据岗的另一个是已经投了简历但不知道各家公司面试风格是什么样子、心里没底的。我这里不会灌鸡汤都是实操层面的东西——怎么安排时间、怎么刷题、怎么准备项目、面试被问住了怎么救场。1. 秋招备战先把时间线和信息差补齐1.1 时间线怎么安排6月到10月的四个阶段很多人秋招最大的问题不是能力不够而是开始得太晚。当时我们学校不少人是9月初才开始刷题结果笔试一轮就开始怀疑人生。我自己的安排是6月初启动到9月正式面试时已经有三个月缓冲期这三个月非常关键。6月打基础刷LeetCode和剑指offer按标签刷不是按题号硬刷。目标是高频题见一遍能有思路常见模板题能背下来比如二分、快排、链表反转、树的遍历。7月整理简历准备项目表述同时开始通过牛客网和微信内推群找内推渠道。2017年内推已经很普遍阿里内推可以直接免笔试进面试流程腾讯百度的内推也有优先筛选或者免笔试的机会。内推信息一般挂在牛客网帖子里或者学长学姐朋友圈里。8月笔试轰炸。这段时间几乎每周都有几场线上笔试赛码和牛客网是两个主流平台。建议笔试用本地IDE调试好代码格式因为有些平台的牛客网模式要求自己处理输入输出容易栽在格式上。我记得有一场笔试就因为没处理多行输入白白丢了一道题的分。9月到10月面试高峰期。一面、二面、交叉面、HR面全部集中在这段时间需要频繁请假跑宣讲会或者接电话所以8月最好把项目和基础准备到位9月才有时间应对临场突发情况。做个表格记录每个公司的进展很有用我当时在excel里列了公司名、投递渠道、投递时间、笔试时间、面试时间、当前状态、面试官问了什么问题。这样复盘的时候有据可查不会面完就忘。1.2 技术基础怎么准备别把时间花在冷门考点上秋招的技术面范围其实很固定。我复盘了三家公司的面试题发现命中率最高的就这几块数据结构、常用算法、语言基础、计算机网络、操作系统、数据库。其中数据结构和算法占了接近一半的篇幅是绝对的核心。数据结构里的权重要看清楚树尤其是二叉树、链表、哈希表、堆、字符串处理这几个是必考的。图相对少一些但最小生成树、最短路径这种也偶尔出现备一下不亏。算法方面二分查找、排序快排、归并、递归和DFS/BFS、动态规划基础题、双指针、topK问题这几类反复考。动态规划不会出太难大厂校招一般就是背包、爬楼梯、最长公共子串这类经典模型关键是能看出状态转移关系。语言基础选一门主语言深挖就好不用样样都学。我主Java阿里和百度都问了JVM内存分区、GC机制、HashMap源码的小问题腾讯更偏C问过进程和线程的区别、虚函数表。这些属于语言底子靠临时背题不稳定最好过两遍。计算机网络是另一个高频区TCP三次握手和四次挥手、TIME_WAIT状态、HTTP和HTTPS区别、HTTP状态码。操作系统常问进程调度、死锁条件、虚拟内存。数据库一般就是索引、事务隔离级别、SQL查询。这些内容范围不小但每个点都不深面试前把常见问题背熟基本够用。刷题量方面我个人经验是200道左右足够了但前提是按题型分类刷而不是按题号顺序刷。每天保持两三道关键是总结题型解法比如看到“字符串中第一个不重复字符”就联想到哈希表计数看到“有序数组里找目标值”就想到二分变种。这种“题型-解法”的心理映射比刷题数量更重要。注意不要去背面试题库里的答案因为面试官只要连续追问两层背出来的东西就会露馅。花时间理解原理比背十道题的答案划算。1.3 简历和项目怎么准备一份简历别写满三页简历这块很多同学有两个极端。一个是什么都写把大学所有课程项目和社团经历全塞进去写了三页另一个是只写一个个人的小demo没有啥亮点。我的建议是一份校招简历控制在两页以内绝大多数一页就够了。技术岗面试官看简历的时间可能就一两分钟他只会扫几个关键词学校学历、技术栈、项目名称、实习经历。项目经历是简历的核心建议只写两到三个项目不要贪多。每个项目用四行以内讲清楚背景是什么、用的是哪些技术、你负责哪部分、最终效果如何。但真正重要的是要提前准备好一个“主项目”这个项目要在面试时能扛住三轮深挖。我当时的主项目是一个基于商品评论的情感分析系统。这个项目好在三个方面一是技术栈完整从爬虫到NLP到前端可视化都有二是有明确的数据和评估指标比如准确率多少、处理数据量多大三是有足够多可以延伸的点分词、特征工程、分类模型、数据不均衡处理都能聊。面试官问项目经验时基本上这个项目撑起了大多数问题。简历上的技术栈要特别注意写“了解”意味着你不一定会被深问但写“熟悉”就一定被追问到底。如果只是用过一两次框架建议写“了解”不要为了显得厉害去写“精通”否则面试官随便问一个底层实现你就容易翻车。2. 阿里、腾讯、百度的面试风格差异别用同一套方法应对三家2.1 阿里多轮交叉面爱追问业务和开放题阿里最典型的特点就是面试轮数多而且业务面和技术面交叉在一起。我那年走的是内推流程先有一个电面然后到现场面一共面了四轮后面还有一轮HR面。现场面试环境压力蛮大面试官会拿你的简历和你聊然后随时在白板上写题。阿里的技术面里一面偏基础会问一些常规的算法题和语言细节重点看你基础扎不扎实。二面偏项目会专门找项目里的细节来追问有些问题会深入到你自己可能都没想过的角度。三面经常是交叉面由其他部门的面试官来面问的问题往往更发散比如“你如何设计一个日活千万的签到系统”这种开放题。开放题是阿里的特色也是很多人的劝退点。这类题不要求你给出标准答案但要求你有清晰的思考框架。我当时遇到一道题是“如何设计一个日活千万的签到系统”第一反应是说实话有点懵。后来我发现这类题有套路先澄清需求再给方案。先问清楚是用户签到记录还是积分奖励系统日活千万意味着什么量级的写请求数据保存多久。把边界弄清楚再一步步说存储怎么分、缓存怎么做、奖励逻辑怎么算。面试官看重的是你有没有结构化思维能力而不是回答是否完美。阿里的HR面也相对较细有的HR会问家庭情况、有没有男女朋友、为什么选杭州看似闲聊其实在评估你的稳定性和意愿度。回答这类问题核心是表现出真诚和稳定不要让人觉得你只是“随便投投”。2.2 腾讯手撕代码频率最高基础题要像肌肉记忆腾讯给我的感觉是“工程师文化”很强面试官更看重基础功尤其是一面。腾讯一面经常是电话突击可能你刚到教室准备上课电话就来了对面直接说“我们简单聊聊先写一个链表判环吧”。这种突击电话面非常考验心态因为你在毫无准备的情况下要立刻进入面试状态。腾讯技术面里手撕代码的频率是最高的。白板写代码、共享文档写代码、电话里口述代码甚至还有让你先画递归栈再写代码的。这要求平时训练时不能只看不写要真的拿纸笔或者编辑器去练不然面试时很容易脑子懂了手写不出来。腾讯的基础题也问得很细。我记得当时被问过TCP四次挥手中TIME_WAIT存在的原因还有快排最坏情况什么情况下出现、怎么优化。这些题目本身不难但平时如果不注意底层原理很容易被问住。后来我总结腾讯的基础题考察的不是“你听说过没有”而是“你理解得够不够透”所以要能解释“为什么”而不是只背结论。腾讯的游戏工作室面试会额外侧重C和图形学基础如果是投游戏方向的建议提前看一遍高效C编程和图形管线相关的知识点。我当时投的是后台岗没有被问到图形学但认识的同学投游戏研发岗就被问了。2.3 百度更看算法原理和海量数据场景百度是三家里面最务实的一家给我的整体感觉很注重算法能力和工程落地能力结合。百度的面试风格是算法题和海量数据场景题交替出现一面基础算法二面场景设计三面聊项目、聊规划。百度问的算法题有一个特点喜欢考排序和topK相关。当时我被要求手写快排并分析复杂度然后追问“如果数据有1亿条内存只有1GB怎么找出最大的前100个数”。这类问题是典型的“小算法大场景”组合考察你是否能把基础算法应用到大规模数据场景中。百度的场景设计题通常和搜索、推荐有关。比如“如何对海量URL去重”“如何设计一个网页爬取调度系统”“怎么给你的新闻推荐结果排序”。准备这些内容时需要了解一些基础的海量数据处理思路比如哈希分片、布隆过滤器、外部排序、bitmap。不一定要知道实现细节但至少要能说出思路和trade-off。还有一个有意思的地方百度的技术面会问你对机器学习的理解比如“逻辑回归为什么要做特征离散化”。如果是非算法岗的同学可能觉得奇怪但百度很多业务都依赖数据驱动所以基础机器学习概念建议稍微了解一点。三家公司的风格对比可以看下面这个表格维度阿里腾讯百度面试轮数4-5轮含交叉面3-4轮节奏快3轮技术面HR面核心考察业务理解开放题基础功手写代码算法原理海量数据场景典型题目设计签到系统链表判环topK、URL去重面试形式电面现场面电话突击多现场面为主最大难点开放题发散思维手撕代码压力场景设计落地方案3. 核心环节复盘三场面试里最值得展开的三类问题3.1 算法题复盘二叉树最近公共祖先从边界到优化2017年的面试题放到现在看其实变化不大二叉树最近公共祖先LCA几乎是高频中的高频三家至少有一家考了。我是在腾讯一面里遇到这道题的当时电话面试官让我口述思路然后共享写字板写代码。题目很简单给一棵二叉树和两个节点p、q找到它们的最近公共祖先。拿到题之后不要马上写代码先和面试官确认几个事情这棵树是不是二叉搜索树p和q是否一定存在节点有没有指向父节点的指针这几个问题的答案直接决定了你怎么写解法。如果是普通二叉树且没有父节点指针最常见的是递归解法。思路是从根节点开始遍历如果当前节点是p或q就返回当前节点否则递归找左子树和右子树。如果左右子树都找到了非空节点说明当前节点就是LCA如果只有一个子树返回非空就返回这个子树的结果。代码大概长这样def lowest_common_ancestor(root, p, q): if not root or root p or root q: return root left lowest_common_ancestor(root.left, p, q) right lowest_common_ancestor(root.right, p, q) if left and right: return root return left if left else right这个解法的时间复杂度O(n)、空间复杂度O(h)h是树高度。写完之后一定要自己跑一个例子我当时是画了一个三层二叉树把p和q放在不同子树里手动过了一遍递归返回值确认逻辑没问题再交给面试官看。面试官一般会继续追问优化场景如果一棵树很大但需要多次查询任意两个节点的LCA怎么做这时可以答“离线批量查询用Tarjan算法”如果是二叉搜索树就可以利用大小关系从根开始如果两个节点都小于当前节点就向左走都大于就向右走第一个分岔点就是LCA代码更简单时间复杂度可以到O(log n)。这道题能在面试中拿到高分的点不在于写出来而在于你能把边界条件说清楚、复杂度分析准确、并且能应对面试官的扩展提问。建议准备面试的时候把这类“经典题变种”多过几遍。3.2 项目深挖复盘怎么把一段项目经历讲到三轮都不崩项目经历是秋招面试胜负手。面试官不关心你做过多少个项目关心的是你在项目里做了什么、遇到什么问题、怎么解决的。很多同学写项目只写“实现了某某功能”但面试官一深问就支支吾吾这是最减分的。我当时用情感分析系统作为主项目复盘一下面试官的问题链你可以感受一下反问的切入角度数据是怎么来的规模多大怎么清洗中文分词用的什么方案遇到新词怎么办训练数据有没有标注如果没标注怎么处理分类用的什么模型为什么选它准确率多少用什么指标评估的样本不均衡怎么办服务怎么部署的QPS多少延迟高不高这些问题每一个都能延伸出一个小型技术方案。我第一次面阿里二面时就被问到“样本不均衡怎么办”当时只想到“可以多采样少数的类别”面试官继续问道“如果少数类样本太少SMOTE有没有考虑过类别权重呢”我确实没深入做过这些只能诚实说“这部分当时用的是数据扩充SMOTE只在论文里看过”。虽然答案不完美但因为我没瞎编面试官反而认可了我的诚实还顺势讲了一下几种处理的优缺点那场面其实是加分的。项目讲述有个原则先结论后细节。先一句话说清“我要解决什么问题用了什么方案达到什么效果”比如“这个系统爬取了30万条电商评论用朴素贝叶斯加情感词典做正负面分类准确率82%并输出到前端可视化看板”。然后再根据面试官感兴趣的模块展开技术细节。不要一开始就钻进分词算法的实现细节里面试官可能根本不了解你的上下文你讲半天他也不知道你想表达什么。另一个很实用的技巧是“主动抛钩子”在自己准备得很充分的技术点上故意说一句话引导面试官往那里问。比如提“线上部署时把模型通过RESTful API封装最初QPS只有50后来加了Redis缓存提升到500”面试官大概率会问“缓存怎么设计的”“缓存穿透怎么处理”正好落在你的准备范围内。3.3 场景设计题复盘短链系统从零到一场景设计题是秋招难度天花板不少人栽在这里。我当时在百度遇到一道设计一个短链系统。这道题到现在依然是面试常客而且很能体现面试者的系统设计能力。先不被吓到。场景设计题不是让你写出完整系统而是看你在需求不明确的情况下能不能一步步理清思路。我的答题框架是四步走澄清需求、估算规模、给出方案、讨论优化。澄清需求阶段我会问短链的用途是什么是给营销短信用的还是有长期收藏场景需要多长的有效期预估日活多少、每天新增多少条这些问题看起来是向面试官要答案实际上是在展示你的需求分析能力。面试官说“每天一亿条新链接有效期30天”这就是一个具体规模。估算规模阶段算一下存储量一亿条乘以30天就是30亿条每条记录假设100字节就是300GB数据再加上索引可能翻倍。这个估算能很快暴露方案的瓶颈也决定了你的设计方案要上分布式存储还是单机MySQL就够。方案设计阶段两个主流思路一个是用发号器用数据库自增或雪花算法生成全局唯一ID再转成62进制短码另一个是用随机字符串生成后存入数据库靠唯一索引防冲突。两个方案各有优劣发号器可以保证短码短且唯一随机字符串需要处理碰撞发号器的问题是ID连续可能被遍历到所有短码随机字符串则更防猜测。讲清楚这个trade-off比直接选一个方案更好加分。存储和缓存我建议这样设计短码到长链接的映射先查Redis没命中再查MySQL回源后写回Redis。跳转用302而不是301因为302可以统计点击量和做后续运营活动301会被浏览器缓存想改规则都来不及。这个细节当时面试官眼前一亮。最后面试官还会追问“如果短码用完了怎么办”“如何防止恶意刷接口”“过期数据怎么清理”。这些不是每个都能答上来但至少要能说出思路比如短码用完了可以增加位数、恶意请求可以加频率限制、过期数据用定时任务加LRU缓存淘汰。回答不出完美解决方案没关系关键是让面试官看到你有持续思考的能力。3.4 HR面和加面容易被忽视的关键轮次很多人以为HR面就是聊天但其实HR面刷人率并不低。尤其阿里HR手握一票否决权。我当年有个同学技术面表现很好结果HR面聊了半小时最后挂在了“你觉得你做过最有成就感的事是什么”这个问题上。不是因为他没做而是回答毫无感染力像念简历HR听完完全不觉得这是有热情的人。HR面的自我介绍要准备一个30秒版本和两个3分钟版本。30秒版本用于电话开场或临时被问“简单介绍一下自己”3分钟版本用于正式面谈。内容不要复述简历要讲一个“有逻辑的故事”我是谁、做过什么、为什么选择这个岗位、为什么选择这家公司。“你的缺点是什么”这道题是HR面的必问题。我的建议是说一个真实的、但已经正在改进的缺点比如“我在公开汇报的时候容易紧张所以这学期主动选了两次课堂presentation来练习”。不要说自己没有缺点也不要说一个对工作有致命影响的缺点。最后“你还有什么想问我的”这个问题一定要问。可以问“团队目前的人员构成”“这个岗位未来一年最重要的事情是什么”“如果入职前一个月您希望我重点学习什么”。这些问题能体现你对这份工作的认真程度也帮你判断这个团队是否适合你。遇到加面怎么决策如果面试官说“我帮你转给另一个团队加面一轮”说明有人对你有兴趣大概率是有希望拿offer可以问清楚是新团队的方向是什么再做决定。原则上不要拒绝加面多一轮机会总比没机会好。4. 常见问题与排查技巧实录4.1 算法题卡住了是硬撑还是放弃面试时写不出算法题是秋招最崩溃的时刻。我腾讯三面就遇到一道动态规划题现场卡了十分钟纸面写了两版都感觉不对。当时面试官没有催但我也能感觉到时间在溜走。卡题的正确姿势不是沉默硬想而是主动把思路说出来。你可以先说“我先给一个暴力解法的思路枚举所有状态每次转移O(n)总复杂度O(n^2)”。说完暴力解哪怕没优化面试官也会觉得你有基本思路。然后再补充“我还在想怎么把状态转移压缩可能是多一个维度用空间换时间”。这个时候面试官往往是愿意给提示的他稍微提一句“如果只需要前一个状态的值呢”你可能就被点醒了。如果面试官已经给了提示你还不会那就诚实说“这道题目前没有好的思路我第一次遇到这种状态设计可以给我点时间复盘吗”。一定要避免的是沉默五分钟、在纸上涂涂画画、最后说“我不会”就结束了。宁可说出一个次优解也比什么都不说强。4.2 项目被问超出准备范围时怎么应对面试官问项目总会有问题超出你准备的范围。我当时被问过“如果你的语料里有emoji要不要去掉怎么去”这种问题准备的时候完全没考虑过。这类问题考的不是你有没有做过而是你面对新问题时的思考方式。一个安全的回应方式是先承认“这个点当时没有专门处理”然后立刻给出你的分析思路。比如“如果现在让我处理我会先分析emoji在语料里的占比如果占比很低就直接过滤掉如果是个性化评论比如电商平台上用户用手指表情可能要考虑作为特征保留”。这样既没有瞎编经验也展示了分析问题的能力。最大的禁忌是硬编造。面试官对项目领域的了解通常比你深你编一个他刚好懂的细节一下子就会被拆穿后面整场面试都会失去信任。说“没做过”本身不扣分你的应对思路才加分。4.3 面完没消息怎么办跟进节奏和心态面试完三天内收到下一轮通知是正常的超过一周没消息就开始焦虑了。秋招最大的敌人不是面试官是悬着没消息的等待感。我总结的跟进节奏是一面后一周没消息可以通过内推人问一下状态如果内推人回复“在审批”就继续等如果回复“还在流程中”可以隔两周再问如果超过三周没有明确反馈基本可以放弃推进别的公司了。HR面后等offer的时间可能更长有的要一个月这个阶段别死等一家手里必须同时有几个流程在走着。心态上一个比较实用的办法是把求职当成“大二选课”的心态有课就上没课就自习不要把一家公司当成唯一出路。我秋招最绝望的时候是九月第三周手里0 offer面了五家都挂了那段时间每天看到朋友圈有人晒offer都很焦虑。后来我给自己定了个规矩每天投三家公司、做一场笔试、复盘一场面试用行动对抗焦虑。到十月第二周第一个offer就来了后面就顺了。4.4 时间管理和几个救命小技巧秋招期间时间碎片化严重今天笔试明天面试很难有大块时间学习。我的建议是每天固定留出一个小时给基础知识回顾半个小时给刷题其他时间用来应对笔试和面试。知识回顾时间尽量放在早晨因为状态最好。笔试环节有几个实用的小技巧先扫一遍全部题目按题目难度分配时间不要在一道题上死磕超过二十分钟输出格式一定要检查尤其多组输入输出的场景不会的题也要写一个暴力解法拿部分分有些平台会按用例给分暴力解可能拿一半分。面试前一晚不要刷新题把之前整理的高频考点和项目表述过一遍早睡比临阵磨枪重要得多。我记得腾讯二面前一晚刷了一道自己没见过的困难题结果第二天大脑发昏反而影响了发挥。这件事之后我就定下规矩面试前二十四小时只做旧内容复习不碰新题。先分享到这里秋招还有很长别怕挂每一次挂都是在帮你看清真实的市场行情。如果你也正在准备大厂面试把基础打牢、把项目讲透、把心态磨练好offer只是时间问题。