记年轻人的第一次面试经历

照例开头寒暄,后天就要入职蚂蚁了,紧紧张张~

希望今年年底能按时毕业,也希望工作顺顺利利,1095 的上班不知道能不能适应起来~

毕竟千千的作息已经完全乱了,要往前面靠靠了~


说在前面

大概 2021.03.13 的时候,把项目基本交付完成,甲方也满意,于是和导师商量后同意了外出实习。

太开心了,本来没有抱着能实习的期望,毕竟组里有规定且没有类似的先例?

哈哈,然后第二天就在字节跳动、阿里巴巴、达摩院、蚂蚁金服、科大讯飞、腾讯、美团以及百度的校招官网上找了一堆合适的岗位,并把每家的一堆岗位排序准备好优先哪个。

顺便也完善了一下简历,磕磕绊绊从去年四月就想着搭建一个自己的简历网站的计划终于没有半途而废,完成了。

导师的意愿一开始想让我去平安一点通 gamma lab 实习,了解了一番后依然更想去别家,于是先让导师帮忙内推了一波字节跳动,觉得可能会更快更稳一些。

况且自己此时还没有开始准备面试,后面的几天才正式开始,复习复习专业知识,也参考别人的面经弥补漏洞。

就这样过了几天,发现没有动力,知识点太多了,并不是每一个相近的岗位都会问同样的题目,于是打算投两家先练练手,自己期望这次春招能去字节或阿里。

开始第一批投的是腾讯和携程,腾讯是找师兄内推的,携程是找群友内推,然后携程的那个收到千千简历的技术总监有打过一次电话,问了下毕业时间发现不是 2021 届,就说后面再联系,没后话了。

腾讯的流程一切正常,会在后文放出面经。

以前听说内推可以免笔试,然鹅没想到机试一次也没落下,期间做完腾讯和美团的笔试后就等面试了。

中途听同学说阿里/蚂蚁笔试完后还得一周才会面试,就想着先做完笔试,这一个周也够复习了,碰巧学校里有蚂蚁的一次宣讲会,去蹭着听了听当晚就投递了蚂蚁。

同时,也投递了美团。美团和阿里的投递时间大概在腾讯投递时间后的四五天(想着错开,这样可以针对性复习,没想到最后面试基本全堆一起了 23333)

好啦~ 投递背景大概就是这样~ 后面是一些面试经历了~

流程全部走下去的只有蚂蚁,蚂蚁的一面后第二天上午和下午结束了二面和三面,然后一个周大概 HR 面,再就是入职意向书到 offer 了。

字节跳动因为导师帮忙内推,也有回复说是在处理,所以自己也没敢在官网上投递。最后直到蚂蚁意向书下来后,字节也依然是『申请 hc 中』的回复,不过还好,蚂蚁找的岗位是自己喜欢做的,也就选定它了。


腾讯

一面 2021.03.28

1. 首先自我介绍

 

2. 讲一个自己做的项目

讲懂 SemEval 论文,边讲边理解每部分是否 make sense,然后为什么最后还要一个跳跃链接

 

3. 算法基础题

  • BERT 为什么有 512 的长度限制(我回答的是为了计算复杂度与显存资源消耗考虑的)
  • pytorch 梯度累计如何实现
  • 优化器的 step 和 loss.backward 分别干了什么事情
  • 有没有用过 lr schedule(顺便讲了一下对 BERT 的 train 和 finetune 的理解)

 

4. 场景设计题

给一个 513 长度的句子如何编码进 BERT(如何建模超长文本,且不丢失信息)

  • 预先一种变换方法映射到 512(这是我说的)
  • 用前 512 做一个基来表示第 513 个(面试官说的,结果和上面差不多的思路)
  • (也提到分为两个句子分别编码,再融合)

 

5. 关于该团队主要业务

  • 金融事件检测,主要服务于深交所
  • 舆情分析及检测(比如检测一些内外网新闻能更快的发现舆情,并尽快采取措施来控制)
  • 情绪识别,分类做的比较多(涉及到长文本)
  • 后期可能做一个关于金融事件的知识图谱

 

6. 团队其他情况

  • 不需要模型很复杂,不需要特别高的准确率,但需要会用常见的模型,会组装
  • inference 是在一台 CPU 服务器上的,所以模型也得轻量

 

二面 暂无

腾讯一面面试挺流畅的,结束以后大概就知道自己稳了。

