zhcn 技术 数据管理 您今天应该知道的 21 个常见 OOP 面试问题和答案

您今天应该知道的 21 个常见 OOP 面试问题和答案

面向对象编程面试问题可帮助程序员和开发人员增加对编程世界关键概念的了解。

OOP 是最必要的编程范式之一,它关注对象和类而不是过程和函数。

基于OOP的编程语言包括Objective-C、Java、Ada、Perl、Python和C++。

大公司正在寻找熟悉面向对象方法和模式的开发人员。

因此,如果您打算参加这样的面试过程,您应该对 OOP 概念有深入的了解。

让我们看一下一些常见的 OOP 面试问题和答案,以帮助您准备面试和测试。

面向对象编程 (OOP):概述

哎呀
哎呀

OOP 是一种围绕对象的编程范式。这里,对象被认为是现实世界的实例,例如类,它包括类模板中指定的一些行为或特征。

例如,考虑一辆汽车。根据OOP模型:

  • 对象:汽车。它可以是任何类型或型号,例如您拥有的汽车。
  • 类别:汽车的型号或类型(宝马、雪佛兰、起亚、奥迪等)。
  • 特征:汽车颜色、底盘号、发动机类型、齿轮类型等。
  • 行为:如何换档、如何启动汽车等。

在这里,特征也被称为特性、属性或数据,而行为在编程语言中被称为过程、方法或函数。

让我们从一些常见的 OOP 面试问题开始。

面向对象编程这个术语是什么意思?

答:面向对象编程(OOP)是一种基于对象和类而不是过程和函数的编程模型。各个对象被组织成类。 OOP 使用多态性、隐藏和继承等概念和编程范例来描述现实世界的实体。

OOP 绑定代码和数据。对象是由具有特定特征和行为的类定义的现实世界实体,而类被定义为特定对象的模式。也称为用户定义的数据类型。

这包括用于设计和制造的程序和移动应用程序。例如,OOP可用于制造系统仿真软件。

除了 OOP 之外还有哪些编程范式?

编程范式
编程范式

答:编程范式是根据每种语言的特点对编程语言进行分类的方式。有两种类型的编程范例。

  • 命令式编程范式:重点关注如何执行逻辑和定义控制流。这包括过程编程范例、面向对象编程 (OOP) 和并行编程。
  • 声明式编程范式:专注于程序中要执行的操作并定义其逻辑,而不是控制流。这包括逻辑编程范式、函数式编程范式和数据库编程范式。

OOP和SOP有什么区别?

回答:让我们通过下表来了解 OOP 和 SOP 之间的区别。

面向对象编程面向结构的编程
这是一种基于对象而不是过程和函数的编程模型。这为程序提供了逻辑结构,并将程序划分为函数。
遵循自下而上的方法遵循自上而下的方法
提供数据隐藏或封装不提供数据隐藏
您可以解决复杂的问题。中等程度的问题是可以解决的。
减少冗余,因为代码可以重用不支持代码可重用性。
更灵活不太灵活
它主要关心的是数据。它主要关心的是程序的逻辑结构。

面向对象编程的主要特点是什么?

特征
特征

答: OOP的主要特点是:

  • 遗产
  • 封装
  • 抽象
  • 多态性
  • 方法覆盖
  • 方法重载
  • 目的
  • 班级
  • 构造函数和析构函数

继承、多态性和封装是 OOP 的基本要素,这些特征将 OOP 语言与非 OOP 语言区分开来。

什么是封装?

答:封装是一种将类、变量、方法等放置在执行工作并向用户呈现相同胶囊所需的胶囊内的方法。简而言之,所有必要的方法和数据都集中在一起,并且对用户隐藏了不必要的细节。

它也可以用其他方式定义。

  • 数据绑定:封装是将数据成员和方法绑定为类或整体的过程。
  • 数据隐藏:封装是隐藏不必要信息的过程,例如限制对对象成员的访问。

什么是多态性?

多态性
多态性

回答:让我们通过将多态性分解为两个组成词来理解它。

“Poly”是“许多”的意思

“Morph”的意思是“形状”。

因此,多态性可以描述为具有不同形状的对象。

