软件工程笔试题及答案
从小学、初中、高中到大学乃至工作,我们最不陌生的就是试题了,笔试题是学校或各主办方考核某种知识才能的标准。你知道什么样的试题才算得上好试题吗?这里小编给大家分享一些关于软件工程笔试题及答案,方便大家学习了解。
软件工程师面试笔试题及答案
一、填空(10__1分=10);(1)产品设想是产品用途和形式的概括描述,可以通;(2)项目范围是项目中要完成的工作;(3)产品设计过程的特点可以概括为自顶向下和以用;(4)备选需求的思想可以来自设计团队的内部或外部;(5)工程设计的第一步是工程设计分析;(6)体系结构设计必须既考虑功能需求,又考虑非功;(7)设计模式出现在几个不同的抽象级别上,包括体;(8)
一、填空(10 __1分=10)
(1)产品设想是产品用途和形式的概括描述,可以通过主要产品功能列表的形式详细阐明。
(2)项目范围是项目中要完成的工作。风险承担者是受产品影响或参与。影响产品开发的任何人。
(3)产品设计过程的特点可以概括为自顶向下和以用户为中心。前者意味着设计人员首先要在高抽象级别上引出需要并生成、改进、评估和选择需求,然后再依次在更低的级别上引出需要并生成、改进、评估和选择需求。后者意味着设计过程是以风险承担者为焦点,使用实验评估,而且高度重复。
(4)备选需求的思想可以来自设计团队的内部或外部。前一种来源包括用户和其他风险承担者、专家、现实物品和比喻、竞争产品和相似产品。后一种来源包括团队集体讨论、个人独立思考和建模。
(5)工程设计的第一步是工程设计分析。这项活动的输入包括可能以各种模型和原型作为其补充的SRS,它们都是在产品设计过程中产生的。从软件的生命周期的观点来说,工程设计发生在设计阶段。在这项活动中分析问题的好方法是建模,这将产生该活动的主要输出。
(6)体系结构设计必须既考虑功能需求,又考虑非功能需求。使程序能够满足其功能需求的体系结构可能有任意多个,但其中只有质量特性能够同时使程序满足其非功能需求。软件体系结构设计者必须考虑多种程序以找出那些所能指定的程序既能满足功能需求,又能满足非功能需求的结构。
(7)设计模式出现在几个不同的抽象级别上,包括体系结构风格,它是处于体系结构级别的模式;中级设计模型它是设计类及其交互作用的模式;数据结构和算法它是实现抽象数据类型和有效操作的模式;编程惯用法,它是能够有效使用特定编程语言的模式。
(8)在应用树中,树根以utility加以标记,根的子树是概貌的名称,树叶表示场景。这些树帮助生成用来评估体系结构方案的场景的集合。
(9)正确使用表示方法的SAD是结构良好的SAD,全部可以由一个程满足的一组设计说明是一致的。所指定的程序能够满足其所有需求的软件体系结构是完整的。如果SAD易于理解,则是清晰的。
(10)详细设计解析非常类似于体系结构设计解析。可用于生成和改进设计方案的技术包括基于程序功能的分解、基于质量特性的分解、从概念模型中复制设计、根据类似程序的设计模型创建设计以及使设计基于设计模式之上。
二、名词解释(5__3分=15)
1. 模型
模型是用来表示另一个实体(目标)的实体,建立模型要确定目标的部件或元素与模型的部件或元素之间的对应关系,还要确定目标的部件或元素间相互关系与模型的部件或元素间相互关系之间的对应关系。
2. 静态设计模型
静态设计模型表示不会在程序执行过程中发生变化的程序方面。
3. 动态设计模型
动态设计模型表示在程序执行过程中所发生的事情。
4. 用例
用例是产品与环境之间完整交互作用的类型。
5. 场景
场景是产品与特定个人之间的交互作用。
6. 类模型
问题或软件解决方案中类的表示。
7. 抽象类
它是一个不能被实例化的类,任何至少有一个抽象操作的类都必定是抽象类,因为如果实例化这样的类,那么客户并不能调用其包含的抽象操作,不是抽象类的类是具体类。
8. UML接口
是公有的属性和抽象操作的有名集合。
9. 虚拟设备
真实硬件设备或系统的软件模拟或接口。
10. 同步消息
从一个对象到另一个对象的通信,而这个发送个体在发送信息之后暂停执行。
11. 异步消息
从一个对象到另一个对象的通信,而这个发送个体在发送信息之后继续执行。
12. 严格分层体系结构
允许每层只使用紧邻其下的那一层的分层体系结构
13. 松弛分层体系结构
允许每层都可以使用其下的所有层的分层体系结构
14. 黑板体系结构风格
当共享数据库改变时,共享数据库将激活存取器。这种变体称为黑板体系结构风格,共享数据库称为黑板
15. 仓库体系结构风格
共享数据库是被动的,由存取器对其进行查询,这些存取器可以继续运行,或者由其他某个组件控制,这种变体称为仓库体系结构风格,共享数据库称为仓库
16. 异构体系结构
采用两种或多种体系结构风格的体系结构
三、简答题(30分)
1. 说出设计当作问题解决方案来考虑的3个优点。
第一:这意味着信息在问题和解决方案之间可能是隔离的
第二:由此产生的看待设计的观点
第三:意味着要在设计中使用历史悠久的一般的问题解决技术
2. 为什么说抽象化是重要的问题解决技术?说出3点理由。
a) 使问题简化——真实的问题总是有许多与其解决方案无关的细节
b) 使问题的解决结构化——许多设计问题都太大太复杂,以致不能完全解决
c) 有助于以自顶向下的方式构成问题解决过程
3. 例举建模的好处和危险。
好处:可以简化要表示的目标,从而使我们更容易理解,记录和研究目标。研究模型还可能比直接研究目标更省成本,更安全。
危险:模型永远不能精确再现所表示的目标,因此研究模型得出的结论有可能不正确。
4. 例举软件的产品设计人员和工程设计人员所关注的具体方面。
部分具体的软件产品设计:屏幕布局——包括用户界面组件的布置以及这些组件的大小,字体颜色和外观;用户与程序之间的交互顺序;消息的编写;图像的使用和外观;
程序将执行的功能;程序所需的输入和产生的输出;程序的质量和可靠性;用户使用该程序达到其目标的易用性;程序是如何适应和改变用户工作方式
部分具体的软件工程设计:构成程序的主要部件或子系统,包括它们的接口,功能,交互作用,速度等;程序中的模块以及这些模块的接口;程序中模块之间的交互作用;模块的内部细节,包括它们的数据和行为;程序中使用的数据结构和算法;程序中异常和错误处理机制;程序中的进程和线程。
5. 为了核实某个用例图是否包括所有应该包括的用例,设计人员应该怎样做?
通过检查产品需要清单来确保所有需要都已得到满足,或者确保所有未被满足的需要都是故意为之的,设计人员可以检查用例图的完整性
6. 给出3个因太小而不应成为用例的活动示例。
某些因太小而不宜作为用例的活动示例是:给设备或另一个系统发送信号或消息,接收来自设备或另一个系统的信号或消息,向用户显示消息。
7. 哪些表示法可用于用例描述?
任何能够说明交互作用中活动流程的表示法都可以用于用例描述,其中包括uml活动图,uml交互作用图,流程图,编程语言和自然语言。
8. 为什么至少必须有一个风险承担者的需要与用例有关?
如果某种产品的任何风险承担者都没有与某个用例相关的需要,则该产品就没有理由支持这个用例。产品应该满足风险承担者的需要和要求,产品的所有特点和功能都应该服务于这个目标。
9. 如果在开始工作时没有完整、正确和一致的产品设计,那么工程设计人员必须做什么?
如果工程设计人员没有得到由产品设计人员提供的完整,正确和一致的产品设计,则除了亲自完成产品设计以外别无选择,如果完全不知道产品是什么,就不可能想出如何来实现产品。
10.对工程设计分析最有用的静态和动态模型是什么?
对面向对象的工程分析最有用的静态模型是分析类模型,最有用的动态模型是用例模型
11.给出一些不应该出现在概念模型中但应该出现在设计类模型中的实例。
不应该出现在概念模型中但应当出现在设计类模型中的示例是那些与软件系统有关而问题无关的实体,具体例子包括只与实现有关的类属性,比如:计数器,引用以及仅仅为了方便的变量;还有只与实现有关的属性的特征,比如属性是公有还是私有,属性的数据结构是什么;以及只与实现有关的操作,比如构造函数,析构函数,结束函数,获取恶化设置属性的方法;或者是只与实现有关的操作的特征,比如操作是公有还是私有,它们支持哪种并发性。
12.给出一些不应该出现在设计类模型中但应该出现在实现类模型中的实例。
不应该出现在设计类模型中但应当出现在实现类模型中的示例是那些与特定环境和语言中的程序实现有关的实体。具体的例子有来自类库的具体类,比如Java.lang.integer;还有哪些为语言所特有的数据类型,比如unsinged long;以及操作和初始化表达式
13.在软件体系结构文档中应该包括什么信息?
软件体系结构文档应该包括产品概述,给出体系结构模型,提供模型之间的`映射,解释设计的理论依据,并包括词汇表
14.什么图可以用来模拟程序部件之间的协作?说出五种。
Uml顺序图,通信图,活动图,用例模型,数据流程图
15.描述用于生成中级设计模型的两种创建技术和两种转换技术。
两种创建技术是功能分解和基于主题的分解。在功能分解技术中,为得到低级别的组件而分解高级别组件的功能。在基于主题的分解技术中,设计主题从设计故事中被吸取出来,然后用来生成解决各个主题的模式。
两种转换技术是把概念模型转换为设计模型以及转换类似程序的设计,转换概念模型从概念模型着手,将其元素从问题实体转换为设计组件,修改这些组件并添加必要的新组件,。转换类似的设计需要修改原来的设计,以满足新产品的需求。
16.职责是如何帮助做出模块中应该放入哪些操作和数据的决策?
某个模块为履行其职能所需的全部数据和操作都应该被放入该模块中,也只有这样的数据和操作才应该被放入该模块之中。这将增强模块的内聚性,并降低模块的耦合性。
17.解释操作何时活动、暂停或执行。对象可以暂停吗?为什么?
操作当某个进程在运行其代码时处于执行状态,当等待同步消息返回时处于暂停状态,当执行或暂停时属于活动状态,对象可以是活动的,因为对象可以有一个或多个活动的操作,但对象不能被暂停,。有人可能会说,如果某个对象的一个或多个操作被暂停,则该对象就处于暂停状态,但是,一个或多个操作被暂停的对象却可能有一个或多个操作正在执行,因为可能有多个进程在运行该对象的代码,因此说一个或多个操作被暂停的对象处于暂停状态是没有意义的。
18.可选、选择、中断和循环片断分别可以有多少个操作数?
可选,中断和循环片段只能有一个操作数,选择片段可以有一个或多个操作数。
19.解释分层风格如何支持重用的?
在分层体系结构中,每一层都应当包含内聚元素,并只和它下面的那个模块耦合,这样可以比较容易的提取有一个层并在另一个程序中使用它,此外,类似的程序可能需要类似的层,所以层的重用也将更加容易。
20.解释分层风格的程序难以调试的原因。
在具有分层体系结构的程序中实现许多程序特性将跨越几个层,也许是大部分层,如果出现bug,则难以确定发生故障的层,从而使程序难以调试。
10. 下面的UML序列图是对一个自动气象站中对象的交互行为建模。在图中直接圈出所有
错误,并重新绘制顺序图。(10分)
(1) 根据上图中,什么消息被发送Weathervane对象?
cheeckDirection() checkSpeed()
(2)创建了多少个Observation 对象?
1个
(3)record( )操作在其参数设置前是否能被调用?
否
(4)self对象的类型是什么?
整型
(5)Weathervane对象的名称是什么?
W
11. 下面两张图中,哪一张图是框线图,并简述框线图的用途。(5分)
第一张图是
框线图的用途:因为关于框线图的规定非常松散,所以它们不仅可用于静态建模,也可用于动态建模,还能表示体系结构设计者想要表示的任何程序方面。在实践中,框线图的最常见用途是表示把系统分解为主要构件或子系统,并表明其交互作用关系的静态模型。
12. 下面两张图中,哪一张图是部署图,并简述部署图的用途。(5分)
?device?ServerPC;?artifact?GameServer;TCP/IPRMI?device?GameDat;?device?ClientPC?deploy?;第二张图是;部署图的用途:部署图显示了系统中使用的实际和虚拟;
13.下面两张图中,哪一张图描述的管道过滤器风格;(10分);第一张图是;管道过滤器风格的特征:a:以数据流向的过程为核心
?device?ServerPC
?artifact?GameServer
1
TCP/IPRMI?device?GameDataServer?DB?GameDataRulesBoardImageTokenImage
?device?ClientPC?deploy??artifact?GameClient
第二张图是
部署图的用途:部署图显示了系统中使用的实际和虚拟的机器,这些机器的通信路径、实现该系统的程序和数据文件以及程序运行和数据主流所在的位置。因此,部署图为模拟物理体系结构提供了功能丰富的表示方法。部署图在体系结构(特别是分布式系统)的设计过程中是有用的,在详细设计过程中亦可用于模拟物理的部署。
13. 下面两张图中,哪一张图描述的管道过滤器风格。简述管道过滤器风格的特征和优缺点。
(10分)
第一张图是
管道过滤器风格的特征:a:以数据流向的过程为核心,因此也被称为:数据流风格。
b:过滤器自身功能独立而完整,不需要知道其他过滤器的存在与否,相互之间无状态交互。 c:过滤器对输入的数据流有限制,并必须保证输出流的正确性。
d:系统 优点
(1)过滤器易于修改或替换,这样在解决问题或修改程序的行为时,程序的修改将非常简单。
(2)过滤器的重新排列几乎毫不费力,这便于开发几个完成类似任务的程序。
(3)过滤器具有高可重用性。
(4)假设可以使用同步管道,那么这种风格支持并执行,而且相对容易实现。
缺点
(1)过滤器只能通过管道进行通行,所以它们的活动难以协调。
(2)过滤器通产使用和生成非常简单的数据流,如字符流,这意味着,在把输入转换成有用的格式,然后再把结果转换成输出时使用的简单格式时,过滤器可能必须完成大量的操作。
(3)错误处理非常困难,错误信息只能通过管道输出或传送。当可靠性和安全性很重要时,由于错误检测和恢复难以完成,所以不适合使用这种风格。
(4)并行执行的好处可能并不牢靠。管线也许不能有效地同步过滤器,一些过滤器在进行输出之前可能需要等待所有的输入。
14. 下面两张图中,哪一张图描述的事件驱动风格。简述事件驱动风格的特征和优缺点。(10分)
第二张图是
事件驱动风格的特征:事件驱动系统的基本观点是一个系统对外部的表现可以从它对事件的处理表现出来。
优点:(1)易于添加、删除和修改组件,所以利用这种风格编写的程序具有可变性和可维护性(2)程序组件的独立性支持可重用性、健壮性和容错性。
缺点:(1)尽管时间可以携带数据,但是在由事件分配器进行中介时,组件的交互作用将难以到达。为了解决这个问题,事件驱动的系统通常还支持显示的调用操作,尽管这将耦合组件。(2)宣布事件的组件不能保证有组件对他们进行相应,也不能对组件相应他们的顺序寄予任何期望。有时,这会造成难以编写出正确的程序。(3)事件通信量往往有很大的变化:事件分配器经常处于空闲状态,而在其他时间,它则会收到大量事件,这样将难以达到性能目标。
四、综合设计题(每小题14分,共35分)
1. 绘制活动图,说明一般设计的步骤,并说明活动图的用途。(7分)
一般设计的步骤:一般设计过程遵循一般的问题解决策略。首先是理解设计问题。寻找设计问题解决方案的过程是重复生成新候选解决方案或细化现有候选解决方案,然后依据设计问题对它们进行评估。最终应该有一个或多个令人满意的解决方案出现,然后即可把最好的一个以文档形式记录下来并交付。
活动图的用途:一般设计过程分析和解析之间的重复。表示任何在问题解析过程中发现的对问题的误解都将导致返回到分析活动。
2. 绘制活动图,模拟洗衣过程。该模型中应包括并发动作,并说明活动图的用途。(7分) 活动图的用途:简化描述了洗衣过程:包括对系统的工作流建模或者对具体的操作建模。
3. 绘制自助洗车系统的用例图,并说明用例图的用途。(7分)
4. 绘制自动取款机的用例图,并说明用例图的用途。(7分)
5. 使用状态机图绘制交通路口红绿灯的并发行为模型,并说明状态机图的用途。(7分)
软件工程师面试题小练
一、JAVA编程基础部分 1. "=="和equals方法究竟有什么区别?
答:==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
Equals()方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。 2. 作用域(访问修饰符)public,private,protected,以及不写时的区别?
答:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly。(C#中是internal) 访问修饰符
public
protected
friendly
private 当前类 √ √ √ √ 同一个包 √ √ √ × 子孙类 √ √ × × 其他包 √ × × ×
3. 请简述面向对象有哪四个方面的特征?
答:
1).封装:即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变;
2).抽象:抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处
3). 继承:继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。
4).多态: 多态性增强了软件的灵活性和扩展性。
4. 请简述abstract class和interface的区别。
答:含有abstract修饰符的class即为抽象类,接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。
两者的语法区别:
1).抽象类可以有构造方法,接口中不能有构造方法。
2).抽象类中可以包含非抽象的普通方法,接口不能。
3). 抽象类中可以包含静态方法,接口中不能
4). 一个类可以实现多个接口,但只能继承一个抽象类。
两者的应用上的区别:
1).接口更多在系统框架设计方法发挥作用。
2).抽象类在代码实现方面发挥作用,实现代码的重用。
5.下面代码有错吗?有何错误呢?
①. abstract class Name {
private String name;
public abstract boolean isStupidName(String name) {}
}
答:大侠们,这有何错误?
答案: 错。abstract method(抽象方法)必须以分号结尾,且不带花括号。(没有方法体)
②. abstract class Something {private abstract String doSomething (); }
答:这好像没什么错吧?
答案: 错。abstract的methods(方法)不能以private修饰。abstract的methods(方法)就是让子类implement(实现)具体细节的,怎么可以用private把abstract私有化呢
③. class Something {int i;public void doSomething() {System.out.println("i = " + i);}}
答:有什么错呢? 看不出来啊。
答案: 正确。输出的是"i = 0"。int i属於instant variable (实例变量,或叫成员变量)。instant variable有默认值。int的默认值是0。
二、SQL Server部分 1. 可以用什么来确保表格里的字段只接受特定范围里的值?
答:这个问题可以用多种方式来回答,但是只有一个答案是“好”答案:Check约束,它在数据库表格里被定义,用来限制输入该列的值。触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的'方式来限制域的完整性。 2.什么是主键?什么是外键?
答:主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。
3.什么是事务?有哪四个属性(原则)?
答:事务是作为一个逻辑单元执行的一系列操作,要么全都执行,要么全都不执行。一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务。
附:
原子性:事务必须是原子工作单元;对于其数据修改,
一致性:事务在完成时,必须使所有的数据都保持一致状态。
隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。
持久性:事务完成之后,它对于系统的影响是永久性的。
4.触发器和存储过程有何区别?(讲解时回顾触发器和存储过程分别是什么)
答:只有一个区别:存储过程,你调用的时候才会执行
触发器就是你设定了数据库里比如删除,修改,插入时,就会自动触发执行
软件工程师面试题目
1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 __ 60 __ 24 __ 365)UL
我在这想看到几件事情:
1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)
2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。
3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。
4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。
2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A) <= (B) (A) : ))
C/C++试题集 C/C++ Development这个测试是为下面的目的而设的:
1). 标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
2). 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的'代码,了解这个用法是很重要的。
3). 懂得在宏中小心地把参数用括号括起来
4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?
Least = MIN(__p++, b);
3. 预处理器标识#error的目的是什么?
如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种
问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。