背景:提前批投了风控算法工程师,之后被另一个部门捞起来面高性能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 模块还提供了五种类型的线程锁: 同步锁:lock(一次只能放行一个) 递归锁:rlock(一次只能放行一个) 条件锁:condition(一次可以放行任意个) 事件锁:event(一次全部放行) 信号量锁: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 等。  
点赞 13
评论 7
全部评论

相关推荐

09-29 16:59
已编辑
门头沟学院 Java
牛客96609213...:疯狂背刺,之前还明确设置截止日期,还有笔试,现在一帮人卡在复筛,他反而一边开启扩招,还给扩招的免笔试,真服了,你好歹先把复筛中的给处理了再说
投递大疆等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务