50 个软件工程面试问题及答案

本文将为应届生和有经验的候选人提供软件工程面试问题及答案,帮助他们获得梦想中的工作。

 

面向应届生的软件开发人员面试问题及答案

1) 软件的重要类别有哪些?

  • 系统软件
  • 应用软件
  • 嵌入式软件
  • Web 应用程序
  • 人工智能软件
  • 科学软件。

👉 免费 PDF 下载:软件工程面试问题与答案


2) 计算机程序和计算机软件的主要区别是什么?

计算机程序是一段编程代码。它执行一项明确定义的任务。另一方面,软件包括编程代码、文档和用户指南。


3) 什么是软件再工程?

它是软件开发的一个过程,用于提高软件系统的可维护性。

Software Engineering Questions


4) 简要描述软件开发过程

软件开发生命周期包括以下阶段:

  • 需求分析
  • 规格说明
  • 软件架构
  • 实施
  • 测试
  • 文档
  • 培训和支持
  • 维护

5) 有哪些 SDLC 模型?

瀑布模型、螺旋模型、大爆炸模型、迭代模型和 V 模型是一些著名的SDLC 模型


6) 什么是验证和确认?

验证

验证是指确保软件实现特定功能的活动集。

验证

它指的是确保软件是根据客户需求构建的活动集。


7) 在软件开发过程中,“调试”是什么意思?

调试是消除错误的过程。它是成功测试的一个非常重要的部分。


8) 如何确保您的代码既安全又快速?

在软件开发中,安全永远是第一位的。所以如果程序的执行很慢,我将尝试找出原因并找出提高其时间复杂度的方法。


9) 说出两个用于跟踪软件需求的工具?

有很多方法可以跟踪需求。

两个常用的方法是:

  • 创建需求规格文档以列出所有需求。
  • 创建 Excel 表格,列出需求、类型、依赖性、优先级等。

10) Stubs 和 Mocks 的主要区别是什么?

Stub 是界面的最小实现,通常返回硬编码数据,而 Mock 通常根据预期验证输出。这些预期在测试中设置。


11) 您喜欢用什么语言编写编程算法?

每位开发人员在编程语言选择方面都有自己的看法。不过,应该偏好高级语言,因为它们是动态的。例如 C 和 C++ 语言。


12) 什么是计算机软件?

计算机软件是一个软件包,包括一个软件程序、其文档以及如何使用该软件的用户指南。


13) 在您看来,哪个 SDLC 模型最好?

没有这样的排名,因为 SDLC 模型是根据开发过程的需求来采用的。它可能因软件而异。


14) 什么是软件项目经理?他的角色是什么?

软件项目经理是负责管理软件开发项目的个人。

项目经理负责项目规划、监控进度、沟通。他还管理风险和资源,以在时间、成本和质量约束内交付项目。


15) 什么是软件范围?

软件范围是一个明确定义的边界。它包括开发和交付软件产品所做的所有类型的活动。

软件范围定义了将作为软件一部分交付的所有功能和工件。范围还确定了产品将做什么?项目不包含什么?什么是项目估算?

此过程有助于估算软件产品的各个方面。此估算可以咨询专家或使用预定义公式来确定。


16) 如何计算软件产品的大小?

软件产品的大小可以通过以下两种方法计算:

  • 计算交付的代码行数
  • 计算交付的功能点数

17) 什么是功能点?

功能点是软件产品提供的功能。它被认为是衡量软件大小的最重要指标。


18) 有哪些可用的软件项目估算技术?

最常用的估算技术是:

  • 分解技术
  • 经验技术

19) 什么是软件配置管理?

软件配置管理是跟踪和控制软件中发生的变化的过程。

变更控制是一项功能,可确保对软件系统所做的所有更改都是一致的,并且是使用组织规则和法规创建的。


20) 如何衡量项目执行情况?

我们可以通过活动监控、状态报告和里程碑清单来衡量项目执行情况。


21) 谈谈一些项目管理工具。

根据软件项目的需要,有许多类型的管理工具可供使用。其中一些是 Pert 图、甘特图、资源直方图、状态报告等。


22) 什么是软件需求?

软件需求是拟议软件系统的功能描述。它被假定为目标系统、其功能和特性的描述。


23) 什么是可行性研究?

这是衡量软件项目开发对组织有多么实用和有益。软件分析师进行研究以了解项目的经济、技术和运营可行性。

  1. 经济方面:包括培训成本、附加工具成本以及项目成本和效益的总体估算。
  2. 技术方面:评估技术方面。这个系统有可能开发吗?评估将在其上运行软件的机器和操作系统的适用性,软件开发知识以及可用于此项目的工具。
  3. 运营方面:在这里,分析师需要评估组织能否顺利适应项目需求所做的更改。该问题是否值得以估算成本解决?

在研究了所有这些之后,创建了最终的可行性报告。


24) 什么是功能需求和非功能需求?

功能需求是用户对拟议软件产品的功能期望。

非功能需求与安全性、性能、用户界面的外观和感觉有关。


25) 什么是软件度量?

软件度量提供了软件过程各个方面的度量,这些度量分为:

  1. 需求度量:需求长度、完整性
  2. 产品度量:代码行数、面向对象度量、设计和测试度量。

26) 什么是模块化?

模块化是一种将软件系统划分为多个离散模块的技术。这些模块期望独立执行任务。


27) 什么是内聚性?

内聚性是衡量模块元素之间内部依赖性的指标。


28) 提及一些软件分析与设计工具?

一些最重要的软件分析和设计工具是:

  • 数据流图
  • 结构化图
  • 结构化英语
  • 数据字典
  • 层次输入处理输出图
  • 实体关系图和决策表

29) 什么是 0 级数据流图?

最高抽象级别称为 DFD 的 0 级。它也称为上下文级 DFD。它将整个信息系统描绘成一个图。


30) 结构化英语和伪代码的主要区别是什么?

结构化英语是本地方言。它用于编写程序模块的结构。它使用编程语言关键字。另一方面,伪代码更像编程语言,但没有特定语言的语法。


面向有经验的软件工程面试问答

31) 什么是结构化设计?

结构化设计是问题的概念化。它也称为解决方案设计,基于“分而治之”策略。


32) 什么是函数式编程?

它是一种编程方法,它使用数学函数的概念。它提供计算方法作为数学函数,这些函数还产生与程序状态无关的结果。


33) 什么是质量保证与质量控制?

质量保证检查开发软件时是否遵循了正确的流程,而质量控制则侧重于维护软件产品的质量。


34) 什么是 CASE 工具?

CASE 是计算机辅助软件工程的缩写。它们是一套自动化的软件应用程序,用于支持、增强和加强 SDLC 活动。


35) 哪种流程模型能在软件出现问题之前消除缺陷?

无瑕疵软件工程方法能在软件出现问题之前消除缺陷。


36) 解决这个问题

抽屉里有二十只不同类型的袜子,在一个黑暗的房间里。最少需要拿多少只袜子才能确保你有一双匹配的袜子?

如果你拿出三只袜子,即使概率是 50%,它们也可能是同一种类型。概率永远不等于现实。因此,要“确保你有一双匹配的袜子”,唯一的方法是拿出至少 11 只袜子。


37) 如何确保你写的代码能够处理各种错误情况?

我可以编写测试来定义预期的错误情况。


38) 解释线程和进程的区别?

进程是计算机程序的实例。在一个程序中可能有一个或多个线程。


39) 说出 EXE 和 DLL 的区别?

exe 是一个可执行程序,而 DLL 是一个可以被程序动态加载和执行的文件。它是程序的外部代码存储库。由于两者都是不同的程序,因此可以重用同一个 DLL,而不是将其代码包含在自己的文件中。它还减少了所需的存储空间。


