搜广推校招面经七
抖音推荐算法
- 一、广告系统中的数据流处理方法,怎么避免延迟回流问题
延迟回流问题是指,实时系统(如广告点击预估)中,历史数据未及时更新或发生延迟,导致系统的实时预测偏离实际情况。避免延迟回流的方法有- 使用高效的流处理框架
Kafka、Flink等流处理工具,确保实时性; 使用滑动窗口处理实时数据,允许系统适应一定的延迟 - 特征工程优化
- 消除数据泄漏
严格限制特征只使用过去和当前的可用数据,防止数据泄露。 - 实时与离线特征分层
将特征分为离线特征(如用户画像、历史行为)和实时特征(如当前广告上下文、实时点击行为),根据实时性不同分阶段更新。
- 消除数据泄漏
- 模型训练优化
- 使用增量学习(在线学习)
持续训练模型,吸收最新的数据流输入;在模型训练中,为最新数据分配更高的权重,减小延迟数据对模型影响
- 使用增量学习(在线学习)
- 使用高效的流处理框架
- 二、介绍DeepFM模型
DeepFM 是一种结合了因子分解机(FM)和深度神经网络(DNN)的模型,旨在同时捕捉特征的低阶交互和高阶非线性交互。其结构可以分为两个部分:FM 部分和 DNN 部分,最终两者的输出会结合起来进行预测。
import torch
import torch.nn as nn
import torch.optim as optimclass DeepFM(nn.Module):def __init__(self, n_features, embedding_dim, hidden_units, dropout_rate=0.5):super(DeepFM, self).__init__()self.embedding = nn.Embedding(n_features, embedding_dim)self.dnn = nn.Sequential(nn.Linear(n_features * embedding_dim, hidden_units[0]),nn.ReLU(),nn.Dropout(dropout_rate),nn.Linear(hidden_units[0], hidden_units[1]),nn.ReLU(),nn.Dropout(dropout_rate),nn.Linear(hidden_units[1], 1))# 输出层:FM 和 DNN 部分的输出拼接self.output_layer = nn.Linear(1 + 1, 1) # FM 输出与 DNN 输出拼接def forward(self, x):# FM 部分:计算特征的二阶交互embedding_x = self.embedding(x)fm_output = torch.sum(torch.pow(torch.sum(embedding_x, dim=1), 2) - torch.sum(torch.pow(embedding_x, 2), dim=1), dim=1, keepdim=True)# DNN 部分:通过嵌入层和神经网络计算高阶特征交互x_dnn = embedding_x.view(embedding_x.size(0), -1)dnn_output = self.dnn(x_dnn)# 输出层:将 FM 和 DNN 的输出拼接起来output = self.output_layer(torch.cat([fm_output, dnn_output], dim=1))return output
# 示例
n_features = 10 # 假设有 10 个特征
embedding_dim = 5 # 每个特征的嵌入维度
hidden_units = [64, 32] # DNN 的隐藏层大小
model = DeepFM(n_features, embedding_dim, hidden_units)
# 假设有 4 个样本,每个样本有 10 个特征
x = torch.randint(0, n_features, (4, n_features))
output = model(x)
print("DeepFM 输出:", output)
其中 fm_output = torch.sum(torch.pow(torch.sum(embedding_x, dim=1), 2) - torch.sum(torch.pow(embedding_x, 2), dim=1), dim=1, keepdim=True)这行代码计算了FM的二阶交互

- 三、多任务学习中ESSM有什么特点
- 1.ESSM是一个典型的硬共享早期阶段共享的多任务学习模型,通过共享嵌入层和中间层来学习两个任务的共性特征
- 2.loss函数通过加权平均等计算
L = α ⋅ L 1 + β ⋅ L 2 L = \alpha \cdot L_{1} + \beta \cdot L_{2} L=α⋅L1+β⋅L2
- 四、多任务学习中MMoE(Multi-gate Mixture-of-Experts)有什么特点,如何解决不同任务的梯度冲突
利用 专家网络(Experts) 和 任务门控(Task-specific Gates) 来共享底层特征,同时允许每个任务独立选择适合自己的特征组合,通过门控网络提供动态特征共享机制,有效缓解任务冲突- DWA(Dynamic Weight Average)
DWA 动态调整每个任务的损失权重,目的是平衡任务之间的训练进度。DWA 根据任务的损失下降速率动态调整权重,鼓励更慢收敛的任务获得更多关注。

- PCGrad(Project Conflicting Gradient)
PCGrad 当两个任务的梯度方向冲突时,PCGrad 会将一个梯度在另一个梯度的正交方向上进行投影

