前言

最近博客的阅读人数逐渐增加。回想起去年这个时候,我正在为校招做准备,很多文章也都是当时整理的。估计现在的读者很多都在为实习或校招做准备,所以趁现在有时间,分享一下自己的经验教训,希望能对大家有所帮助。

我的背景是 211本、985计算机硕,两段实习经历、一个项目/竞赛经历。我的校招面试从 2020 年 7 月初开始,到 9 月初结束,期间共面了 10+ 家互联网公司 (BAT/TMD/Y/K/P/MS 等),全部都是后端开发岗位,技术栈不匹配挂了 2 家 (DD、JD)。面试一圈下来,感觉不同公司的考察点都大同小异,评价标准也比较相似。如果能提前有一个大致认知,复习时兴许能事半功倍,少走弯路。

字节跳动 2024 年春招 / 暑期实习已经正式启动,欢迎大家投递 Ads Infra 团队,这里是一些介绍:

时间线

校招一般分为提前批、秋招、秋招补招、春招等阶段。

提前批一般在 7 月开始,但是 2020 年受到疫情影响,各家大厂早在 6 月就开始了提前批,比如字节提前批是 6.16~7.16、阿里是 6月中旬开始。今年预估还是 6 月开始。

我参加了提前批,所以是在 6 月下旬开始报名 + 笔试,7 月下旬集中面试(每天一两场面试),8月接近尾声(主要是三面 or HR 面),9 月上旬结束。也有同学不参加提前批,是在 8 月上旬开始,9 月集中面试,9 月下旬结束。

在这里,我的经验是:要尽可能早地准备、参与面试,有机会尽量参加提前批

参加提前批意味着多一次面试机会,多投几家就能积累更多的经验,无论通过与否,对于之后的面试都有帮助。提前批也不是大佬专场,入场率和通过率都比想的要高。而且提前批大部分都免笔试,所以没什么试错成本。

提前批还可以集中面试很多家。校招面试就好比高三模考,天天面试就会习惯面试,好处一是不再紧张,二是能够维持面试的手感,三是能在面试中暴露自己更多的问题,及时查漏补缺。

以往的说法是金九银十,但我感觉金八银九或许更准确些。去年身边的大部分同学在 9 月就已经拿到了心仪的 offer。当其他人手上至少一个保底 offer 而你还没有开始面试时,心里还是会比较焦虑的。所以还是要早做准备

考察维度

各个公司对实习生的考察点大致可以分为以下几个维度:基础知识、算法、项目经历、实习经历、工程能力。我认为前两者更为重要。

基础知识

对于实习生/校招生来说,基础知识是最重要的考察点

基础知识就是操作系统、计算机网络、数据库、计算机组成原理、编译原理等课程的内容 (重要性递减)。作为实习生/校招生,大部分人都没有出彩的项目或实习经历,但都在学校系统学习了基础课程。因此,在很多面试官看来,基础知识最能反映校招候选人的水平。一方面,对基础知识的掌握程度体现了候选人的学习态度和接受能力;另一方面,实际工作也需要候选人有扎实的计算机基础。

算法能力

算法能力同样很重要。特别是对于后端同学来说,每轮面试至少 2 道算法已经成为标配,某些外企(如微软)甚至只考算法题。

面试官看重算法能力的原因:一方面,只要肯付出时间和精力去刷题,就可以达到一个不错的水平,所以算法能力至少应当达到平均线;另一方面,算法题需要深入积累、举一反三,才能解决面试中出现的新的题目,这反映了候选人的学习和思维能力。

算法题刷到什么程度就可以?其实很多面试官出的题目都是 LeetCode mid 难度,所以算法能力达到 LeetCode mid 以上就可以。刷完 LeetCode 前 300 道的 mid 题和一些高频/经典 hard 题,就可以应对大多数的面试了。

不过,相比于算法能力,我认为基础知识更为重要一些。算法是一项长期工作,见效慢,需要持续投入;而基础知识可以先广度覆盖各类知识点,再深度研究每个专题,在学习过程中可以随时获得反馈。算法的评判标准较为客观绝对,要么做出来要么做不出来;而基础知识的考察相对来说要宽松一些,不管会还是不会都可以说上一两句,面试过程中有更多的机会展示自己。当然,这也取决于面试官的喜好,不同团队/方向的考察侧重点也不同,所以基础知识和算法还是要两手抓。

项目经历

在我看来,项目经历是一个锦上添花的内容,主要是给面试官一个提问的切入点

项目/框架等工程能力,主要是针对工作3~5年的社招人员进行考核,因为他们理应有解决实际问题的经验。但是作为校招生,我们很难有大型项目的经历,面试官也不知道我们写过的项目的质量如何,或者不知道我们说的是真的还是在吹牛,所以会更关注我们的基础(如操作系统、数据库)与学习能力(如算法)。因此,不需要在项目经历上花费很长时间准备——性价比不高,也不需要将项目经历包装得高大上——面试官不信。

但是简历上还是要有一段项目经历,以给面试官一个不同的提问角度。

面试官对项目经历的提问,一般会从“介绍一下你做了什么”开始,然后会问一些业务细节,比如“为什么选这个方案?”/“有没有遇到xx问题?如何解决的?”如果我们的项目经历比较常规,大部分问题就会围绕里面用到的技术展开,而这些又最终会落到基础知识上。

面试官会注意候选人在项目过程中用了哪些技术、哪些框架,然后深入地问原理。面试官的关注点并不是“我在项目经历中,使用了哪些技术”,而是“我在项目经历中,使用了这些技术,并且我对其原理有深入的了解”。在项目中使用工程上很流行的技术和框架,这是最基本的水平;如果对这些框架的原理有深入的了解、对比过不同框架的优缺点、甚至自己尝试实现过一个 demo 框架,那在面试官那里一定是一个极大的加分项。

我们应当保证对项目中用到的技术/框架有较为深入的了解,而不只是停留在调用 API 上。比如项目里用了 gin 框架,面试官就会问为什么 gin 的速度快?有没有从源码的层面上理解过它的特点?这个时候,如果我们知道是前缀树,面试官就会点点头;如果我们再顺手写个前缀树的代码,那就会让面试官惊喜了。

一个常见的误区是:项目经历一定要高大上。比如,要不要做一个秒杀系统然后写在简历上?我认为没有太大必要,因为校招生很少有在大型分布式环境下编写 redis、消息队列等代码的条件,那这种项目经历不就是在 github 上照猫画虎吗?

