cswork / libraryOpen practice workspace

Articles

HackerRank 是什麼?求職者的練習、線上測驗與即時面試指南

HackerRank 是什麼?求職者指南區分公開練習、公司 Tests 與即時 Interviews,說明邀請期限、作答時間、輸入入口、自訂測試、隱藏案例與提交狀態。用原創版本紀錄程式檢查同分覆蓋、排序與回歸測試,再練習口頭解釋需求變更。依官方候選人文件確認操作與支援權責,不推定雇主題型、合格分數或工具許可。

HackerRank 是提供程式練習與技術招募工具的平台,但求職者遇到的入口不只一種。自行練習、公司邀請的 HackerRank Tests,以及與面試官共同工作的 HackerRank Interviews,目的、操作與結果意義都不同。先辨認入口,再決定要練題、檢查測驗規則,還是準備即時解釋程式。

這篇指南適合第一次收到邀請、或想知道 HackerRank 怎麼使用的讀者,不推定某家公司的題型或合格線。熟悉環境後,可用 Software Engineer Coding & Algorithms questions練習需求澄清、邊界測試與口頭說明。

HackerRank 的三種入口,不是同一場考試

官方 Algorithms 練習頁是公開練題入口;Tests 說明則介紹公司如何評估不同職務的技術能力,內容可以依職務包含程式、框架、演算法、選擇題或其他技術題。Interviews 文件介紹的是透過公司面試連結加入互動工作環境。

入口你在做什麼不能直接推論的結果
自行練習選題、實作、測試、檢討練習分數不等於公司的錄取判斷
公司 Tests依邀請與規則完成線上測驗使用同平台不代表相同題數或合格分數
公司 Interviews與面試官協作、實作並說明能執行程式不代表已獲得面試通過

你收到一個 HackerRank 連結,只能確認部分環境資訊,不能因此認定一定是演算法 OA。有些邀請可能是專案、資料分析或其他技術工作。也不要從同學的操作畫面推定自己的監考、AI 或外部資料規則;這些需要閱讀你自己的邀請與候選人指引。

第一次練題:先弄清楚程式的入口

開始時選一題你能理解需求的題目,不急著追求難度。先讀輸入範例、輸出範例與限制,再確認平台要求你補一個函式,還是自行讀取標準輸入並印出結果。函式題中的 return 與整支程式的輸出契約不能互換。

例如題目要你回傳整數陣列,你若在函式中只 print,螢幕出現答案也可能不符合呼叫端預期。反過來,要求標準輸出時,函式有正確回傳卻沒有輸出,也未完成題目。先保留預設入口程式,理解參數如何被傳入,不要隨手刪掉你尚未看懂的框架。

執行結果有幾層:程式是否成功編譯或啟動、是否讀到預期資料、是否產生正確結果、以及是否符合格式。遇到失敗時從最早一層排查。把時間限制錯誤全部當作演算法太慢,或把格式錯誤全部當作平台問題,會讓你練錯方向。

練習頁的最有價值產物是一份可重做的紀錄:你的初始理解、最短失敗輸入、修復原因、以及改變限制後是否仍然成立。看懂解答後先關掉它,再獨立重建思路。熟悉題目名稱與能寫出解法,是兩個不同階段。

自訂輸入不會替你建立正確的答案

自訂測試的用途是驗證你的假設,不是請系統替你判定所有需求。先自行算出預期結果,再比較輸出。只看到程式「沒有錯誤訊息」,只能證明本次執行沒有暴露某些問題,不能證明答案正確。

以下是原創練習,不是 HackerRank 或雇主原題:輸入多筆 (key, version, value),每個 key 保留最高版本;若最高版本相同,保留輸入中較後的一筆。最後按 key 排序回傳紀錄。key 為字串、version 為非負整數,value 在這個模型中也是字串。

def latest_records(rows):
    best = {}
    for key, version, value in rows:
        if not isinstance(key, str) or not isinstance(value, str):
            raise ValueError("key and value must be strings")
        if type(version) is not int or version < 0:
            raise ValueError("version must be a nonnegative integer")
        if key not in best or version >= best[key][0]:
            best[key] = (version, value)
    return [(key, *best[key]) for key in sorted(best)]

對 [("b",2,"old"),("a",1,"x"),("b",2,"new")] 再接上 ("b",1,"late"),預期是 [("a",1,"x"),("b",2,"new")]。late 雖然較晚輸入,但版本較低,不能覆蓋 new。如果只用 key 當字典索引、每次直接覆蓋,這個例子就會出錯。

若比較符號寫成 > 而不是 >=,最高版本同分時會錯誤保留 old。若忘了最後排序,插入順序可能讓 b 排在 a 之前。空輸入、單筆、重複 key、不同版本、同版本、負版本與布林版本各有不同檢查目的,不能用一個漂亮範例取代。

