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)
招聘者會問三件事:
- 履歷高頻項:log / 指標 / 監控 / 巨量資料 / 串流處理任意一項是加分
- 職缺匹配:你想做 search engine(SPL/Indexer)還是 platform(API/UI)
- 時間線:base / sign-on / 期望 onboard 時間
回答範本:
- 履歷講故事:「在 X 專案我把 ingestion 延遲從 Y 降到 Z」
- 期望薪資:先丟 base + RSU 區間,最後再問 sign-on 是否可議
- 遠端:明確說能否 hybrid(San Jose / Boulder / Vancouver 三地總部)
階段 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])
踩坑:
- 時間戳要按 epoch 處理,不要假設單調遞增
- 正則失敗要 skip,不要拋例外(hidden case 會塞髒資料)
- top-k 用
nlargest,別用整體排序
階段 3 — Tech Phone Screen(45 min)
CoderPad 1 道題,標準 LC Medium。常見考點:
- 設計 LRU / LFU
- Stream 中 top-k / 中位數(heapq)
- 區間合併 / 排程
Splunk 的特色:要求寫完後跑兩個 sample,並能在 follow-up 裡聊「如果 stream 是無界的,記憶體怎麼控?」——這是為下一輪 system design 鋪墊。
階段 4 — Onsite VO(4-5 輪)
Coding 輪 1:Stream 去重 + 時間視窗聚合(Medium-Hard)
題面:即時收到 (event_id, timestamp) tuple,要求支援兩個 API:
add(event_id, ts)count_unique(window_sec)回傳最近 window 秒內的不重複 id 數
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:
- 「window 是 24h 記憶體放不下?」→ 改成 approximate(HyperLogLog)
- 「事件亂序到達?」→ 用最小堆按 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]
關鍵考察點:
- 是否用 generator 避免一次性載入
- 是否懂 SPL 命令的執行順序(search → stats → sort → head)
- 是否能把 sort+head 最佳化成 heap top-k(n 大時效能差異顯著)
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 隔離
關鍵設計決策:
- bucket 滾動:hot bucket 寫滿後 freeze,elder bucket 非同步遷 S3
- schema-on-read:攝入時不強制 schema,搜尋時按 SPL 欄位動態解析
- search head pooling:跨 cluster 復用 search head,分散式 fan-out
Behavioral / Bar Raiser
Splunk 看重三條 leadership signal:
- Customer obsession:舉一個「直接和客戶聊出需求」的故事
- Ownership:「on-call 接到 P0 你怎麼處理」
- 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 代面 標準節奏:
- 職缺線判定:JD + recruiter 摘要 5 分鐘內判定 Search / Ingestion / Platform
- OA 限時模擬:60 min 內完成 2 演算法 + 1 log 解析,重點訓練正則 + 容錯
- CoderPad 實戰:跑測 + follow-up 三步連貫,避免「寫完了但沒跑」
- System Design 60 min mock:log 採集 / SPL 執行計畫 / bucket 分層三類各打一遍
- 現場 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,獲取真題。
聯繫方式
- 微信:Coding0201
- Email: [email protected]
- Telegram: @OAVOProxy