最近很多小夥伴在沖 IBM 的校招,普遍都會遇到一輪 OA 。 作為一家傳統 IT 巨頭, IBM OA 並沒有走極限演算法難題的路線,而是更偏向於結合邏輯推理、程式設計實戰和情景題,整體難度屬於中等偏上。 相比起只考純演算法的公司,IBM 的 OA 更看重候選人的綜合素質,比如問題拆解能力、邏輯思維、代碼可讀性,以及在業務場景下的應用能力。
這一輪 OA 基本上是所有候選人的必經之路,表現好壞直接決定能不能進面,所以這部分的準備非常關鍵。
IBM OA 流程概覽
IBM OA 一般在申請后一到兩周左右觸發,通過第三方測評平台進行,形式和題型大致如下:
- 編碼部分:2 道程式設計題,時長 60 分鐘。 題目難度在 LeetCode Easy ~ Medium 之間,但經常帶點業務場景的包裝。
- 邏輯 & 數學題:10 道左右,考察數位推理、邏輯規律識別,類似 GMAT 風格。
- 情景判斷(SJT):給出工作場景,讓你選擇最合適和最不合適的做法,考察的是候選人是否符合 IBM 的價值觀和團隊合作精神。
- 時間分配:總時長大概在 90 分鐘—100 分鐘之間。
OA 真題回憶 + 題解
Question 1:
Problem:
You are given an array of integers. Find the length of the longest contiguous subarray where the sum is divisible by k.
Solution Approach:
- Use prefix sum + hashmap to store remainders.
- If the same remainder occurs again, the subarray between these indices is divisible by
k. - Update the maximum length accordingly.
Code (Python):
def longestSubarrayDivByK(nums, k):
remainder_map = {0: -1}
prefix_sum = 0
max_len = 0
for i, num in enumerate(nums):
prefix_sum += num
remainder = prefix_sum % k
if remainder in remainder_map:
max_len = max(max_len, i - remainder_map[remainder])
else:
remainder_map[remainder] = i
return max_len
Question 2:
Problem:
Given a string, check whether it can be rearranged to form a palindrome.
Solution Approach:
- Count the frequency of each character.
- A string can form a palindrome if at most one character has an odd frequency.
Code (Python):
from collections import Counter
def canFormPalindrome(s):
freq = Counter(s)
odd_count = sum(1 for count in freq.values() if count % 2 != 0)
return odd_count <= 1
注意事項
- 程式設計題重在思路清晰:IBM 並不一定要求你寫出最優解,但代碼風格和解釋思路非常重要。
- 邏輯題時間要把握:很多人容易在數列推理上卡太久,其實做不出來也要及時跳過。
- 情景判斷題要符合企業文化:IBM 注重合作、溝通和責任心,盡量避免選擇“單打獨鬥”或“推卸責任”的選項。
- 模擬環境:考試介面比較簡潔,沒有花哨的 IDE 功能,建議提前在 LeetCode、HackerRank 等平臺練習適應。
你和 offer 的距離,只差一個助攻
整體下來,IBM 的 OA 其實並不算特別刁鑽,但題量和時間壓力會讓人很容易卡殼。 尤其是 coding 部分,很多同學可能思路有了,但 debug 不及時就容易掉分。 這裡真的要推薦一下 Programhelp 的 OA 遠端助攻,我們團隊提供的服務就是無痕語音提醒、連線助攻,讓你在卡點時有人及時點醒,不至於浪費寶貴的時間。 很多學員靠著這種即刻提醒,直接拿下 OA 甚至後續 VO。
如果你最近也在準備 IBM 或者其他大廠的筆試/面試,不妨來瞭解一下我們的服務,少走彎路,效率會高很多。