← 返回博客列表 eBay 软件工程实习 面试真题题库:五大主题 × 高频考点深度拆解
eBay

eBay 软件工程实习 面试真题题库:五大主题 × 高频考点深度拆解

2026-06-02

eBay 的软件工程实习 (SWE Intern) 是不少同学投递的"中等难度但题型很集中"的目标。和 FAANG 头部公司相比,eBay 的题面看上去没那么"花",但题型分布非常稳定——抓住核心五个主题,再配套准备 Karat 风格的 follow-up,就能把面试转化率拉满。

这篇文章把站内多篇 eBay 面经实录里的真题,按 数组前缀 / 字符串状态机 / 树与图 / 数据结构设计 / 系统设计入门 五个主题重新组织,每个主题给一道代表题 + Python 完整解法 + 时间分配建议。如果你正在准备 eBay 实习的 OA、Karat live coding 或 final loop,可以把这套题库当作"考前必过一遍"的 checklist。

eBay SWE Intern 招聘流程一览

阶段 平台 时长 题型
Online Assessment HackerRank 60-75 分钟 2 道编码 + 部分批次 4-6 题 MCQ
Karat Live Coding Karat / Zoom 60 分钟 1-2 道算法 + follow-up 优化
Tech Phone Zoom + CoderPad 45 分钟 1 道中等难度 + 简单 OOD/系统对话
Virtual Onsite 4 轮 × 60 分钟 1 个工作日 算法 / 系统设计 / 代码审查 / 行为题

要点:HackerRank OA 一般在投递后 7-10 天内发;Karat 与 Tech Phone 节奏紧凑,连续 2-3 周;Onsite 多为远程,时差需提前协调。

主题一:数组前缀和与窗口计数

真题:连续区间内不同 Promotion 数

给定一个长度 N 的数组 promo[],每个元素是当天的促销活动 id。给定 Q 个查询 (l, r),返回区间内不同活动 id 的数量。N, Q ≤ 1e5。

思路

  1. 离线 + Mo's Algorithm 是经典解,O((N+Q)·√N)
  2. eBay OA 通常给的数据规模 ≤ 1e5,可以用位置+前缀计数:把每个 id 出现的位置存进 list,对每个查询二分
from collections import defaultdict
from bisect import bisect_left, bisect_right

def distinct_in_ranges(promo, queries):
    pos = defaultdict(list)
    for i, p in enumerate(promo):
        pos[p].append(i)
    res = []
    for l, r in queries:
        cnt = 0
        for p, idxs in pos.items():
            lo = bisect_left(idxs, l)
            hi = bisect_right(idxs, r)
            if hi > lo:
                cnt += 1
        res.append(cnt)
    return res

时间复杂度:O(Q · K · log N),K 是不同 id 数;当 K 较小时非常快。 空间复杂度:O(N)。

Follow-up:如果 N=1e6 且需要 online,必须用持久化线段树(主席树),可以口头描述思路即可。

主题二:字符串状态机与解析

真题:Listing Title 校验器

输入一段商品标题字符串,规则:

  • 不能以小写字母开头
  • 不能连续出现 3 个相同字母
  • 不能包含 < > script 等危险关键字
  • 长度 5-80

返回是否合法 + 第一个违规原因(按顺序优先级)。

思路:典型字符串校验,用一个 rule pipeline 写最清晰:

def validate_title(title: str) -> tuple[bool, str]:
    if not (5 <= len(title) <= 80):
        return False, "length"
    if title[0].islower():
        return False, "leading_lower"
    for i in range(2, len(title)):
        if title[i] == title[i-1] == title[i-2]:
            return False, "triple_repeat"
    blacklist = ("<", ">", "script", "javascript")
    low = title.lower()
    for kw in blacklist:
        if kw in low:
            return False, f"blacklist:{kw}"
    return True, "ok"

时间复杂度:O(N),N 是标题长度。 面试加分:能用 enum + dataclass 把 rule 抽出来写成可扩展的 validator 链。

主题三:树与图(站点拓扑)

真题:Categories 树最大销售路径

商品类目是一棵树,每个节点有一个 sales 值(可正可负)。从根到任意叶子路径的总销售额最大值是多少?

思路

  1. DFS 自顶向下累加 path sum,记录最大值
  2. 注意销售可能是负数,路径不能"提前停下"——题目要求是到叶子,所以不能贪心剪枝
class Node:
    def __init__(self, sales: int):
        self.sales = sales
        self.children = []

def max_leaf_path(root: Node) -> int:
    best = float("-inf")
    def dfs(node, acc):
        nonlocal best
        acc += node.sales
        if not node.children:
            best = max(best, acc)
            return
        for c in node.children:
            dfs(c, acc)
    dfs(root, 0)
    return best

时间复杂度:O(N)。 Follow-up:如果题目改成"任意起点到任意终点"——退化成 LeetCode 124 的变体,要在每个节点合并左右最大单边路径。

主题四:数据结构设计

真题:商品搜索 LRU + 热度衰减

实现一个搜索缓存:

  • query(keyword, ts):返回该关键词的命中结果,并更新最近访问时间
  • top_k(ts, k):返回截至当前时间最热门的 k 个关键词,热度 = 访问次数 × 时间衰减因子 0.99^(ts - last_ts)

思路

class HotSearch:
    def __init__(self, decay=0.99):
        self.decay = decay
        self.data = {}  # keyword -> [count, last_ts]

    def query(self, keyword, ts):
        if keyword not in self.data:
            self.data[keyword] = [0, ts]
        c, last = self.data[keyword]
        # 衰减后再 +1
        c = c * (self.decay ** (ts - last)) + 1
        self.data[keyword] = [c, ts]

    def top_k(self, ts, k):
        scored = [
            (kw, c * (self.decay ** (ts - last)))
            for kw, (c, last) in self.data.items()
        ]
        scored.sort(key=lambda x: -x[1])
        return [kw for kw, _ in scored[:k]]

时间复杂度:query O(1),top_k O(N log N)。 Follow-up:用 bucket + heap 优化 top_k 到 O(N);面试官常问。

主题五:系统设计入门

真题:设计 eBay 商品详情页 API

要求口头设计 GET /listing/{id} 接口,覆盖:

回答骨架P-A-S 模型:Path / API / Storage):

  1. Path:CDN → API Gateway → Listing Service → Cache (Redis) → MySQL
  2. API:返回 {listing, seller, price_history, related_listings},每块独立 fetch 后聚合(fan-out)
  3. Storage:listing 主表 MySQL;图片 S3 + CDN;推荐位走 ML 服务;价格历史 ClickHouse 时序
  4. 一致性:写更新时先写 DB,再通过 CDC(Debezium)异步刷 Redis,TTL 兜底
  5. 抗压:热门商品在 Redis 内做 local cache,避免 thundering herd

备考策略:四周节奏

周次 主任务
第 1 周 把 LeetCode "eBay" tag + Top 50 中等题做完
第 2 周 主题二、三的字符串与树/图重点训练
第 3 周 数据结构设计 + 系统设计 P-A-S 模板演练
第 4 周 Karat mock + 行为题 STAR 故事打磨

FAQ

Q1:eBay SWE Intern OA 难度和 LeetCode 比是什么水平? 大致 LeetCode Medium 偏中等,少数批次会出 1 道偏难。关键在 60 分钟内写出 bug-free 解法,不要追求最优。

Q2:HackerRank 平台有哪些坑? 默认编辑器没有 LSP;建议在本地写好再粘贴。注意输入解析常用 input().split(),不要花太多时间在 IO 上。

Q3:Karat 面试和正式 onsite 一样严格吗? Karat 是外包面试官,给分相对客观;通过率 ~50%。题目难度比 OA 略高,但允许更多沟通。

Q4:eBay 实习的实际工作内容是什么? 分散在 Listings / Search / Trust&Safety / Payments 等团队;前端 React,后端 Java + Scala,数据 Spark。

Q5:如何提升 eBay Final Loop 通过率?


正在准备 eBay 实习面试?

如果你已经收到 OA 链接但 60 分钟 2 题仍然吃紧,或者 Karat 阶段反复卡 follow-up,可以聊聊看 OA代面 / VO辅助 / VO代面 的全套支持方案——从面试日真人陪跑、题型映射、到行为题 STAR 故事打磨,都能端到端提供。


联系方式

需要面试真题与定制备战计划?立刻联系微信 Coding0201获取真题

Email: [email protected] Telegram: @OAVOProxy