最近刚做完 Yelp OA ,整体体验一句话总结:题目不难,但写慢一点就容易来不及。这次是标准配置:平台是HackerRank,题量是2题,时间一般在60min 左右(我这次 20min 提前做完),分享一些高频真题造福大家。

1. 服务中断
题目描述
Yelp 的 SRE 需要识别系统中服务间的所有依赖关系。当某个服务发生中断时,中断会递归级联影响其所有下游子服务。
现给定服务列表services(每个服务包含serviceId和父服务 ID 列表parentServiceIds)、中断服务列表serviceOutages,以及目标服务targetService,需根据以下规则判断目标服务的状态:
- 正常运行(Operational):服务自身未中断,且其直接子服务(若存在)均未中断。
- 部分中断(Partial Outage):服务自身未中断,但至少有一个直接子服务发生中断。
- 完全中断(Full Outage):服务自身发生中断,且其所有直接子服务(若存在)均未中断。最终返回目标服务的状态:
Operational、Partial Outage或Full Outage。
示例
输入:
json
{
"services": [
{"serviceId": 1, "parentServiceIds": []},
{"serviceId": 2, "parentServiceIds": [1]},
{"serviceId": 3, "parentServiceIds": [2]},
{"serviceId": 4, "parentServiceIds": [2]},
{"serviceId": 5, "parentServiceIds": [1]},
{"serviceId": 6, "parentServiceIds": [5]}
],
"serviceOutages": [2,3],
"targetService": 2
}
输出:Full Outage
解释:
- 服务 2 自身在中断列表中,且其直接子服务 3、4 均发生中断,因此服务 2 状态为完全中断;
- 服务 1 自身未中断,但直接子服务 2 中断,状态为部分中断;服务 5 自身未中断,子服务 6 未中断,状态为正常。
2. 负载均衡
题目描述
Yelp 的网站和移动端应用由多个服务支撑,不同服务存在多实例部署。需实现加权响应时间负载均衡策略,将新请求分配给当前负载 / 工作线程数(weight)比值最小的实例;若比值相同,优先选择 ID 更小的服务器。
输入
incoming_requests:需要处理的请求总数;servers:服务器列表,每个服务器包含id(唯一 ID)、num_workers(工作线程数 / 权重)、load(当前处理的请求数)。
输出
按请求顺序,每行输出一个服务器 ID,表示该请求被路由到的服务器。
要求
- 输出为服务器 ID 列表,每行一个;
- 比值相同时,按服务器 ID 升序选择;
- 输入服务器列表已按 ID 升序排列。
示例
输入:
json
{
"incoming_requests": 6,
"servers": [
{"id": 1, "num_workers": 5, "load": 2},
{"id": 2, "num_workers": 2, "load": 1},
{"id": 3, "num_workers": 1, "load": 0}
]
}
输出:
plaintext
3
1
2
1
1
1
解释:
计算各服务器load/num_workers比值:
- 服务器 3:0/1=0(最小),优先分配;
- 后续请求依次按比值 + ID 规则分配,最终得到上述输出。
3. 活跃商家
题目描述
给定 Yelp 的用户互动事件列表,需返回活跃商家 ID 列表(按升序排列)。
活跃判定规则
一个商家被视为活跃,需满足:在至少两种事件类型中,该商家的事件发生次数≥该事件类型 across 所有商家的平均发生次数。
平均计算规则
某事件类型的平均值 = 所有提供了该事件数据的商家的该事件次数的平均值(缺失该事件的商家不参与计算)。
备注
- 同一商家不会出现重复的事件类型;
- 有效事件类型:
photo_views、ads、page_views、reviews。
示例
输入:
plaintext
Event('ads', 7, 3)
Event('ads', 8, 2)
Event('ads', 5, 1)
Event('page_views', 11, 2)
Event('page_views', 12, 3)
Event('photo_views', 10, 3)
Event('reviews', 7, 2)
输出:[2, 3]
解释:
- 商家 2:
ads(8)≥ 平均值 (7+8+5)/3=6.67、page_views(11)≥ 平均值 (11+12)/2=11.5?不,11<11.5;reviews(7)≥ 平均值 7;满足 2 种事件,且ads、reviews达标; - 商家 3:
ads(5)<6.67;page_views(12)≥11.5;photo_views(10)≥ 平均值 10;满足 2 种事件达标; - 最终活跃商家为 2、3,按升序输出。
4. 唯一餐品
题目描述
给定餐厅的餐品列表,每个餐品由食材列表定义。若两个餐品的食材集合完全相同(食材顺序无关),则视为同一餐品。需统计菜单中唯一餐品的数量。
输入
meals:餐品列表,每个餐品包含name(名称)、ingredients(食材列表)。
输出
唯一餐品的数量。
示例
输入:
plaintext
meals: [
{name: "Basic Burger", ingredients: [Lettuce, Tomato, Onion, Patty]},
{name: "Chief Cheese Burger", ingredients: [Cheese, Tomato, Patty, Lettuce]},
{name: "Jay's Burger", ingredients: [Onion, Tomato, Patty, Lettuce]},
{name: "High Water Sandwich", ingredients: [Tomato, Patty, Lettuce, Cheese]}
]
输出:1
解释:
所有餐品的食材集合均为{Tomato, Patty, Lettuce, Cheese/Onion}(去重后一致),因此唯一餐品数量为 1。
5. 连锁品牌统计
题目描述
给定商家数据(包含品牌名、所在城市、ID),输入一个城市字符串,需返回该城市下各连锁品牌的门店数量,结果按以下规则排序:
- 门店数量降序排列;
- 门店数量相同时,按品牌名字母序升序排列。
输入
商家列表(格式:品牌名 – 城市 – ID),示例输入包含 Austin 城市的商家数据。
输出
按规则排序的连锁品牌 – 门店数量列表,示例输出 Austin 的结果为:
plaintext
Whole Foods - 2
Peets Coffee - 1
Starbucks - 1
备注
输入已完成解析,需实现函数:入参为商家列表 + 城市字符串,出参为连锁品牌 – 门店数量列表。
Yelp OA / 各种 OA 到底该怎么准备?
如果需要这些高频真题的题解和答案或者更多大厂的真题也可以 联系我们 领取。
如果你正在准备大厂 OA 或面试,需要一些专业辅助,我可以帮忙提供支持: OA 代写支持 HackerRank、牛客网、Codesignal 等平台,我会确保所有测试用例 100% 通过,不通过不收费; VO 面试时,可以由北美 CS 背景的专家提供实时思路引导,帮助你理清思路; 此外,也支持代面试、全程协助服务,从 OA 到 Offer 谈判全程帮忙。 其他如模拟面试、算法辅导、简历优化等,都可以根据你的需求提供帮助。
欢迎私信详谈,我会根据你的具体情况给出合适的方案。祝大家面试顺利,早日拿到心仪的 Offer!