40) 什么是强类型和弱类型?哪个更好?为什么?

强类型在编译时检查变量的类型。另一方面,弱类型在运行时检查系统类型。其中,强类型总是更受青睐,因为它能最大限度地减少错误。


41) 描述接口导向、面向对象和面向方面编程的区别。

  • 接口编程是基于契约的。
  • 面向对象是一种编写具有单一目的的粒状对象的方式。
  • 面向方面编程是将代码进行区分,以便各种对象承担主要任务,而辅助任务由独立的对象承担。

42) 为什么使用 catch (exception) 总是错误的?

这是一个坏主意,因为:

  • 由于没有定义变量,因此无法读取异常。
  • 当你知道异常类型时,使用异常是好的。

43) 通过 HTTP 标头传递什么类型的数据?

脚本和元数据通过 HTTP 标头传递。


44) 如何确定需求的优先级?

首先,你需要通过评估数据结构来设计系统。然后你应该转到支持它所需的代码结构。


45) 给出面向对象设计和基于组件设计的区别?

面向对象设计可以在一定程度上轻松地封装到基于组件的设计中。


46) 何时使用多态性?

当继承类时需要覆盖功能时,将使用多态性。它是关于共享类和共享契约的。


47) 堆栈和队列的区别是什么?

  • 队列总是先进先出。
  • 堆栈总是后进先出。

48) 测试代码质量的关键是什么?

在我看来,单元测试框架对于测试代码质量至关重要。


49) 您认为软件维护是否昂贵?

在我看来,如果我们使用正确的开发流程,软件维护永远不会昂贵。


50) 给出标签和分支的区别?

标签用于版本发布,是用于此目的的临时持有位置。但是,当更改合并到主干时,分支会被删除。


51) 受保护的类级别变量在哪里可用?

派生自基类的任何子类都可以访问受保护的类级别变量。


52) 是否有可能为单个 try 语句执行多个 catch 块?

是的。可以为单个 try 语句执行多个 catch 块。


53) 何时需要将类声明为抽象?

在以下情况下,我们应该将类声明为抽象:

  1. 当类继承自抽象类,但并非所有抽象方法都已被重写时。
  2. 当类中的至少一个方法被声明为抽象时。

54) 开发一个算法,输出您当前的位置以及该区域的 ATM 位置列表。找到离您最近的 K 个 ATM。

创建一个 getDistance(a, b) 方法,该方法计算 a 和 b 之间的距离。

代码

import java.util.HashMap;

import java.util.Map;

import java.util.PriorityQueue;

public class PrioRQueueExample {

public static void main(String[] args){

PriorityQueue<Double> pq = new PriorityQueue<Double>((x,y)-> {Double z = y-x;return z.intValue(); });

PrioRQueueExample pqe = new PrioRQueueExample();

//Number of ATMs to return i.e. K

int num_ATMs = 3;

double curr_loc = 0.00;

Map<String,Double> nallATMLocs = new HashMap<String,Double>();

//Map of ATM names and their distance co-ordinates

nallATMLocs.put("atm1",45.0);

nallATMLocs.put("atm2",78.0);

nallATMLocs.put("atm3",54.0);

nallATMLocs.put("atm4",64.0);

nallATMLocs.put("atm5",35.0);

nallATMLocs.put("atm6",42.0);

nallATMLocs.put("atm7",57.0);

nallATMLocs.put("atm7",1.00);

nallATMLocs.forEach((atm,dist) ->{if(pq.size() < num_ATMs){

pq.add(pqe.getLocation(curr_loc,dist));}

else{

if(        pq.peek() > pqe.getLocation(curr_loc,dist)){

pq.poll();

pq.add(pqe.getLocation(curr_loc,dist));

}

}

});

pq.forEach(atmLoc -> System.out.println(atmLoc));

}

private double getLocation(double curr,double atm){

return atm - curr;

}

}

这些面试问题也将有助于您的口试