8家大厂SSP offer的清华学长谈算法岗是否人间地狱

公子龙

共 6991字,需浏览 14分钟

 ·

2021-10-17 17:00

点击上方,选择星标或置顶,每天给你送上干货

作者 | 对白
出品 | 对白的算法屋
编者寄语:

本文看完,相信对你求职算法岗会有一番新的认识。


大家好,我是对白。
之前一直在坚持输出着原创技术文章,同时也在忙于校招内推(已内推2000+人)

于是在这个过程中接触了很多今年求职算法岗的学弟学妹们,他们忐忑焦虑的心情去年的我也同样经历着:到底是坚持算法岗呢,还是转行做开发;从早到晚的刷题与复习;每个夜晚的辗转反侧;经常还会去打听周围同学们的秋招进展,当听到别人已经有offer,想想自己还是零offer的时候,就会产生非常强烈的挫败感,去年的我甚至还因此掉了很多头发……这些场景此刻的我依然历历在目,所以借着知乎上这个热门话题:


想和大家谈一谈我自己对于求职算法岗的一些心得和体会,避免大家犯和我一样的错误。




1.我的经历




先来说一说2021届算法岗的整体情况,我是2021届校招,去年一共拿到了9家互联网公司的offer:阿里、百度、京东、美团、拼多多、快手、滴滴、小红书、平安。其中8家SSP级以上,1家SP,薪资待遇40+W-80+W不等。

因为疫情影响,当时直到七月份我才开始刷LeetCode和剑指offer,且一段暑期实习都没有,而周围的同学都已经拿到了BAT的暑期实习,且还有多段大厂的日常实习,那个时候的我其实有想过放弃互联网,直接进国企或走选调,但考虑到硕士阶段自身所学,且对于自身的研究方向有一定热爱程度,于是才选择咬咬牙坚持刷题和背八股文。

当时七月开始复习八股文,刷题从八月初一直持续到十月底,坚持每天十道算法题,边刷题边进行笔面试,整个秋招过程共计参加了60场笔试和面试,最终拿到了九个大厂的offer。我的故事只是想告诉大家,秋招不到最后一刻千万不要放弃,也不要灰心,哪怕到十一月还没有拿到offer也没关系,殊不知等到年底补录的时候也是一个非常容易进大厂拿offer的机会。




2.学校和专业




其次来说一下学校和专业对于拿算法岗offer的人有多大影响。

以我亲身经历来说,我是Top2非科班硕士,Top2硕士虽然能在一定程度上给候选人加分,但也只能表明你具有笔试/面试资格,最终是否录用你还得取决于你的代码能力和面试表现,并不存在面试官因为你是清北或海外Top30就要你的可能性,因为你的一面、二面和三面面试官以后通常会是你的mentorX1(直属上级)和X2(直属上级的上级),mentor负责你入职后带你熟悉工作环境以及公司里的各个技术栈,X1会给你分配某一项公司业务并且让你拿出业务收益。

试想一下,一个能力不够即使学历背景吊炸天的人,既不能给组内带来业务收益,又不能与其它同事配合工作共同完成一项业务,那他们招这种人进来干什么呢,因为业务收益才是你以后职场晋升以及ledaer们最关心的东西。

退一步讲,倘若这种人真招进了公司,万一试用期没过还会成为招聘事故,影响公司声誉以及这个小组以后的招人。所以大家可以放心,学校背景与拿到算法岗offer没有直接联系,你可以通过多段实习经历、竞赛经历或代码能力去向面试官证明,即便你的背景没有他人好,你在学校期间努力付出取得的成绩,依然可以秒杀那些背景豪华但不努力的人。

面试官们也更喜欢这些实习经历丰富的人我认为有以下两点好处:一是入职后能迅速投入业务并获得产出,减少不必要的新人培训时间成本;二是实习经历丰富的人变相说明他们可以为公司创造价值,且具有优秀的学习能力。

这两点真的非常重要,原因是经常在与我leader沟通校招候选人面试时,他会反映那些往往没通过面试的人,大部分人背景不错甚至有些还非常豪华,但面试总体下来却不达标,不是代码能力还需要加强,就是对业务场景不熟悉,没有解决问题的思路。而这些恰恰是实习经历丰富的人所具备的能力,所以在此强烈建议大家读研时一定要多出去实习,这会是你拿到算法岗offer非常有力的一项条件。但如果实验室不具备外出实习的可能也不用气馁,拿我本人举例,
只要你在面试过程中能做到以下三点,即可成为offer收割机:
  1. 能清晰熟练地阐述自己做过的项目/竞赛,且具有一定的发散性思考;
  2. 代码能力过关,算法题能举一反三;

  3. 对于自身的研究方向有一定积累,且了解常见的业务场景该如何用算法解决;

