MathWorks 的 OA 很多人不太了解,网上资料也比较少。做完之后把整个过程写出来,主要是备考方向这件事,有些地方跟我最初预期的不太一样。
OA 基本结构
HackerRank 平台,有两个方向可以选:
选项 A(推荐):2 道算法编程题 + 5 道数学选择题,时间约 60 分钟
选项 B:50 道 MATLAB 多选题
除非你 MATLAB 非常熟练,否则选 A。编程题的范围相对固定,数学题比 MATLAB 题库好准备得多。
另外要注意:Python 不可以用,只能选 C、C++、Java 或 JavaScript。这个细节没看清楚的话,进去之后会比较被动。
数学选择题
5 道题,难度不高,主要考察:
概率基础:给定事件 A 发生的概率,求它连续发生五次的概率。
P(A 连续发生 5 次) = P(A)^5排列顺序推理:给出"A 在 B 之前、B 在 D 之后"这类相对位置条件,推断谁排在第一或最后。这类题考逻辑推理,不是数学计算。
矩阵乘法有效性:判断 A×B 和 B×A 哪个可以做(矩阵维度匹配问题)。
表格推断题:给一张数据表和几个结论,判断哪些结论正确。
这部分真的不难,读清楚题目基本都能做对,不用专门备考。
编程题
真题一:非回文最小字典序
给一个回文字符串,恰好替换一个字符使其不是回文,要求结果字典序最小。如果无法做到,返回空字符串。
来源:Glassdoor MathWorks SDE 面试,多人确认。
cpp
#include <string> using namespace std; string breakPalindrome(string palindrome) { int n = palindrome.size(); if (n == 1) return ""; // 尝试把第一个非 'a' 的字符改成 'a' for (int i = 0; i < n / 2; i++) { if (palindrome[i] != 'a') { palindrome[i] = 'a'; return palindrome; } } // 如果全是 'a',把最后一个改成 'b' palindrome[n - 1] = 'b'; return palindrome; }踩坑点:
- 只改前半部分,因为改后半部分等价于改前半部分的镜像,不会得到更小的字典序
- 全是 'a' 的情况要单独处理,把最后一个改成 'b'
- 长度为 1 的字符串没有办法破坏回文性,返回空字符串
真题二:排列数量统计
给定数字 N,找出[1, 2, ..., N]的所有排列 A 中,满足"对每个 i,A[i] 能被 i 整除或 i 能被 A[i] 整除"的排列数量。
来源:Glassdoor MathWorks SDE,2022-2024 多次出现。
java
public class Solution { static int count = 0; public static int countPermutations(int n) { count = 0; int[] arr = new int[n + 1]; boolean[] used = new boolean[n + 1]; backtrack(arr, used, 1, n); return count; } static void backtrack(int[] arr, boolean[] used, int pos, int n) { if (pos > n) { count++; return; } for (int val = 1; val <= n; val++) { if (!used[val] && (val % pos == 0 || pos % val == 0)) { used[val] = true; arr[pos] = val; backtrack(arr, used, pos + 1, n); used[val] = false; } } } public static void main(String[] args) { System.out.println(countPermutations(4)); // 输出应为有效排列数 } }这道题 N 较小时回溯法可以过,如果 N 很大需要考虑 DP 或者数学优化。
OA 后续流程
OA 通过之后进入:
HireVue 录像面试(有些岗位有)→ 工程师技术面(60 分钟,简历深挖 + LeetCode medium-hard)→ Hiring Manager 行为面 → Offer
技术面这轮难度会比 OA 高,Glassdoor 上有人反映遇到了 medium-hard 难度的题,而且面试官不太互动,要自己主动解释思路。
几个实用建议
语言:提前确认自己熟悉 C++、Java 或 JavaScript 中的至少一种,Python 用不了这件事很多人进去才发现。
数学题:真的不难,不用花很多时间备考,把时间留给编程题。
编程题:回文相关的字符串题和排列/组合的 backtracking 题是高频方向,提前练一遍。
时间:60 分钟两道题加数学题,节奏紧但不算太压,先把数学题快速做完,时间全给编程题。
关于 Interview Aid
OA 前通过朋友推荐找了Interview Aid。
他们有 MathWorks 的 OA 题库,破坏回文那道题在他们那里练过类似的变体,全是 'a' 那个 edge case 是他们提前告诉我的。排列计数那道题他们指出了回溯法在大 N 情况下的时间复杂度问题,提醒我准备一个优化方向以防追问。
他们沉浸北美 IT 行业多年,已帮助万余名学生进入全球 500 强企业。导师来自一线大厂,对 MathWorks 这类工程导向公司的 OA 考点很熟悉。
OA 代写、OA 辅助、VO 助攻、代面试都有: