[WIP]面向对象程序设计
在面试软件工程职位时,你可能会遇到一种叫做“面向对象设计”或“低级设计”的面试。这类面试不像典型的产品系统设计和基础设施系统设计面试那样常见,但如果你面试的公司大量使用面向对象编程语言(比如 Java),那么你很可能会遇到这种面试(比如亚马逊就经常进行这种面试)。
什么是面向对象程序设计
在这种面试中,面试官会给你一个具体的使用场景或案例,你的任务是设计一个能够处理这个场景的系统。然而,重点不是将问题分解为多个服务或描述后端数据库,而是要展示你如何使用合适的类结构来构建解决方案,并遵循 SOLID 原则(单一职责、开闭原则、里氏替换、接口隔离和依赖倒置)。
本质上,你需要设计系统中 不同组件或实体的合理设计,以及它们之间如何交互。
例如,面试官可能会让你设计一个管理图书馆的系统,你需要考虑像 Book
、Member
、Loan
等类,以及它们之间的关系。或者你可能会被要求设计一个简化版的共享出行应用程序,需要考虑像 Driver
、Rider
、Trip
和 Payment
等类。
关键是要将问题分解为逻辑组件,明确每个组件的职责,并将它们组织成一个符合良好面向对象设计原则的类结构。
虽然这些面试一开始可能会让人感到有些困难,但它们是展示你对面向对象编程理解以及思考复杂系统能力的好机会。通过练习并深入掌握设计模式和原则,你将能够很好地应对这类面试。
面试类型 | 系统设计面试 | 面向对象设计面试 |
---|---|---|
主要任务 | 设计一个能够处理特定需求的系统 | 设计一个能处理特定场景的类结构 |
重点 | 将问题分解为服务,描述后端数据库 | 使用合适的类结构,遵循 SOLID 原则 |
典型问题 | 设计一个大规模分布式系统 | 设计一个图书馆管理系统或共享出行应用程序 |
需要展示的能力 | 处理高并发、可扩展性、数据存储等方面的知识 | 面向对象编程、设计模式、类和对象之间的交互 |
公司例子 | 互联网巨头、云服务公司 | 大量使用面向对象编程语言的公司,如亚马逊 |
考察重点
有别于传统的编程测试,面向对象程序设计更多关注以下 内容:
- 如何分析和设计系统,尤其是对现实世界的复杂场景进行抽象
- 如何将问题分解为逻辑组件,明确每个组件的职责
- 如何设计类和对象,以及它们之间的关系
- 如何遵循 SOLID 原则,使用恰当的设计模式,确保设计的可扩展性和可维护性