能做到以上三点,那么即便没有实习经历,也具备了和他们一样的代码能力和技术水平,面试当然也会非常顺利。

接着来跟大家谈一谈科班与非科班的问题。现在已经是一个生物、电子、自动化、计算机都在研究人工智能的时代了,以前这些专业还类似于春秋战国时期的百家争鸣,各个学派区分甚大,但现在嘛,都已经被类似于秦国的人工智能统一了,所以对拿算法岗offer的同学来说,计算机也好,生化环材这些“天坑专业”也罢,已经不是一个单一自变量决定因变量的线性关系了,自变量不再只是你的专业,还包括AI、代码能力、人际沟通能力等等,当然权重最大的肯定是AI这个自变量,但专业的权重已经可以忽略不计了。

不仅如此,非科班的同学相比于科班同学还有一个巨大的优势,就是人家会的你会,人家不会的你也会。想一想,软硬件通吃的人是不是很厉害,当然人家为了转行背后付出的汗水我们肯定是看不见的,这些人也是值得我们学(tong)习(qing)的。所以科班与非科班这个话题,在2021年这个伟大的年代,已经没有任何区别了,君不见生化环材也有秋招拿70W+的同学呢(我身边就有)!




3.offer和薪资选择




下面我们来聊一聊offer选择的问题。

首先建议大家在秋招前尽早确定自己目标是哪种类型的offer,因为不同类型的offer要求的能力差别可以很大。其次确定了选择后,可以了解目标offer需要的能力,方法则是通过看对应offer的面经,来了解面试风格。当你还不确定自己想选哪种offer的时候,可以培养一些通用的能力,而能力强的同学则可以“我全都要”,到最后再选择。但大多数同学到了研二的时候则需要开始思考目标,并做一些针对性的准备了。

外企VS私企


外企:谷歌、微软、Hulu、Airbnb、Optiver、Bingo、Shopee等;
私企:BAT、TMD、快手、拼多多、CV四小龙和其它独角兽等;


外企私企
工作
时间
普遍955普遍995
薪资批发价较高
但一般不会特别高
批发价较高
高得可以特别高
(SSP级以上)

成长
空间

天花板低天花板更高

出国
机会

相对多基本没有
工作
内容
业务少部分核心、大部分边缘业务可以很核心
(取决于组)


算法岗VS开发岗


算法岗:使用机器学习/深度学习解决业务问题;
开发岗:前端、后端、系统开发等;


算法岗开发岗‍‍‍‍‍‍‍‍‍‍‍‍
难度
近两年供过于求

难度较大
近两年‍‍‍‍‍‍‍‍‍‍‍‍供不应求

难度相对较小
薪资
差不多
上限可以很高(阿里星、美团北斗、快手快Star等)
差不多

一般来说上限没算法高

下面讲一下我去年秋招是如何备战算法岗的以及部分面经,原文可以去我的知乎上查看,标题:2021我的互联网秋招算法岗总结,从零到八家大厂SSP。




4.复习顺序




4.1 基础知识


除了极少数公司会在一上来就要求你做一道编程题以外,大部分互联网公司都会在你的自我介绍和论文之后开始进行基础知识的考察,因此它的重要性不言而喻。

基础知识的复习有两种途径,一是看书,二是看视频,这取决于你对哪一种途径接受知识的速度更快。我选择的是看书,一是因为视频不一定讲得面面俱到,二是视频质量如果不过关,很有可能某些细节的讲述是错误的。以推荐/广告岗位为例,我主要看如下书籍。

  • 周志华的西瓜书《机器学习》

  • 李航老师的《统计机器学习》第二版

  • DL圣经《深度学习》,又名花书。

  • 《百面机器学习》

  • 《概率论与数理统计》、《线性代数》、《凸优化》

  • 推荐/广告:《深度学习推荐系统》、《计算广告》等


如果时间有限,可以直接去看第二本蓝皮书和第三本花书,这两本书一定要从头到尾仔仔细细的过一遍,因为基础知识的考察无外乎就是机器学习或深度学习里的知识。

当这两本书过完一遍之后,再看西瓜书的效率就会快很多了。除此之外,第四本书可以留在你将要面试的那几天着重去学习,因为你有了前几本书的知识做铺垫,第四本书就可以当成八股文去背了。

