唐磊的个人博客

又一位大牛斩获 BAT 大厂 Offer,看看他精心准备的面试总结

背景

关于号主:程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader。欢迎关注,交流和指导!

本文首发于微信公众号,原文链接,转载请全文保留。后台回复关键字 “1024” 获取程序员大厂面试指南。

新鲜出炉的校招系列第三篇,前两篇分别是:

本篇是石头哥又一厉害学弟的佳作,他从 秋招历程、校招结构化面试、 offer 选择 等三个方面进行了总结和经验分享。

还总结面试过程中的各种套路,让你从自我介绍就给面试官下套。其实不只是在校招面试中,社招其实也一样,其中 “给面试官下套” 是个不错的方法,值得借鉴和学习。(详见文中第二部分)

11 月底,在经历了充分的思想斗争后,我终于下定决心寄出了三方,历时三个多月的秋招也终于尘埃落定。过去的三个多月里,面试时间可能只有一个月左右,剩下的两个多月的时间都在等待结果和纠结,因此通过本文总结这段时间我的秋招历程和感悟。

本文大纲如下图所示:

img

一、秋招历程

本人本科毕业于 985 高校,硕士就读于国内 Top2,本硕专业都是软件工程。在本科期间有过华为和腾讯两段实习经历,在研究生期间,我发现自己对科研的兴趣确实有限,因此平时较多参与实验室科研项目的落地应用。

今年由于疫情影响,2020 年上半年大部分时间我都在远程办公,导师分配的任务也稍有减轻,因此悄悄在字节和阿里实习了半年。

就业方向

在秋招开始之前,我考虑的方向主要包括:

  • (1) 读博:导师在博士生考试前和我长谈建议我读博,待遇上也给出了比较好的条件。如果我确实有科研天赋并且热爱科研,那么读博真的是一个非常好的选择,可惜以上两个前提我都不具备;

  • (2) 选调:由于自己在本硕期间都有非常多的学生工作经历,目前也担任学院学生工作的重要职务,因此很长一段时间内都考虑直接参加中央或者省委选调工作,但是最终因为一些个人原因还是选择放弃;

  • (3) 技术:选择大多数人选择的方向,秋招最终还是主要聚焦于技术开发类的岗位,本文也主要介绍这方面的基本情况。

面试情况

和一些大牛相比,我的秋招面试经历并不算多,一共只投递了十几家公司,最终拿到了国网南瑞研究院、交通银行总行、阿里、腾讯、字节、华为、猿辅导、完美世界的 offer,具体的情况如下:

阿里

  • 流程:实习(笔试+5 面)+转正答辩
  • 结果:Offer

阿里的面试总体来讲是比较标准的结构化面试,但是面试流程实在太长了,从投递简历到完成面试,大约历时 40-50 天。

而实习转正后的 offer 发放等了大约 20 天,薪资沟通等了 50-60 天,贯穿秋招的头尾,非常考验心态。

腾讯

  • 流程:笔试+3 面
  • 结果:Offer

相比于头部的几家互联网公司面试,我个人感觉腾讯的面试反而是比较“水”的。两次专业面试都是电话面试,且以项目交流为主。

腾讯的内推和自主投递没有流程上的区别,只是内推能在一开始锁定心仪的部门。我一开始不了解情况自主投递简历,导致后续无法内推,简历只能由部门随机锁定。捞我的部门是腾讯某著名游戏工作室,最终顺利拿到 offer。

字节

  • 流程:实习(3 面)+绿色通道 1 面
  • 结果:Offer

字节的整体面试流程非常紧凑,实习简历投递后第二天就开始沟通面试,一个下午直接完成 3 面,再隔一天就沟通 offer,还允许远程实习,因此计划 3~6 月在字节顺带实习 3 个月。

由于当时不是暑假,实验室压力、学生工作压力、实习工作压力都聚集在一起,让我度过了极其痛苦的三个月,几乎每天都没有休息。

