
1) 【一句话结论】广告匹配通过多特征哈希表快速索引用户特征对应的广告候选集,结合动态优先队列(最大堆)按业务指标(出价×CTR预估、用户画像匹配度等)实时排序,实现高效Top K匹配,核心是“索引+排序”的联合优化,兼顾实时性与效率。
2) 【原理/概念讲解】广告匹配的核心是“用户特征→广告候选→排序输出”。用户特征(如年龄、性别、位置、搜索词)作为键,通过多特征哈希表(如键为特征组合字符串,如"25,male,北京")快速定位匹配的广告候选(哈希表存储候选广告列表)。为解决多特征组合的哈希冲突,可采用链地址法(每个哈希桶存储链表)或布隆过滤器(先过滤无效候选,减少哈希表查找次数)。匹配逻辑为“特征交集判断”,即所有用户特征都在广告特征范围内。匹配后,对候选广告根据业务目标(如最大化收益,即出价×CTR预估)构建最大堆(优先队列),堆操作支持O(log n)的插入/删除,实时排序后返回Top K。
类比:超市促销推荐,用户(特征)快速通过标签(哈希表)找到相关商品(广告候选),然后按促销力度(优先级,如折扣+销量)排序,优先推荐最优惠的。
3) 【对比与适用场景】
| 数据结构组合 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 哈希表(多特征组合)+ 优先队列(最大堆) | 用户特征哈希表存储候选广告列表,优先队列按优先级排序 | 查找O(1)平均,排序O(log n),动态更新高效 | 用户特征频繁变化,广告候选集动态调整(如实时出价、用户画像更新) | 候选集规模大时,优先队列维护成本高,需结合过滤 |
| 哈希表+布隆过滤器+优先队列 | 布隆过滤器辅助哈希表过滤,减少哈希表查找次数 | 布隆过滤器误判率低,降低哈希表负载 | 热门特征(如常用位置、年龄)匹配,降低哈希表负载 | 误判可能导致漏匹配,需二次验证 |
| Trie树+哈希表 | Trie树处理关键词(如搜索词),哈希表存储其他特征 | 关键词匹配高效(前缀/后缀),哈希表快速过滤 | 搜索词驱动的广告匹配(如电商搜索广告) | 构建Trie时间复杂度O(m),m为关键词长度,适合静态/半静态关键词 |
4) 【示例】
// 广告匹配函数 match_ad(user_features, ad_pool, top_k)
function match_ad(user_features, ad_pool, top_k):
// 冷启动处理:新用户用默认特征,新广告用基础优先级
if is_new_user(user_features):
user_features = default_features()
if is_new_ad(ad_pool):
ad_pool = initialize_new_ad(ad_pool)
candidate_ads = []
for ad in ad_pool:
if matches(user_features, ad.features):
candidate_ads.append(ad)
max_heap = new MaxHeap()
for ad in candidate_ads:
priority = ad.bid * ad.ctr // 优先级=出价×CTR预估(最大化收益)
max_heap.push((priority, ad))
result = []
for i in 0 to top_k-1:
priority, ad = max_heap.pop()
result.append(ad)
return result
// 匹配函数
function matches(user_features, ad_features):
for key in user_features:
if user_features[key] not in ad_features[key]:
return false
return true
// 冷启动处理
function is_new_user(features):
return features.get("user_id") is None
function default_features():
return {"age": [18,35], "gender": "male", "location": "默认", "search_keyword": "通用"}
function is_new_ad(pool):
return any(ad.get("ad_id") is None for ad in pool)
function initialize_new_ad(pool):
for ad in pool:
if ad.get("ad_id") is None:
ad["priority"] = 1 // 基础优先级
return pool
5) 【面试口播版答案】
面试官您好,广告匹配的核心是通过多特征哈希表快速索引用户特征对应的广告候选集,再结合优先队列(最大堆)根据业务指标实时排序。具体来说,用户特征(如年龄、性别、位置、搜索词)作为键,通过哈希表快速找到匹配的广告候选;然后对候选广告根据出价、CTR预估、用户画像匹配度等构建最大堆,按优先级(如出价×CTR)降序排序,最后返回Top K。比如,新用户登录时,系统用默认特征(如年龄18-35、性别男)匹配,新广告则初始化低优先级,逐步通过用户点击反馈提升。这样既能保证实时性,又能高效匹配,兼顾冷启动和新广告的适配。
6) 【追问清单】
7) 【常见坑/雷区】