软件工程面试问题和答案 [适合应届生和有经验者]

已发表: 2020-11-18

软件工程是当今最受欢迎的职业选择之一。 在这个竞争激烈的领域中,成功的专业人士必须平衡他们的技术、业务和个人技能,才能在游戏中保持领先。

此外,技术进步正在加速和颠覆行业。 因此,了解基本概念至关重要。 通过这篇文章,我们将介绍最热门的软件工程面试问题和答案,以指导您进行准备。

在继续进行问答之前,让我们先看一下您可以在该领域从事的一些工作名称:

  • 软件设计师
  • 全栈开发人员
  • 软件程序员
  • IT项目经理
  • 信息系统经理
  • 数据科学家
  • 机器学习工程师
  • 云工程师
  • 网络安全工程师

在面试上述任何职位时,您的未来雇主将测试您的概念知识和技能。 因此,有抱负的软件工程师可以受益于将他们的学位与实践经验相结合,无论是通过动手项目还是实习。

此外,您的沟通能力和团队导向可以在使您与竞争对手区分开来方面发挥重要作用。 因此,当您为招聘周期做好准备时,请记住这些事情。

从世界顶级大学学习在线软件课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

有了这个,现在是时候深入研究软件工程工作面试中被问到最多的问题了。

阅读:软件开发职业

软件工程面试问答

1. 列出不同类型的软件。

计算机软件可分为以下几类:

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

2. 区分计算机程序和计算机软件。

计算机程序包括能够在执行时执行明确定义的任务的编程代码。 相反,除了编程代码之外,计算机软件还包括文件(文档和用户指南)。 因此,程序和软件都包含一组指令,但与程序相比,软件的范围更广。

3.解释SDLC的主要步骤。

SDLC 是软件开发生命周期的缩写形式。 它由许多阶段组成,包括:

  • 规划:软件估算和项目规划的其他方面
  • 可行性分析:需求分析,列出软件规格
  • 软件设计:确定设计模式,开发原型
  • 软件开发:将需求转化为工作代码
  • 测试:检查代码的规定要求、质量、安全开发实践等。
  • 部署:实施软件并将其与不同系统集成以创建功能齐全的产品
  • 项目文档:收集资源并组织软件文件,包括代码、文档和许可证。
  • 培训和支持:交流新技术的使用、功能和可能性,促进有效的知识转移
  • 操作和维护:报告问题并改进产品

4. 列出几个基本的 SDLC 模型和方法。 在你看来,哪个是最好的?

Waterfall、V-Model、Iterative、Spiral、Big-bag 和 Agile 是一些最流行的 SDLC 模型。

至于排名最高的方法,没有单一的答案,因为解决方案取决于软件开发过程的需要。 例如,瀑布模型适用于需要灵活性的长期项目。 当有未知需求时,V 形模型效果很好。 螺旋模型非常适合高度定制的项目等。

5. 软件再工程是什么意思?

软件再造旨在改进软件系统。 这是在不干扰其当前功能的情况下更新软件的过程。 它可以包括可维护性任务,例如添加新功能以使软件产品更加高效和用户友好。

6. 在软件开发的上下文中定义以下内容:(i) 验证 (ii) 确认 (iii) 调试

(i) 验证涉及执行一系列活动以确保软件能够实现特定功能。

(ii) 验证是关于确认软件满足客户的需求。

(iii) 调试是测试过程的一部分,包括消除错误。

7. 您将如何确保您的代码快速且安全?

如果代码执行速度很慢,您将计算程序的时间复杂度。 它是指执行语句的次数,这取决于编程语言、操作系统和处理能力等因素。

此外,无论您使用哪种编程语言,都有多种方法可以保护您的代码。 在这里,安全编码实践的知识变得至关重要。 例如,使用免费工具扫描代码可以帮助您检测 GitHub 上的开源包中的漏洞。

8. 功能性和非功能性软件需求是什么?

需求是对软件系统、其所需特性和目标功能的描述。 它们可以分为功能性需求和非功能性需求。

功能需求是用户对提议产品的期望,而非功能需求与外观、性能、安全性和用户界面等方面相关。

9. 您将如何跟踪软件需求?

