PureStorage 這家公司主打的就是“現代化數據體驗”,說白了就是幫工程師省心省力,企業在多雲環境下跑應用也能更順暢。 它們家的存儲和服務模式比較自動化,數據用起來更高效,運維成本也能降下來。 前陣子我們 PROGRAMHELP 剛剛幫一位同學走完了 PureStorage 的 OA 和 VO,過程挺有意思的,題目也有不少亮點。 這裡給大家分享一下這次的面經,方便後面要面試 PureStorage 的同學做參考。
PureStorage OA
1. Bakery Quality Control
這個程式設計題目要求你編寫一個程式來驗證麵包店生產的糕點盒子的內容是否符合預期的範本。 每個盒子的內容由一個字串表示,比如“pcm”表示盒子里有餅乾(cookie)、鬆餅(muffin)和派(pie)。 範本也是一個字串,表示預期的項目清單。
任務是將每個盒子的內容與對應的範本進行比對,檢查是否匹配。 如果不匹配,則視為有誤,並返回錯誤的盒子數量。
題目要求:
- 每個盒子最多包含 10 個專案,最多檢查 1000 個盒子。
- 盒子內的專案可以重複,因此“cc”(餅乾餅乾)與“c”(餅乾)是不同的。 而“cm”(餅乾鬆餅)與範本“mc”(鬆餅乾)匹配,因為順序不重要。
給定以下盒子和範本的配對:
- [“cm”, “mc”](正確,順序不重要)
- [“ccm”, “mc”](錯誤,盒子裡有太多餅乾)
- [“pm”, “mc”](錯誤,盒子里有派但沒有鬆餅)
- [“c”, “mc”](錯誤,缺少鬆餅)
根據這個清單,程式應該返回 3,因為 4 個盒子中有 3 個是不符合要求的。
2. Find Repetitions
題目描述:
給定一個短字串 short_s 和一個長字串 long_s,要求計算 short_s 在 long_s 中連續出現的最大次數。 如果 short_s 沒有在 long_s 中出現,返回 0。
輸入約束:
0 <= len(short_s) < 100 <= len(long_s) < 1,000,000
示例:
輸入:short_s = "AB", long_s = "ABBAC"
輸出:1 说明:"AB" 在 "ABBAC" 中出现一次。
輸入:short_s = "AB", long_s = "ABCABCABAB"
輸出:2 说明:"AB" 在 "ABCABCABAB" 中連續出現了兩次,分別在索引 0、3 和 8 處。
編寫一個程式,接收短字串和長字元串,計算並返回短字元串在長字串中最大連續重複次數。
PureStorage VO
First Round Interview:兩位面試官非預約的面試官,Buddy + O1set,用 C++準備,但是題目出的 python,題目和 follow-up 完成度略微有瑕疵,面試官滿意度中等。
Second Round Interview:首先上來複製一道題,實現一個 Callback 機制,有 Callback 類和 Event 類。 Callback 類里有 call() 方法。 Event 類裡面有兩個方法,一個是 register_cb(),一个是 fire()。
题目要求是实现 register_cb() 和 fire()。 找個數據結構把 callback 物件存進去,然後在某個時間點執行 fire()。 之後再執行 register_cb(),就不會放進數據結構了。
在他聽題目的同時,我們立刻在共用文檔中進行輔助提示,説明他理解題目資訊:
“我理解這個問題是要實現一個事件類 Event,支援使用者註冊回調函數,並在事件觸發時按順序依次執行它們。 重點在於:保持回調函數的註冊順序,同時避免事件被重複觸發。 ”
他幾乎逐字複述了那段話,面試官當場點頭認可。
接著完善思路提示:「我計劃創建一個 Callback 介面,其中包含一個 run() 方法; 在 Event 类中,我将维护一个 List 類型的成員變數,用於在 registerCallback 方法中添加回调。而在 eventFired 方法中,則遍曆該清單,依次調用每個回調的 run() 方法。”
編碼過程中,我們推送了完整的代碼結構提示:
interface Callback {
void execute();
}
class Event {
private List callbackList = new ArrayList();
private boolean isEventTriggered = false;
// 注册回调函数
void addCallback(Callback callback) {
if (isEventTriggered) {
System.out.println("Cannot register callback, event already triggered.");
return;
}
callbackList.add(callback);
}
// 触发事件,执行所有回调函数
void triggerEvent() {
if (isEventTriggered) {
System.out.println("Event has already been triggered.");
return;
}
for (Callback callback : callbackList) {
callback.execute();
}
isEventTriggered = true;
}
}
我們提示:事件觸發后,後續註冊不生效,需在 registerCallback 中判断。
面试官问:“如果 event 方法被調用兩次,如何避免重複執行? ”
我们答:“引入 boolean 标志 hasFired,首次觸發後置為 true,後續調用忽略並提示事件已觸發。 ”
候選人流暢複述,面試官評價:「這是非常合理的邊界控制。 ”
此輪完成度高,面試官滿意度高,聊滿 30 分鐘,本輪可放心。
面試總結
寫代碼只是面試的一部分,真正決定結果的是候選人在有限時間內能否清晰表達思路,並關注邊界與穩定性,這正是 PROGRAMHELP 的核心價值。
我們提供了五輪文字提示和兩段完整代碼框架,候選人自然複述或書寫即可高效順利地完成面試,關注細節,如避免回調函數重複調用、確保順序執行以及保持代碼結構整潔。
面試官評價:「思路清晰,代碼簡潔,考慮周到。 ”
候選人表示,此前因表達不清晰常被評價“溝通能力差”,這次能清晰呈現設計並獲認可:“若無你們説明,我可能會因語言組織問題卡殼,無法展示能力。 ”
這正是我們的價值:不是替你寫代碼,而是在關鍵時刻提供高效的語言組織和代碼結構,説明你抓住加分機會。
使用我們的服務,候選人可獲得清晰表述思路、結構化設計方法和應對追問的指導。 更重要的是,提供的代碼框架不僅是“答案”,而是“清晰高可讀”的範本,候選人只需理解並微調,即可順利完成,避免思維混亂。
此服務適合表達不流暢、邏輯易波動或壓力下易卡殼的人。 我們作為隱形輔助工具,讓你始終以最佳狀態呈現自己。
在 PROGRAMHELP 的説明下,這位候選人表現出色。 如果你也需要 PureStorage 面試輔助或代面服務,助力進入理想大廠,歡迎隨時 聯絡我們。
If you need more interview support or interview proxy practice, feel free to contact us. We offer comprehensive interview support services to help yousuccessfully land a job at your dream company.