- 3.Uncertainty Weighting
基于任务输出的不确定性调整权重,不确定性大的任务权重降低。

- DWA(Dynamic Weight Average)
- 五、激活函数sigmoid、tanh出现梯度消失可以怎么处理
- 1.原因分析

- 2.替换其他更加稳定的激活函数

- 1.原因分析
- 3.批归一化 (Batch Normalization)
- 4.正则化
- 5.调整学习率
- 6.残差连接
- 7.梯度裁剪 (Gradient Clipping)
在反向传播过程中,对梯度进行裁剪,防止梯度过小或过大

torch.nn.utils.clip_grad_norm_ # torch中有自带的梯度剪裁方法
- 六、介绍AUC,手撕AUC
AUC有一个常用的定义:随机从正样本和负样本中各选一个,分类器对于该正样本打分大于该负样本打分的概率。基于计算AUC的代码可以写为
def cal_auc_1(label, pred):numerator = 0 # 分子denominator = 0 # 分母for i in range(len(label) - 1):for j in range(i, len(label)):if label[i] != label[j]:denominator += 1# 统计所有正负样本对中,模型把相对位置排序正确的数量r = (label[i] - label[j]) * (pred[i] - pred[j])if r > 0:numerator += 1elif r == 0:numerator += 0.5return numerator / denominator
- 七、手撕:最大上升子序列(LIS)
给定一个无序的整数数组,找到其中的最长严格递增子序列,并返回该子序列的长度,子序列可以不连续。这是一个经典的动态规划问题
def LIS(nums):if not nums:return 0 dp = [1] * len(nums) # dp[i] 表示以 nums[i] 为结尾的最长递增子序列长度# 遍历所有元素,计算以每个元素为结尾的最长递增子序列for i in range(1, len(nums)):for j in range(i):if nums[i] > nums[j]:dp[i] = max(dp[i], dp[j] + 1)return max(dp) # 返回 dp 中的最大值,即最长递增子序列的长度
相关文章:
搜广推校招面经七
抖音推荐算法 一、广告系统中的数据流处理方法,怎么避免延迟回流问题 延迟回流问题是指,实时系统(如广告点击预估)中,历史数据未及时更新或发生延迟,导致系统的实时预测偏离实际情况。避免延迟回流的方法有…...
Leetcode 518. 零钱兑换 II 动态规划
原题链接:Leetcode 518. 零钱兑换 II 可参考官解:零钱兑换 II 和这个解答:[Java/Python3/C]动态规划:拆分零钱兑换子问题(嵌套循环的秘密)【图解】 此题需要仔细想象和Leetcode 377. 组合总和 Ⅳ 动态规划…...
【EI 会议征稿】第四届材料工程与应用力学国际学术会议(ICMEAAE 2025)
2025 4th International Conference on Materials Engineering and Applied Mechanics 重要信息 大会官网:www.icmeaae.com 大会时间:2025年3月7-9日 大会地点:中国西安 截稿时间:2025年1月24日23:59 接受/拒稿通知…...
集合的线程安全
在多线程环境中,Java 的集合框架(Collection Framework)面临着线程安全的问题。当多个线程同时访问同一个集合对象时,可能会导致数据不一致、丢失更新或程序崩溃等严重问题。因此,在并发编程中确保集合操作的安全性至关…...
《深入理解Mybatis原理》Mybatis中的缓存实现原理
一级缓存实现 什么是一级缓存? 为什么使用一级缓存? 每当我们使用MyBatis开启一次和数据库的会话,MyBatis会创建出一个SqlSession对象表示一次数据库会话。 在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句&…...
C# 数据拟合教程:使用 Math.NET Numerics 的简单实现
C# 数据拟合实战:使用 Math.NET Numerics 快速实现 引言 在科学计算、工程建模或数据分析中,数据拟合是一个非常重要的技术。无论是线性拟合还是非线性拟合,借助适当的工具都可以快速解决问题。本文将向您展示如何使用 C# 和强大的数值计算…...
C# 中对 Task 中的异常进行捕获
以下是在 C# 中对 Task 中的异常进行捕获的几种常见方法: 方法一:使用 try-catch 语句 你可以使用 try-catch 语句来捕获 Task 中的异常,尤其是当你使用 await 关键字等待任务完成时。 using System; using System.Threading.Tasks;class …...
Android车机DIY开发之软件篇(九)默认应用和服务修改
Android车机DIY开发之软件篇(九)默认应用和服务修改 Car默认应用位置 ~/packages/apps/Car 增加APP 1.增加 XXXX.app 和Android.mk 2. 修改~/build/make/target/product/handheld_system_ext.mk Android默认APK位置 ~/packages/apps 1.增加文件夹 app和mk文件 2.build/mak…...
SimpleFOC01|基于STM32F103+CubeMX,移植核心的common代码
导言 如上图所示,进入SimpleFOC官网,点击Github下载源代码。 如上图所示,找到仓库。 comom代码的移植后,simpleFOC的移植算是完成一大半。simpleFOC源码分为如下5个部分,其中communication是跟simpleFOC上位机通讯&a…...
web.xml常用配置
web.xml是Java Web应用程序的部署描述文件,它位于WEB-INF目录下。web.xml文件主要用于配置Servlet、Filter、Listener、MIME类型、欢迎页面等组件,以及一些Web应用的上下文参数。以下是一些常见的web.xml配置说明: Servlet配置: …...
代码随想录刷题day07|(数组篇)58.区间和
目录 一、数组理论基础 二、前缀和 三、相关算法题目 四、总结 五、待解决问题 一、数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合。 代码随想录 (programmercarl.com) 特点: 1.下标从0开始,内存中地址空间是连续的 2.查询快&…...
【Linux】进程结束和进程等待
进程的结束 退出码的认识 在我们学习C/C的时候我们通常在进行写main函数时,main函数主体写完后通常会进行写一条语句 " return 0 " ,这里的这条语句到底是什么意思呢?? 我们知道当在主函数中调用其他函数或者在其他函…...
可编辑精品PPT | 城投集团(行业)数字化解决方案
这个PPT详细介绍了城投集团的数字化转型解决方案。首先,它概述了数字化转型的背景,包括政策要求和行业趋势,并指出集团在信息化方面取得的阶段性成果及存在的不足。方案提出了数字化转型的总体规划,明确了总体目标、思路和推进策略…...
统计学习算法——决策树
内容来自B站Up主:风中摇曳的小萝卜https://www.bilibili.com/video/BV1ar4y137GD,仅为个人学习所用。 问题引入 有15位客户向某银行申请贷款,下面是他们的一些基本信息,类别列表示是否通过贷款申请,是表示通过贷款申…...
基于网络爬虫技术的网络新闻分析
文末附有完整项目代码 在信息爆炸的时代,如何从海量的网络新闻中挖掘出有价值的信息呢?今天就来给大家分享一下基于网络爬虫技术的网络新闻分析的实现过程。 首先,我们来了解一下系统的需求。我们的目标是能够实时抓取凤凰网新闻、网易新闻、…...
51_Lua面向对象编程
面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构。像C++、Java、Objective-C、Smalltalk、C#、Ruby等编程语言都支持面向对象编程。 1.面向对象编程特性 面向对象编程是一种编程范式,它使用“对象”来设计软件。对象是数据和行为的封装单元…...
关于在 Kotlin DSL 中,ndk 的配置方式
在 Kotlin DSL 中,ndk 的配置方式有所不同,取决于 Android Gradle 插件版本。ndk { abiFilters(…) } 在 Kotlin DSL 中实际上是 externalNativeBuild 的一部分,需要通过正确的上下文调用。 错误代码: ndk {abiFilters("ar…...
【论文阅读+复现】High-fidelity Person-centric Subject-to-Image Synthesis
以人物为中心的主体到图像的高保真合成,CVPR2024 code:CodeGoat24/Face-diffuser: [CVPR2024] Official implementation of High-fidelity Person-centric Subject-to-Image Synthesis. paper:2311.10329 背景 研究问题:这篇文…...
Spring Boot 应用开发入门
一、Spring Boot简介 Spring Boot 是一个基于 Spring 框架的开源 Java 基础框架,它简化了基于 Spring 的应用开发。Spring Boot 提供了一种快速、便捷的方式来创建独立、生产级的基于 Spring 框架的应用程序。它通过提供一系列的“启动器”依赖,帮助开发…...
【C语言】字符串函数详解
文章目录 Ⅰ. strcpy -- 字符串拷贝1、函数介绍2、模拟实现 Ⅱ. strcat -- 字符串追加1、函数介绍2、模拟实现 Ⅲ. strcmp -- 字符串比较1、函数介绍2、模拟实现 Ⅳ. strncpy、strncat、strncmp -- 可限制操作长度Ⅴ. strlen -- 求字符串长度1、函数介绍2、模拟实现(…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