市场上有各种各样的工具可用于收集和管理软件需求。 Modern Requirements、ReQtest、Jama Connect 和 Orcanos 是当今从业者中最受欢迎的一些 RM 软件。 选择基于方法和目标,并且因项目而异。 尽管如此,跟踪过程的第一步是列出需求并创建一个 Excel 表,其中包含类型、依赖关系、优先级等详细信息。

10、你对模块化和内聚了解多少?

模块化将软件系统划分为离散的模块。 在这里,每个模块都应独立执行指定的任务。 内聚测量并定义模块不同元素之间的内部可靠性。

11. 软件项目经理做什么的?

项目经理的任务是项目规划、进度监控和沟通等职责。 在软件开发过程中,项目经理的主要职责是管理资源,平衡风险,并按照时间、成本和质量约束交付预期的产品。

12. 什么是软件范围?

软件范围包括交付软件产品所需的所有活动。 它定义了以下方面来简化开发过程:

  • 产品将做什么
  • 什么不是项目的一部分
  • 项目估算(在顾问、专家或公式的帮助下)

13. 您将如何确定项目的可行性?

可行性研究有助于衡量软件开发项目可能给组织带来的实际利益。 软件分析员在准备最终报告之前会考虑三个主要因素。 我们在下面详细解释了它们:

  • 经济:附加功能和工具的成本、培训成本以及最终项目的整体成本效益分析
  • 技术:机器和操作软件的适用性,包括利用可用的技术支持和人力资源开发拟议系统的可能性
  • 运营:能够以估计的成本进行调整并跟上需求和项目的价值。

14. 提及一些软件分析和设计工具。

软件分析和设计程序有助于将需求规范转化为实施。 以下是一些标准工具:

  • 数据流图
  • 数据字典
  • 结构化图表
  • HIPO(分层输入过程输出)图表
  • 实体关系图或 ER 图
  • 决策表

15. 结构化英语和伪代码有什么区别?

用于编写程序模块结构的母语英语称为结构化英语。 它包括编程语言关键字。

相比之下,伪代码方法与编程语言非常相似,但没有任何特定的语法。

另请阅读:软件开发项目理念

16. 您如何确定软件产品的大小?

您可以通过计算交付代码的行数或功能点来计算软件大小。 功能点被认为是一种相关的度量,因为它们代表了软件产品提供的功能。

17. 什么是软件指标?

软件度量是指对需求和产品本身的度量。

  • 需求指标包括长度和完整性等方面。
  • 产品指标与编码行数、设计、测试指标、面向对象指标等有关。

18. 有哪些有用的项目估算技术?

项目估算是健全的软件项目规划的一个组成部分。 以下是一些广泛使用的方法:

  • 分解(软件规模、基于问题和基于过程的技术)
  • 经验(回归分析、建设性成本模型和软件方程)

19. 您如何衡量项目执行情况?

软件实施的审查需要活动监控、里程碑检查表和状态报告。

项目管理工具提供了一种检查进度的舒适方式。 甘特图、Pert 图和资源直方图是其他一些示例。

20. 定义软件配置管理。

配置管理是关于跟踪和控制软件项目中的更改。 保持软件系统与组织规则和法规的一致性至关重要。

21.质量保证和质量控制有什么区别?

进行质量保证检查以确定是否遵循了正确的开发过程。 另一方面,质量控制与保持最终产品的质量有关。

22. 比较面向接口、面向对象和面向方面的编程。

接口编程是一种基于契约的架构模式,用于在组件级别实现模块化设计。

面向对象编程处理编写具有单一目的的粒度对象。

面向切面的编程旨在分离代码,使多个对象承载主要任务,独立对象承载次要任务。

23. 什么时候声明一个类为抽象类?

不能实例化在其声明中包含抽象关键字的类。 在下面提到的情况下,最好将一个类声明为抽象类。

  • 当类中的至少一个方法被声明为抽象时。
  • 当从抽象类继承的类仍然包含抽象方法时。

24. 提及以下之间的主要区别:(i) 堆栈与队列 (ii) 面向对象与面向组件的设计 (iii) 线程与进程 (iv) EXE 与 DLL (v) 标记和分支

(i) 堆栈遵循后进先出 (LIFO) 原则。 而队列总是先进先出,即先进先出。