然后果然第二天早上打来电话首先恭喜了千千通过了一面,说等二面电话就可以了。

再是一面面试官突然发现我投的是上海的部门,且不服从调剂,于是问有没有考虑去深圳,拒绝了。

然后腾讯就没了(っ °Д °;)っ,虽然后面还打过两次电话,一次也是深圳的,另一次是上海的一个游戏部门,没想着问具体部门就拒了。


美团

一面 2021.03.30

1. 自我介绍

 

2. 简单介绍一份自己做的工作

  • 讲了一下 SemEval 2020 比赛的任务、模型以及模型的贡献点
    • 任务:由于常识的特点,现有预训练语言模型难以学习到相关的知识。该任务需要辨别哪句话是反常识的,以及反常识的原因
    • 模型:针对常识知识的缺失,考虑增强现有预训练语言模型的知识
      • 利用文本模板将已有句子中实体在知识库中邻接的点注入进来作为语义空间知识增强
      • 利用图神经网络将邻接信息在符号空间进行知识增强
    • 讲讲我们的方法和别人的对比起来有什么优势
      • 因为是比赛,很多人用了 ensemble 的方法
      • 一些较好的也都是用各种方法进行知识增强的
      • 一些相对水的直接套了个预训练语言模型
  • 最近在做什么工作
    • 基于一些 PDF 文档,从零构建知识图谱,并在此基础上做智能问答系统

 

3. 模型部分

熟不熟悉像 SVM、GBDT、bootstrapping 之类的机器学习方法(回答只知道大致思路,具体细节不太清楚了,然后面试官就没问)

随后面试官问了解哪方面的东西(回答深度学习方面像 transformer、BERT、GPT 之类的)

  • 讲讲为什么提出 transformer
    • 相比于 RNN 更好的解决了长时依赖的问题
    • 相比于 RNN 可并行化、速度更快
    • 相比于 RNN 可堆叠更多层,拥有更强的表达能力
  • 讲讲 self-attention 是怎么做的,以及 self-attention 是用来干什么的
    • 假设输入 n 个单词的词向量表示,经过一次变换得到 Q、K、V
    • Q × K 代表什么,为什么要再除以 sqrt dim k,最终结果经过 softmax
    • softmax 后代表不同单词之间的 attention 值,乘以 V 即为 self-attention 输出
  • 为什么 transformer 要叠这么多层(本质上还是要说增强模型表达能力)
    • 从一层超宽的全连接网络能拟合所有函数开始说起,网络太宽会导致显存爆炸,因此考虑加深网络来增强模型的表达能力
    • 一层网络看作是一个函数,那两层网络可以看作两个函数的嵌套,它可以表达更复杂的场景
  • 为什么 transformer 是 encoder-decoder 的模式
    • 从 seq2seq 说起,结合 auto-encoder 的模式讲了一下中间的隐层大致代表什么
    • 举例文本翻译,encoder 负责将各国语言这些不同空间的表示映射到同一空间,而 decoder 负责将隐层信息转化为指定空间的特征(因此隐层相当于一个通用的泛化的表示)

 

4. 两道算法题

  • 二叉树 Z 字形层次遍历
    • 这道题写完给面试官讲了思路,面试官觉得不需要标记当前节点的深度(因为这个讨论了一番)
  • 如何生成带有重复数字的数组的全排列
    • 这题只让说下思路,第一眼看到立马觉得以前没接触过(都是调库函数),短时间可能没法想到最优解。然后便问面试官觉得我需要给一个什么复杂度的解(试探一下,结果面试官也不是很懂 2333)。
    • 随后说了一个递归每一层遍历所有元素进行选择的思路(带剪枝),可能面试官没觉得剪枝能优化多少,或者因为我直接丢出时间复杂度低于 $O(n^n)$ 觉得不可靠?感觉面试官这道题对我印象不好。
    • 这道题我的确是一开始奔着最优解去的,然后扯了一堆到最后没有价值的(比如递归时候每层冒泡、比如相邻元素交换时如何排除重复数字等),表现不好,下次一定注意。

 

5. 关于该团队主要业务

  • 美团点评搜索部分,用户输入关键词后可以取得更好的匹配内容与排序

 

