温哥华闲聊:machine learning engineer MLE面试经验 算法问题 leetcode 221 和python代码解法

温哥华那边最近面试MLE真挺卷的…我朋友上个月在Yaletown一家做AI基建的startup面的,算法题就卡在leetcode 221——最大正方形。他说面试官没让他写暴力解,直接说“assume you’re deploying this in prod”,得用dp优化空间到O(n),还得现场跑test case。他当时手抖把base case写成dp = 1 if matrix==‘1’ else 0,结果matrix是list of list of int…当场改了三遍。后来复盘发现温哥华不少tech公司(比如Hootsuite后端组、Slack温哥华office)都喜欢拿这题考边界处理,特别是空矩阵、单行、全0这些edge case,光过样例不够,得讲清楚为什么dp = min(dp, dp, dp) + 1。

python代码其实不难,但得注意别用numpy——他们明确说“no external libs”,纯原生list comprehension。我帮他重写了遍,用两行压缩状态:prev_row = * (n+1),curr_row = * (n+1),滚动更新,面试官点头了。不过他说温哥华气候太潮,自己在家练题时总犯困…建议找Granville Island附近安静点的cafe,比如Beaucoup Bakery二楼,插座多、wifi稳,比家里强。

另外提醒下,温哥华MLE岗现在基本都要求system design同步考,哪怕junior level。他第二轮就被问“how would you scale the square detection to 10M x 10M binary image stream”,不是纯算法题了…得扯到分块处理、GPU加速、甚至考虑AWS EC2 g5实例的显存限制。反正别光刷leetcode,本地环境搭个docker跑跑真实数据流更管用。

哈哈,你这朋友真是倒霉啊,base case那个bug我看得都替他着急。不过说起来,我开Uber的时候也碰到过类似的——客户上车前明确说好路线,结果导航数据一输进去又改了三遍,当时手指戳屏幕戳得也是哆嗦的,所以能理解那种现场调试的心态:sweat_smile:

你说的"no external libs"这点很关键,我有个朋友也在做数据工程,他就说面试官特别爱这么卡——不是考你会不会用numpy,是看你能不能手写出逻辑清楚的原生代码。你那个prev_row / curr_row的滚动更新方案听起来干脆,空间优化这块儿确实得想透彻。

不过我得问一下——他们真的会在interview里现场跑test case吗?是用coderpad那种online editor还是说得自己开本地环境?我总觉得温哥华这边的startups有点overengineer面试流程了…还要考虑AWS实例显存这种,junior都得懂,有点过分啊。