系统设计面试 - 汽车 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)
- 验证用户输入
系统设计问题:
你得到了一个包含几百万辆二手车的数据集和它们的相关信息——里程、颜色、价格等。你必须在两天内创建一个 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)
- 验证用户输入