19对象面向设计的设计面试问题,开发商应该知道
如果您计划在软件开发和工程工作,期望回答与该领域有关的一些棘手的betwayapp下载安装问题。足够的准备是使技术面试的最佳方式似乎不那么神经包装。
许多问题将处理您在工作或大学课程上很少经历的主题。还有一个机会,您必须在将判断您的答案和个性的多个人面前回答这些问题。您可能必须在白板上展示您的工作。
好消息是您可以为这些面试问题做好准备。虽然您无法为采访者提出的所有问题做好准备,但在您的采访之前学习将帮助您解决一些常见问题。
在面对面的一些面向对象的编程(OOP)主题上刷新您的内存,在您的采访之前有一些示例问题将帮助您回答基本面试问题。了解面试官正在寻找和使用它来形成一个普遍的解决方案方法,当他们要求您为面试问题创建定制解决方案时会有所帮助。
面向对象设计的重要性和面试过程
面向对象的编程是写软件最强大和最有效的方法!这不是一个小陈述。让我们把它弄下一点,所以你可以了解这个非常重要的话题的重力。
什么是代码?简单来说,程序员编写的代码行是计算机上要做什么以及如何执行此操作的指令。多么强大的想法,对吧?错误的!它实际上非常复杂,需要巨大的尊重。
在一个没有面向对象编程的世界中,数百种开发人员将没有机会协作和构建或扩展应用程序或在大型开源项目上的工作。没有面向对象的编程,即使由写作它的相同开发人员,除非他们愿意在重新编写应用程序时,除非他们愿意致力于重新编写应用程序的时间,甚至可能再也不会平转一次。
在面向对象的编程之前,所有代码都可以进入包含数千行指令的大文件,没有组织,只是一个巨大的命令列表,并且一系列复杂性都像纱线一样交织在一起。祝你好运,不上垂!
然后是用Simula、c++、Python和Java等语言进行的面向对象编程,现在世界上最流行的编程语言都是面向对象的。谢天谢地,我们现在生活在一个更开明、更有条理的世界里!
面向对象编程是组织代码的一种方式。这都是关于代码组织、可扩展性、可重用性和设计的。大多数面试官都想知道申请这份工作的软件开发人员能否用面向对象的方法把一个复杂的、现实生活中的问题转化成组织良好的代码。
我们将到达有简单答案的问题列表,但现在我们更好地了解采访者正在寻找什么,让我们创建一种方法来解决涉及设计真实对象导向的解决方案的问题。
如何提出面向对象的设计解决方案
用于测试您面向对象的编程技巧的典型的OOD问题与真实解决方案将为您提供一个模糊的问题,如:
•设计一个21点游戏
•设计一个URL缩短服务
•设计ATM
•设计两位玩家国际象棋游戏
•设计餐厅
•设计一个停车场
•设计在线股票经纪
问题也可能有一些限制,让您更好地了解面试官期望的解决方案。例如,您可以将Blackjack游戏限制为经销商和一个玩家。注意这些约束,因为它们会让您免于过度思考您的解决方案并花费大量的时间构建一个不符合问题的解决方案。我撰写了一个最高评价的面向对象设计课程涵盖了面向对象设计的SOLID原则,可以帮助实现这一点。
即使有一些实际的限制,你仍然会在你之前有很多工作。要使此过程更轻松,您可以使用这些步骤缩小创建所需的功能:
1.提问。如果您没有完全理解要求,请询问一些问题。我实际上鼓励你提出问题来澄清面试官和自己的关于这个问题的假设,所以你和面试官同意。这不仅会表明您是一个负责任的问题解决者,而且在您的方法中思考要求的方法也是详细的。
2.不要一开始就写代码。描述用例。向面试官描述人们将如何使用你的系统。绘制工作流程和图表,特别是在房间里有白板或记事本的情况下。列出一个用例列表,并大声地说出来。描述并组织你的思路实际上是一种非常好的面试技巧,可以显示出你对自己分解问题能力的信心。这将帮助您在一开始就更好地确定系统需要的功能,而不是在解决方案进行到一半时(更改很难实现)。
3.在高级识别对象及其关系。例如,在Blackjack游戏中,您可以创建以下对象:甲板,卡,播放器,经销商和游戏。这些对象彼此关系,您应该以高级绘制出来,以澄清他们将如何互动。
4.描述每个对象的属性和行为。详细了解每个对象的特征/属性和行为。行为通常与对象上执行某种工作所需的方法有关。
5.组织关系和课程层次结构。以下是您需要了解对象关系以及如何组织类层次结构的位置。例如,您可能会发现经销商类应该从父类播放器继承。但是经销商对象将具有特定的交易()方法或shuffle()方法,而父类的播放器不会。
6.寻找设计模式。一旦您知道了对象的交互方式,您现在就可以寻找适合应用程序需求的面向对象设计模式的应用位置。不要急于强制使用特定的面向对象设计模式来适应应用程序。只有在有意义的情况下才应用这个模式。新手经常试图将设计模式强制加入到他们的代码中,如果模式不适合,这会使应用程序变得比必要的更复杂。小心这个!
请记住,对这些类型的面试问题之一没有“正确”的回答。面试官只是试图确定:
•候选人可以询问正确的问题以收集有关问题的要求吗?
•候选人可以识别对象以及如何与问题进行互动?
•应聘者是否熟悉OOD原则和设计模式?
•候选人平衡如何有需要软件,他们可以快速编码和可以调整到系统更改的软件?
不要过度思考或紧张,但确实确保你完全理解这个问题,你应该做得很好。现在让我们看看一些一般问题,技术面试官可能会问你。
19个流行的面向对象面试设计问题
下面是面试官可能会问的一些问题,以测试你对面向对象设计原则的基本知识。
1.什么是课程?
一个类是面向对象编程的基本构建块。考虑了用于在软件中定义对象的蓝图,类包含使对象功能的属性和方法。OOP的一个优点是一类继承另一个类的能力。
2.类的属性和方法是什么?
属性是类的“名词”。它们让程序员定义对象的属性。例如,如果您有一个定义房子的类,那么类属性将描述房子的颜色、大小和材料。
方法是您课堂的“动词”。另一种思考方式的方法是方法是您对手的行为。例如,如果您有鸟类类,Fly()将是一种方法。这将允许鸟对象飞行。方法名为代码块,该代码块包含属于类别'蓝图的一部分的指令,这些指令定义该类必须执行该类的对象的操作。
什么是遗产?
继承允许一类使用相同的方法和其他类的属性。子类“继承”其方法和属性从父类。
假设你有一个Animal类,它包含重量和大小等属性。它可以包含像eat()或sleep()这样的方法。Bird类会自然地继承父类Animal,因为鸟是Animal。因为鸟类是一种动物,它们会自然地继承父类动物所定义的吃和睡的行为。这是代码重用的一个例子。如果Bird是一个Animal,并且Animal类已经包含了这些方法,那么就不需要在子类Bird中重新定义eat和sleep方法。
继承允许您构建类的层次结构,以模拟现实世界中的对象的方式彼此相互关联,是一种关系。这是新人错过的一个重要观点。继承的目标不是继承方法。它遵守是一种关系规则!例如,车辆和动物类都可以定义移动()方法,但是一只鸟永远不应该继承车型只是为了使用移动()方法。这是糟糕的设计。是形成类层次结构的关系是关键。精心设计的应用程序允许良好的代码重用它有意义的地方。
4.类中的私有和公共方法或属性有什么区别?
Public和private定义类的属性或方法的可访问性。
私有方法和属性仅被该封闭类本身访问。没有外部类都可以访问课程的私人成员。如果存在内部嵌套类,则包含在包含私有成员的类中。然后,内嵌套类可以访问这些私有成员,因为它仍然包含在同一类定义中。请记住,私人成员不能被儿童课程继承!公共方法和属性可供其他类使用。
5.什么是类构造函数?
构造函数是当您实例化类的实例时使用的方法。在大多数面向对象的语言中,类构造函数将具有与类相同的名称。在许多语言中,您可以拥有多个每个级别的构造函数。您可以拥有多载的构造函数或没有参数的构造函数。构造函数用于初始化类中的特定属性。
6.什么是重载方法?
重载方法使用相同的方法名,但使用不同的参数集。这些方法可以返回不同的数据,因为返回类型可能不同。重要的是要知道参数列表的数据类型不能重复;否则,将会出现编译错误。您可能会被问到在参数列表中顺序是否重要,答案是YES。参数数据类型的顺序很重要。如果两个具有相同名称的方法具有相同的参数列表数据类型,但参数顺序不同,这就是合法代码,并且在Java中可以很好地编译。
7.什么是抽象课?
无法实例化抽象类,但它可以继承。这意味着您的继承类可以从父摘要类继承方法,但它不能直接调用抽象类。抽象类非常适合为继承类定义全局定义,因此您只需要创建一次这些定义。预计儿童类将在父摘要类中实现定义的抽象方法。作为随访,您可能会询问抽象方法。一种抽象方法是在没有实现的情况下声明的方法(没有大括号,然后是分号)。如果类包括抽象方法,则必须宣布课程本身。
8.实例化是什么?
实例化是在创建类的实例时发生的事情。实例是该类对象的另一个术语。调用类构造函数方法将实例化对象。在实例化一个类之前不能使用它。当实例化时,对象具有在其类的蓝图中定义的属性和方法。
9.按值传递参数和按引用传递参数之间有什么区别?
当参数按值传递给方法时,该方法只能访问参数的值,而不能访问作为参数的变量。如果在执行该方法时更改了此值,则不会影响原始变量。
当参数通过引用时,指针实际传递到方法中。指针引用用作参数的变量。如果该方法然后修改此参数,它也会更改原始变量。
10.重写一个方法意味着什么?
创建从另一个类继承的类时,可以覆盖父类的方法。例如,如果父动物类包含方法移动(),则诸如鸟类的子类可以从父级继承移动()功能,或者将其覆盖到更具体到鸟类的东西。如果完成覆盖,那么鸟将在自己的类中拥有自己的移动()方法而不是继承父类动物的通用移动行为。
11.什么是异常处理?
异常处理是用于捕获应用程序运行时可能发生的错误的进程。它允许用户继续使用软件,并优雅地处理问题,而不是让应用程序崩溃。例如,如果您与互联网失去连接,您的浏览器应用程序不会崩溃。它只是说“重试连接”或类似的东西。这是一个在软件中正确处理异常的例子。异常处理是为了捕获开发人员无法控制的错误场景。
12.什么是“这个”对象?
“此”引用是指对象的当前实例。您通常使用“此”来引用类的内部属性或方法。在许多编程语言中,您将看到“这个”。Python使用“自我”而不是“这”,但概念是一样的。
13.什么是指针?
指针通常由C ++中的名称使用,但它们也适用于其他编程语言。将“点”指向值的实际内存位置。因为指针引用实际值,因为在指针中更改值时,请更改内存中的值。
14.什么是静态方法?
static关键字定义了独立于从类创建的任何实例而存在的方法。静态方法不能访问类的任何实例变量。当需要快速执行不需要包含类的其他部分的函数时,静态函数是有益的。
15.封装是什么?
封装是一个OOP概念,它指的是将数据与在一个包中操作该数据的方法捆绑在一起。大多数面向对象语言以类的形式使用封装。
封装也可以指向外部隐藏对象的状态,或信息隐藏。通过在私有对象中设置属性,该对象可以通过必须调用的方法控制对该属性的访问,以设置或获取该属性。
16.什么是多态性?
多态性是一个面向对象的概念,指的是课堂上采用不同形式的能力。遗传和覆盖多态性允许。如果我们创建一个名为ferrari的类和一个名为yugo的类,则从汽车类继承,每个都会有一个驱动方法,实质上是同一件事,尽管结果将不同。
17.成分是什么?
构图是面向对象编程的重要概念。它描述了一种在其实例变量中引用一个或多个其他类的类。其中一个例子是使用发动机级和轮胎类的汽车类。组成允许重复使用。您还可以使用在发电机类中的汽车类使用的引擎类。
18.什么是设计模式?
设计模式指的是可重复的解决方案,可以用于解决常见的软件问题。它基本上是一个开发人员可以根据自己的需要定制的蓝图。一个例子是模型-视图-控制器模式,它被一些人用作桌面和web应用程序的模式,或者是单例模式,它确保当应用程序运行时,类中只有一个对象可以存在。
19.面向对象编程的固体原则是什么?
SOLID是五个面向对象设计原则的缩写,这些原则使软件易于理解、灵活和可维护。坚实的代表:
•单身责任:一堂课应该有一个单一的责任。
•打开关闭:软件应该对扩展开放,对修改关闭。
•Liskov替换:程序中的对象应该可以替换其子类型的实例,而不会改变该程序的正确性。
•界面隔离:许多客户端特定的接口优于一个通用接口。
•依赖性反转:开发人员应该取决于抽象,而不是结识。
我无法夸大上面列出的固体原则的重要性。我创造了一个整个课程致力于学习和实践这些原则。这是我最受欢迎和最高评价的课程之一。我还有一个优秀的YouTube播放列表,供您观看,解释说明面向对象编程基础。
结论
审查面向对象的编程的概念是为编程访谈准备自己的出色。如果您生锈,上面的问题将刷新您的内存,帮助您面对面面板,并回答他们可能会询问的一些基本问题。
面试官可能会要求您通过设计自定义应用程序找到对现实生活问题的解决方案。创建解决方案时,重要的是不要恐慌或过度思考。意识到面试官只想让你展示你知道他们的问题的答案并了解它们足以让他们使用。