在 OOP 中,它指的是某些数据、对象、方法或代码在多个上下文或情况下表现不同的过程。 OOP 模型中有两种类型的多态性。

  • 运行时多态性
  • 编译时多态性

换句话说,它是单个接口的多个定义。例如,我有一个名为“vehicle”的类,它由一个方法“speed”组成。不可能定义速度,因为不同的车辆有不同的速度。因此,可以针对不同的车辆在不同的定义子类中进行定义。

什么是静态多态性?

答:静态多态也称为编译时多态。此功能允许您根据对象的值将对象链接到其各自的运算符或函数。这可以通过运算符重载或方法重载来实现。

这里,这些方法使用相似的名称,但每个名称的参数不同。对于相似的触发器,对象的行为有所不同。因此,多个方法都在同一个类中实现。

什么是动态多态性?

动态多态性
动态多态性

答:动态多态也称为运行时多态。这是指 OOP 中的一种多态性,其中实际的函数包含是在运行时或运行时确定的。这可以通过覆盖方法来实现。

例如,创建了两个类,bike 和 Yamaha,并且 Yamaha 类通过重写 run() 方法扩展了 bike 类。子类方法会覆盖父类方法,因此它们在运行时被调用。

什么是班级?

Ans:类可以定义为蓝图或模板,其中包含一些称为成员数据的值。它还包含一些称为函数或行为的规则。当您创建对象时,它会自动检索类中定义的函数和数据。

然而,类是对象的蓝图或模板。基于类,您可以根据需要设计任意数量的对象。例如,首先创建汽车模板。然后,根据汽车模板,设计不同的汽车单元。

什么是对象?

目的
目的

答:对象可以定义为类的实例,该类包含模板中定义的行为和成员的实例。对象是您与之交互的实际实体,而类只是该对象的蓝图。

因此,物体具有某些特征或行为并消耗空间(例如某些汽车模型)。

类和结构有什么区别?

回答:让我们用一个表格来理解这一点。

班级结构
类是引用类型。结构是值类型。
分配在堆内存中。分配在堆栈内存上。
对于大型引用类型,分配成本更低值类型的分配比引用类型更便宜。
它有无穷无尽的功能。功能有限。
类用于大型程序。结构体用于小程序中。
这包括构造函数和析构函数。包含参数化或静态构造函数。
每次创建实例时都使用 new() 关键字。使用或不使用关键字轻松创建实例。
一个类可以继承另一个类。结构不能被继承。
您可以保护班级的数据成员。结构的数据成员无法受到保护。
函数成员可以是抽象的或虚拟的函数成员不能是抽象的或虚拟的
类中的两个不同变量可以包含对相似对象的引用。每个变量都有自己的副本。

什么是继承?

遗产
遗产

Ans:继承是OOP的特性之一,它允许一个类继承另一个类的关键属性。例如,如果“车辆”是一个类,那么“汽车”、“自行车”等是可以从类“车辆”继承关键属性的其他类。

此功能有助于删除冗余代码。因此,代码尺寸较小。简单地说,继承被定义为从父类到子类的属性的接收者。这里,在上面的示例中,“车辆”是父类,“汽车”或“自行车”是子类。

这允许您在另一个类中重用一个类的编程代码,而不必再次编写相同的代码或在此过程中浪费时间。

有哪些不同类型的继承?

Ans: OOP 模型使用不同类型的继承,例如:

  • 单一继承:定义为单个类继承单个基类的公共功能的继承。
  • 多重继承:当单个类继承多个类时就会出现问题。
  • 多级继承:这意味着一个类继承自其他类,这些类是其他类的子类。
  • 层次继承:指一个类有多个子类的继承。
  • 混合继承:它是多级继承和多重继承的结合。

继承有哪些限制?

继承限制
继承限制

答:继承的局限性包括:

  • 增加运行程序所需的精力和时间。这是因为你必须频繁地从一门课跳到另一门课,这需要时间。
  • 父类和子类的耦合非常紧密,这使得它们不太灵活。
  • 必须仔细地合并。否则可能会导致结果不满意或不准确。
  • 程序中的单个更改可以更改父类和子类中的代码。

