最近很多小伙伴在冲 IBM 的校招,普遍都会遇到一轮 OA 。作为一家传统 IT 巨头, IBM OA 并没有走极限算法难题的路线,而是更偏向于结合逻辑推理、编程实战和情景题,整体难度属于中等偏上。相比起只考纯算法的公司,IBM 的 OA 更看重候选人的综合素质,比如问题拆解能力、逻辑思维、代码可读性,以及在业务场景下的应用能力。
这一轮 OA 基本上是所有候选人的必经之路,表现好坏直接决定能不能进面,所以这部分的准备非常关键。
IBM OA 流程概览
IBM OA 一般在申请后一到两周左右触发,通过第三方测评平台进行,形式和题型大致如下:
- Coding 部分: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 或者其他大厂的笔试/面试,不妨来了解一下我们的服务,少走弯路,效率会高很多。