Stripe 面试真题:设计一个反欺诈规则引擎,从字符串匹配到布尔逻辑– VO help – 转码 – 代面试 – 一亩三分地 – 大厂面经 -面试 面经

在 Stripe 的一道真实技术面试题中,候选人需要实现一个简化版的反欺诈规则引擎(Fraud Rule Engine)。

题目分为两个部分,从最基础的字符串条件匹配,逐步扩展到布尔变量以及 AND、OR 逻辑组合。整体代码量不一定很大,但对规则优先级、逻辑判断和代码扩展性都有一定要求。

面试题目(英文原题)

Part 1 — String equality rules

Implement should_accept_transaction(transaction, rules) for a fraud-rule engine.

Each transaction has string fields, such as merchant_name and card_brand.

Each ordered rule is either ACCEPT or BLOCK.

A rule has one equality condition, such as:

(:merchant_name: = "Not A Fraudster")

Apply rules in order; the first matching rule decides the result.

If no rule matches, accept the transaction by default.

Part 2 — Boolean, AND, and OR rules

Extend the same fraud-rule engine to support Boolean transaction fields.

A rule condition may be one Boolean variable, such as:

(:known_stolen_card:)

It may combine two Boolean variables with AND or OR, such as:

(:large_amount: AND :from_different_country:)

Keep all Part 1 string-equality behavior working.

Rules are still evaluated in order, and no matching rule means accept.

题目中文说明

本题要求实现一个函数 should_accept_transaction(transaction, rules),根据交易信息和预先定义的规则,决定是否接受一笔交易。

第一部分:字符串匹配

每笔交易包含商户名称、银行卡品牌等字符串字段。系统接收一组有顺序的规则,每条规则都包含一个匹配条件,以及 ACCEPT(接受)或 BLOCK(拦截)操作。

例如,当商户名称等于 "Not A Fraudster" 时,执行对应的 ACCEPT 或 BLOCK 操作。

规则必须按照顺序执行,第一条匹配成功的规则直接决定最终结果。如果没有任何规则匹配,则默认接受交易。

第二部分:布尔逻辑扩展

在第一部分的基础上,进一步支持布尔字段,例如:

  • known_stolen_card:是否为已知盗刷卡。
  • large_amount:是否为大额交易。
  • from_different_country:是否来自其他国家。

除了判断单个布尔字段,还需要支持 AND 和 OR 条件。

例如,交易金额较大,并且来自其他国家时,可以触发一条拦截规则。

扩展过程中,原有的字符串匹配规则必须继续正常工作。

解题思路与面试关注点

这道题看起来像一个简单的条件判断问题,但关键并不在于写多少个 if,而在于如何组织规则的解析与执行。

第一部分可以直接遍历规则,判断指定字段是否等于目标字符串,匹配后立即返回该规则对应的结果。

第二部分需要增加对条件类型的识别。字符串相等、单个布尔变量以及 AND、OR 表达式虽然判断方式不同,但都可以统一抽象成返回 true 或 false 的条件求值过程。

这样主流程不需要随着规则类型增加而不断修改,只需要负责按顺序执行规则。

这里有几个值得关注的细节:

首先是规则顺序。 即使后面还有其他规则能够匹配,也不能覆盖第一条匹配规则的结果。

其次是默认行为。 没有匹配规则时,系统应该返回 ACCEPT,而不是 BLOCK。

最后是向后兼容。 第二部分增加布尔逻辑后,第一部分的字符串相等判断仍然必须正确执行。

需要注意的是,题目只要求支持给定的单个布尔变量以及两个布尔变量之间的 AND、OR,并没有明确要求实现任意嵌套表达式,因此不必一开始就设计完整的表达式解析器。

总结

Stripe 这道题的特点是从简单功能开始,逐步增加新的规则类型,考察候选人能否在保留已有功能的基础上扩展程序。

对于熟悉 Java 或 Python 的候选人来说,实现基础判断并不复杂。更值得准备的是如何让规则匹配、条件计算和最终决策保持清晰的职责划分。

类似的渐进式题目也很适合通过 Mock Interview 练习。csoahelp 提供北美技术面试 Mock 及实时文本辅助服务,帮助候选人熟悉真实面试中的题目扩展、思路表达和现场编码节奏。

我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

Leave a Reply

Your email address will not be published. Required fields are marked *