什么是抽象?

Ans:抽象是OOP的要素之一。抽象的一个重要作用是处理复杂性。这是通过向用户隐藏不必要的细节来实现的。这允许用户在抽象之上实现复杂的逻辑,而无需考虑隐藏的复杂性。

例如,如果您是咖啡爱好者,您需要知道使用咖啡机制作一杯咖啡需要添加多少牛奶、咖啡豆和方糖。思考机器的工作原理是没有意义的。咖啡机是一种隐藏的复杂性,你不需要了解,但制作咖啡的过程却至关重要。

有两种类型的抽象。

  • 数据抽象
  • 过程抽象

什么是构造函数?

构造函数
构造函数

答:构造函数是类或结构中的一种特殊方法,其名称与类名相似。这达到了初始化对象的必要目的。它对于实例化将对象分配给类的成员数据和方法也很有用。

创建构造函数时,应记住以下几点:

  • 它将被赋予与类名相同的名称。
  • 它不能是抽象的、最终的或静态的。
  • 没有返回类型变量。

C++ 中的构造函数有哪些不同类型?

Ans: C++ 中的构造函数主要分为三种类型。

  • 默认构造函数:其定义中没有形参或参数的构造函数。这种类型的构造函数用于用实际值初始化数据成员或变量。
  • 参数化构造函数:在声明和定义中包含参数或参数。您可以通过参数化构造函数传递多个参数。用于重载以了解多个构造函数之间的区别。
  • 复制构造函数:使用类似类的另一个对象初始化对象的成员函数。此外,它还有助于将数据从一个对象复制到另一个对象。

什么是析构函数?

析构函数
析构函数

Ans:析构函数是在对象销毁过程中自动调用的方法。落实具体行动。

  • 在对象初始化期间恢复先前分配的堆空间
  • 关闭数据库连接和文件
  • 释放网络资源和资源锁
  • 做各种家务活

换句话说,析构函数销毁了构造函数初始化的对象。这是一个特殊的成员函数,与类名同名,但带有前导 (~) 符号。析构函数是单向函数,因此可以重载。

什么是垃圾收集(GC)?

答:垃圾收集(GC)是Java、C#等编程语言中内置的内存回收元素。支持 GC 的编程语言至少包含一个垃圾收集器,可以自动释放程序中不再需要的内存区域。

垃圾收集确保程序仍在其内存配额之内。这使开发人员无需手动管理程序的内存,并最大限度地减少与内存相关的错误。

什么是异常处理?

异常处理
异常处理

答:异常处理是计算机程序执行过程中应对意外事件的一种方法。程序员必须“处理”不需要的事件(异常)以防止系统或程序崩溃。如果没有这种方法,异常可能会中断程序的常见行为,从而导致效率低下或风险。

什么是 Try/Catch 块?

Ans: TryCatch是关键字,描述程序执行过程中由于编码或数据错误而导致的异常处理。

  • try块是引发异常的代码块。
  • catch块处理并捕获 try 块中的异常。

Trycatch语句经常用于各种编程语言,包括 C++。 C#、Java、SQL、JavaScript。每个try语句都与一个catch语句相匹配来处理执行。对于TryCatch语句,还有一些事情需要记住。

  • try 块后面跟着一个 catch 块。
  • try 块后面至少跟着一个 catch 块。
  • try 块后面跟着另一个 try 块,再后面跟着一个 catch 块。

结论

OOP是程序员应该了解的一个重要概念。彻底学习它还将帮助您成功地使用使用 OOP 概念的语言进行编程。

如果您正在准备面试或测试,上述面试问题和答案将帮助您刷新对 OOP 概念(如类、对象、封装、多态性、继承、抽象等)的理解。这样,您就可以充满信心地参加面试,成功地应对面试并建立您的职业生涯。

您还可以参考其中一些 SQL 面试问题。

通俗易懂讲解《今天你应该知道的21个常见OOP面试题及答案》!您必须观看的最佳 2 个视频

【内定確定!?】面接官が思わず採用したくなる逆質問5選
https://www.youtube.com/shorts/rS1MFzklIMw
面接で「転職理由を教えてください」と聞かれた時の回答
https://www.youtube.com/shorts/4E3qEUSOLT4