(ii) 面向对象的设计可以在一定程度上融入到基于组件的设计中。 但是,反过来是不可能的。

(iii) “进程”是指正在执行的计算机程序的实例。 它更重,需要更多的上下文切换。 “线程”是调度程序独立管理的轻量级进程。 一个程序可以有多个线程。

(iv) EXE 和 DLL 都是需要存储空间才能运行的程序。 EXE 是一个基本的可执行程序,而 DLL 则更具动态性。 它是一个可以加载和执行的外部代码存储库,因此占用的空间更少。

(v) 标签保留在特定版本的代码上,通常不会更改。 它们充当版本控制发布的临时存放场所。 分支总是指向开发线的顶端。 因此,一旦推送新的提交或将更改合并到主干中,它们就会被删除。

25. 使用catch(异常)是个好主意吗?

当异常类型已知时,应使用 Catch(异常)。 这是一个坏主意,因为当没有定义变量时您无法读取异常。

26. 两者之间哪个更可取:强类型或弱类型?

强类型应该是单一的弱类型,因为它在编译时检查变量。 此外,它可以大大减少系统错误。 弱类型语言仅在运行时执行转换,可能会产生不可预知的结果。

27. 什么是结构化设计?

结构化设计概念化了遵循“分而治之”策略的问题。 这种系统的方法需要将问题分解为其子元素并单独处理这些较小的问题。 由于这种策略,它也被称为解决方案设计方法。

28. 描述函数式编程。

函数式编程方法涉及数学概念的应用。 它提供了一种计算数学函数的方法,因此无论程序状态如何都可以生成结果。

29. 您如何确定需求的优先级?

首先,您必须评估数据结构。 然后,您需要制定一个代码结构来支持它。

30、你对CASE工具了解多少?

CASE 是计算机辅助软件工程的缩写。 它由一组支持 SDLC 活动的自动化软件应用程序组成。 CASE 工具可以通过提供以下服务来增强和加强软件项目:

  • 需求分析
  • 结构分析
  • 代码生成
  • 测试用例生成
  • 文件制作
  • 逆向工程

外卖

劳工统计局(美国)预测未来十年对软件开发人员的需求将增长 22%。 印度很可能会遇到同样的需求激增。

根据 LinkedIn 的“印度劳动力报告”,其平台上的软件工程职位发布在 2018 年上半年是多个行业中最高的。随着我们向前发展,教育、法律和设计等突出行业的机会将继续上涨。 阅读有关印度软件开发人员薪水的信息。

正如通过上面列出的问题所观察到的,想要进入这个行业的人需要广泛的相互关联的能力。 以下是您需要掌握的硬技能的快照:

  • C++、C#、Java
  • HTML, CSS JavaScript
  • SQL、Python、引导程序
  • 面向对象设计
  • 调试和测试软件
  • 使用现代语言(Ruby、Go、R 等)进行编码
  • 人工智能项目知识等

除了这些技术能力,你还需要掌握多任务处理、沟通、时间管理、注重细节和团队合作的艺术。

至于学历,计算机科学或相关领域的学士学位通常涵盖入门级工作的最低资格标准。 但每个人的职业道路都有些不同。 有些人可能是通过自学、在线课程或编码训练营进入劳动力市场的。 其他人可能在 IT 工作几年后攻读了高级学位。

拥有研究生级别的证书可以帮助您快速开始您的职业生涯,甚至获得令人垂涎的工作晋升。 查看由利物浦约翰摩尔斯大学认证的upGrad计算机科学硕士。 它旨在通过高度互动的教学法为您提供与行业相关的技能。

根据您的兴趣和职业抱负,您还可以参加软件开发执行 PG 计划 - IIIT-B 的全栈开发专业化或专业 PG 认证。 与硕士和文凭课程相比,此类证书的时间承诺更短。 它们允许您展示您在特定领域的技能,例如后端开发、前端开发、网络安全、DevOps、大数据和云计算。

有了这个,我们已经涵盖了顶级软件工程面试问题和答案 我们试图包括一般性和技术性主题。 此外,我们还提到了潜在的职业选择,并概述了 IT 行业的趋势和前景。 将此信息用作您学习之旅的路标并简化您的准备策略!

踏上梦想的工作

申请计算机科学理学硕士