不少同学都表示,刷题刷了几百遍,好不容易在亚麻面试中过五关斩六将,却跪在一道OOD面向对象上?
实在是太冤了!
先让我们来看一下,是什么样的题目,成为入职大厂的拦路虎?
每次调用findTable, takeOrder, checkOut之后都会调用restaurantDescription, 来验证你的程序是否正确。
https://www.lintcode.com/problem/restaurant-oo-design/description
部分题目资料展示
OOD 几乎算是亚麻面试必考题型,但即便我们都心知肚明,也往往难以解决。
它最大的难点在于,所有的面试题都没有标准答案。
每次做到这种题都一头雾水啊,各种需求想不全。
很多同学说,我head first design前几种模式都看过了,后面的就懒得看,每次感觉够用了,结果做起题来费劲就算了,还总是做不出来,都没好意思去面试了
Google、Bloomberg、TripAdvisor、EMC, Uber.
..等都是常考OOD题型的公司。
具体的我们不多罗列,反正牢记:
以Java为主的公司,不论电面还是Onsite,都一定会考OOD。
亚麻必考题之一的OOD,是每个小白必须要跨过的一道坎。不知道有没有统一的解题办法或者训练方式?
Clarify: 通过和面试官交流,去除题目中歧义,确定答题范围。
Core objects: 确定题目所涉及的类,以及类之间的映射关系。
Classes:通过类图的方式,具体填充题目中设计的类。
Correctness:检查自己的设计,是否满足关键点。
S - Single-responsiblity principle 单一责任原则
O - Open-closed principle 开发封闭原则
L - Liskov substitution principle 里氏替换原则
I - Interface segregation principle 接口分离原则
D - Dependency Inversion Principle 依赖反转原则
S.O.L.I.D 准则是由 Robert C. Martin 提出的。应用到 OOD 面试题的解题中,可以有效帮助我们设计出一个高可行性的系统,并且使得整个系统更加容易维护和扩展(easy to maintain and extend)。
当需要修改某个类的时候原因有且只有一个(THERE SHOULD NEVER BE MORE THAN ONE REASON FOR A CLASS TO CHANGE)。换句话说就是让一个类只做一种类型责任,当这个类需要承当其他类型的责任的时候,就需要分解这个类。
软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。这个原则是诸多面向对象编程原则中最抽象、最难理解的一个。
当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系。
1. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好。
这几条原则是非常基础而且重要的面向对象设计原则。正是由于这些原则的基础性,理解、融汇贯通这些原则需要不少的经验和知识的积累。
这几条原则是非常基础而且重要的面向对象设计原则。正是由于这些原则的基础性,理解、融汇贯通这些原则需要不少的经验和知识的积累。
OOD 面试最大的难点在于,所有的面试题都没有标准答案。因此,小白们往往在准备的时候,多走弯路,浪费了很多宝贵的面试备战时间。
以上内容可以帮助你初步的建立对OOD的框架性认知,但是真正想掌握好OOD,想在面试中快速脱颖而出,你需要进行更加深入系统的学习,九章算法的
由经验丰富的面试官梳理所有OOD面试题目,进行归类汇总,同时提供解题套路,是你备战OOD面试的必听课程。
以面试求职为导向,全面讲解设计模式,包括,Strategy, Singleton, Factory, Adaptor, etc。
整理深度剖析所有IT技术面试中的高频OOD面试题,包括,停车场设计、酒店预定系统设计、Black Jack 棋牌设计等等。
-
-
准备求职Facebook, Linkedin, Google, Amazon等IT企业的工程师
-
文泰来 资深FLAG工程师
北美知名院校计算机研究生,拥有多年的面试和面试官经验,尤其擅长系统设计、OOD等设计类题型。善于利用实例讲解,深入浅出。
-
什么是面向对象设计(OOD, Object oriented design)
-
-
-
-
-
-
设计模式讲解 Design Pattern - Strategy
-
高频OOD面试题讲解 - 电梯设计 Elevator Design
本期求职大礼包免费领取方式
扫码添加九章算法-小葵微信号