面向对象编程面试问题可帮助程序员和开发人员增加对编程世界关键概念的了解。

OOP 是最必要的编程范式之一,它关注对象和类而不是过程和函数。

基于OOP的编程语言包括Objective-C、Java、Ada、Perl、Python和C++。

大公司正在寻找熟悉面向对象方法和模式的开发人员。

因此,如果您打算参加这样的面试过程,您应该对 OOP 概念有深入的了解。

让我们看一下一些常见的 OOP 面试问题和答案,以帮助您准备面试和测试。

面向对象编程 (OOP):概述

哎呀
哎呀

OOP 是一种围绕对象的编程范式。这里,对象被认为是现实世界的实例,例如类,它包括类模板中指定的一些行为或特征。

例如,考虑一辆汽车。根据OOP模型:

  • 对象:汽车。它可以是任何类型或型号,例如您拥有的汽车。
  • 类别:汽车的型号或类型(宝马、雪佛兰、起亚、奥迪等)。
  • 特征:汽车颜色、底盘号、发动机类型、齿轮类型等。
  • 行为:如何换档、如何启动汽车等。

在这里,特征也被称为特性、属性或数据,而行为在编程语言中被称为过程、方法或函数。

让我们从一些常见的 OOP 面试问题开始。

面向对象编程这个术语是什么意思?

答:面向对象编程(OOP)是一种基于对象和类而不是过程和函数的编程模型。各个对象被组织成类。 OOP 使用多态性、隐藏和继承等概念和编程范例来描述现实世界的实体。

OOP 绑定代码和数据。对象是由具有特定特征和行为的类定义的现实世界实体,而类被定义为特定对象的模式。也称为用户定义的数据类型。

这包括用于设计和制造的程序和移动应用程序。例如,OOP可用于制造系统仿真软件。

除了 OOP 之外还有哪些编程范式?

编程范式
编程范式

答:编程范式是根据每种语言的特点对编程语言进行分类的方式。有两种类型的编程范例。

  • 命令式编程范式:重点关注如何执行逻辑和定义控制流。这包括过程编程范例、面向对象编程 (OOP) 和并行编程。
  • 声明式编程范式:专注于程序中要执行的操作并定义其逻辑,而不是控制流。这包括逻辑编程范式、函数式编程范式和数据库编程范式。

OOP和SOP有什么区别?

回答:让我们通过下表来了解 OOP 和 SOP 之间的区别。

面向对象编程面向结构的编程
这是一种基于对象而不是过程和函数的编程模型。这为程序提供了逻辑结构,并将程序划分为函数。
遵循自下而上的方法遵循自上而下的方法
提供数据隐藏或封装不提供数据隐藏
您可以解决复杂的问题。中等程度的问题是可以解决的。
减少冗余,因为代码可以重用不支持代码可重用性。
更灵活不太灵活
它主要关心的是数据。它主要关心的是程序的逻辑结构。

面向对象编程的主要特点是什么?

特征
特征

答: OOP的主要特点是:

  • 遗产
  • 封装
  • 抽象
  • 多态性
  • 方法覆盖
  • 方法重载
  • 目的
  • 班级
  • 构造函数和析构函数

继承、多态性和封装是 OOP 的基本要素,这些特征将 OOP 语言与非 OOP 语言区分开来。

什么是封装?

答:封装是一种将类、变量、方法等放置在执行工作并向用户呈现相同胶囊所需的胶囊内的方法。简而言之,所有必要的方法和数据都集中在一起,并且对用户隐藏了不必要的细节。

它也可以用其他方式定义。

  • 数据绑定:封装是将数据成员和方法绑定为类或整体的过程。
  • 数据隐藏:封装是隐藏不必要信息的过程,例如限制对对象成员的访问。

什么是多态性?

多态性
多态性

回答:让我们通过将多态性分解为两个组成词来理解它。

“Poly”是“许多”的意思

“Morph”的意思是“形状”。

因此,多态性可以描述为具有不同形状的对象。