6. 对实习生相关

  • 实习生一开始进去主要做一些数据分析相关的工作,之后根据适应能力以及学习能力调整
    • 这里问面试官的时候直接说实习生进去是不是一开始做一些『洗数据』之类的活,太 low 了,女朋友纠正为『数据处理和分析』,看多高大上
  • 调整后可以去做一些模型优化(主要调参?)、模型压缩相关的

 

7. 团队其他情况

  • 线上模型目前 inference 还是在 CPU 服务器上的,因此模型也需要较为轻量且快速
  • 现有模型深度学习部分更多一些

 

8. 评价

  • 感觉面试体验不如之前腾讯的那次,美团这一次的面试官可能对 transformer 这块了解的不是特别多,问的东西都比较玄学?没有个标准答案的那种?
  • 另外感觉面试官没有很好的 GET 到我想表达的点,比如 transformer 叠很多层的原因或者为什么要用 encoder、decoder 模式都是换了几个角度解释才 over
  • 自己在做算法题时发挥也不是很好,呜呜呜

 

二面 2021.04.06

1. 自我介绍

 

2. 讲了一下 SemEval 2020 比赛项目

  • 居然被面试官发现我的 Kemb 和 K-BERT 的相似性了,解释了一下在此之上做的改进
  • 我们的做法和别人的做法有什么对比,有什么优势

 

3. 讲了一下电气项目具体是怎么做的

  • PDF 是信息的终点
  • 细粒度知识从哪里来,如何组织粗细粒度图谱
  • 如何完成粗细粒度问答(基于规则的方式)

 

4. 评价

  • 这一次的面试官感觉做的东西以及问的都能理解我所说的,体验很流畅
  • 团队所做的是大众点评搜索框后台的服务(搜索和推荐之间有交集,可能搜出来很多个候选商家然后基于此再做推荐)

 

HR 面 暂无

美团的二面来的很晚,二面时我已经在等蚂蚁的 HR 面了。

而在等美团 HR 面时,蚂蚁也有了意向书。

然后因为面试体验并没有那么好,做的东西也不是特别喜欢。

于是给内推的学长说了一下,可能流程就到此结束了(虽然系统上还没有显示结束)。


蚂蚁

一面 2021.03.31

1. 自我介绍

中途面试官听到我的 SemEval 2020 成绩然后便让讲讲

 

2. SemEval 2020 工作介绍

  • 这次更有层次感的介绍了一些,先介绍任务以及任务的难点
  • 分别从语义空间和符号空间讲了我们怎么对预训练语言模型做的知识增强
  • 举例『人出发去太阳』这个反常识句子,从『人』与『太阳』所邻接的属性出发做隐式推理,并引出多跳推理的部分

 

3. 介绍介绍 BERT

  • BERT 是一个基于 transformer encoder 的模型,它被用来编码句子信息并为其生成表示

  • BERT 的训练任务

    • NSP (Next Sentence Prediction)
    • MLM (Mask Language Model)
  • BERT 为什么相比于 ELMo 有着更强的表达能力(BERT 有什么优势)
    • 模型更复杂,transformer 可以叠的很深
    • BERT 天生双向可见,而非 ELMo 仅是分别两个方向信息的拼接
    • BERT 可以更方便的微调从而适应于特定领域的下游任务
  • 为什么会提出 ELMo,它用来解决什么问题
    • 从固定的词向量说起,像 word2vec 无法解决一词多义的问题
    • ELMo 是用大规模语料训练而来的,对于第 $i$ 个词,它的词向量是结合上下文信息的,因此在不同情景下可以为同一个词描述不同的语义

 

4. 介绍几个 BERT 可以做的任务

  • 这里因为比较了解分类,所以就只说了分类任务
    • [CLS][SEP],提取最终 [CLS] 的词向量作为整句的表示并用于下游任务
  • BERT 中为什么要加 position id
    • Self-attention 中每个单词之间可以看作一跳路径,因此不使用 position id 便会丧失语言本身的有序性

 

5. 知识图谱相关算法

  • transE 简述思路
    • S + R ≈ T
  • transR 简述思路
    • 为什么 transR 需要映射到别的空间(这里我回答的是按自己理解在 transE 中 A-父亲->BB-孩子->A 中不具有对称性,边的正反应该具有很大的差异,但应该有问题)

 

