系统设计面试 - 汽车 API

System Design Interview - Car API

系统设计问题:

你得到了一个包含几百万辆二手车的数据集和它们的相关信息——里程、颜色、价格等。你必须在两天内创建一个 API 端点,允许用户查询数据集。

这是我给出的答案:

使用关系数据库(比如 PostgreSQL)来存放数据。公开一个 GET 端点,该端点采用与数据集中的属性对应的查询字符串参数,解析它们并使用它们来查询数据库。端点还可以跟踪哪些属性被查询最多,并为这些属性添加索引以加快查询速度。有人问我如何处理范围(例如 "car with 50,000 <= miles <= 100,000"),我说这可以通过查询字符串参数处理并通过 GET 端点转换为 SQL 查询。

意见反馈

我在后来的反馈中得知这个答案 "didn't convey a strong understanding of how to design web systems." 我希望得到一些关于我的解决方案可能在哪里的见解 insufficient/weak 或者可能忽略了一些关于设计网络系统的事情。

注意:我是凭记忆重建我的答案,所以这里可能比采访时更清楚。

感谢您的帮助!

正如评论中已经讨论的那样,面试官想听听有关 SQL 注入的一些信息。有一些应对措施,您可以采取这些措施来避免 SQL 注入。这些是(很可能不是完整列表,但应该给出提示,说明要注意什么):

  • 使用准备好的语句
  • 注意访问限制(在数据库中以及 OS)
  • 验证用户输入