Sample tests、hidden cases 與提交要分開理解

Sample tests 是讓你理解題意與檢查基本行為的公開案例。Hidden cases 是未公開的評估案例,其用途和配置由題目與測驗決定。通過 sample 不代表通過完整契約,也不能由一個失敗編號反推出隱藏資料或公司的錄取標準。

對上面的練習,如果 sample 剛好只有不同 key,直接覆蓋與正確版本比較都能通過。這不是隱藏測試故意刁難,而是公開範例無法窮舉需求。更好的下一步是閱讀文字中的同分規則,自己建立兩筆相同最高版本的反例。

修改後重新執行先前失敗案例,也執行之前成功的案例。修復版本比較時可能意外改壞排序;修復輸入格式時可能改壞空輸入。回歸測試不是重跑最多的資料,而是確保不同契約分支仍成立。

提交前回到題目要求,確認目前語言、入口函式與回傳型別。移除污染正式輸出的除錯文字,檢查最後一次修改後的測試結果,再按照目前畫面提供的提交或完成操作確認狀態。不要把編輯器中有程式、Run 成功與測驗已完成當作同一件事,也不要假設各種題型的按鈕完全相同。

收到 Tests 邀請:開始前先確認時間與規則

官方 Tests 文件說明登入頁可查看測驗時長、指引與格式,也提供 Sample Test 熟悉環境。先做樣本練習,比用真正邀請試按計時按鈕更安全。本文沒有開始或提交任何公司的正式測驗,也不把文件描述當作實際測試過所有版本的結果。

把邀請的截止時間與開始後作答時間分開。假設邀請寫在某時區的星期五前完成,不能自動解讀成你所在地星期五午夜;若不清楚,向招募方確認。當畫面尚未說明計時規則時,不要為了「先看題」而按下可能正式開始的操作。

檢查允許語言與版本、參考資料、外部 IDE、AI 工具、攝影機或其他權限,以及是否需要專案環境。看到平台具備某功能,不代表公司允許你在這份測驗使用。若題目說明與邀請似乎衝突,先詢問,不靠網路上的通用攻略替自己授權。

考前 FAQ也區分了登入、邀請、到期與改期問題;改期由招募公司管理,不是在平台上自行重設。平台提供工具,公司決定自己測驗的內容與招募後續,兩者的權責不同。

Interviews:邊做邊解釋,而不是只交一個答案

HackerRank Interviews 是即時互動環境。官方候選人文件目前說明不同公司可能使用不同介面版本,加入前會檢查瀏覽器與設備,並展示候選人指引。你的準備重點因此包含連線、音訊和操作確認,也包含如何把決策說清楚。

面試開始後,先確認需求再寫程式。可用一段簡短表達:「我先確認同版本取較後紀錄,輸出按 key 排序;先做單次掃描保留目前最佳,最後排序不同 key。」這比不停朗讀每一行語法更有資訊,也讓對方有機會糾正契約。

如果面試官改成“同版本內容不同時回報衝突”,不要仍然用 >= 覆蓋。先指出輸出型別與錯誤行為需要修改,再選擇回傳衝突列表、拋出錯誤或其他約定。對方追問時看到的,是你能否建立新契約,不是你記不記得原先的十行程式。

即時環境允許執行時,用測試支持推理,不讓測試替代推理。如果暫時不能執行,就手動追蹤 b 的版本變化:2/old、2/new、最後的1/late被拒絕。說明每一步更新理由,也說明記憶體與 key 數量的關係,能讓對方檢查你的解法。

技術出錯時,留下能處理的事件資料

遇到連線或環境問題,先記錄時間、所在階段、錯誤訊息和已嘗試的操作。不要在正式測驗中反覆關閉分頁、切換設備或建立多份作答,除非指引或支援方明確要求。這些操作可能令狀態更難判讀,也不保證會暫停計時。

向招募方可以這樣描述:“我在當地時間 14:10 進入測驗,於執行階段收到連線錯誤;已依指引檢查網路,尚未確認提交成功。請協助確認目前狀態與是否需要重新安排。”這是溝通示例,並不承諾公司必然重測或保留成績。

分享截圖時只保留處理問題所需的資訊,避免傳播完整正式題目、邀請權杖或個人識別資料。也不要為了證明故障將機密測驗內容貼到公開社群。平台操作問題可以找候選人支援,內容、截止與招募決策仍應聯絡公司。

原創範例的複雜度與變更,應怎麼說明

版本紀錄範例處理 n 筆輸入、m 個不同 key。在一般雜湊表假設下,掃描為 O(n),最後排序為 O(m log m),額外儲存為 O(m),另有輸出列表。不能因為只有一個 for 迴圈就說整體 O(n),也不能忽略最後排序。這是演算法層級估算,不是平台的執行時間或記憶體合格線。