6. 图神经网络相关

  • GCN 与 GraphSage 之间一个在谱域做,一个在空间上,它们有什么不同
    • 从 GCN 因为受拉普拉斯矩阵限制开始口胡
      • 拉普拉斯矩阵是对称的、半正定的,因此导致 GCN 无法建模有向图
      • GCN 因为要算拉普拉斯矩阵等一系列操作,因此在开始时就需要知道全图信息,这就使得训练阶段和测试阶段要基于同样的图结构
      • 而 GraphSage 只关注每个节点的邻接情况(子图),它不需要知道全图信息,因此可以处理动态图问题
      • 以上两条其实就是 transductive 与 inductive 的区别
  • 早期 GCN 对于新节点加入以及新边加入会如何处理(节点表示等都会全部重新计算)

 

7. 算法题

  • 找出整数数组中有多少个子数组其和为 target
    • 直接秒了,给出 $O(n\log n)$、$O(n)$ 等做法
    • 如果为正整数数组的话可用双指针

 

8. 关于该团队主要业务

  • 金融风险预测、推荐(例如支付宝推小红包)、多跳推理等
  • 基本都是图神经网络相关的,所用模型也是,像 BERT 这类模型用的比较少,但一些情况也会尝试(之前有人尝试用基于 transformer 的模型做多模态之类的)
  • 部门看 paper 比较多(1/3 时间),工作会做一些模型改进及调优,貌似偏研究型

 

9. 其他相关

  • 实习生一般给个待解决的问题,让看看有没有什么解决办法(会从业务部门那边拿到数据,以及哪些数据比较重要等信息,基于这些做。貌似比较少有处理数据相关的活)
  • 实习生一般待不了多久,所以肯定不会给一个比较大的工程类项目,因为做不完就实习结束了
  • base 地点有杭州、上海、北京等(问了我毕业想待在哪里,回答上海,然后过了几分钟蚂蚁上海智能搜索团队的二面面试官就来电话了)

 

10. 评价

  • 体验太好了,想去,工作内容也很 match
  • 面试很流畅,面试官也很 nice(目前感觉是蚂蚁一面 > 腾讯一面 > 美团一面)
  • 二面也太快了,刚一面结束几分钟就过来电话约时间了
  • 如果字节还是没消息的话,那我可能要去蚂蚁了?

 

二面 2021.04.01

1. 自我介绍

 

2. 介绍 SemEval 2020 项目

  • 为什么我的 KEGAT 说是符号空间上做知识增强(和符号主义有什么关系)

 

3. 图神经网络相关

  • GCN 和 GAT 有什么区别
    • transductive、inductive 区别等
    • 问了一下面试官在实际使用中 GCN 并没有感受到需要一次性计算所有节点信息(建模动态图)之类的缺陷(面试官说是以前老版本 GCN 是拉普拉斯矩阵那套,新版本是加权求和方式,难怪代码上也完全找不到拉普拉斯矩阵相关的东西)

 

4. 场景设计

支付宝推券给用户的场景:

  • 券分不同等级,比如特定商品的券、特定店铺的券、特定分类的券。
  • 拥有用户的点击序列、用户领券行为、浏览信息等。
  • 需要设计一个推荐方法给用户尽可能的推荐适合的券。

方案(千千不怎么了解推荐系统的情况下按理解答的):

  • 特征 x:用户的点击可以认为是感兴趣,领券可以认为对券所代表的商品较感兴趣,券和覆盖的商品之间有关联等

  • 目标 y:多分类,例如给每个商品打分,按评分排序

    • 面试官提出问题:可能商品太多,导致推荐的效果不好,且计算量过大
      • 回应:为商品构建层次等级或打标签,例如生活用品(牙膏、牙刷)、出行工具(摩托车、汽车)、电子产品(电脑、手机)这样的树形层次,或类似标签的图型结构
      • 在推荐中先推荐分类 / 标签,再分级往下以同样的方式探索,最后缩小范围
    • 面试官:也可以以二分类的方式来为每个商品分别打分

  • 评判标准:用户浏览中 n 个商品里的不同商品点击次数

    • 无监督训练的话,能否用历史会话中构造这样的数据作为监督信号

 

5. 其他相关

  • 团队在北京、上海、杭州都有,上海这边大团队有十几个人,属于该面试官的小团队里有三个
  • 提供转正机会(转正率挺高的)
  • 后期从上海转到杭州比较容易(反过来面试官不太推荐),建议去杭州(企业氛围更为浓厚)
  • 面试官也打过 ACM,问了我一句看上去 cf 成绩不错为什么只拿到了区域赛铜牌(翻车)

 

