💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 前 50 名软件工程面试问答 > 原文: [https://www.guru99.com/software-engineering-interview-questions.html](https://www.guru99.com/software-engineering-interview-questions.html) [下载 PDF](https://www.guru99.com/pdf/software-engineering-interview-questions.pdf) **1)软件的重要类别是什么?** * 系统软件 * 应用程序软件 * 嵌入式软件 * 网络应用 * 人工智能软件 * 科学软件。 **2)计算机程序和计算机软件之间的主要区别是什么?** 计算机程序是一段程序代码。 它执行定义明确的任务。 另一方面,该软件包括编程代码,文档和用户指南。 **3)什么是软件再造?** 它是软件开发的过程,旨在提高软件系统的可维护性。 **4)简要描述软件开发过程**: 软件开发的生命周期包括以下几个阶段: * 需求分析 * 规范 * 软件架构 * 实作 * 测试中 * 文献资料 * 培训与支持 * 保养 **5)有哪些 SDLC 型号?** 瀑布模型,螺旋模型,大袋模型,迭代模型和 V 模型是一些著名的 SDLC 模型。 ![Software Engineering Questions](https://img.kancloud.cn/10/2b/102bfb3c82e2938a17edcc9bc1c58abb_280x318.png) **6)什么是验证和确认?** **验证**: 验证是指确保软件实现特定功能的一系列活动。 **验证**: 它是指确保根据客户需求构建的软件的一组活动。 **7)在软件开发过程中调试是什么意思?** 调试是导致错误消除的过程。 这是成功测试的非常重要的部分。 **8)如何确保您的代码既安全又快速?** 在软件中,开发安全始终是第一位的。 因此,如果程序执行缓慢,那么我将尝试找出导致时间复杂度的原因。 **9)列出用于跟踪软件需求的两个工具?** 有很多方法可以跟踪需求。 **两种常用的是**: * 制作需求规格说明文件以列出所有需求。 * 创建一个 excel 表格,列出需求,类型,依赖项,优先级等。 **10)存根和模拟物之间的主要区别是什么?** 存根是接口的最小实现,该接口通常返回硬编码的数据,而模拟通常会根据期望验证输出。 这些期望在测试中确定。 **11)您喜欢使用哪种语言编写编程算法?** 在选择编程语言时,每个开发人员都有自己的看法。 虽然,人们应该更喜欢高级语言,因为它们是动态的。 像 C 和 C ++语言一样。 **12)什么是计算机软件?** 计算机软件是一个软件包,其中包括一个软件程序,其文档以及有关如何使用该软件的用户指南。 **13)根据您的情况,哪种 SDLC 模型最好?** 那里没有这样的排名,因为根据开发过程的需要采用了 SDLC 模型。 各个软件可能有所不同。 **14)谁是软件项目经理? 他的作用是什么?** 软件项目经理是负责管理软件开发项目的人员。 项目经理正在进行项目计划,监视进度,进行沟通。 他或她还管理风险和资源,以便在时间,成本和质量限制内交付项目。 **15)软件范围是什么意思?** 软件范围是定义明确的边界。 它包括开发和交付软件产品所完成的所有类型的活动。 软件范围定义了将作为软件一部分交付的所有功能和工件。 该范围还确定了该产品将做什么? 什么不是项目的一部分? 什么是项目估算? 此过程有助于估计软件产品的各个方面。 可以咨询专家或使用预定义的公式来确定此估计值。 **16)如何查找软件产品的尺寸?** 可以使用以下两种方法来计算软件产品的大小 * 计算已交付代码的行数 * 计算交付的功能点 **17)什么是功能点?** 功能点是软件产品提供的功能。 它被视为衡量软件大小的最重要指标。 **18)有哪些可用的软件项目估算技术?** 最广泛使用的估算技术是: * 分解技术 * 经验技术 **19)什么是软件配置管理?** 软件配置管理是跟踪和控制软件中发生的更改的过程。 变更控制是一项功能,可确保对软件系统所做的所有变更都是一致的,并且是使用组织规则和规定创建的。 **20)您如何衡量项目执行情况?** 我们可以使用“活动监视”,“状态报告”和“里程碑清单”来衡量项目的执行情况。 **21)告诉我一些项目管理工具。** 根据软件项目的需要,使用了许多类型的管理工具。 其中一些是 Pert 图表,Gantt 图表,资源直方图,状态报告等。 **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(异常)总是一个坏主意?** 这是一个坏主意,因为: * 由于未定义变量,因此无法读取异常 * 当您知道异常类型时,最好使用异常。 **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; } } ```