前提是一定要在你理解这些知识之后,因为单纯的死记硬背面试官其实很容易就会发现破绽,毕竟现在每个人都会背。对于本科学习过的线代和概率论,建议大家也复习一遍,因为在我的面试过程中就有面试官残忍的提问了,虽然概率不高。对于学有余力的同学,可以去看一些推荐/广告方向的工业界人士出版的书籍,这一块的知识考察往往会穿插在整个面试中,有的面试官会在最后当成开放题进行考察。

其次,基础知识的复习也很容易会遗忘,面对这个问题,我一般会将高频考点的知识写在ipad中,然后每晚会去复习一遍,这样一个月下来,基础知识应该就可以烂熟于心了,这一段的复习就可以告一段落了。



4.2 项目/竞赛


项目/竞赛一般会在基础知识之后进行考察,这些一定要提前准备好,写在简历里的项目一定是要自己亲自做过的,因为一旦面试官问到了项目中某一个部分的代码是如何实现而你又回答不上来的话,在他心里对你的印象就会非常减分,并且会怀疑候选人的诚信问题。所以,我的方法是将之前做过的项目重新再做一遍,包括代码部分。这一块看似会花费大量时间,实则并没有那么长。具体来说,我会先将做过的项目重新梳理一遍,画出整个项目的流程图,然后再逐行复习自己的代码。等代码复习完之后,再删掉重新写一遍,这一步骤因人而异,取决于你的记忆能力。

竞赛方面,常用的竞赛模型如GBDT、XGBoost、LightGBM、FFM、DeepFFM等一定要了解。最后,如果你的论文或项目与面试官所做的方向非常的match,你通过这一面的概率也将会大很多。

4.3 coding能力‍‍‍‍‍‍‍‍‍‍‍‍‍‍


代码能力是计算机专业学生的基础能力,求职技术方向的同学,无论是测试、开发或算法,互联网公司在这一块的考察都是重中之重。

一般而言,大厂在每一轮的技术面中,至少会出一道编程题,多的会直接上三道编程题让你做(我就遇到了...),难度主要集中在easy和medium,少数丧心病狂(褒义词)的面试官会出hard题。而考察范围已是圈内公开的秘密,就在《剑指offer》和Leetcode上,因此刷题成为了大家求职路上必须要迈过的一道坎,这个坎没有人可以帮到你,只有靠你自己。

我在硕士阶段也没有刻意的去刷过题,只有本科时刷过洛谷,下面是我Leetcode账号上提交次数的统计:


我是从8月初开始集中在Leetcode上刷题,一直刷到了10月份,《剑指offer》也是在Leetcode上刷的,平均每个月刷题数是300。可能很多人都觉得300道根本不可能完成,确实,如果你按照Leecode官方的题号顺序去刷根本不可能,但如果是按照题目类型(标签)去刷,每天刷10道,一个月也就完成了300道

一开始可能会很慢,但基本上每个类型的题目当你刷够20道以后,都可以总结出该类题目的代码模板,所以前期会慢一点,越往后则会发现刷题速度越来越快,可以理解为先苦后甜。而对于刷题的方法,可以分为三轮进行:

a.第一轮:优先效率。当一道题花了十五分钟去思考也没有思路时,则果断选择直接看答案。

b.第二轮:培养思路。你需要对以前做过的每一道题都要有一个大致的映像,并且知道解题的方法是什么。这一轮其实最难度过,因为人对事物的遗忘是有规律的,而我们需要想办法客服这个规律。在这里推荐一下我的方法。我在刷完每一道题之后,会在ipad上注明题号以及题目名称,然后将该题的解题思路写下来,最后还会重写一遍代码。这样,以天和周为单位不断地复习之前的题目,就可以做到以后遇见它们时可以迅速反映出是用什么方法解决这道题的。

c.第三轮:完善思路。当我们顺利度过了第二轮之后,第三轮则需要学习每道题目的多种解法,比如TopK问题可以用快排变形/堆/二叉查找树/计数排序四种方法解决。在我的面试过程中,有些面试官会在你AC一道题后还会要求写出最优解,这往往决定你的面评是否能达到较高级别,也就是能否拿到sp以上级别的offer,并且一道题如果学会了多种解法,也会让你加深对这道题的理解。因此,我建议大家要学会用多种解法解决一道题,并且要培养出能快速AC的能力。

对于时间紧迫的小伙伴来说,在达不到刷两百道题又想拿到大厂offer的同学,我们也可以通过走一些捷径来减少自己无效时间的浪费,从而最大化提高自己的代码能力。

具体来说,我们可以购买一些大牛精讲的算法课程,虽然市面上的算法课琳琅满目,但真正对找工作实用高效且讲述通俗易懂的课程少之又少。在我七月份以前,我基本上白天除了忙于父母的工作以外,到了晚上都会花费两个小时的时间去看自己在网上购买的算法视频课程,目的是为了给自己打下数据结构与算法的基础。