在 OOP 中,它指的是某些数据、对象、方法或代码在多个上下文或情况下表现不同的过程。 OOP 模型中有两种类型的多态性。

  • 运行时多态性
  • 编译时多态性

换句话说,它是单个接口的多个定义。例如,我有一个名为“vehicle”的类,它由一个方法“speed”组成。不可能定义速度,因为不同的车辆有不同的速度。因此,可以针对不同的车辆在不同的定义子类中进行定义。

什么是静态多态性?

答:静态多态也称为编译时多态。此功能允许您根据对象的值将对象链接到其各自的运算符或函数。这可以通过运算符重载或方法重载来实现。

这里,这些方法使用相似的名称,但每个名称的参数不同。对于相似的触发器,对象的行为有所不同。因此,多个方法都在同一个类中实现。

什么是动态多态性?

动态多态性
动态多态性

答:动态多态也称为运行时多态。这是指 OOP 中的一种多态性,其中实际的函数包含是在运行时或运行时确定的。这可以通过覆盖方法来实现。

例如,创建了两个类,bike 和 Yamaha,并且 Yamaha 类通过重写 run() 方法扩展了 bike 类。子类方法会覆盖父类方法,因此它们在运行时被调用。

什么是班级?

Ans:类可以定义为蓝图或模板,其中包含一些称为成员数据的值。它还包含一些称为函数或行为的规则。当您创建对象时,它会自动检索类中定义的函数和数据。

然而,类是对象的蓝图或模板。基于类,您可以根据需要设计任意数量的对象。例如,首先创建汽车模板。然后,根据汽车模板,设计不同的汽车单元。

什么是对象?

目的
目的

答:对象可以定义为类的实例,该类包含模板中定义的行为和成员的实例。对象是您与之交互的实际实体,而类只是该对象的蓝图。

因此,物体具有某些特征或行为并消耗空间(例如某些汽车模型)。

类和结构有什么区别?

回答:让我们用一个表格来理解这一点。

班级结构
类是引用类型。结构是值类型。
分配在堆内存中。分配在堆栈内存上。
对于大型引用类型,分配成本更低值类型的分配比引用类型更便宜。
它有无穷无尽的功能。功能有限。
类用于大型程序。结构体用于小程序中。
这包括构造函数和析构函数。包含参数化或静态构造函数。
每次创建实例时都使用 new() 关键字。使用或不使用关键字轻松创建实例。
一个类可以继承另一个类。结构不能被继承。
您可以保护班级的数据成员。结构的数据成员无法受到保护。
函数成员可以是抽象的或虚拟的函数成员不能是抽象的或虚拟的
类中的两个不同变量可以包含对相似对象的引用。每个变量都有自己的副本。

什么是继承?

遗产
遗产

Ans:继承是OOP的特性之一,它允许一个类继承另一个类的关键属性。例如,如果“车辆”是一个类,那么“汽车”、“自行车”等是可以从类“车辆”继承关键属性的其他类。

此功能有助于删除冗余代码。因此,代码尺寸较小。简单地说,继承被定义为从父类到子类的属性的接收者。这里,在上面的示例中,“车辆”是父类,“汽车”或“自行车”是子类。

这允许您在另一个类中重用一个类的编程代码,而不必再次编写相同的代码或在此过程中浪费时间。

有哪些不同类型的继承?

Ans: OOP 模型使用不同类型的继承,例如:

  • 单一继承:定义为单个类继承单个基类的公共功能的继承。
  • 多重继承:当单个类继承多个类时就会出现问题。
  • 多级继承:这意味着一个类继承自其他类,这些类是其他类的子类。
  • 层次继承:指一个类有多个子类的继承。
  • 混合继承:它是多级继承和多重继承的结合。

继承有哪些限制?

继承限制
继承限制

答:继承的局限性包括:

  • 增加运行程序所需的精力和时间。这是因为你必须频繁地从一门课跳到另一门课,这需要时间。
  • 父类和子类的耦合非常紧密,这使得它们不太灵活。
  • 必须仔细地合并。否则可能会导致结果不满意或不准确。
  • 程序中的单个更改可以更改父类和子类中的代码。

什么是抽象?