6 月份我提出离职放弃转正答辩,在之后的校招过程中只参加一次专业面试就直接获得校招 offer。

华为

  • 流程:笔试+3 面
  • 结果:Offer

华为的面试流程感受还是非常友好的,会有 HR 单独联系,及时沟通面试进度和状态。

另外令我惊讶的是多次主动沟通感兴趣的工作方向,并针对个人做出非常详细的职业规划,有一段时间几乎是每天打一次电话。

最后的整体评级和薪资待遇也非常有诚意。华为的二面很有可能是压力面,只要保持心态就能顺利过关。

国网南瑞

  • 流程:1 面
  • 结果:Offer

因为来学校进行宣讲,所以现场投递了简历,面试 20 多分钟就直接通过了。南瑞是国家电网子公司,网络风评不太好,不过通过特批给了一个超出预期相对有诚意的待遇,不过相比互联网还是有较大差距。

交行总行

  • 流程:免笔试免面试
  • 结果:Offer

学校有人才推荐计划,填了一些表格交上去,随后安排了一次不到 10 分钟的面试,通知免笔试免面试直接参与体检环节,随后直接发 offer,薪资待遇都是统一的标准。

猿辅导

  • 流程:笔试+3 面
  • 结果:Offer

猿辅导号称是 WLB 的典范,一直宣称“年薪至少 40 万,7 点下班”,面试号称“具有挑战性”,但实际面试流程一周一面,且面试题目难度也很一般,无法深挖项目,只会简单的基础题问答和做题,每次面试两道题目左右,基本都是 leetcode 原题。

完美世界

  • 流程:3 面
  • 结果:Offer

完美世界 K-lab 计划号称 48 小时极速发 offer,由于是校招早期,因此就参与面试练习练习。

由于还是北京疫情期间无法回校,所以安排远程面试超出了“48 小时”,但整体流程还是比较速度,面试结束后也很快收到意向书。

网易

  • 流程:笔试+1 面
  • 结果:挂

我投递的是网易有道的 Java 开发岗位,面试安排在出发回京返校前 1 个小时,1 面全程深挖各大技术栈的底层原理,面试官非常和蔼可亲,面试体验极佳,可惜我水平不高,一问三不知,过了两周流程就变灰了。

快手

  • 流程:1 面
  • 结果:挂

按照大多数人的经历,快手的面试基本也应该是一次性面完,我面试的是基础平台,在做题的时候出现了比较大的失误,偏离了题目重点,把问题复杂化,所以一面结束后面试官直接就说结束面试,“以后等消息”。

商汤

  • 流程:笔试+3 面
  • 结果:放弃

商汤的面试流程中规中矩,有 HR 专人对接,但是每次面试都要相隔一到两周之后才有消息,流程也拖得很长。

有趣的是其中一次面试过程中面试官问我是否认识本科的一位同学,可能是也投递了同一部门。最终三面时由于已有更好的 offer,所以就直接放弃面试了。

小结

相比于身边的一些同学,我没有选择海投,而是在不同领域选择一些有特点的公司有针对性的投递简历,努力提高简历投递的“命中率”。

秋招是一个长期的过程,在获得同领域一些比较满意的 offer 后,我就没有继续面试同领域的没有特殊优势的其他公司。

这样做一方面减少了无效的面试次数,有更多时间进行有针对性的准备,也能兼顾实验室导师的工作;另一方面在最后选择的过程中也能突出每家公司的优势特色,选择时也更有区分度。

二、校招结构化面试

综合我的实习和校招面试经历,我认为准备面试应当包括五个方面,即自我介绍、基础知识、项目经历、原理解析和手写算法。

1. 自我介绍

自我介绍是几乎所有面试的第一步骤,自我介绍配合简历会给面试官建立第一印象。我们知道在平时生活中,如果你喜欢一个人,那么这个人做的一切都会是美好的,如果你讨厌一个人,那么不管他做什么你都会看不顺眼。

面试中也是同理,一个好的初始印象可能会淡化之后面试中自己的失误,而把重点聚焦于自己的长处上。

在我看来,一次自我介绍至少应该包括:

  • (1) 基本信息,毕业院校;
  • (2) 实习、项目、竞赛经历和成果;
  • (3) 自己擅长的技术栈;

一般在自我介绍时,面试官很可能在查看简历,这时候需要对面试官进行后续面试问题的引导。

例如如果自己对某些课程掌握非常深入,可以在教育经历中简要谈谈自己的课程情况,如果对自己的一个项目准备非常充分,可以加大自我介绍时该项目的比重,但切忌一下子说完让面试官无问题可问,而是有意识的留一些常见问题的缺口,例如分布式、效率优化等关键词,并针对这些关键词着重准备。

此外,注意避免一些常见的简历介绍误区,例如“精通”这类给自己挖坑的词汇。

2. 基础知识

对于一些企业的技术初面,面试官可能不会和你讨论项目的技术细节,而是已经准备好了一系列的面试题,此时面试就变成面试官读题,自己答题的环节。这类基础知识问答包括计算机网络、操作系统、计算机组成原理、语言特性、数据库原理等方面的内容。例如:

  • (网络)输入域名后的流程是什么?七/四层模型是怎样的?TCP 的拥塞控制方法是什么?

  • (操作系统)进程和线程的区别是什么?死锁的如何产生、避免?分段、分页与虚拟内存的系列问题、CPU 调度的系列问题等;

  • (计算机组成原理)指令执行的基本过程是什么?

  • (数据库原理)存储引擎的区别是什么?索引底层实现的原理是什么?

  • (语言特性)Java 垃圾回收机制是怎样的?Java 虚拟机包括哪些部分?Js 闭包的原理是什么?go routine 的调度是如何进行的?

对于这些问题,最直接的办法就是直接看已有的面试题整理,在一些博客或是牛客论坛上有大量的总结材料,对于有一定基础的同学直接看材料就能基本回忆起之前所学的课程。

近两年由于大家越来越善于背题,出题的难度也在逐渐增加,偶尔有一些确实不会的题目直接承认即可,也不用不懂装懂强行回答,反而可能引起面试官的反感。

3. 项目经历

投递技术开发类岗位的同学基本都需要准备一些拿得出手的项目。项目经历是最无法临时准备的部分,在一些企业中项目深挖讨论反而会占面试的大部分时间。

在我看来,准备描述自己的项目经历可以包括以下几点:

  • (1) 描述清楚项目的背景和需要解决的问题;
  • (2) 用了什么样的技术方法;
  • (3) 项目取得了怎样的成果;
  • (4) 自己在项目中是怎样的角色,负责哪些工作;

在我实习和秋招面试的过程中,尽管简历上列出了最具代表性的三个项目,但是每次详细介绍的项目实际只有一到两个。

对于如何描述自己的项目经历,完全可以像自我介绍一样准备好时间稍长一些的介绍模版,并至少准备好回答如下问题:

在这个项目中,你遇到的难点是什么?你是如何解决的?

项目介绍本身并不需要回答这个问题,而是面试官基本都会问这个问题。

此外,通过多次面试,我发现每个项目介绍后面试官所问的问题都是有限的几个,因此可以通过多次面试提前准备好更多的项目问题回答,在交流过程中展现出自己从容、清晰的一面。

4. 原理解析

在我看来,这是整个面试过程中非常容易加分的部分。我们可以根据自己已有的项目、自我介绍中频繁出现的关键词,用心准备两到三个可以深挖的点。

这里的原理解析不是仅仅是自己“看过别人写的解析文档”,而是自己深入理解,并能“有条理地讲述给别人听”。

可以选择的方向例如:Tomcat、Spring、Redis、Kafka 的架构和源码实现、数据库引擎的实现、操作系统内核的实现、分布式一致性算法的源码实现、以及其他在自己项目中出现的问题等。

