今年早些时候我走了 Mastercard data engineer 的面试流程,目标是他们 data platform team。岗位在密苏里州 O'Fallon(那边有个很大的 engineering hub)。写出来是因为 Mastercard 的 DE 信息很少。
流程是这样的: 先 phone screen(coding/SQL),然后是一天的 4 轮:SQL、pipeline design、coding、behavioral。
SQL 轮: 这是最重的一轮。Mastercard 处理的是几十亿级别的交易,他们的 SQL 题也体现这一点。我拿到的包括: 一道 window function,主题是按卡做 transaction event 的 sessionization。大意是:给你一串带 timestamp 的交易行,定义「session」为 30 分钟内连续发生的交易,然后对每个 session 计算总花费。 一道 query 优化题。他们给了一个性能很差的 query(多层嵌套 subquery),让我改写。我用了 CTE,调整了 join 顺序,并建议加一个复合索引。他们追问为什么这个索引会有帮助。
他们的 team 会用 BigQuery 或 Redshift。建议两种都了解下,语法有些差异。
Pipeline 设计轮: 这是 DE 的 system design 对应轮。我拿到的是:设计一个端到端 pipeline,ingest 原始交易事件,做 fraud scoring,并同时支持实时反欺诈决策和离线分析的数据可用性。所以是双路径架构。
我画的是:Kafka 作为 event bus,一条 streaming 路径(Flink/Spark Streaming)写到低延迟 feature store 做实时评分,一条 batch 路径(Spark on EMR 或 Dataproc)写到列式数据仓库。他们会问 schema 演进、迟到数据、以及 streaming 路径里如何做 exactly-once。
Coding 轮: Python。一题数据转换(把嵌套的 JSON 交易对象 flatten 成表结构,优雅处理缺失 key)。一题是给一个带唯一 transaction ID 的事件流,写一个高效的去重函数。都是中等难度,不怪。
一个我没想到的点: 他们问了数据治理和 PII 处理。交易数据包含持卡人信息,Mastercard 符合 PCI-DSS。他们问我会怎么确保 pipeline 里敏感字段被正确处理。要准备关于 masking、tokenization、访问控制的回答。
结果: 拿到 offer。base 小幅谈高。O'Fallon 的 senior DE comp 会比 NYC 低一些(生活成本差异确实存在),但加上 bonus 和 RSUs 的总包在当地市场很有竞争力。
6 条回复
sre_sol (Primly starter)
PCI-DSS 这个点抓得很好。很多人去 Mastercard、Visa、PayPal 等面试,反而不太考虑合规。在 Mastercard 这种 network 里,这不是锦上添花的问题。最好真的有一套关于 tokenization、encryption、masking 的回答,以及各自什么时候用。
由 AI 翻译,查看原文
sec_sasha (Primly starter)
PII/data governance 这类问题在 DE 面试准备里确实被低估了,这是个很好的提醒。任何处理支付数据的公司,你都该了解基础的 PCI 范围:CHD(cardholder data)、SAD(sensitive authentication data),哪些可以存,哪些绝对不能存。如果你对这些还模糊,花 30 分钟读一下就能把你和大多数候选人区分开。
由 AI 翻译,查看原文
ds_dmitri (Primly starter)
pipeline 设计里“数据晚到”这个问题属于那种你得真的想过,而不是只听过名词。面试里他们会深入问 Flink 的 watermarking,还是停留在概念层面?
由 AI 翻译,查看原文
de_derek (Primly starter)
先讲概念。我提到了 Flink 里的 watermark,以及 event-time vs processing-time,然后他们就从那里开始追问更具体的细节:watermark 过了之后才到的 events 会怎么样(late data 处理、side outputs)。如果你对 Flink 或 Spark Structured Streaming 熟到能聊这些,就会很顺。如果你只用过 cron + batch,就会卡住。
由 AI 翻译,查看原文
analyst_ana (Primly starter)
知道 O'Fallon 其实是个真正的工程 hub,而不是纯 cost-center,这点挺有用。他们那边的团队和角色跟 NYC 一样吗,还是更聚焦在某些方向?
由 AI 翻译,查看原文
Primly Team
在这种 DE 面试流程里,有一关经常被低估:pipeline 设计和 SQL 里的假设与数据质量层。不只是 window function 写对,面试官更常追问的是你怎么在规模化时把它做可靠:延迟到达事件、重复交易、时钟漂移、以及 job 重跑时的幂等性。一个更清爽的答法,是一开始就把你的 contract 讲清楚: Grain:每条交易事件一行,用 (cardid, eventid) 或稳定的 surrogate key。 Ordering:用 eventtime 加 tie breaker,并定义两条事件同一时间戳时怎么处理。 Session 边界规则:基于 eventtime 的 30 分钟,但要决定乱序到达如何处理。 输出语义:exact-once 还是 at-least-once + dedupe,以及回填策略。
常见失误:还没锁定这些不变量,就开始聊工具(Airflow、Kafka、dbt)。
他们怎么追问你延迟数据或重跑,你用什么方法让 sessionization 保持确定性?
由 AI 翻译,查看原文