Pinterest VO | Big Head Pins Interviews | Pinterest Onsite Interview Record|General Backend|Experience Summary

Pinterest VO | Big Head Pins Interviews | Pinterest Onsite Interview Record|General Backend|Experience Summary

this Pinterest VO 是我最近经历里数一数二密集的,整体五轮,覆盖算法、系统设计、BQ 全部维度。
一开始我信心满满,觉得系统设计自己也准备得挺多了,结果真的上场之后才知道,Pinterest 的 follow-up 是属于那种一步步挖到底的风格,根本不给你“绕过去”的机会。下面来分享一下面试的细节。

Pinterest 面试流程

Pinterest 的面试流程整体节奏偏快,从 recruiter reach out 到正式 VO 一般在 2~3 周内完成。

point 内容描述 length of time 重点考察点
Resume Screening 内推 or 官网投递,经 recruiter 初步筛选 - 背景匹配度、项目经验、跳槽动机等
Recruiter Call 招聘 HR 电话初聊,介绍岗位、确认意向,部分情况会有简短行为面试 30 分钟左右 沟通表达、求职动机、文化契合度
OA(视岗位而定) 部分岗位可能要求做在线笔试(如 DS、ML) 60~90 分钟 编码能力、算法基础
VO(Virtual Onsite) 一般包含 4~5 轮:Coding、System Design、BQ、可能加一轮架构讨论 每轮 45 分钟 综合评估技术深度、系统设计、协作沟通等

第一轮 Coding:镜子反射路径问题

这一题面试官一上来就直接发了题,说白了就是给一个二维 grid,里面每个格子要么是 /,\\、要么是空的,你从某个起点、方向进入,要模拟光线反射的轨迹,看能不能走到目标点。

思路其实不复杂,但陷阱特别多。
我最开始写得太粗暴,反射方向用 if 写了一大堆逻辑,结果边界判断漏了,方向更新也写错了,跑了样例直接 infinite loop。
幸好我这边 ProgramHelp 实时语音提醒了:先抽象方向为 (dx, dy),然后用一个映射表去写镜子反射的变化,这个思路一下就清晰了,改完之后一下就过了样例。
而且他们还提醒我这个题容易在 visited 记录上出错,不只是位置坐标,还要带方向信息,不然你可能来回转圈都发现不了 bug。

第二轮 Coding:TopK 广告统计 + 滑窗版本

这轮是属于那种一开始看起来很简单,越写越细思极恐的题目。
给一堆 (timestamp, adId),你要返回出现频率最高的前 K 个广告,follow-up 是 sliding window 场景下的 topK。

我最开始就用了 hash + heap 的方法,结果面试官直接 challenge:
“如果有上亿条记录、滑窗只保留 1 分钟内的事件,你的数据结构怎么更新?性能够吗?”
我当时愣了,heap 的 lazy remove 来不及处理这么频繁的数据变动。

ProgramHelp 的语音提醒直接来了个点睛:可以用 bucket + counter map,timestamp 向下对齐到时间片段(比如每 10 秒一组),然后用多个桶滑动清理过期数据。这一改整个逻辑就顺了,我连带空间复杂度也解释得很到位,面试官也满意地点头说:“That’s a nice trick.”

第三轮 SD:用户点击事件和广告事件的聚合系统

这一轮题干超级长,一上来面试官丢了一大堆字段,让我设计一个 event aggregation 系统,目标是输出 “adId -> region -> click/view 次数”。

刚开始我以为是那种标准流处理题,直接上了 flink + window join,但被面试官挑战了:“你这个 join 有没有办法简化?数据是不是一定得实时 join?”
我直接卡了,陷入“我要不要分流”的思想旋涡里。
ProgramHelp 提示说:这里的核心不是 join,而是借助 Redis 构建一个中间 servingId -> adId + region 的映射关系,把复杂逻辑提前缓解,后台做 lazy join。
我一听立马换了个方向,后续设计得就非常自然,尤其是 Redis key/value 的结构在提醒下也做了优化,避免了数据冗余。

第四轮 SD:商品 catalog 上传系统

这题说实话差点把我劝退。
场景是:商户上传商品 catalog,一次可能会有 50 万个 item,要设计后端处理系统,要求稳定、可扩展。

我第一反应是 chunk 分批上传,结果面试官直接怼回来:
“我们不控制 client,我们 server 要能接 50w 个 item 一次性过来。”

我一时语塞,只能说可能要用流式消费,异步落库,但讲不清楚架构稳定性。
ProgramHelp 后台马上提醒我:先确认读写比例,再决定是走 write 优化还是 read 优化架构。我重新澄清需求后,发现其实读远多于写。
于是换了个方向,设计成写入 buffer + 后台分批持久化 + 前端用 cache 减少高频读取,再加一个写入任务队列保证吞吐,整个系统设计逻辑一下就清晰了。

这轮算是从崩盘边缘救回来…

第五轮 BQ:Leadership、Conflict、Project Ownership

这轮 BQ 我倒是准备得比较充分,因为 ProgramHelp 给了我一份 behavior 模拟题库,还提前用语音 mock 过几遍。
问的都是经典题型,比如:

  • “Tell me about a time you disagreed with a teammate”
  • “When did you take initiative to lead something not in your scope”

我用 STAR 框架稳稳讲下来,每个例子里我都穿插了一些数据指标/影响范围,算是打动人了,面试官最后还夸我:very structured, and impact-focused.

总结:这次面试给我最大的感触

Pinterest 的面试风格偏挑战型,尤其系统设计这两轮,一定不要怕被 challenge,而是要“clarify + reposition”,要表现出你能从 feedback 中快速调整。

而我这次最大的加分项,其实就是 ProgramHelp 的VO助攻:

coding 卡死的时候能提醒你“这里其实可以用方向 map”

design 卡偏方向时会立马建议你“clarify 需求再出图”

就连 BQ 也提前帮我提炼了几个模板和案例,讲起来特别顺

没有这个服务我大概率至少挂一轮。现在等 hr 回音,但 overall 感觉还挺稳。

author avatar
azn7u2@gmail.com
END
 0
Comment(没有评论)