← 返回部落格列表 Splunk 軟體工程師面試全流程拆解:OA HackerRank + 系統觀察題 + 三輪 VO + Bar Raiser
Splunk

Splunk 軟體工程師面試全流程拆解:OA HackerRank + 系統觀察題 + 三輪 VO + Bar Raiser

2026-06-01

Splunk 是「機器資料」賽道的代表,主營 SPL(Search Processing Language)+ 索引管線 + 可觀測性平台。它的面試節奏比 FAANG 慢,但更看重「系統觀察力」——你能不能在面試現場,把一段亂七八糟的 log 拆出 schema、說清楚索引邊界、寫出 SPL 等價的 Python pipeline。本文把 Splunk SWE 面試拆成 5 個階段,給出每一關的真題範本和應對節奏。

五階段總覽

W0  Recruiter Call (30 min):背景 / base / 遠端 / time-to-start
W1  HackerRank OA (60 min):2 道演算法題 + 1 道 log 解析題
W2  Tech Phone Screen (45 min):CoderPad 1 道 Medium,重點寫完跑測
W3  Onsite VO (4-5 輪):
        ├─ Coding × 2(45 min each,含一道 streaming / pipeline 題)
        ├─ System Design × 1(60 min,主題多為 ingestion / search)
        ├─ Behavioral × 1(STAR + ownership)
        └─ Bar Raiser × 1(30-45 min,跨團隊 Senior 面)
W4  Decision + offer call

整個流程平均 4-6 週。Splunk 的回包速度和談薪節奏明顯比 FAANG 慢一些,但 onsite 之後一週內通常會有口頭 offer。

階段 1 — Recruiter Call(30 min)

招聘者會問三件事:

  1. 履歷高頻項:log / 指標 / 監控 / 巨量資料 / 串流處理任意一項是加分
  2. 職缺匹配:你想做 search engine(SPL/Indexer)還是 platform(API/UI)
  3. 時間線:base / sign-on / 期望 onboard 時間

回答範本:

階段 2 — HackerRank OA(60 min)

結構:2 道演算法(Medium)+ 1 道 log 解析。後者是 Splunk 特色,用來篩掉「只會刷 LC、看到日誌就懵」的候選人。

高頻演算法題:滑動視窗最大值(Medium)

from collections import deque

def max_sliding_window(nums: list[int], k: int) -> list[int]:
    out, dq = [], deque()
    for i, x in enumerate(nums):
        while dq and dq[0] <= i - k:
            dq.popleft()
        while dq and nums[dq[-1]] < x:
            dq.pop()
        dq.append(i)
        if i >= k - 1:
            out.append(nums[dq[0]])
    return out

複雜度:O(n),使用單調遞減雙端佇列。

Splunk 特色題:Log 解析 + 欄位聚合

題面:給一組 log 行,每行格式 timestamp host=... level=... msg="...",輸出每個 host 在最近 10 分鐘內 level=ERROR 的次數 top 5。

import re
from collections import defaultdict
from heapq import nlargest

LOG_RE = re.compile(r'(?P<ts>\S+)\s+host=(?P<host>\S+)\s+level=(?P<level>\S+)')

def top_error_hosts(lines: list[str], now_ts: int, window_sec: int = 600, k: int = 5):
    counts: dict[str, int] = defaultdict(int)
    for line in lines:
        m = LOG_RE.search(line)
        if not m:
            continue
        ts = int(m["ts"])
        if ts < now_ts - window_sec:
            continue
        if m["level"] == "ERROR":
            counts[m["host"]] += 1
    return nlargest(k, counts.items(), key=lambda kv: kv[1])

踩坑

階段 3 — Tech Phone Screen(45 min)

CoderPad 1 道題,標準 LC Medium。常見考點:

Splunk 的特色:要求寫完後跑兩個 sample,並能在 follow-up 裡聊「如果 stream 是無界的,記憶體怎麼控?」——這是為下一輪 system design 鋪墊。

階段 4 — Onsite VO(4-5 輪)

Coding 輪 1:Stream 去重 + 時間視窗聚合(Medium-Hard)

題面:即時收到 (event_id, timestamp) tuple,要求支援兩個 API:

from collections import deque

class StreamWindow:
    def __init__(self):
        self.events: deque[tuple[str, int]] = deque()
        self.id_count: dict[str, int] = {}

    def _evict(self, now: int, window: int):
        while self.events and self.events[0][1] < now - window:
            eid, _ = self.events.popleft()
            self.id_count[eid] -= 1
            if self.id_count[eid] == 0:
                del self.id_count[eid]

    def add(self, eid: str, ts: int):
        self.events.append((eid, ts))
        self.id_count[eid] = self.id_count.get(eid, 0) + 1

    def count_unique(self, now: int, window: int) -> int:
        self._evict(now, window)
        return len(self.id_count)

複雜度:均攤 O(1) per op。

Follow-up

  1. 「window 是 24h 記憶體放不下?」→ 改成 approximate(HyperLogLog)
  2. 「事件亂序到達?」→ 用最小堆按 ts 排序,加水位線

Coding 輪 2:SPL 等價 Pipeline 實作

Splunk 喜歡讓你用 Python 實作一段 SPL 命令鏈。例:

search index=main level=ERROR
| stats count by host
| sort -count
| head 5

要你寫出對應 Python:

def spl_top_error_hosts(events: list[dict], k: int = 5):
    filtered = (e for e in events if e.get("level") == "ERROR")
    counts: dict[str, int] = {}
    for e in filtered:
        counts[e["host"]] = counts.get(e["host"], 0) + 1
    return sorted(counts.items(), key=lambda kv: -kv[1])[:k]

關鍵考察點

System Design 輪(60 min):設計可擴展的日誌採集 + 索引系統

60 min 框架

05 min  Clarify: QPS / 單條大小 / 保留期 / 查詢 SLA
05 min  Data flow: agent → ingestion gateway → broker → indexer → storage
10 min  Ingestion: forwarder + load balancing + 背壓
10 min  Indexing: 時序倒排 + 欄位抽取 + bucket 分層(hot/warm/cold)
10 min  Search: SPL parser → distributed search head → indexer fan-out → merge
10 min  Storage tiering: SSD hot / HDD warm / S3 cold
05 min  Failure: indexer down / 網路分區 / hot bucket 寫滿
05 min  Follow-up: real-time alert / multi-tenant 隔離

關鍵設計決策

Behavioral / Bar Raiser

Splunk 看重三條 leadership signal:

  1. Customer obsession:舉一個「直接和客戶聊出需求」的故事
  2. Ownership:「on-call 接到 P0 你怎麼處理」
  3. Bias for action:「在資訊不全時做決定」

每條配 1 個 STAR 故事,Bar Raiser 會專門挑你最弱的那一條深問

三條職缺線差異

職缺線 Coding 題型 System Design
Search / SPL 字串 + 解析器 SPL 執行計畫 / 最佳化
Ingestion / Indexer Stream + 時序 大規模 log ingestion
Platform / UI DOM + 狀態機 dashboard 渲染 + WebSocket

VO 輔助 / VO 代面 怎麼對接 Splunk

Splunk VO 的難點是「演算法 + log 解析 + SPL 語意 + 可觀測性系統設計」四件事都要做完。VO 輔助 / VO 代面 標準節奏:

  1. 職缺線判定:JD + recruiter 摘要 5 分鐘內判定 Search / Ingestion / Platform
  2. OA 限時模擬:60 min 內完成 2 演算法 + 1 log 解析,重點訓練正則 + 容錯
  3. CoderPad 實戰:跑測 + follow-up 三步連貫,避免「寫完了但沒跑」
  4. System Design 60 min mock:log 採集 / SPL 執行計畫 / bucket 分層三類各打一遍
  5. 現場 cue:onsite 當天 reviewer 後台推 SPL 等價 / bucket 策略 / Bar Raiser BQ 範本

FAQ

Q1:Splunk OA 的 log 解析題難度多大? A:題目本身不難(正則 + 字典聚合),但 hidden case 會塞髒資料測你的健壯性。建議每段解析都包 try-except + skip 策略。

Q2:不熟悉 SPL 也能過 Coding 輪 2 嗎? A:可以。面試官會現場講 SPL 命令含義,重點考察你能不能把語意翻譯成 Python。提前看 5 個常用命令(search / stats / eval / where / sort)就夠。

Q3:Splunk system design 一定考 ingestion 嗎? A:60% 機率。其餘高頻題:分散式 SPL 執行 / multi-tenant 隔離 / dashboard 即時刷新。三類都得練。

Q4:Bar Raiser 失利會被刷嗎? A:會。Splunk 的 Bar Raiser 一票否決權和 Amazon 類似,技術全綠但 Bar Raiser 紅燈仍可能 reject。

Q5:Splunk SDE 包大概什麼水平? A:L4 NG base 約 $160-180K + RSU + sign-on,total 第一年 $240-280K;L5 資深 $300K+。

寫在最後

Splunk 面試不比誰刷題多,比誰能把「機器資料視角」帶進每一道題——log 一拿到手就拆 schema,stream 一來就想記憶體邊界,system design 一聊就分 hot/warm/cold。如果你正在準備 Splunk 的 OA 或 VO,可以微信 Coding0201 聯繫,發職缺 JD + 當前流程節點截圖,先做職缺線判定,再排 VO 輔助 / VO 代面 節奏。


需要面試真題? 立刻聯繫微信 Coding0201獲取真題


聯繫方式