同版本取較後輸入,是這個練習刻意選定的規則。如果記錄來自不同機器,「較後到達」不一定等於「較新產生」;來源時間也可能受到時鐘誤差影響。正式需求若需要跨來源一致性,應另外定義版本、衝突與重送,而不是從這段簡單程式推出分散式排序保證。

把需求改為「保留每個 key 的所有最高版本紀錄」,字典的值就不能只是一個 value。同分時追加、較高版本時清掉舊列表;輸出中多筆內容的順序也要說明。這個追問適合即時面試,因為它檢查你會不會先修改契約,再調整資料結構。

驗證方式可以和實作不同。對小型輸入,先列出每個 key 的記錄,找出最高版本,再在那些記錄中找最後出現的位置,最後排序 key。這個做法比較慢,卻能當作獨立的預期值來源。若測試程式與正式實作完全複製同一個比較錯誤,兩者一致也不能證明正確。

邀請上的幾個狀態,不能只看一個時間

以下是虛構邀請核對例,不是 HackerRank 的固定介面。邀請可能寫「請於週五前完成」,進入前說明又顯示「開始後有指定作答時間」。前者是有效期限,後者是一次作答的時間預算;你需要確認兩者及其時區,而不是只把其中一個放進行事曆。

若邀請已到期,先聯絡發出邀請的公司,不自行用另一個帳號試圖取得新測驗。若看到已完成,卻不確定最後修改是否提交,保留畫面的狀態與發生時間,請公司或支援方確認。不要為了重現情況重新開始另一場正式測驗,因為新操作可能改變需要查核的狀態。

正式作答前也先確認裝置與權限。需要設備檢查時,按照目前指引完成;若無法開啟要求的裝置,提早詢問可接受的安排。本文不建議停用安全設定或繞過監考,也不將其他人不需要攝影機的經驗當成自己的許可。

練習紀錄可以很短,但要能指出下一步

一次練習後,留下題目契約、最早失敗點、修正與一個變體即可。假設你寫對版本比較,卻忘了排序,紀錄應寫「輸出順序契約遺漏」,下一次先檢查順序;不必把整個錯誤都歸為「不熟 Python」。若你在理解之前就開始改入口程式,下次先畫出呼叫與回傳的關係。

找搭檔時,可以請對方只查看需求與你的輸出,不先讀答案。他若無法算出同版本時應保留哪筆,你們就要回到文字契約;若預期清楚而程式不同,才進入除錯。這樣能區分題意理解、實作和平台操作三種問題,避免把所有失敗都用多刷題處理。

到正式測驗時,不需要搬入整份練習筆記或外部答案。帶走的是建立契約、手算預期、檢查提交狀態的習慣;實際可使用的資料與工具仍以你的邀請為準。

若你重做時仍犯同一個錯誤,記錄這次是在需求、資料結構還是提交階段發生。第一次忘了排序,第二次知道要排序卻印錯格式,修正方向就已不同。把錯誤分類保留下來,才能判斷下一次需要練推理、語言入口或操作檢查,而不是只累加成功題數。

用五道題補上介面熟悉之後的能力

下面是一般軟體工程練習,不宣稱這些紀錄屬於你的 HackerRank 邀請或同一雇主。題目名稱保留英文,方便你對照公開題庫。

完整題目練習方向應留下的驗證
Check Whether Two Ordered Sequences Can Be Merged把文字限制轉成狀態重複元素與順序的反例
Search a Rotated Sorted Array in One Binary-Search Pass不變量與邊界一個元素、未旋轉與找不到目標
Implement a FIFO Queue Using Two Stacks操作序列的正確性交錯加入與取出的追蹤
Check an Interval Against Existing Intervals for Conflicts明確區間契約端點相接是否衝突
Find the Production Bugs in a Dictionary Cache Around an Expensive Computation閱讀與修復程式每個缺陷的最短復現

下一步取決於你目前的入口

HackerRank 是什麼,對求職者最實用的答案是:一個平台,數種不同工作情境。只是開始練習,就先完成一題並重做反例;收到 Tests,就先核對邀請與 Sample Test;準備 Interviews,就把實作過程說給另一個人聽。

熟悉按鈕之後,從 Software Engineer Coding & Algorithms questions選一題,先寫契約與預期結果,再實作與測試。最後改變一項規則,確認自己能重新推導,而不只是重現第一次成功輸出。

資料來源與延伸閱讀

核查日期:2026 年 10 月 6 日。介面與規則可依公司、題型與版本不同;本篇沒有參加正式測驗。版本紀錄範例是原創練習,不是隱藏測試或雇主題目。