最近带了几位同学冲 IBM OA ,整体感受是:题目看着不花,但逻辑都很“IBM 味”——不难、但很注重信息处理能力与细节扎点。尤其是第一题的 log 处理,稍不小心就漏掉顺序问题;第二题属于典型 sliding window + set reasoning,熟悉数组结构的会更有优势。
IBM OA 流程简述
IBM 的 OA 整体风格偏稳:
- 总共两题,40–65 分钟区间(不同批次略有差异)
- 重逻辑、不卷代码量
- 高频考察 “数据处理 + 区间推理”
- 语言随便用(Java / Python / C++ 都可以)
整体写下来压力不算大,但很多同学会在第一题排序逻辑上翻车,这是最常见失分点。
Question 1 – Service Validity Logs
Problem Statement
You are given log records from a microservices platform. Each record includes:
- the service’s ID,
- the status (“UP” or “DOWN”), and
- the time (in seconds) when the status was recorded.
For each service, analyze its records in the order of their occurrence. A service is valid only if:
- The statuses strictly alternate between “DOWN” and “UP”.
- The first status is “DOWN”.
- The last status is “UP”.
Find how many services are invalid (do not meet these rules).
Example 1
Inputs:
serviceID = [“search”, “search”, “search”]
status = [“DOWN”, “UP”, “UP”]
timestamp = [2036, 784, 3648]
Output: 1
Explanation:
Timestamps in order:
“search” → (784, 2036, 3648) → status sequence is “UP” → “DOWN” → “UP” → starts with “UP” → invalid.
Example 2
Inputs:
serviceID = [“auth”, “billing”, “auth”, “billing”]
status = [“DOWN”, “UP”, “UP”, “DOWN”]
timestamp = [1020, 980, 2460, 1540]
思路解析
这一题两大陷阱:
陷阱 1:不要按输入顺序处理,必须按 timestamp 排序!
很多同学会漏掉这点,导致直接死。
陷阱 2:必须按 service ID 分组
也就是同一个 service 要单独看它的状态序列。
解题步骤
- 按 serviceID 归类
- 每组按 timestamp 升序排序
- 遍历状态序列:
- 第一个必须是 DOWN
- 必须严格交替:DOWN → UP → DOWN → UP
- 最后一个必须是 UP
- 不满足即计数
这题本质是 grouping + sorting + pattern checking。
Question 2 – Smallest Valid Subarray
Problem Statement
You are given an array arr of size n, which contains all the numbers from 1 to n exactly once.
A subarray is called ‘valid’ if, after selecting exactly k elements from it, we can rearrange them to form a set of k consecutive integers.
Implement a function that finds the size of the smallest valid subarray in arr.
Example:
arr = [10, 1, 6, 8, 7, 2, 5, 9, 3, 4]
k = 5
Subarray [6, 8, 7, 2, 5, 9] can form consecutive numbers (5–9), so answer = 6.
思路解析
先理解题意:
- 你要从 subarray 中选 k 个数
- 这 k 个数重排后必须是 连续整数
因此我们只关心:
subarray 中是否包含至少 k 个落在某个连续区间 [x, x+k-1] 里的数字?
既然 arr 中数字唯一,问题就变成:
➜ subarray 的最大值与最小值之差 ≥ k-1
且 subarray 里至少有 k 个数字落在这个区间
稳过解法(双指针 sliding window)
- 用双指针维护窗口
- 对每个窗口计算:
window_max - window_min + 1 >= k- 窗口内元素数量 ≥ k
- 当满足条件时更新最小长度
整体复杂度 O(n)。
面试中常见卡点
- 看到 log 就直接按输入顺序处理 → 第一道必翻车
- 忘记最后一条必须是 UP
- 第二题把“subarray 中要包含连续 k 个数”误以为“subarray 本身必须连续排序”
- sliding window 的边界反复调试浪费时间
IBM OA 不算难,但非常考察“读题能力 + 稳定度”。
Programhelp 学员现场体验
这次协助的学员是 CS 背景,但做题节奏偏慢,所以采用了我们常用的:
远程无痕联机 + 语音引导策略
- 第一题卡在 timestamp 排序,我们语音提示“先按服务分组再按时间排一下”。
- 第二题一开始想 brute force,我们当场提醒 “试试 sliding window,注意 max-min”。
- 全程无痕,不会触发平台检测(IBM 用的是自家平台 + 常见输入框,不会检测 ToDesk/远控)。
最终两题都一次性通过。
Programhelp · OA 无痕联机协助服务
如果你对 IBM OA、Amazon OA、Stripe OA 等在线测评不太有把握,我们提供专业的 OA 远程无痕联机协助:
- HackerRank / CodeSignal / Codility / Karat 全适配
- ToDesk / RustDesk 无痕控制,不触发任何检测
- 代码实时协作:你负责操作,我们负责逻辑提醒
- 不过测试用例 不收费
- 保证流畅稳过,不慌不乱
这一季已经帮上百位同学拿到 IBM / Meta / Amazon / Bloomberg / Citadel 等 OA 通过记录。