瑞幸笔试 - 1010
2024年10月12日约 1048 字大约 3 分钟
瑞幸笔试 - 1010
场景题
描述
你需要设计一个广告信息回传系统,需要处理用户的广告点击数据,并在后续将点击信息异步回传给外部广告平台。由于广告点击量大,系统需要在高并发下处理广告点击数据,并保证数据的及时性和准确性。同时,系统需要避免重复回传数据,以防止外部广告平台的计费重复。
如何设计广告点击信息的处理流程,确保点击数据能够实时高效地被处理?
思路:
系统需求分析
- 高并发处理:系统需要处理大量的广告点击数据,因此需要具备高并发处理能力。
- 实时性:点击数据需要实时处理并回传给外部广告平台。
- 准确性:确保数据的准确性,避免重复回传数据。
- 避免重复计费:防止外部广告平台的计费重复。
系统架构设计
- 消息队列:使用消息队列(如Kafka)来缓冲和异步处理广告点击数据,以应对高并发场景。
- 分布式数据库:使用分布式数据库(如Cassandra)来存储点击数据,确保数据的持久性和高可用性。
- 去重机制:在数据处理流程中引入去重机制,确保同一点击数据不会被重复处理。
处理流程设计
- 数据采集:
- 用户点击广告后,前端将点击数据发送到后端服务器。
- 后端服务器将点击数据写入消息队列(如Kafka)。
- 数据处理:
- 消费者从消息队列中读取点击数据。
- 消费者对点击数据进行去重处理,确保同一数据不会被重复处理。
- 去重机制可以通过在分布式数据库中存储每个点击数据的唯一标识(如UUID)来实现。
- 数据存储:
- 将去重后的点击数据存储到分布式数据库中。
- 数据库中可以设计一个字段来标记数据是否已经回传,以避免重复回传。
- 数据回传:
- 定时任务或事件驱动机制从数据库中读取未回传的点击数据。
- 将数据异步回传给外部广告平台。
- 回传成功后,更新数据库中的标记字段,表示该数据已回传
- 数据采集:
算法题
题面
假设你是瑞幸咖啡的一名运营人员,瑞幸有各种不同价格的咖啡饮品,用数组 prices
表示,其中 prices[i]
表示第 种咖啡饮品的价格。现在你要搭配一些咖啡套餐,每个套餐里必须包含 种不同的咖啡饮品。
我们把咖啡套餐的 "风味差异度" 定义为:套餐里任意两种咖啡饮品价格差的最小值。也就是说,咖啡套餐里价格最接近的两种咖啡饮品的价格差就是这个套餐的风味差异度。
你的任务是:找出所有可能的咖啡套餐中,"风味差异度" 最大的那个。
例子:
假设有四种咖啡饮品,价格分别是 元、 元、 元和 元。现在你要搭配 种咖啡饮品的套餐(也就是 )。
套餐 : 元和 元的咖啡,风味差异度是 。
套餐 : 元和 元的咖啡,风味差异度是 。
套餐 : 元和 元的咖啡,风味差异度是 。...(其他组合类似)
从上面的例子可以看出,包含 元和 元的咖啡饮品的套餐 "风味差异度" 最大,为 。所以,对于这个例子来说,答案就是 。
思路与代码:
先骗分。
import java.util.*;
public class Solution {
public int maxFlavor(int[] price, int k) {
Arrays.sort(price);
int n = price.length;
int maxDiff = 0;
for (int i = 0; i <= n - k; i++) {
maxDiff = Math.max(maxDiff, price[i + k - 1] - price[i]);
}
return maxDiff;
}
}
只能过 ,总共的笔试时间只有 个小时,时间不够没 A 出来。