这是一道 Stripe 面试中偏业务规则和数据处理的题目。算法本身不复杂,重点是能不能准确理解需求,并把不断增加的规则写得清楚、容易扩展。
英文原题
Part 1
Parse each CSV row, trim whitespace, and mark a business VERIFIED only when all six KYC fields are present and non-empty; exclude rows without a business name.
Part 2
Also require the full statement descriptor to be 5–31 characters and not match any blocked descriptor; otherwise mark the business NOT VERIFIED.
中文简述
题目会给你一批 CSV 格式的商户数据,需要根据 KYC 信息判断商户是否通过验证。
Part 1 中,需要先正确解析 CSV,并对字段做 trim。没有 business name 的记录直接排除,不出现在最终结果里。对于剩下的商户,只有规定的 6 个 KYC 字段全部存在,并且去掉首尾空格后都不为空,才能标记为 VERIFIED,否则就是 NOT VERIFIED。
Part 2 在这个基础上又增加了 statement descriptor 的校验。完整 descriptor 的长度必须在 5 到 31 个字符之间,同时不能出现在 blocked descriptor 列表中。只要其中一个条件不满足,商户就不能通过验证。
解题思路
这道题最重要的是不要把所有逻辑都塞进一个很长的判断里。
可以先把 CSV parsing、KYC validation 和 descriptor validation 分开。读取一行后先统一 trim,然后判断 business name 是否存在。如果没有,直接跳过。
KYC 部分可以理解成:
kycValid =
all six required fields exist
&& all six fields are non-empty after trim到了 Part 2,再增加:
descriptorValid =
length >= 5
&& length <= 31
&& descriptor is not blocked最终判断就是:
VERIFIED = kycValid && descriptorValid这样写的好处是,面试官后面继续追加规则时,不需要把整个流程推翻重写。
容易踩坑的地方
比较常见的问题是只判断字段是不是 null,但忽略了 " " 这种只有空格的字符串,所以 trim 应该放在校验之前。
另一个细节是,business name 缺失和 KYC 缺失的处理并不一样。KYC 不完整是 NOT VERIFIED,而 business name 不存在则是直接 exclude。
CSV 本身也要小心。如果字段中可能出现类似:
"Stripe, Inc."这种带逗号的内容,就不能简单使用 split(","),而应该使用正规的 CSV parser。
blocked descriptor 如果数量比较多,可以提前放进 Set,这样查找会更直接。
面试官关注点
这题其实不是在考复杂算法,而是在看你能不能把业务规则翻译成稳定的代码。
Part 1 和 Part 2 是典型的渐进式 requirement。第一版代码如果结构过于耦合,第二部分一加规则就会变得很难维护。相反,如果一开始就把不同 validation 拆开,后续扩展会非常自然。
整体时间复杂度基本是 O(n),其中 n 是 CSV 记录数量。
这类题很符合 Stripe 的面试风格:题面并不难,但会通过不断追加业务约束,观察候选人对需求、边界条件和代码可维护性的处理。
csoahelp 提供海外科技公司实时文本面试辅助和 Mock Interview 服务,覆盖 Stripe、Google、Amazon、TikTok 等公司的 Coding、System Design 和 Behavioral 面试。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