一个好的算法视频课相比于书籍最大的优势就是视频传授的知识点更加直观,我们可以当作看电视剧一样去看它,一方面可以降低自己对于学习的阻力,另一方面还可以高效的学习这些迫切的知识。对于看书感觉痛苦的同学,就可以像我一样选择观看视频,那么至于选择看免费课程还是收费课程,我的建议是选择一个收费但价格可以接受的算法课去学习,原因之一是免费的课程往往知识点讲述非常冗余,且大家对于免费的课程缺乏学习的动力,这样反而会耽误找工作;另一个原因是学习成果往往需要人们付出才能收获,有人选择花费金钱以最高的效率获得,有人选择花费更多的时间去获得,那在我看来,秋招阶段最宝贵的还是时间,毕竟每个人这一辈子只有一次秋招的机会,这等同于高考!




5.部分面经




以下面经均为各个公司的正式批,由于时间有点久远,有些考点已经不记得了。

京东


  • 一面:

1、介绍论文、项目,很详细。包括每一个环节是怎么实现的,损失函数是如何设计的,模型是如何训练的等等。
2、代码题:Leetcode 713:乘积小于k的子数组;Leetcode 297:二叉树的序列化和反序列化。
3、GBDT、XGBoost、LigthGBM的区别与联系。
4、送入LR前,如何处理数据(特征工程)。

  • 二面:

1、介绍论文、项目,很详细。

2、Transformer中的Scaled Dot-Product Attention为什么要缩放(两点)。

3、Transformer中的Position Embedding是怎么实现的?为什么?

4、bagging和boosting与偏差和方差的关系以及原因。

5、如何解决数据不平衡的问题。

6、假设检验的两类错误。

7、MSE、MAE与贝叶斯估计的区别。

8、为什么快排比堆排快?

9、口述算法题:对一个商品的价格、数量、购买人数进行分次排序,不改变之前的排序结果。


  • 三面:

由于一、二面表现好,三面直接过了。

美团


  • 一面:

1、介绍论文和项目,很详细。
2、代码题:面试题17.24:最大子矩阵;Leetcode 695:岛屿的最大面积。
3、介绍一下DSSM。
4、开放题:关于双塔模型的应用。

  • 二面:

1、介绍论文和项目,以及论文中的涉及到的baseline模型。
2、代码题:面试题01.08:零矩阵,写出两种解法。
3、XGBoost 如果损失函数没有二阶导,该怎么办。
4、聊天+反问。

  • 三面:

1、介绍论文和项目,非常详细。
2、介绍实习,说说实习印象中最深的点。
3、开放题:部门中的某个应用场景你会怎么解决。
4、职业规划,个人希望做的方向。

拼多多


  • 一面:

1、介绍论文和项目。
2、AUC是如何实现的,它对均匀正负样本采样是否敏感,并用代码实现。
3、BERT与ALBERT的区别。
4、介绍一下DKN模型。

  • 二面:

1、介绍论文和项目。
2、过拟合如何解决+具体方法追问。
3、代码题:Leetcode 42:接雨水。
4、知识图谱表示学习有哪些模型。
5、聊天+反问。

 阿里


  • 一面:

1、介绍论文和项目。
2、代码题:Leetcode 382:链表随机节点,并口述蓄水池采样算法的推导。
3、概率题:将一根木棍分成三段,求这三段构成三角形的概率。
4、开放题:一个超级大文件,每一行有一个 ip 地址,内存有限,如何找出其中重复次数最多的 ip 地址。

  • 二面:

1、介绍论文和项目。
2、论文后续可能提升的点以及想法探讨。
3、说一说Graph Embedding和GNN的区别。
4、代码题:Leetcode 23:合并K个升序链表。
5、聊天+反问。

  • 三面:

1、介绍论文和项目。
2、介绍一下最能体现自己工程能力的项目。
3、如何提高推荐线上的性能。
4、强化学习在推荐中的应用及探讨。




总结




最后,我想谈一谈自己对于面试的看法。无论是竞赛、论文还是大厂实习,这些都是为了方便你拿到面试的资格,哪怕你三者都没有,但只要公司愿意向你发起面试,你都应该好好努力。

而最终是否能顺利拿到offer以及offer的等级,主要还是取决于你的面评,一个非常好的面评是帮助你拿下大厂sp以上offer至关重要的因素,因此切忌面试紧张,如果你紧张,可以心中默念欧米豆腐

祝愿大家都能拿到自己心仪的offer!

浏览 22
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报