StripeOAAlgorithmData Join

[Stripe] OA 真题解析

Stripe OA 真题分享

题目:Join Data Set

题目描述

在 Stripe 的支付系统中,需要将客户信息(Customer File)与支付处理器信息(Processor File)进行关联匹配。实现一个函数 joinDataSet(fieldName, customerFile, processorFile, skipUnmatched),将两个 CSV 格式的数据集按照指定字段进行连接(类似于 SQL 的 LEFT JOIN 或 INNER JOIN 操作)。

函数定义:

def joinDataSet(fieldName, customerFile, processorFile, skipUnmatched):

参数说明:

  • fieldName: 连接使用的字段名(如 customer_id),两个文件都包含此字段
  • customerFile: 客户数据文件,每行是一个 CSV 记录,第一行是表头
  • processorFile: 处理器/支付数据文件,每行是一个 CSV 记录,第一行是表头
  • skipUnmatched: 布尔值,True 表示跳过找不到匹配的记录,False 表示填充空值

输入输出格式:

  • 输入:两个 list,每个元素是一行 CSV 字符串(逗号分隔)
  • 第一行是表头(列名)
  • 输出:合并后的 CSV 数据,同样是 list 格式,第一行为合并后的表头

示例数据:

Customer File(客户表):

order,customer_id,first_name,last_name,address,city,state
1,1,John,Doe,1st street,New York, NY
2,2,Jane,Smith,2nd avenue,Los Angeles,CA
3,3,Peter,Jones,3rd street,Chicago,IL

Processor File(支付处理器表):

order,customer_id,cc_number,ccv,expiration,card_name
1,1,424242424242,123,02/2028,John Doe
1,2,1111222233334444,456,11/2026,Jane Smith
1,3,5555666677778888,789,05/2025,Peter Jones

期望输出:

order,customer_id,first_name,last_name,address,city,state,order,customer_id,cc_number,ccv,expiration,card_name
1,1,John,Doe,1st street,New York, NY,1,1,424242424242,123,02/2028,John Doe
2,2,Jane,Smith,2nd avenue,Los Angeles,CA,1,2,1111222233334444,456,11/2026,Jane Smith
3,3,Peter,Jones,3rd street,Chicago,IL,1,3,5555666677778888,789,05/2025,Peter Jones

关键要求:

  1. 结果表的表头是两个文件表头的拼接
  2. 每条记录按照 order 字段排序,数字类型的 order 值排在字符串类型之前
  3. 支持一对多连接:一个 customer 可以有多条 processor 记录(如多张信用卡)
  4. 当找不到匹配时,根据 skipUnmatched 参数决定是填充空值还是跳过

解题思路

  1. 解析表头:分别从两个文件中获取列名,找到连接字段和 order 字段的索引位置
  2. 解析数据行:将每行按逗号分割成列表
  3. 排序:按照 order 字段排序(数字在前,字符串在后)
  4. 建立映射:将 processor 数据按连接字段建立哈希映射
  5. 执行连接:遍历 customer 数据,在映射中查找匹配的 processor 记录
  6. 处理结果
    • 如果找到匹配:将 customer 和 processor 记录合并
    • 如果未找到且 skipUnmatched=false:添加空的 processor 字段
    • 如果未找到且 skipUnmatched=true:跳过该记录

关键点

  • 支持一对多连接:一个 customer 记录可以对应多条 processor 记录
  • 结果按 order 字段排序,数字排在字符串前面
  • 连接字段两侧的列名不同也能正确匹配

测试用例

根据题目描述,有以下4个测试场景:

  1. 基本连接(Case 1):所有 customer 都有对应的 processor,记录一一对应
  2. 部分缺失(Case 2):第三个 customer 没有对应的 processor,fill empty填充空值
  3. 一对多(Case 3):customer_id=1 对应两条 processor 记录(两条卡信息)
  4. 跳过不匹配(Case 4):设置 skipUnmatched=true,跳过无匹配的记录

总结

本题考察核心:

  • CSV 数据解析:字符串分割和处理
  • 哈希表映射:建立连接字段到记录的高效映射
  • 排序逻辑:自定义排序(数字优先字符串)
  • 连接操作:处理一对一、一对多、无匹配等多种边界情况

Stripe oa近期考题都差不多,有需要完整题目和全对代码的都可以联系~