项目不是只能做 Web 网站或者后台管理系统,还可以有其他选择。比如:

  • 学习《CSAPP》课程,并做完若干 Labs,如内存缓存、内存分配回收、Web 服务器等
  • 实现一个简单的操作系统,可以基于已经写好的系统,实现其中的部分模块,如进程调度、中断处理等
  • 实现一个编译器,或者正则表达式(子集)的解析器
  • 实现一个基于 TCP 的并发服务器框架,包括路由、Goroutine 池、消息队列等(如 zinx
  • 实现一个简单的 RPC 框架,考虑选择什么传输协议和编码协议、以及这样选择的原因
  • build-your-own-x 提供了许多实践项目,如 Docker、数据库、命令行工具、Shell、Git、搜索引擎等

这些项目不仅可以解决实际问题,还可以在过程中深入钻研底层原理,或者锻炼自己的算法能力。比起堆积木、搭脚手架,我认为这些项目更值得尝试。

实习经历

实习经历可以看作某种形式的项目经历,能够丰富简历、作为面试考点,大厂的实习经历也是对我们能力的背书。

面试官对实习经历的关注点:

  • 在实习中做了什么工作?
  • 遇到哪些问题?如何解决?
  • 通过实习,得到了哪些成长?比如 Git 操作、内部工具、团队协作、开发流程/规范等。
  • 实习过程有哪些产出?有没有主动的贡献?比如整理新人手册、发现并解决了某个问题、提升了业务指标等。
  • 对团队的现状和下一步规划,有没有自己的思考?

在秋招(7、8月)之前,最好能够有至少一个实习经历。如果复习时间紧张,可以先投一些竞争较小的岗位,比如大厂的非核心部门、新业务/缺人的部门,或者二线互联网公司/独角兽企业等。

去哪儿找实习信息?首先是各个公司的官网,其次是牛客网(求职-实习广场)和实习僧,最后还有来自同学的内推。不要担心内推会麻烦别人,大部分正式员工都有招新同学的 KPI,我们只需要做一份简历,然后交给他们就好。

一个公司可以投递多个不同部门的岗位,但同一时刻只能进入一个岗位的面试流程。不同部门对候选人的要求不同,所以面试没有通过不一定代表水平不够,可以尝试投递同一个公司的其他部门

因为培养实习生需要成本,所以部门希望实习生能够实习较长时间,一般都要 6 个月以上,至少 3 个月,但如果面试过程中说只能实习 3 个月很有可能被刷掉。

暑期实习有大概率转正。转正可以有一个保底 offer,面试其他公司可以拿来 argue,但是转正的评级一般不会太高 [如何提高?]。即使没有转正名额,也可以通过校招通道来争取更高级别的 offer。

欢迎投递 字节跳动 - Ads Infra 团队,北京 / 上海均有实习岗位,可转正。

工程能力

工程能力主要考察:对开发环境 / 工具的熟悉程度,如 Linux 概念、Linux 命令、 Git 操作等;服务运维经验,如问题排查、性能优化等。面试题汇总中总结了部分常见题目。这里需要自己去搜集和动手操作。

开始复习

现在开始复习(3~5月),时间较为充裕。我们应当扎实掌握每一个知识点,而不是以覆盖更多面试题为目标。重质不重量,重深度不重广度,逐步构建个人知识体系

现在网上有许多的面经汇总,包含一系列的题目和简短的回答。光靠这些面经的答案是远远不够的。面试官很喜欢在一道题上持续深入的追问,这很容易把浅尝辄止的候选人筛出去。我们应该将这些面经汇总看作问题集,每一个问题的答案,需要自己去深入挖掘。

许多面试题很常见,网上有详细的文章,但只会背八股文也远远不够。理解不牢,换个问法可能就不会了,背八股文也容易被面试官发现,或者被一连串的追问卡住。所以深入思考、主动归纳总结更为重要

这里我的经验是做笔记。一份笔记,在写的过程中需要整理、思考和归纳,可以加深对知识点的理解,在复习过程中也是很好的参考资料。一系列笔记就是自己的知识库。

如何做笔记?

推荐使用 Markdown 做笔记。Markdown 的语法简单,书写过程中无需设置样式,不会打断思路。Markdown 也有较好的扩展性,可以和 HTML 语法结合使用。个人认为,Markdown 是最适合程序员的笔记格式。我的博客就是用 Markdown 写的。

Mac 系统下,推荐使用 MWeb 管理笔记。可选的替代方案有思源笔记、Typora、VS Code 等。MWeb 界面截图:

做笔记的过程中,应当遵循以下几个基本原则:

  1. 笔记不是简单地复制粘贴,而是要主动梳理,深入思考。
  2. 笔记不是速记,即使不公开给他人,也要行文流畅规范。遣词造句的过程,实际是在脑海中梳理知识的过程。
  3. 多问几个为什么,多发掘可能的考点。没有现成答案的问题,需要自己去探索和归纳。

笔记的分类:

  • 基础课程:操作系统、计算机网络、数据库等
  • 算法:解题技巧、专题、题解等
  • 语言:C/C++、Golang、Java 等
  • 工具:Git、Linux、Docker 等
  • 其他:分布式、设计模式、最佳实践等

Tips:

  • 可以给笔记打标签,方便查找
  • 可以在笔记的开头或结尾罗列参考文献
  • MWeb 可以通过 CMD + O 快捷键或 Alfred Workflow 搜索文档

基础知识复习指南

最重要的是操作系统、计算机网络,其次是数据库等。我的复习方法:

  1. 初步建立知识框架:选择一本经典本科教材,系统过一遍。本科教材知识点全,容易理解,但缺乏深度。
  2. 深入研究各个专题:深入研究面经中列出的每个题目,特别是高频题目,如进程线程、HTTP 等。面经可以在很多渠道找到,比如牛客网、Github 上的面试题汇总。这里一定要自己整理笔记,我采用三个步骤:
    1. 先搜集大量参考文章;
    2. 阅读各个文章,同时梳理笔记大纲,粘贴一些可参考的关键段落;
    3. 完善笔记内容,整理为一篇系统、连贯的文章。
  3. 穿插阅读经典书籍:网上搜到的笔记大多是二手知识,直接阅读权威书籍,会有更原汁原味的体验。书籍有完整的上下文,随时可以向前或向后翻阅。时间有限的情况下,可以不从头到尾阅读,而是只阅读某个专题。可以去豆瓣或知乎查找高分/推荐图书,如《深入理解计算机系统》《现代操作系统》《Operating System: Three Easy Pieces》等。
  4. 分清优先级:以基础知识、高频考点为主。像是分布式、中间件等进阶内容,应该是在有余力的情况下再深入了解。这些内容看起来高大上,但没有对应业务场景的情况下,只能是背八股文,一问就露馅。

Tips:

  • 不懂的名词多查查,多问几个为什么,发散思维,扩展相关知识点
  • 网上的内容不一定正确,需要自己辨别或验证
  • 网上的资料比较琐碎,自己整理一下,印象更为深刻
  • 使用 Google 搜索;屏蔽内容质量低、抄来抄去的网站(比如 C**N)
  • 可以尝试搜索英文关键字,内容质量较高

算法复习指南

算法能力达到 LeetCode mid 以上即可应对大部分面试。

我的个人情况:《剑指offer》50+ 道、LeetCode 242 道 (73 easy + 137 mid + 32 hard,范围主要是前 300 题 + 热题 HOT 100 + 腾讯精选练习 50),题目数量不算多。

我的刷题方法:

  • 持续学习:前期刷一些 easy 题热身,之后每天 1~2 道 mid 或 hard。
  • 定期复习:使用一个表格记录自己的错题、错误原因、笔记链接、上次复习时间,每周复习 3~5 道。
  • 按照标签刷:按照链表、数组、二叉树、动态规划等标签刷题,同一个标签的代码和方法类似,效率高。
  • 分清优先级:优先刷《剑指offer》、LeetCode 经典题、高频题、模板题;冷门题就没必要浪费时间了。可以参照网上的 LeetCode 笔记的顺序来刷题,见附录 - LeetCode 笔记
  • 吃透每道题:刷题的目标不只是通过,而是要给出最优解。对于一题多解的情况,还需要参考他人的题解,将各种解法都实现一遍,并对比不同解法的优缺点。此外,很多不同的题目有着相似的解题思路,可以尝试用这道题的解法去做其他题,争取举一反三,比如 42. 接雨水84. 柱状图中的最大矩形。最后,总结自己的笔记。这样做下来,虽然刷题数量不多,但每道题都很会掌握得很扎实。

Tips:学习数据结构时,配合可视化网站有奇效。推荐:


关于“定期复习”,我使用一个表格来管理所有错题:

  • 按照标签分组;相似题目可以汇总到一起,比如上图的“打家劫舍”。
  • 通过颜色区分题目的重要程度:橙色表示重点题目,优先复习;黑色表示常规错题,需要复习;灰色表示不重要的题目,有些细节需要注意,可以不复习;删除线表示已掌握的题目,不需要复习。
  • 每一行备注中的超链接是 MWeb 中的笔记链接,点击可跳转到笔记;备注里也可以记录需要注意的细节和易错点。
  • 软件是 OmniOutliner,使用 Excel 或飞书云文档-多维表格可以实现同样的效果。

首次复习时都需要重新写一遍代码,之后视情况选择写代码或者只回忆思路。及时更新各个题目的状态为“重点”“不重要”或“已掌握”,防止错题越攒越多。面试前快速浏览表格,回忆做题思路,优先看橙色高亮的重点题。

准备简历

简历从上到下大致为:个人信息、教育背景、实习经历、项目经历、荣誉奖励、专业技能/英文水平/个人评价等。我的简历模板:

上图使用 Sketch 绘制。制作一份这样的简历很简单:首先确定一个主题色,如 #353535, #3F59A8, #4F6F8A, #0089B2, #870509 等;其次保证行高、行间距、页边距都是 4 的倍数,如上图页边距为 24px、行间距为 4px / 8px/ 12px;矢量图标可以从 iconfont 查找。

简历可以使用在线平台制作,如乔布简历、超级简历 CV 等,也可以使用 Word / PS / Sketch 制作。拒绝花花绿绿、华而不实的风格,关注内容而不是样式。采用 STAR 法则描述自己的项目和实习经历,知乎的这个问题可以参考,geekcompany/ResumeSample 提供了一系列程序员的简历模板,resumejob/awesome-resume 则提供了许多程序员的简历例句。

Tips:

  • 最好放在一页上,如果一页放不下,可以缩小字体/间距,或改变页面大小;部分在线平台也提供“自动填满一页”的布局功能。
  • 简历导出为 PDF 格式,命名为“姓名_学校_岗位_手机号”。
  • 教育经历写预计毕业时间,而不是“至今”。

开始面试

面试前

准备一份个人介绍

个人介绍相当于简历的文字形式。大部分面试官在开始面试时才会查看我们的简历,所以个人介绍其实是引导面试官读简历的过程,最好能和简历从上到下的内容对应。

如果面试外企,还需要准备英文简历和英文个人介绍。

个人介绍大致可以分为三个部分:

  • 背景介绍(学校、专业、荣誉奖励等)
  • 实习经历、项目经历(遵循 STAR 法则)
  • 业余生活(博客、Github 开源经历、个人提升等)

个人介绍模板:

(背景介绍)
面试官您好,我叫 XXX。来自 XX 大学 XX 学院,目前研 X 在读,明年 6 月毕业,研究方向是 XXX。本科我就读于 XX 大学,XX 专业。在校期间,我多次获得国家级、校级奖学金。此外,我也参加过许多软件开发竞赛,包括 XX 大赛、XX 大赛等,拿到了 XX 奖项。

(实习经历)
去年,我在 XX 公司的 XX 团队实习 X 个月。这个部门主要是做 XXX (介绍团队业务背景),我在其中负责 XXX 工作,包括 XXX、XXX 等。此外,我还输出了 XX 篇文章,整理为部门新人手册。

(业余生活)
最后,我业余时间有写博客的习惯,会定期归纳总结自己的笔记。我也有开源经历,在 github 上有几个开源项目。

以上就是我的个人介绍,谢谢您。

Tips:

  • 每个部分之间要有连接词。
  • 注意语速、节奏和停顿,避免变成高中生背课文;可以自己提前录音排练。
  • 时长控制在三分钟以内。
  • 一些经常被问到的问题,可以补充到自我介绍里。比如面试官总会问我:“你为什么从前端转到后端?”我就补充到了自我介绍的两个工作经历之间。

准备一些常见问题的回答

简历里的项目经历、实习经历最有可能被面试官作为第一个问题,比如“从现在看来,你觉得这个工作还可以怎么改进?”“你觉得这些工作中最难的一点是什么?你是怎么解决的?”针对这些问题,应该提前准备。

附录 - 综合面试问题中总结了我在技术面和 HR 面遇到的综合面试问题,大家可以结合自己的实际经历,提前准备草稿。

准备反问面试官的话

面试结束后,面试官会说:“你还有什么要问我的吗?”这时借机可以了解一下团队。选工作是一个双向的过程,了解团队可以帮助做出选择。

反问技术面试官的问题

  • 组内主要的技术栈 / 语言?
  • 部门具体业务 / 面试官的工作内容?
  • 部门业务的挑战 / 难点?
  • 我加入部门后可能负责的工作内容(判断是否感兴趣)
  • 部门的人数 / 人员构成(判断是否核心)
  • 部门业务的后续规划(判断公司投入力度 / 未来机会)
  • 针对新员工有哪些培训(万能问题)
  • 面试官的工作体验,比如工作是否枯燥乏味、对个人成长的帮助、工作压力是否很大、加班强度等。

  • 后续是什么流程?还有几轮面试?(推断自己这一面是否通过)
  • 大概多久能够出结果?(避免一直等结果心慌)
  • 您对我刚才面试表现的评价?
  • 您对我有哪些建议?/ 哪些方面的知识、技能还可以再提升?/ 您觉得我还有哪些方面的不足?

  • 部门所在工区 / 地理位置(考虑通勤成本)
  • 上下班时间 / 是否需要打卡?

反问 HR 的问题

  • 针对新员工有哪些培训?
  • 对我有哪些评价或者建议?
  • 大概多久能够出结果(避免一直等结果心慌)
  • 之前的面评(一般 HR 不会透露)
  • 公司福利 / 三餐 / 房补

注意:HR 面试时,不要直接问户口、薪资等问题,等收到 Offer 后、在沟通薪资时再问。

实习生还需要关注这些问题

  • 部门有没有转正机会?
  • 实习多长时间之后可以申请转正?
  • 对实习出勤的要求是一周至少几天,至少实习多久?
  • 部门的转正名额 / 转正概率?如果我想转正,您期望我达到什么水平 / 有多少产出?
  • 过去是签外包团队还是正式实习生?不同身份的转正机会如何?

其他资源

安装录屏软件

如果是远程面试,推荐打开录屏 / 录音功能,录制面试过程。

为什么要录屏 / 录音?面试过程中,我发现不同公司 / 不同轮次的面试题目有很大概率重复,这可能是因为面试官会根据候选人的经历、水平,针对性地挑选问题,我们的回答也可能影响面试官的下一个问题。因此,面试后的复盘非常重要。优先复习自己面试中遇到的题,其次再看网上面经的题,保证同一个题目只会答错一次。此外,也可以通过录屏 / 录音以第三人称的视角观察自己的面试表现,从而发现不足并及时改进。

Mac 系统默认只能录制麦克风的输入,需要配置 SoundFlower 来录制系统声音 (即面试官的声音)。Mac 系统的录屏软件可以使用 Kap

我使用 2015 年 MBP + 关闭所有无关软件 + 打开录屏功能 + 面试一小时,系统没有出现明显卡顿。最好自己提前测试一下。

面试前一小时

  • 快速浏览以下内容,遇到不会的不用深究,主要是有个思路:
    • 基础知识题目列表
    • 综合面试问题
    • 算法错题集,优先重点题目
    • 牛客网面经
  • 调试设备,包括网络、摄像头、耳机、麦克风、录屏功能等;视频画面里不要有杂物。
  • 面试前五分钟,排练一遍自我介绍。

面试中

如果遇到不会的题目怎么办?

即使不会做,也要主动和面试官交流。先说你如何考虑这道题目,你现在的解题思路是什么,然后向面试官要引导 (比较晦涩) 或提示 (比较直接),最后给出一个自己水平内的最优解。

面试后

复盘。根据录屏或者回忆,整理面试中遇到的题目、自己没有发挥好的地方。距离面试结束的时间越短,回忆越清晰,可以尽快整理。

查漏补缺。有些题目可能只是我们自认为答对了,所以对于每道题目,都需要搜集资料、发掘所有的考点、并做笔记

不同公司的面试流程对比

按照字母顺序排列;仅代表个人经历,不保证今年依然适用。
技术面重点考察基础知识 / 算法;经理面以综合面试问题为主;交叉面是其他部门的人来面试。

阿里

面试难度:☆☆☆☆☆

面试流程:统一在线笔试。2 轮技术面 + 1 轮经理面 + 1 轮交叉面 + 1 轮 HR 面,每轮都是电话面试,时长 1 小时左右。一面面试官是未来的 leader,之后的面试官应该级别更高。一二面考察基础知识,三四面主要围绕项目和实习经历展开。

反馈周期:通过后会很快约下一轮面试,可以向你的内推人 / 师兄咨询面试结果;每轮面试间隔 2 天~1 周;Offer 统一在 9 月发出。

评价:由于是电话面试 + 已经笔试过,所以面试时不再考察算法。这导致面试题的覆盖面广、题量大、问得细,难度总体较高。HR 面体验很好,给我提了中肯的建议。

百度

面试难度:☆☆☆☆

面试流程:3 轮技术面 + 1 轮交叉面 (可能没有) + 1 轮 HR 面。技术面时长 1 小时,HR 面很短。是否有交叉面取决于部门和面试评级。技术面试包括算法题,中等偏难。使用百度的“如流”面试。

反馈周期:一面完可能紧接着就是二面。1~2 天约下一轮面试。HR 会加微信。

评价:不同部门的面试官水平差异极大。如果一个月还没给你一个明确的答复,大概率是被泡池子了,可以考虑终止流程,重新投递另一个部门。

快手

面试难度:☆☆☆☆

面试流程:2 轮技术面 + 1 轮经理面 + 1 轮 HR 面。技术面每轮都是牛客网面试,时长 1 小时。HR 面时长 30 分钟。

反馈周期:1 周左右约下一轮面试。

评价:基础架构部门问了很多 C/C++ 的问题,很少问上层的网络协议等知识,也没怎么考算法。面试官比较 nice,答错了会一步一步引导。

美团

面试难度:☆☆☆

面试流程:2~3 轮技术面,1 轮 HR 面。技术面时长 1 小时,HR 面时长 30 分钟。最后一轮技术面是 leader。使用牛客网面试。

反馈周期:3 天约下一轮面试。

评价:面试轮数和面试评级没有关联,2 轮也可以拿 SP。

拼多多

面试难度:☆☆☆☆

面试流程:2~3 轮技术面 + 1 轮 HR 面。技术面时长 1 小时左右,HR 面时长 30 分钟。技术面会考察两道算法题,都是 LeetCode 高频题,难度适中。使用自研平台面试,类似于牛客网,有代码编辑器和视频窗口。

反馈周期:一周左右约下一轮面试。

评价:确实很拼,约了 21:30 面试,面试官有事,等到 22:30 才开始,面完已经 23:30 了。从视频窗口能看出工位确实不大。

腾讯

面试难度:☆☆☆☆

面试流程:2 轮技术面 + 1 轮经理面 + 1 轮 HR 面。技术面时长 1 小时左右,HR 面时长 30 分钟。三面是 leader。面试形式有电话、牛客网、腾讯会议、QQ 视频。

反馈周期:2~3 天出面试结果 + 约下一轮面试。如果 5 天还没有约下一轮面试,建议联系 HR 查看进度。join.qq.com 上的进度超过 7 个工作日(一般 10 个自然日)没有更新时,流程会自动终止,简历重新放回池子里。面试通过后会先收到“云证”邮件。

评价:腾讯在面试实习生和校招生时,比较重视基础课程(操作系统、计算机网络),不会涉及太多高深技术,面试题目和面经重合度较高。每轮都有两三道算法,难度适中,不需要特殊技巧。

WXG:2 轮技术面 + 2 轮面委会 + 1 轮 HR 面。难度比其他部门高,会考察系统设计题(如高并发定时器)或复杂算法题(如判断点是否在封闭图形内)。

小米

面试难度:☆☆☆

面试流程:2 轮技术面,时长 1 小时。没有 HR 面。使用牛客网面试。

反馈周期:3 天约下一轮面试。

评价:面试官很耐心,会主动指出没答出的题目是哪个知识点、下来以后可以查一下。基本没有能够联系到 HR / 面试官的方法。感觉招人比较随意,二面完一个月没消息,一直认为自己挂了,结果 9 月底突然打电话,直接给出了薪资方案。

猿辅导

面试难度:☆☆☆☆

面试流程:先笔试,通过后进入面试。2 轮技术面 + 1 轮经理面,每轮时长 45 分钟,其中 15 分钟过简历 + 考察基础知识,25 分钟做两道中等难度的算法题,剩下 5 分钟反问。三面是 leader,没有 HR 面。使用牛客网面试。

反馈周期:一周内约下一轮面试。如果进入下一个阶段,内推人会先收到通知,可以问内推人。

评价:整体体验不错,HR 对校招生很用心,会加微信、拉微信群、送校招礼物。猿辅导笔试和面试的算法难度是 LeetCode 前 300(我也只刷了这些题)。基础知识 / 算法 / 实习经历至少有一项突出,会比较稳。

字节跳动

面试难度:☆☆☆☆☆

面试流程:2 轮技术面 + 1 轮经理面 + 1 轮 HR 面。技术面时长 1 小时,包括 2 道中等难度偏上的算法题。HR 面时间较短。日常实习可能没有经理面,校招可能会有加面。

反馈周期:一二面一般会连着,三面隔一两天。

评价:对算法和基础知识都很看重,问得比较细。无论通过与否,反馈都很快。会有 HR 加微信,一般是实习生。

收获 offer

💡【方法论】校招碎碎念 - 收获 Offer 篇

广告时间

Note: 我目前还未毕业,也没有招聘 KPI 压力。因为团队在网上的相关资料较少,所以写了这一小节,希望能够帮助大家了解和做选择。有任何问题 (工作时长、团队氛围等) 均可发邮件询问。[团队介绍 / 找我内推]

去年 3 月~ 7 月,我在 字节跳动 - Ads Infra 团队 实习,最终也选择留在这里 。

这里的业务不是枯燥的 CRUD,而是高并发的线上系统,对稳定性和实时性要求都很高。这不仅要深入了解广告投放业务和架构,还要有良好的编码能力和工程能力,对个人提升非常大

这里还提供了一个深入了解复杂分布式系统的机会。除了底层技术原理如 RPC、Thrift、服务化等,还有上层视野,包括整体架构的迭代过程、设计与改进思路、开发前的方案评估、上线后的收益验证等。

这里对实习生的培养也非常认真。不同于大部分团队将实习生作为人力,这里把每位实习生看作之后可能长期合作的同事。在实习过程中,mentor 的任务是发现实习生的特长与不足,有针对性地提升,从而帮助之后更好地融入工作。在这里,实习生承担的不是边角料的工作,而是对业务有长期影响的工作,写在简历上很引人注目。

作为校招生,我也切实感受到了这段实习经历带来的优势。校招面试官对我的实习经历很感兴趣,会花大量时间讨论实习期间的工作内容,这给了我很大的发挥空间,某种程度上也降低了面试难度。

如果你是实习生,这样的实习经历一定极具竞争力。部门在北京、上海均设有实习岗位,可以找我内推

如果你是校招生,加入 Ads Infra 也是一个很好的职业起点。2024 年春招 / 暑期实习已经正式启动,欢迎大家与我联系。越早投递意味着面试机会越多,大家可以在这个页面找我内推。

总结

以上是我根据个人的面试经历总结的一些浅见,欢迎大家一起交流。如有任何问题,可在评论区留言。

附录

牛人博客

面经汇总

LeetCode 题解

社区

  • 牛客网:面经分享、笔试交流、Offer 选择
  • 脉脉:部门评价、职场交流、Offer 选择
  • OfferShow 小程序:薪资分享

综合面试问题

如果需要某个题目的答案模板,请评论指出。

  • 实习期间的工作内容,介绍一下?
  • 简单介绍一下你这个项目的内容?你觉得它的亮点 / 难点有哪些?
  • 实习期间遇到最大的挑战是什么?如何解决?
  • 实习期间给你带来最大成长的工作是什么?
  • 从现在看来,你觉得这个工作还可以怎么改进?
  • 你觉得这些工作中最难的一点是什么?你是怎么解决的?
  • 你觉得实习期间相比于实习前,对你的最大提升是什么?
  • 有哪些印象深刻的事故 fix?
  • 实习期间有哪些工作以外的对团队的贡献?

  • 之前三轮面试感觉如何?
  • 有在面别的公司吗?有收到 offer 吗?正在哪里实习?转正通过没有?

    可以说正在面试流程中,但尽量不要说已经进 HR 面、或者已经收到 offer 了

  • 你如何选择不同 offer?/ 已经想好去哪个公司了吗? / 有倾向吗?
  • 你是不是投过别的公司?如果都要你怎么办?

  • 自己平时分析过源码吗?
  • 你是怎么学习新技术的?
  • 最近在学哪些新技术 / 在看哪些书?
  • 你的长期职业规划是什么?1~3 年的规划是什么?

  • 你能实习多长时间?
  • 你实习什么时候可以开始?
  • 你们老师平时项目多吗?管的严吗?
  • 你是什么专业?为什么不做算法而做开发?你如何看待很多本科生毕业后就去找算法岗?
  • 为什么想要读研?

  • 大量工作、有限时间怎么办?
  • 你是如何团队合作的?

  • 为什么想来我们公司?
  • 为什么要应聘这个职位?
  • 你哪里符合这个岗位的需求?
  • 对这个职位,你还欠缺什么?
  • 你对工作有什么要求?
  • 你希望与怎样的领导共事?
  • 如果我录用你,你将怎样开展工作?
  • 如果我录用你,你觉得是为什么?
  • 如果我没有录用你,你觉得是为什么?
  • 如果你在这次面试中没有被录用,你怎么打算?

  • 兴趣爱好是什么?
  • 你的优点是什么?
  • 你的缺点是什么?
  • 和其他同学相比,你觉得你的优势在哪里?
  • 你认为其他同学如何评价你?/ 你觉得周围人眼中的你是什么样的?如果我问他们会得到一个什么样的评价?
  • 你最有成就感的事是什么?生活 or 实习?
  • 你遇到的最大的挫折是什么 / 最遗憾的事?
  • 大学期间,最大的收获是什么?
  • 有哪些帮助别人的经历?
  • 你实习、生活中遇到的最难忘的人是谁?TA 有哪些特质?
  • TA 身上的这些优秀特质,你最想提升自己的哪一方面?

  • 对加班的看法
  • 对工资的要求

Q&A

Q:我只会 Go,能不能报 Java、C++ 的岗位?

可以,做算法题时,可以选择自己熟悉的语言。跨语言投递岗位时,必须好好准备基础课程和算法,问得肯定会更深入。此外,最好能够对目标语言有一些基本了解,比如 Java 的锁/Map、C++ 的引用/指针/函数重载/虚函数、Golang 的协程/Channel 等,防止面试官问到语言相关的题目时无话可说。

Q:手里有一个 offer ,要不要继续面试?

有余力的情况下,多面试几家,得知自己的真实水平,也有和 HR 谈价的筹码。

Q:一二面主要问什么?

一二面主要考察候选人的专业能力和潜力。整体采用结构化面试,考察以下几项:

  • 基础课程:计算机网络、操作系统等,15~20 分钟
  • 职能专项:语言、框架、工具等,15~20 分钟
  • 算法能力:两道题,30~60 分钟
  • 实习/项目经历:15 分钟

一二面是互相补充的关系,不是每轮面试都严格遵循上面的时间分配。
一二面不是平行面。一面过了才能进二面,二面过了才能进三面。

Q:三面/最后一面主要问什么?

三面一般是经理面,包括专业能力和软素质两部分。专业能力是对前几轮面试的补充,主要是查漏补缺。更多的时间会考察候选人的软素质,包括学习能力/合作能力/解决问题的能力等,见附录 - 综合面试问题。这些问题完全可以提前准备,打好草稿。

Q:三面还会问基础知识和算法题吗?

有可能,但比例很少。主要是考察过往经历和通用素质,见上一个问题。

Q:HR 面主要问什么?

附录 - 综合面试问题

Q:我不喜欢的部门捞了我的简历怎么办?

可以在约面试的时候拒绝,说明你想去另一个部门;同时想办法联系另一个部门的 HR 来捞你的简历。

Q:转正是否真的都是白菜评级?

“实习生转正一般都是白菜价”是一个常见的误区,身边有很多反例。影响转正评级的因素主要有两个:(1) 实习期间的产出;(2) 手里其他 offer 的水平。

实习生转正是根据转正答辩来评级,而转正答辩主要是介绍自己实习期间的工作内容,所以转正评级实际上取决于实习期间的产出。影响产出的因素:

  1. 部门水平。实习生过去大多是承担一些“杂活”,但核心部门的任务显然比普通部门质量更高,也更容易有可罗列的产出。
  2. 个人水平。学习能力强、动手能力强,mentor / leader 就会分配一些相对更有挑战的工作。
  3. Mentor。实习生的工作基本上都是 mentor 分配的,有一个水平高且负责任的 mentor,工作的目标感和成就感会更强,产出事半功倍。
  4. 主观能动性。主动要活儿,不划水;为团队做一些日常工作以外的贡献。“贡献”不一定非得是提升业务指标。如果入职后安装环境、熟悉业务、阅读源码的过程中踩了很多坑,那就整理一份新人手册吧,把经验和教训分享给后续新入职的同学。

转正答辩后的评级并不是固定的。从收到转正意向书 (7~9 月) 到拿到带薪校招 offer (10~11 月),中间还有很长一段时间。HR 最终给出的薪资会综合转正评级与你手上的其他 offer 进行考虑。所以如果感觉自己转正评级不是很理想的话,可以尽可能多地争取几个其他公司的 offer。