滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。

OOD

滑铁卢的计算机加拿大最强,自认为码代码能力出众的我,以为刷刷题,加上滑铁卢的金字招牌,Amazon, Google, Microsoft, Facebook为首的各大IT公司大门,不是分分钟的事儿?

 

可是,为什么我LeetCode都刷了200多道了,咋还是面试各种挂,进不了科技公司的大门?

 

然而如果大家天真的以为,只要刷完题就可以征服所有面试官了的话,那么这个世界上Google等各大IT公司恐怕已经招人到手软了。小编想说的是,其实面试中还有另一大敌OOD(Object Oriented Design)

滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。

 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

如何快速了解面向对象设计的整个过程?

面向对象设计的过程就是抽象的过程,分以下三步来完成:

第一步:发现类

需求中的名词有控制台、宠物、昵称和主人等。

第二步:发现类的属性

可作为属性的的名词有健康值、亲密度和品种等。

第三步:发现类的方法

需求中的动词有输入、选择和领养等。

滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。

02

详细掌握OOD的基本方法与步骤

第一:类的认定

OOD中关于类的认定与OOA中关于对象的认定有着密切关系。但是OOD中对类的认定,不能像OOA中那样以准确反映问题空间为衡量准则,更多的要考虑通过对类以及类层次结构的认定,寻找解空间的基本结构,并为实现提供有效的支持。

以下这些准则有助于更好的认定、定义类与方法:

  1. 对于问题空间中自然出现的实体,用类进行模型化;

  2. 将方法设计成单用途的;

  3. 如果需要对已有方法进行扩展,就设计一个新的方法;

  4. 避免冗长的方法;

  5. 把那些为多个方法或某个子类所需要的数据,存贮存实例变量中;

  6. 为类库设计,不要只为你自己或者你目前的应用设计

第二:类的设计

在任何的面向对象应用中,类实例是系统的主要部分,而且如果采用纯面向对象的方法,那么整个系统就是由类实例组成的。因此,每个独立的类的设计对整个应用系统都有影响。

在进行类的设计时,应考虑下面一些因素:

  1. 类的公共接口的单独成员应该是类的操作符;

  2. 类A的实例不应该直接发送消息给类B的成分;

  3. 操作符是公共的当且仅当类实例的用户可用;

  4. 属于类的每个操作符要么访问要么修改类的某个数据;

  5. 类必须尽可能少地依赖其他类;

  6. 两个类之间的互相作用应该是显式的;

  7. 采用子类继承超类的公共接口,开发子类成员为超类的特化;

  8. 继承结构的根类应该是目标概念的抽象模型。

第三:类层次结构的组织

OOD中类层次结构的组织与OOA采用的策略是相似的,但在涉及递增开发时将有不同。支持重用是OOD的主要任务,继承机制支持两种层次的重用。在高层设计阶段,继承性可用作泛化特化关系的建模工具。使用继承机制促进开发出有意义的高级抽象,进而有助于重用。继承关系的重用性使得设计者能够在抽象中识别一般性,并从一般产生高级抽象。通过识别这种一般性,并把它从的较高的抽象中移出来,它就在当前或今后的设计中变成可重用。

在详细设计阶段,继承性支持已有类作为新定义类的重用基础,可以把已有的部分代码复制到新子类中并修改,以适应其新的目的。继承性在已有类和新的类之间建立了一种依赖关系,子类的新代码不引起旧代码失效,继承的代码被自动地包含在新定义中,并作为新类的定义被编译。对已有的类的任何修改都被归并到下次编译的新类中。

滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。

第四:类模块之间的接口技术

类之间的接口是中的一个关键,接口的方法大致有以下几类:

(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.

    滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。

给大家的准备建议

其实OOD 面试最大的难点在于,所有的面试题都没有标准答案。因此,面试小白们往往在准备的时候,多走弯路,浪费了很多宝贵的面试备战时间。所以大家准备的时候一定要记得梳理面试题目,进行归类汇总,同时总结出解题套路。这样面试的准备效率才能最大化。记住了吗?

今日福利

  1. Data analytics software & Programming电子书

  2. JAVA语言学习视频

福利预览:资源预览

滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。

福利预览:Data analytics software & Programming电子书

总共78本电子书,包括 objective oriented programming using C# 以及 objective oriented programming using Java。

滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。

部分福利预览:

滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。

福利预览:JAVA语言学习视频

总共有七个阶段:开发环境搭建,Java语言基础,Java面向对象,Java语言进阶,工程结构与管理,网络通信,界面设计。

滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。

部分福利预览:

滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。

滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。

滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。
滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。
滑大学长含泪亲叙:Google真的不是光刷题就能进去的。。。。

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

ajax-loader