滑铁卢的计算机加拿大最强,自认为码代码能力出众的我,以为刷刷题,加上滑铁卢的金字招牌,Amazon, Google, Microsoft, Facebook为首的各大IT公司大门,不是分分钟的事儿?
可是,为什么我LeetCode都刷了200多道了,咋还是面试各种挂,进不了科技公司的大门?
然而如果大家天真的以为,只要刷完题就可以征服所有面试官了的话,那么这个世界上Google等各大IT公司恐怕已经招人到手软了。小编想说的是,其实面试中还有另一大敌OOD(Object Oriented Design)。
OOD是什么?在面试中有多重要?
OOD(面向对象设计)问题是电面或者onsite中常考的问题,通常是应届毕业面试题。对于New Grads来说,占整个面试评估的比例约为70-80%左右。OOD可能是项目问题/算法问题的follow up,一般会出现在加面环节里。
大IT公司对OOD的考核可以说是非常注重的。特别是Amazon,Google,Microsoft 和Facebook这样的大公司。而像Infosys,Wipro,TCS和Cognizant这样的小型初创公司和服务公司,也有的会非常注重这块的考核。
由于OOD题目非常开放,没有固定的答案和套路,对于没有见过类似考题的面试者,尤其是编程经验有限的毕业生,很多时候是非常大的挑战。建议应届毕业生要充分做好OOD的知识学习和积累,应对这个公司考察你硬实力相当重要的一部分。
下面我们就来简单梳理一下OOD的相关重要知识点,帮助大家更快速掌握的OOD。
01
如何快速了解面向对象设计的整个过程?
面向对象设计的过程就是抽象的过程,分以下三步来完成:
第一步:发现类
需求中的名词有控制台、宠物、昵称和主人等。
第二步:发现类的属性
可作为属性的的名词有健康值、亲密度和品种等。
第三步:发现类的方法
需求中的动词有输入、选择和领养等。
02
详细掌握OOD的基本方法与步骤
第一:类的认定
OOD中关于类的认定与OOA中关于对象的认定有着密切关系。但是OOD中对类的认定,不能像OOA中那样以准确反映问题空间为衡量准则,更多的要考虑通过对类以及类层次结构的认定,寻找解空间的基本结构,并为实现提供有效的支持。
第二:类的设计
在任何的面向对象应用中,类实例是系统的主要部分,而且如果采用纯面向对象的方法,那么整个系统就是由类实例组成的。因此,每个独立的类的设计对整个应用系统都有影响。
第三:类层次结构的组织
OOD中类层次结构的组织与OOA采用的策略是相似的,但在涉及递增开发时将有不同。支持重用是OOD的主要任务,继承机制支持两种层次的重用。在高层设计阶段,继承性可用作泛化特化关系的建模工具。使用继承机制促进开发出有意义的高级抽象,进而有助于重用。继承关系的重用性使得设计者能够在抽象中识别一般性,并从一般产生高级抽象。通过识别这种一般性,并把它从的较高的抽象中移出来,它就在当前或今后的设计中变成可重用。
在详细设计阶段,继承性支持已有类作为新定义类的重用基础,可以把已有的部分代码复制到新子类中并修改,以适应其新的目的。继承性在已有类和新的类之间建立了一种依赖关系,子类的新代码不引起旧代码失效,继承的代码被自动地包含在新定义中,并作为新类的定义被编译。对已有的类的任何修改都被归并到下次编译的新类中。
第四:类模块之间的接口技术
类之间的接口是中的一个关键,接口的方法大致有以下几类:
(1) 通过继承机制实现类之间的接口
第一种方法是可定义两层或多层:描述接口的通用类以及提供各种实现的子类(例如以列表作为通用类,以堆栈,队列等作为列表的实现),从而实现同一接口,不同实现的接口方法。
第二种方法使用继承机制实现类模块接口对称目的:采用几种接口到基本模块中,通过继承的正交性与输出机制来实现此方法。通用类不作输出,而多个子类执行不同的输出。例如银行的账目作为通用类,而由不同的用户来实现对它的查询。
(2) 使类实例具有人工智能的状态机和主动数据结构
在定义类实现抽象数据类型及数据抽象时,将这些抽象设置于主动方式。也就是说,类实例不仅作为信息的被动集合,而且可看作具有内部状态及局部存储的状态机。这为类之间接口提供了有用的方法。
那么下面我们就来举一些OOD 经典面试题的例子,好让大家对实战题目的样子心里有数:
-
Design OO food delivery appcatering.
-
Design Amazon recommendationsfeature.
-
Design an OO parking lot.
-
Design a class to implementchess and checkers game individually.
-
Create a restful micro servicethat implements a card shuffling algorithm.
-
Design Uber low level OOdesign.
-
Design the classes for aBattleship game.
-
Design a client-serverapplication which allows people to play chess and checkers with one another.
-
What’s difference betweenJavascript and JAVA in terms of OOP principles.
-
Design a Binary search treeusing Epic as input.
给大家的准备建议
其实OOD 面试最大的难点在于,所有的面试题都没有标准答案。因此,面试小白们往往在准备的时候,多走弯路,浪费了很多宝贵的面试备战时间。所以大家准备的时候一定要记得梳理面试题目,进行归类汇总,同时总结出解题套路。这样面试的准备效率才能最大化。记住了吗?
今日福利
-
Data analytics software & Programming电子书
-
JAVA语言学习视频
福利预览:资源预览

福利预览:Data analytics software & Programming电子书
总共78本电子书,包括 objective oriented programming using C# 以及 objective oriented programming using Java。
部分福利预览:
福利预览:JAVA语言学习视频
总共有七个阶段:开发环境搭建,Java语言基础,Java面向对象,Java语言进阶,工程结构与管理,网络通信,界面设计。
部分福利预览:



原文始发于微信公众号(PowerCareer):滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。