Yelp OA 高频真题整理|HackerRank 两题速通攻略 + OA准备指南

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

Yelp OA 高频真题整理|HackerRank 两题速通攻略 + OA准备指南

1. 服务中断

题目描述

Yelp 的 SRE 需要识别系统中服务间的所有依赖关系。当某个服务发生中断时,中断会递归级联影响其所有下游子服务。

现给定服务列表services(每个服务包含serviceId和父服务 ID 列表parentServiceIds)、中断服务列表serviceOutages,以及目标服务targetService,需根据以下规则判断目标服务的状态:

  1. 正常运行(Operational):服务自身未中断,且其直接子服务(若存在)均未中断。
  2. 部分中断(Partial Outage):服务自身未中断,但至少有一个直接子服务发生中断。
  3. 完全中断(Full Outage):服务自身发生中断,且其所有直接子服务(若存在)均未中断。最终返回目标服务的状态:OperationalPartial OutageFull 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,表示该请求被路由到的服务器。

要求

  1. 输出为服务器 ID 列表,每行一个;
  2. 比值相同时,按服务器 ID 升序选择;
  3. 输入服务器列表已按 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 所有商家的平均发生次数。

平均计算规则

某事件类型的平均值 = 所有提供了该事件数据的商家的该事件次数的平均值(缺失该事件的商家不参与计算)。

备注

  1. 同一商家不会出现重复的事件类型;
  2. 有效事件类型:photo_viewsadspage_viewsreviews

示例

输入

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 种事件,且adsreviews达标;
  • 商家 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),输入一个城市字符串,需返回该城市下各连锁品牌的门店数量,结果按以下规则排序:

  1. 门店数量降序排列;
  2. 门店数量相同时,按品牌名字母序升序排列。

输入

商家列表(格式:品牌名 – 城市 – 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!

author avatar
Jory Wang Amazon资深软件开发工程师
Amazon 资深工程师,专注 基础设施核心系统研发,在系统可扩展性、可靠性及成本优化方面具备丰富实战经验。 目前聚焦 FAANG SDE 面试辅导,一年内助力 30+ 位候选人成功斩获 L5 / L6 Offer。
End of Text
 0