Ans:抽象是OOP的要素之一。抽象的一个重要作用是处理复杂性。这是通过向用户隐藏不必要的细节来实现的。这允许用户在抽象之上实现复杂的逻辑,而无需考虑隐藏的复杂性。

例如,如果您是咖啡爱好者,您需要知道使用咖啡机制作一杯咖啡需要添加多少牛奶、咖啡豆和方糖。思考机器的工作原理是没有意义的。咖啡机是一种隐藏的复杂性,你不需要了解,但制作咖啡的过程却至关重要。

有两种类型的抽象。

  • 数据抽象
  • 过程抽象

什么是构造函数?

构造函数
构造函数

答:构造函数是类或结构中的一种特殊方法,其名称与类名相似。这达到了初始化对象的必要目的。它对于实例化将对象分配给类的成员数据和方法也很有用。

创建构造函数时,应记住以下几点:

  • 它将被赋予与类名相同的名称。
  • 它不能是抽象的、最终的或静态的。
  • 没有返回类型变量。

C++ 中的构造函数有哪些不同类型?

Ans: C++ 中的构造函数主要分为三种类型。

  • 默认构造函数:其定义中没有形参或参数的构造函数。这种类型的构造函数用于用实际值初始化数据成员或变量。
  • 参数化构造函数:在声明和定义中包含参数或参数。您可以通过参数化构造函数传递多个参数。用于重载以了解多个构造函数之间的区别。
  • 复制构造函数:使用类似类的另一个对象初始化对象的成员函数。此外,它还有助于将数据从一个对象复制到另一个对象。

什么是析构函数?

析构函数
析构函数

Ans:析构函数是在对象销毁过程中自动调用的方法。落实具体行动。

  • 在对象初始化期间恢复先前分配的堆空间
  • 关闭数据库连接和文件
  • 释放网络资源和资源锁
  • 做各种家务活

换句话说,析构函数销毁了构造函数初始化的对象。这是一个特殊的成员函数,与类名同名,但带有前导 (~) 符号。析构函数是单向函数,因此可以重载。

什么是垃圾收集(GC)?

答:垃圾收集(GC)是Java、C#等编程语言中内置的内存回收元素。支持 GC 的编程语言至少包含一个垃圾收集器,可以自动释放程序中不再需要的内存区域。

垃圾收集确保程序仍在其内存配额之内。这使开发人员无需手动管理程序的内存,并最大限度地减少与内存相关的错误。

什么是异常处理?

异常处理
异常处理

答:异常处理是计算机程序执行过程中应对意外事件的一种方法。程序员必须“处理”不需要的事件(异常)以防止系统或程序崩溃。如果没有这种方法,异常可能会中断程序的常见行为,从而导致效率低下或风险。

什么是 Try/Catch 块?

Ans: TryCatch是关键字,描述程序执行过程中由于编码或数据错误而导致的异常处理。

  • try块是引发异常的代码块。
  • catch块处理并捕获 try 块中的异常。

Trycatch语句经常用于各种编程语言,包括 C++。 C#、Java、SQL、JavaScript。每个try语句都与一个catch语句相匹配来处理执行。对于TryCatch语句,还有一些事情需要记住。

  • try 块后面跟着一个 catch 块。
  • try 块后面至少跟着一个 catch 块。
  • try 块后面跟着另一个 try 块,再后面跟着一个 catch 块。

结论

OOP是程序员应该了解的一个重要概念。彻底学习它还将帮助您成功地使用使用 OOP 概念的语言进行编程。

如果您正在准备面试或测试,上述面试问题和答案将帮助您刷新对 OOP 概念(如类、对象、封装、多态性、继承、抽象等)的理解。这样,您就可以充满信心地参加面试,成功地应对面试并建立您的职业生涯。

您还可以参考其中一些 SQL 面试问题。

通俗易懂讲解《今天你应该知道的21个常见OOP面试题及答案》!您必须观看的最佳 2 个视频

【内定確定!?】面接官が思わず採用したくなる逆質問5選
https://www.youtube.com/shorts/rS1MFzklIMw
面接で「転職理由を教えてください」と聞かれた時の回答
https://www.youtube.com/shorts/4E3qEUSOLT4