三面 2021.04.01

1. 讲讲知识图谱的项目

  • 任务是什么样的
  • 为什么需要构建知识图谱,有没有做知识消歧之类的工作
  • 怎么做的问答,用了哪些模型
  • 有没有了解过 neo4j 和其他图数据库相比的优缺点

 

2. 讲讲黑客马拉松比赛

  • 怎么解决的正负样本不均衡
  • 有没有了解过别人是怎么解决的正负样本不均衡

 

3. 其他

  • 以前 ACM 之类的比赛是自己主动参加还是学校组织
  • 研究生是保送的还是自己考的

 

4. 评价

  • 还不错,大概面了 16 分钟,结束以后就让保持手机畅通等 hr 电话(一周以内)

 

HR 面 2021.04.07

1. 面试官

  • 确认了一下毕业时间
  • 有没有对其他公司的意愿考虑
  • 什么时候可以入职
  • 讲一个自己觉得最骄傲的地方(并举例)
  • 看参加过很多比赛,说说收获,ACM 最高拿了什么奖
  • 对公司的目标有什么期望(自己想要实现一个什么价值)

 

2. 提问

  • 给不给实习生配电脑(只有台式机)

 

入职 2021.04.26

蚂蚁的面试基本是全程顺利,然后现在也拿到了 offer。

做过了入职体检,签了保密协议,也起了花名『流愚』。

不得不说,花名太难起了,都是泪,呜呜呜。

花名必须是两个汉字,且不能和已有的花名重复,像『千千』、『芊芊』这种早就被占了(『千少』没被占 23333,『千少』=『钱少』)。

一开始想着读音相同换个字于是起了个『谸谸』,虽然『谸』同『芊』,但提交后第二天就感觉字太奇怪了于是趁着 leader 没审批联系给拒了。

后来想起个 RE0 动漫中的『奥托 · 苏文』,然后『奥托』和一个车名读音一样不行,『苏文』又只能用『蘇文』,也不太好看。

眼看着都快入职了,花名得起好,于是几乎翻遍了三国杀所有武将的名和字,居然几乎都被占了。

同时也查遍了看过的所有动漫里的人物名字,最后找到了这么几个没被占的:

  • 小灵,秦时明月
  • 博臣,境界的彼方
  • 罗阻,纳米核心
  • 流愚,死亡笔记
  • 尼亚,死亡笔记
  • 离枯,画江湖之灵主
  • 木蔑,狐妖小红娘

选了选最后用了『流愚』,他是死亡笔记里的一个死神的名字,死神只吃苹果,哈哈哈~

至此一切都就绪了,年轻人终于有了第一份工作,呜呜呜,太值得纪念了~


好啦~ 全文结束~ 希望本文可以帮到你~


我想对千千说~

58 只已被捕捉

  • 萌新研究曾 Chrome | 106.0.0.0 Windows 10/11

    千千巨巨你好,我想问一下,该怎么理解《面试官说是以前老版本 GCN 是拉普拉斯矩阵那套,新版本是加权求和方式,难怪代码上也完全找不到拉普拉斯矩阵相关的东西》这句话?是说新版的GCN也不是非得每次对图中所有节点进行更新么?那这样的话,GCN和 graphsage与GAT本质上是不是就没啥区别,只是聚合节点的选择和权重设置不同?

    • 千千 Edge | 107.0.1418.35 Windows 10/11

      刚看到回复,哈哈,大佬也去知乎上问了。这里先附一个知乎上的回复:
      我理解就是这样的,开源 DGL、pyG 里的 GCN 基本都可以子图局部更新,更新的方式的确是邻居的加权求和。虽说是一套加权求和,但是它背后有拉普拉斯那套理论支撑。你可以把这些 GNN 模型都理解成对邻居的加权求和,不同的是这个权重怎么算。至于 GCN 为什么有拉普拉斯矩阵和普通加权求和两种做法,可能得大佬再调研一下

  • w先生 Edge | 92.0.902.84 Windows 10/11

    重复的可以类康拓展开吗,但是应该不会写了~

    • 千千 Edge | 97.0.1072.55 Mac OS X

      熟悉熟悉 |´・ω・)ノ

  • wu先生 Chrome | 94.0.4606.71 Windows 7

    不明觉历。

    • 千千 Edge | 96.0.1054.29 Windows 10/11