【字节面经】23秋招超详细字节算法面经(含答案)

最新面经分享,你想要的都在这里。

  哈喽everyone

  欢迎大家来到魔据教育职场加油站

  it培训选魔据

  蘑菇君今日为大家分享一波超级干货

  希望大家取长补短

  知己知彼百战百胜哦!


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

  【一面】

  1. 项目

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

  经典问题,略。

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

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

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

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

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

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

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

  5. 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 直接后加权求和)。

  6. TCP 三次握手

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

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

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

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

  使用多进程。

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

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

  8. python 全局线程锁、锁

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

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

  同步锁:lock(一次只能放行一个)

  递归锁:rlock(一次只能放行一个)

  条件锁:condition(一次可以放行任意个)

  事件锁:event(一次全部放行)

  信号量锁:semaphore(一次可以放行特定个)

  9. 分类问题常用的 Loss

  交叉熵。

  10. C++

  map 底层的数据结构

  红黑树。

  vector 和 list 的区别

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

  释放内存

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

  11. Attention

  Softmax 的作用

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

  Transformer Encoder 具体包含哪些模块

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

  QKV具体怎么计算

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

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

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

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

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

  CV:ResNet 等

  NLP:Transformer、BERT 等

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

  高性能 AI 平台开发

  最后被另一个部门捞起来。

  【另一个部门的一面】

  1. 项目

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

  3. L1、L2正则化

  4. Sigmoid 导致梯度消失如何处理

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

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

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

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

  6. 程序数据的寻址

  通过分页的映射查询。

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

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

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

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

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

  【二面】

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

  2. HTTP 2.0 和 1.0 的区别

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

  3. 并发

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

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

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

  IO 时释放,计算时上锁。

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

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

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

  上划加载时,API 如何设计

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

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

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

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

  是否了解图数据库

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

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

  以上就是魔据教育今日为大家分享的内容。魔据教育,让教育赋能人生。想要IT面试必考题,get 面试高频点、必考点、涨薪点,想要IT免费试听课程的朋友可以找蘑菇君:itmoju领取。等你来哦~