当前位置: 首页 > 面试经验 >

2022字节秋招面经(提前批--被捞)

优质
小牛编辑
146浏览
2023-03-28

2022字节秋招面经(提前批--被捞)

背景:提前批投了风控算法工程师,之后被另一个部门捞起来面高性能ai平台开发
下面分享一下两次面试,共四次面试的面经,希望给大家带来帮助

提前批 风控算法工程师

一面

  • 项目

  • 梯度消失、过拟合的处理方法

    经典问题,略。

  • 介绍下 BN 和 LN ,是否知道其他的 Normalization 方法

    BN:Batch Norm,每次对batch中的数据按维度进行 Normalization,在训练时使用的是 batch 内数据的分布特征,校验和测试时则是全局的数据分布特征;

    LN:Layer Norm,每次对单个序列进行 Normalization,训练、校验、测试时操作相同。

    其他还有 Instance Norm、Group Norm 等,分别在数据的不同方向上进行 Normalization。

  • 介绍下 SGD 和 Adam ,是否知道其他的优化器

    SGD:每次随机使用 Batch 中的一个数据进行梯度下降,现一般使用动量进行优化。

    Adam:针对每个参数使用了一阶和二阶动量来自动调整其更新幅度。

  • GNN

    • GCN 和 CNN 的区别

      GCN 处理的是不规则的拓扑结构数据,CNN 处理的是规则的向量数据。

    • 分别介绍下 GAT、GraphSAGE、HAN

      GAT:同质图(Homogeneous Graph)中的 Attention 图神经网络;

      GraphSAGE:同质图神经网络,通过采样提高了模型的推理归纳能力,通过采样到的邻居推理当前节点的特征,除了对固定结构的图进行学习外,也能较好地学习新加入节点的特征;

      HAN:异质图(Heterogeneous Graph)中的 Attention 图神经网络。

      细节可参考 GNN:算法岗GNN高频知识点整理 。

    • GAT 中的 Attention 是怎么做的

      按照每一条边所连接的 u,v 两个节点的特征计算。

    • HAN 中使用了几个 level 的 attention,分别是啥

      Node-level:在同一种边中,聚合每个节点所有通过该类型边所连接的邻居节点,得到对当前节点每一种异构边的特征,其Attention过程与 GAT 类似。

      Semantic-level:对 Node-Level 聚合的异构边特征进行聚合,其Attention过程是 Additive Attention(对待聚合的元素通过线性变换得到 Attention Score,Softmax 直接后加权求和)。

  • TCP 三次握手

    第一次:客户端->服务器,证明客户端发送功能正常;

    第二次:客户端<-服务器,证明服务器收发功能均正常;

    第三次:客户端->服务器,证明客户端接收功能正常。

  • TensorFlow 或者 Pytorch 打包部署后使用多线程还是多进程

    使用多进程。

    由于GIL锁的存在,无法使用多线程。

    可以考虑设置一个超时时间,等待多个数据打包成一个 Batch 进行推理。

  • python 全局线程锁、锁

    GIL 会使得多线程在执行时只有IO操作时多线程并发的,计算时还是单线程依次执行。

    此外,theading 模块还提供了五种类型的线程锁:

    1. 同步锁:lock(一次只能放行一个)
    2. 递归锁:rlock(一次只能放行一个)
    3. 条件锁:condition(一次可以放行任意个)
    4. 事件锁:event(一次全部放行)
    5. 信号量锁:semaphore(一次可以放行特定个)
  • 分类问题常用的 Loss

    交叉熵。

  • C++

    • map 底层的数据结构

      红黑树。

    • vector 和 list 的区别

      vector 底层是数组,list 底层是链表。

    • 释放内存

      在调用 new、malloc 等动态申请内存的操作后,使用对应的 delete、free 等操作对申请的内存进行释放。

  • Attention

    • Softmax 的作用

      将值域限制在 之间,用于平滑梯度。

    • Transformer Encoder 具体包含哪些模块

      Multi-Head Attention、MLP、残差连接、Layer Norm、Positional Encoding。

    • QKV具体怎么计算

      通过 Q、K 点积计算得到 Attention Score,经过 Softmax 后和 V 相乘得到输出。

  • 传统机器学习的 LR、SVM 是否熟悉

    LR:线性回归,通过学习一个超平面对数据进行划分;

    SVM:支持向量机,是在LR 思想的基础上进一步设计的模型,旨在尽可能提高超平面距离不同类数据的间隔。

  • CV 或者 NLP 的一些经典模型是否熟悉

    CV:ResNet 等

    NLP:Transformer、BERT 等

  • 算法题:LeetCode 377. 组合总和 Ⅳ

高性能 AI 平台开发

被另一个部门捞起来。

一面

  • 项目

  • 算法题:LeetCode 82. 删除排序链表中的重复元素 II

  • L1、L2正则化

  • Sigmoid 导致梯度消失如何处理

    替换 Sigmoid 为其他的激活函数,如 ReLU、LeakyReLU 等;

    若不考虑替换激活函数,则可以尝试调整模型结构避免使用深层模型,或使用残差连接缩短反向传播链。

  • 进程的地址空间是如何确定的

    PCB(Process Control Block,进程控制快)有专门的数据结构用于维护进程的地址空间,进程的内存可划分为堆、栈等部分,通过页表的映射查询其实际的物理地址。

  • 程序数据的寻址

    通过分页的映射查询。

  • C++ 中,申请一部分内存后,在操作系统层面是如何处理的

    在申请内存后将对应的存储地址空间标记为“已分配”,但不会立刻对这些内存空间进行初始化并修改页表,在后续读写时触发缺页异常后,在执行页表层面实际地址空间的分配和初始化操作。

  • SQL 和 NoSQL 的区别,有哪些常用 NoSQL

    NoSQL 数据库不要对数据的模式有强制要求,如 MongoDB 中每一条数据都可以是包含任意字段的 Json ,有着比 SQL 数据库更好的灵活性。

    常用的有:Json 文档存储的 MongoDB、键值对存储的 Redis、图结构的 Neo4J 等。

二面

  • 编程:找到无向图中所有的环并输出

  • HTTP 2.0 和 1.0 的区别

    HTTP 2.0 加载资源时对 Session 进行了复用,避免每加载一次资源都创建一个 Session,从而提高了加载资源的效率。

  • 并发

    • Python 中 multiprocessing 和 multithreading 哪一个是真正的并行

      multiprocessing。multithreading 由于线程锁(GIL)的存在,无法实现真正意义上的并行。

    • GIL 锁是在什么时候上锁和释放的

      IO 时释放,计算时上锁。

    • PyTorch 中的数据并行(Data Parallel、Distributed Data Parallel)

      将 Batch 中的数据等分输入到不同的模型 Node 中进行前向传播,方向传播时对多个 Node 回传的梯度进行平均。

  • 架构设计:APP 下拉刷新、上划加载历史数据的 Feed 流设计

    • 上划加载时,API 如何设计

      API中预留参数用于控制加载的起始起点(当前已加载的最后一条)、本次加载的数据量。

    • 下拉刷新时,在数据传输过程中的新数据是否返回

      发送查询请求时附带操作的时间,返回所有在该时间戳之后的新数据。

    • 使用关系型数据库每次查询用户的关注时需要对整张表做遍历,这种查询如何优化

      使用图数据库记录用户的关注关系。

  • 是否了解图数据库

    图数据库,Graph Database,简称 GDB。

    常见的图数据有:Neo4j、JanusGraph、HugeGraph 等。

#字节跳动##算法工程师##风控##HPC高性能计算工程师##深度学习#
 类似资料: