← 返回部落格列表 PureStorage 面試全流程拆解|OA 兩道高頻題 + VO 回呼機制實作題完整解法
PureStorage

PureStorage 面試全流程拆解|OA 兩道高頻題 + VO 回呼機制實作題完整解法

2026-05-28

PureStorage 把自己定義為「現代化資料體驗公司」——這意味著它的工程團隊對介面抽象、回呼機制、長生命週期資源管理這類基礎設施常識極其敏感。和 FAANG 不同,PureStorage 的面試不偏 LeetCode hard,反而高頻出現**「實作一個小型框架」**類型題(callback、event bus、cache invalidator),考的是你能不能把物件導向的邊界設計穩。

本文基於一位通過 PureStorage 面試的候選人複盤,拆解 OA 兩道高頻題 + VO 第二輪的 Callback / Event 實作題,給出 Python 與 Java 完整程式碼、邊界踩坑,以及面試溝通話術。


PureStorage 面試整體節奏

輪次 形式 時長 內容
0. OA HackerRank / Codility 60 - 90 min 2 道字串 / 模擬題
1. Tech Phone Screen Buddy + O1set 共享文件 60 min 演算法實作 + follow up
2. VO Round 1 視訊會議 60 min 小型框架實作(如 Callback / Event)
3. VO Round 2 視訊會議 60 min 系統設計 + 資源生命週期問題
4. Hiring Manager 視訊 / 現場 45 min 專案深挖 + 團隊 chemistry

整體特點:PureStorage 的面試官很看重**「邊界控制 + 重複觸發安全」**——這一點和它做儲存 / 快取基礎設施的屬性強相關。


OA 題 1:Bakery Quality Control(烘焙坊質檢)

題目

烘焙坊會依「模板」裝盒:每個盒子和對應模板都用字串表示,例如:

判錯規則

給定一批 (box, template) 對,傳回不符合數量的盒子數

input  = [("cm","mc"), ("ccm","mc"), ("pm","mc"), ("c","mc")]
output = 3

Python 解法

from collections import Counter

def count_bad_boxes(pairs):
    bad = 0
    for box, template in pairs:
        if Counter(box) != Counter(template):
            bad += 1
    return bad

時間複雜度:O(N × L),L 是字串平均長度 空間複雜度:O(L)

必處理的 3 個邊界

  1. 空字串 box:如果模板也是空,應當算正確(不計入 bad)
  2. 多字符上限:題面給出 box 內最多 10 個 item、最多 1000 個盒子——不需要做最佳化,樸素 Counter 就夠
  3. 模板裡出現重複字符(如 "mmc"):必須依數量匹配,不要去重

OA 題 2:子字串最大連續出現次數

題目

給一個短串 short_s 和一個長串 long_s(最長 1,000,000),求 short_slong_s連續出現的最大次數

short_s = "AB", long_s = "ABCABCABAB"
output  = 2   # 末尾 "ABAB" 連續 2 次

Python 解法

def max_consecutive_occurrence(short_s, long_s):
    if not short_s:
        return 0

    n = len(short_s)
    max_run = 0
    i = 0
    while i + n <= len(long_s):
        if long_s[i:i + n] == short_s:
            run = 0
            while i + n <= len(long_s) and long_s[i:i + n] == short_s:
                run += 1
                i += n  # 跳到下一段,強調「連續」
            max_run = max(max_run, run)
        else:
            i += 1
    return max_run

時間複雜度:O(N × M),N 為長串長度,M 為短串長度 空間複雜度:O(1)

易錯點

# 易錯點 正解
1 誤以為求總出現次數 題目要求是最長連續段,不是總次數
2 滑動 1 個字符而不是 M 個 命中後必須 i += M,不然 "ABAB" 會被算成 3 次
3 短串為空 直接 return 0,避免死迴圈
4 長串可以達到 10^6 樸素切片就夠;不需要 KMP(90 分鐘內來不及寫)

VO Round 2:實作 Callback / Event 機制

這道題是 PureStorage VO 的招牌題——表面是 OOP 設計,實際上考「重複觸發安全 + 註冊時機控制」。

題面

實作兩個類別:

Python 解法

class Callback:
    def execute(self):
        raise NotImplementedError


class Event:
    def __init__(self):
        self._callbacks = []
        self._fired = False

    def register_cb(self, cb):
        if self._fired:
            # 觸發後註冊無效,但不報錯,保持冪等
            return False
        self._callbacks.append(cb)
        return True

    def fire(self):
        if self._fired:
            return
        for cb in self._callbacks:
            cb.execute()
        self._fired = True

Java 解法(面試官更喜歡看的版本)

interface Callback {
    void execute();
}

class Event {
    private final List<Callback> callbacks = new ArrayList<>();
    private boolean fired = false;

    public boolean registerCb(Callback cb) {
        if (fired) return false;
        callbacks.add(cb);
        return true;
    }

    public void fire() {
        if (fired) return;
        for (Callback cb : callbacks) {
            cb.execute();
        }
        fired = true;
    }
}

面試官常見 follow-up

Follow-up 建議回答
如果 fire() 被併發呼叫怎麼辦? synchronized 包住 fire()registerCb(),或換 ReentrantLock
Callback 拋出例外怎麼辦? 在迴圈裡 try/catch 單個 callback,避免一個失敗拖垮整批;同時記錄失敗清單給上層
如何支援「事件只能被訂閱一次」? registerCb 裡維護一個 Set<Callback>,重複註冊回傳 false
怎麼支援 unregister? 把 list 換成 LinkedHashMap<Id, Callback>,依 id 刪除,保持插入順序

溝通話術(PureStorage 閱卷重點)

面試官真正在聽的是**「你怎麼用一段話講清楚邊界控制」**。推薦這樣開口:

"I'll model this as an Event class that maintains a list of Callback objects plus a fired flag. Two invariants matter: (1) once fired, no more registrations take effect, and (2) fire() is idempotent — repeated calls do nothing. I'll keep insertion order for the callback list so that fire() invokes them in registration order."

這段話說完,程式碼還沒寫,面試官就已經在心裡給你打高分了——因為它涵蓋了 PureStorage 閱卷最在乎的兩個不變量。


FAQ

Q1:PureStorage 面試一共幾輪? A:通常是 1 輪 OA + 1 輪 Tech Phone Screen + 2 輪 VO + 1 輪 Hiring Manager,共 5 關。OA 在第一週內安排,整個流程通常 4-6 週走完。

Q2:PureStorage OA 難度如何? A:兩道題都不算 hard 級,題型偏字串 / 模擬(如烘焙坊質檢、子字串連續出現)。但邊界 case 極嚴——重複字符、空串、單元素都會被打分,所以「寫得對」比「寫得快」更重要。

Q3:PureStorage VO 為什麼愛考 Callback / Event 這種「框架題」? A:因為它做儲存 / 快取底層基礎設施,回呼機制 + 長生命週期資源 + 重複觸發安全是日常工作。面試官想看你能否在不熟悉的業務 context 裡設計出乾淨的 OOP 邊界

Q4:必須用 Java 寫嗎? A:不必。Python / C++ 都可以,但寫 Java 時面試官能直接套用他們日常的 mental model(介面、不可變欄位、synchronized)。如果你 Java 熟,強烈建議用 Java。

Q5:PureStorage 給的 hiring bar 高嗎? A:中等偏高。比 FAANG L4 略鬆、比 quant 緊。最大的扣分項是「邊界沒說清」或者「程式碼能跑但不能解釋為什麼」,純演算法不強但表達清楚反而能過。

Q6:和 NetApp / Dell Storage 比有什麼不同? A:PureStorage 更年輕、更偏分散式系統抽象設計;NetApp / Dell 更偏傳統硬體 + driver 層。面試題取向上,PureStorage 高頻「小型框架實作」,NetApp 高頻「C / pointer 細節」。


正在準備 PureStorage OA / VO?

PureStorage 的面試看似溫和,實則在**「邊界控制 + 溝通清晰度」**兩個維度篩得很狠。如果你需要 1v1 OA 輔助 / OA 代面 / VO 輔助 / VO 代面,我們依 PureStorage 實際題型陪你過一遍:從 OA 字串題到 VO 框架實作題,再到 Hiring Manager 跟進話術,全流程覆蓋。

我們的方法不是替你寫程式碼——而是在你思考的同時給出結構清晰的口播 + 邊界提醒,讓你能在面試官面前自然地展示思路。這一點對 PureStorage 這種「聽溝通」的公司尤其關鍵。

立即加微信 Coding0201取得 PureStorage 完整題庫 + 1v1 備考方案


聯繫方式

Email: [email protected] Telegram: @OAVOProxy 微信: Coding0201