HackerRank 面試:兩種關卡,兩套相反的打法

· 12 分鐘閱讀

HackerRank 不是一種面試形式,而是兩種,而且它們獎勵的行為幾乎相反。一種由機器依隱藏測資計分,沒有人在看。另一種由人打分數,而他最在意的是你能不能把自己講清楚。照錯的那一種準備,丟掉的分數跟你的能力完全無關。

先搞清楚你收到的是哪一種

看邀請信。附時長、並給你幾天時間自行開始的 Test / Assessment 連結,是自動化的那一種:你獨自對著計時器寫程式,送出後跑測資,沒有人在場。約在特定時間、附行事曆邀請的 CodePair 連結,是即時的那一種:共用編輯器,面試官在通話裡,時長看面試官約了多久,HackerRank 沒有統一標準。HackerRank 說明中心現在把這個產品叫作 HackerRank Interview;CodePair 是舊名稱,很多邀請信裡還在用。

如果信寫得很模糊,直接問 HR。這是完全正常的問題,而答案會改變你該怎麼準備。

自動測驗到底怎麼計分

你的分數是通過的隱藏測資比例,通常依題目加權。這帶來幾個不太明顯的結果:

  • 部分分數是真的。一個暴力解,小資料過、大資料逾時,還是有分數。什麼都不送出,才是零分。永遠先交出一個能跑的版本,再去最佳化。
  • 分數丟在隱藏測資上。空輸入、只有一個元素、所有元素都一樣、負數、大輸入下的整數溢位。大部分失分住在這裡,不在演算法裡。
  • 讀輸入的那段也算分。平台給的讀 stdin 範本,不一定涵蓋你的邊界情況,而在那裡當掉,和演算法寫錯拿到的分數一樣。
  • 計時從你開始測驗那一刻算起,不是從收到信開始;HackerRank 說明計時器不會因為技術問題暫停。準備好要開始工作時再開始,不要「先瞄一眼」。

一個實用的順序:先把所有題目讀一遍,從最有把握的那題開始,讓它先通過,再往下走。回頭最佳化很便宜;時間用完而三題都寫一半,就不是了。

CodePair 考的是另一回事

在即時那一關,通過多少測資的比重,比大多數人以為的低很多。面試官在填的是一張關於解決問題、溝通,以及你怎麼接住提示的評分表。一個安靜地寫出乾淨 O(n log n) 的人,分數常常低於一個把比較慢的解法講出來、自己發現它的弱點、並當著鏡頭改好的人。

所以策略是反過來的:複述題目、動手前先講思路、邊寫邊講、卡住時講出你卡在哪裡。沉默是這種形式裡最昂貴的習慣,因為面試官只能替傳到他那裡的東西打分數。

那個編輯器不是你的 IDE

HackerRank 的編輯器刻意做得很陽春。看設定而定,你可能沒有像樣的自動完成、沒有語言服務、沒有 import 提示,也沒有除錯器——只有執行和 print。平常很依賴 IDE 的人在這裡會很難受:那些平常靠自動完成補上、記得半準不準的標準函式庫簽名,突然變成實實在在的成本。

兩個便宜的防禦。一是在這一關之前,用純文字編輯器寫幾題,讓「沒有自動完成」不再是意外。二是把你那個語言的核心集合 API 背熟——幾乎每一題都會用到的 map、set、帶比較器的排序、字串切割。

為什麼範例過了,隱藏測資卻沒過

題目裡的範例是用來告訴你輸入格式的,它不是一套測試集,通過它幾乎預測不了什麼。隱藏測資是由一個專門去找「看起來合理的解法會在哪裡壞掉」的人寫的,而那通常就是同一份短清單:空輸入、單一元素、所有元素相同、已經排序好的輸入、限制允許的最大規模,以及整數範圍邊緣的值。

把限制條件當成隱藏測資的規格書來讀,而不是背景資訊。如果題目說陣列最多 10⁵ 個元素、數值最大 10⁹,它其實在告訴你兩件事:平方複雜度會逾時,而且把它們加總會超出 32 位元整數。兩件都是故意的。

每次送出之前,自己用那六種輸入跑一遍程式碼。兩分鐘,比任何最佳化都更能救回分數。

選哪個語言,會改變逾時這件事

HackerRank 的執行環境頁面列出依語言區分的預設時間限制:C 和 C++ 2 秒、Java 4 秒、Python 3 和 Ruby 10 秒。直譯式語言本來就多給了時間,但這個倍數不一定抵得掉差距——同一個正確的演算法,在 C++ 或 Java 能過,在 Python 還是可能純粹因為常數因子而逾時。

