CS-OA cs-vo Faang

Amazon 面试实战:设计购物车促销规则 – Mastering Amazon Interviews: Designing Shopping Cart Promotion RulesAmazon 面试实战:设计购物车促销规则 – 面试代面 – 面试辅助

这篇文章将为大家分享候选人在Amazon面试中的经历,尤其是如何解答一道涉及到购物车促销规则的编程题。希望通过详细的讲解和示例,能够帮助准备面试的你更好地理解和应对类似的题目。

面试场景

在这次面试中,面试官向我展示了一道题目,让我设计一个用于促销的功能。具体要求如下:


You're working at Amazon retail and you're in-charge of implementing a method/function to be used by the Promotions team to apply a discount to each individual item in the checkout cart. The function is used to find items that meets a certain promotion criteria.

There are currently two on-going promotions, the criteria for each promotion is as follows:

  1. Items in the cart that are a certain price (e.g. >$20).
  2. Items in the cart that belong to a certain product group. Product groups can be (Clothes, Hardware, Media, Toy, Food).

Given this information:

  1. Design the Cart and Item classes
  2. Create the method/function that will find the items for each of the use cases above

候选人:商品价格可以是浮点数吗?

面试官:是的,可以是浮点数。你能举几个可能的促销标准的例子吗?

候选人:比如,价格在某个范围内的商品,属于某一特定产品类型的商品,或者名称中包含某个关键词的商品。

面试官:好的,那你可以开始设计你的解决方案了。

设计思路

为了实现上述要求,候选人决定分几步来进行设计和实现:

  1. 定义商品类型的枚举类(ProductGroup)
    • 该类包括五种商品组:Clothes, Hardware, Media, Toy, Food。
    • 使用枚举类可以确保商品类型的唯一性和可读性,同时也能避免硬编码字符串带来的潜在错误。
  2. 定义商品类(Item)
    • 该类包含名称、价格和商品组三个属性。
    • 商品类的价格属性定义为浮点数类型,以便于处理不同的价格范围和精度要求。
  3. 定义购物车类(Cart)
    • 该类用于存储商品,并包含添加商品和获取符合促销标准的商品的方法。
    • 购物车类包含一个方法,该方法接受一个促销标准对象,并遍历购物车中的所有商品,返回符合该标准的商品列表。
  4. 定义一个抽象促销标准类(PromotionCriteria)
    • 该类通过继承实现不同的促销标准类,如价格范围、商品组、名称关键词等。
    • 抽象促销标准类是一个基类,包含一个抽象方法match。具体的促销标准类通过继承该基类,实现match方法,用于判断某个商品是否符合特定标准。
  5. 实现多个促销标准类
    • 价格范围标准类用于判断商品价格是否在指定范围内。
    • 商品组标准类用于判断商品是否属于指定的商品组。
    • 名称关键词标准类用于判断商品名称中是否包含指定关键词。

在实现过程中,面试官对我的设计和实现提出了一些问题和建议:

面试官:你可以解释一下为什么使用枚举类来定义商品类型吗?

候选人:使用枚举类可以确保商品类型的唯一性和可读性,同时也能避免硬编码字符串带来的潜在错误。

面试官:在定义商品类时,你是如何考虑价格属性的?

候选人:商品类的价格属性定义为浮点数类型,以便于处理不同的价格范围和精度要求。

面试官:购物车类中获取符合促销标准的商品方法是如何设计的?

候选人:购物车类包含一个方法,该方法接受一个促销标准对象,并遍历购物车中的所有商品,返回符合该标准的商品列表。

面试官:能否详细解释一下抽象促销标准类的设计思路?

候选人:抽象促销标准类是一个基类,包含一个抽象方法match。具体的促销标准类通过继承该基类,实现match方法,用于判断某个商品是否符合特定标准。

面试官:你提到了不同的促销标准类,能否举例说明一下?

候选人:当然可以。例如,价格范围标准类用于判断商品价格是否在指定范围内;商品组标准类用于判断商品是否属于指定的商品组;名称关键词标准类用于判断商品名称中是否包含指定关键词。

面试官:你是如何考虑到组合多个促销标准的情况的?

候选人:为了处理多个促销标准的组合情况,我设计了一个AndCriteria类和一个OrCriteria类,分别用于处理“与”和“或”的逻辑组合。这样可以实现更复杂的促销规则。

在实现过程中,我还遇到了一些技术细节上的挑战和面试官的进一步提问:

面试官:你如何确保促销标准可以灵活扩展,以应对未来可能增加的促销规则?

候选人:我设计了一个抽象的促销标准基类,并通过继承和实现不同的促销标准子类,使得我们可以很方便地扩展新的促销规则。例如,如果未来需要根据商品的品牌或库存数量来进行促销,我们只需新增对应的子类即可。

面试官:你提到的价格范围标准类如何处理边界情况?例如,价格恰好等于20美元的商品是否符合促销标准?

候选人:在设计价格范围标准类时,我考虑了边界情况。我们可以通过设置价格范围的上下限来灵活控制是否包含边界值。例如,可以通过参数设置是否包含最低价和最高价。

面试结束后,候选人对整个设计进行了总结,并与面试官讨论了可能的优化和改进方向。

通过这次面试经验分享,希望能帮助大家更好地准备Amazon的技术面试。我们提供面试代面,面试辅助服务,力求提高每一位候选人的面试成功率。如果您也有兴趣,欢迎联系我们

Leave a Reply

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