选择深入准备的方向并不是随机的,而是确实在自己的项目中发挥了重要用途,并解决实际问题的关键难点。如果说基础知识重在广度和准确性,那么原理解析就要重在深度和思考性,描述自己的理解和思考,并能经得起面试官“步步紧逼”的询问。

准备好可以深入探讨的点后,就可以在自我介绍、项目介绍过程中有意识的挖坑,频繁提起关键词,并留下含糊的描述性语句吸引面试官提问。(石头注:哈哈,都是套路啊)

而在交流的过程中,也无需完整背诵千字大论文,而是由上而下,从整体到局部逐步解释。如果面试官强行讨论自己不熟悉的领域,直接简短说明不太了解即可,长时间支支吾吾无法清晰表达反而会导致减分。

5. 手写算法

在秋招开始前,我最担心的就是手写代码这一环节,对比身边一些将 leetcode 题库刷完的同学,我刷过的题目数量可能只有零头,不过在手写代码上也没有出过严重的问题。

在我看来,平时没有刷题习惯的同学也无需对这个环节太过担心,只要有针对性进行准备,基本都能顺利完成。

在临时突击刷题方案中,“数量”并不是重要因素,“重复”才是重点,我比较推荐的一个刷题方案是:

  • (1) 专题练习阶段:按 leetcode 标签专题刷题,如字符串、DFS、动态规划、树、双指针、排序等,选择出现频率较高的简单和中等难度题目。对于常见的标签,做到能理解其常见解题思路即可;

  • (2) 精选题库阶段:可以选择 leetcode 热门 100 题,或者剑指 offer 练习题刷题,此时需要注意重复刷题,例如完整做完剑指 offer 练习题后再刷一遍,争取看到题目就能想到思路,独立快速完成题目;

在秋招准备阶段,我个人一共刷了 150 题左右,在面试的手写算法环节基本都顺利完成。

此外,在手写算法的过程中一定要注意代码规范,注意异常输入的处理和代码整洁性,另外:

  • 如果暂时没有思路,可以试图从面试官那里获取提示,部分面试官甚至可以接受换题的要求。

  • 如果有一些思路,可以尝试积极和面试官沟通获取一些提示。

  • 如果确信自己无法解决问题,那么要求提示或者换其他题目总比留白要好。

三、 offer 选择

关于如何选择 offer,可能见仁见智,基本都会从薪资待遇、平台发展、城市选择、亲友关系、工作压力等很多方面打分权衡,但落实到实际中,我自己也根本无法确认每个部分的比重,有时候可能真的只有“follow your heart”。

对于我自己来讲,最终纠结的主要是阿里、腾讯、华为三家公司。具体而言:

  • 从薪资待遇上来讲,三家公司基本都给到了 SSP,总包来看腾讯>华为>阿里;

  • 从地域来看,由于自己是 xx 人,选择的就业地点希望在江浙沪一带,三家公司的工作地点也都满足要求;

  • 从打听的工作时间来看,基本是腾讯>华为>阿里(仅是特定部门的工作时间,而非公司整体的工作时间);

  • 从部门业务来看,三家公司的业务都算比较核心且都能接受;

  • 从技术的契合程度来看,阿里>华为>腾讯,腾讯游戏需要自己完全转换技术栈,且发展方向稍有受限。

此外,我也综合考虑了工作地所在城市的生活成本、亲友的期望等问题,把最终的候选公司确定为阿里、腾讯两家,尽管每家公司都有其优势和劣势,但至少我都能接受其中的任意一种选择。

在漫长的纠结、沟通之后,我最后选取了最简单的方式:抛硬币。不管是开心接收抛硬币的结果,还是希望赶紧捡起来再抛一次,我都会知道自己内心真实的选择。(石头注:好硬核的方式)

关于号主:程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader,欢迎关注,交流和指导!

欢迎扫码加入互联网大厂内推群 & 技术交流群,一起学习、共同进步。后台回复关键字 “0” 送阿里技术大礼包。

tanglei wechat
欢迎扫码加入互联网大厂内推群 & 技术交流群,一起学习、共同进步