如果你寫 Python,有兩個習慣很划算:用 sys.stdin 讀輸入,而不是在迴圈裡 input();以及優先用標準函式庫而不是自己寫迴圈,因為函式庫跑在 C 裡。如果你看到很緊的時間限制配上很大的輸入上限,那就是在提示你——只要你寫得順,就換比較快的語言。一個能過的 C++ 解法,勝過一個在 80% 測資上逾時的優雅 Python 解法。

HR 實際收到的是什麼

測驗結束後,公司看到的是一份報告,不只是一個分數:每題的得分、哪些測資通過、你花了多久,以及包含早期嘗試在內的送出紀錄。複製貼上紀錄和離開分頁紀錄是內建功能,預設開啟;報告裡也有程式碼回放。如果公司加購了付費的 Proctor Mode,還會有附定期截圖的過程回放、鏡頭偵測,以及一個整體誠信評等。

由此有兩個推論。第一,你早早送出、後來又改好的那個暴力解,在報告裡呈現的是「進展」,不是「失敗」,所以盡早送出一個能跑的版本毫無代價,還能保證你不會時間用完什麼都沒有。第二,往一個空白編輯器裡一次貼上一整份完整解法,和穩定的打字過程比起來,非常顯眼。

如果考壞了:能重考嗎,多久能再投

測驗連結通常只能用一次,除非公司重新寄邀請,否則沒有重考;重新邀請時,HackerRank 會刪掉你之前的報告。計時器不會因為技術問題暫停,所以如果真的發生了可以證明的故障,值得禮貌地寫信給 HR——HackerRank 允許公司替你加時或重新邀請。分數屬於各家公司,在一家考壞了不會跟著你到另一家。

很多公司在你再次應徵前設有冷卻期。時長是各公司自己的政策,不是 HackerRank 規定的,去看徵才頁或直接問 HR。不管怎樣,把這一次當成練習而不是判決,是比較健康的看法。

監考與比對抄襲,實話實說

HackerRank 的誠信功能是分層的。內建而且預設開啟的有:複製貼上紀錄、離開分頁紀錄,以及 MOSS 相似度比對——把你的程式碼和 HackerRank 資料庫裡的其他提交比較。在這之上,公司可以選擇 Secure Mode(強制全螢幕、禁止複製貼上、禁止多螢幕、切換分頁時警告),或付費的 Proctor Mode 和 Desktop App Mode,它們會加上鏡頭分析、定期截圖、AI 抄襲偵測,桌面應用程式模式還有作業系統層級的監控。開了哪一層由雇主決定,邀請信或測驗說明裡通常會寫。

實用的解讀很簡單:貼上大家都知道的題解,正是這些系統專門要抓的東西,而被標記通常代表在這家公司沒有轉圜餘地了。很快聽懂題目、或在術語上解開卡住的地方,和送出一份你自己都解釋不了的程式碼,是兩件完全不同的事——只有其中一件帶著那種風險。

當天的清單

  • 確認你收到的是哪種形式,以及時長。
  • CodePair 就用有線耳機和安靜的房間;兩種形式都需要穩定的網路。
  • 動手之前先把所有題目讀一遍。
  • 能跑勝過優雅——先交一個能過的,再改好它。
  • 每次送出前:空輸入、單一元素、重複元素、超大輸入。
  • CodePair 裡一直講話;自動測驗裡一直看時間。

資料來源

上面的事實內容已在 2026 年 10 月 14 日對照這些官方頁面查證過。平台規則會改,考試前請再確認一次。

FAQ

HackerRank 的 Test 和 CodePair 有什麼不同?

Test(或 Assessment)是自動化的那一關:你獨自對著計時器和隱藏測資寫程式,沒有人在看。CodePair 是即時面試:共用編輯器,面試官在通話裡,時長看約定的時間(這個產品現在叫 HackerRank Interview)。看邀請信就分得出來——附時長和好幾天期限的是自動測驗,約在特定時間的行事曆邀請是 CodePair。

HackerRank 有部分分數嗎?

有。每題的分數是通過的隱藏測資比例,所以一個小資料能過、大資料逾時的暴力解還是有分數。因此先交一個能跑的版本、再去最佳化,永遠是對的順序。

為什麼範例都過了,送出後分數卻很低?

題目裡的範例只是用來說明輸入格式,不是測試集。隱藏測資專門打邊界:空輸入、單一元素、全部相同、已經排序、最大規模,以及整數範圍邊緣。把限制條件當成隱藏測資的規格書來讀。

用 Python 會吃虧嗎?

有可能。HackerRank 的預設時間限制依語言區分——C 和 C++ 2 秒、Java 4 秒、Python 3 10 秒——Python 本來就多給了時間,但在限制很緊的題目上,同一個演算法還是可能在 C++ 能過、在 Python 因為常數因子逾時。寫 Python 時用 sys.stdin 讀輸入、多用標準函式庫;看到很緊的限制配上大輸入,就換比較快的語言。

應用程式在這裡怎麼幫忙

相關文章

接著讀