没有合适的资源?快使用搜索试试~ 我知道了~
2019-软件构造-期末试题1
需积分: 0 7 下载量 159 浏览量
2022-08-03
12:58:29
上传
评论 3
收藏 856KB PDF 举报
温馨提示
试读
12页
(2) 以下工具/命令___无需执行正在开发的软件代码即可获得期望结果 (4) 关于 ADT 的 Rep、AF、RI 的说法,正确的是___ (5) 以下关于方
资源详情
资源评论
资源推荐
哈尔滨工业大学 2019 学年春季学期
软件构造 试 题
题号
1 2 3 4 5 6 7 总分
得分
阅卷人
片纸鉴心 诚信不败
第1页(共 12 页)
院系
学号
姓名
授课教师
主管
领导
审核
签字
…
…
…
…
…
…
…
…
…
…
…
密
…
…
…
…
…
…
…
…
…
封
…
…
…
…
…
…
…
…
…
线
…
…
…
…
…
…
…
…
…
…
本试卷满分 100 分,折合 60%计入总成绩。
1 单项选择题(每个 2 分,共 30 分。请将全部答案填写至下表中,否则视为无效)
(1) (2) (3) (4) (5) (6) (7) (8)
(9) (10) (11) (12) (13) (14) (15)
(1) 以下___中的软件构造实体,前者属于 build-time view,后者属于 moment-view
A Software Configuration Item (SCI) Stack Trace
B Code Snapshot Test Case
C Static linking library Memory Dump
D Abstract Syntax Tree (AST) Code Churn
(2) 以下工具/命令___无需执行正在开发的软件代码即可获得期望结果
A JUnit test 和 EclEmma
B Checkstyle 和 git commit
C Eclipse Memory Analyzer (MAT)与 jmap
D SpotBugs 和 VisualVM
(3) 关于 immutability 和 mutability 的说法,最恰当的是____
A 被 static 和 final 修饰的 Date departTime 是 immutable 的
B 采用 State 设计模式以使对象具备状态转换功能的 ADT 是 mutable 的
C Collections.unmodifiableList(new ArrayList<String>())得到的 List 对象
是 immutable 的,程序运行期间其内容无法变化
D new ArrayList<String>().iterator()得到的结果是 immutable 的
(4) 关于 ADT 的 Rep、AF、RI 的说法,正确的是___
A Immutable 类的对象,其 rep 自对象创建之后就不能再发生变化
B Rep exposure 仅针对 immutable 的 ADT 来说有意义,一旦发生 rep 泄露可能导致
RI 被违反;对 mutable 的 ADT,由于其 rep 本来就可变化,故无需考虑 rep exposure
第2页(共 12 页)
C AF 作为一种关系,具备的性质是:满射、双射,但并非总是单射
D RI 可看作一组条件约束,rep 满足这些条件的对象才是合法的
(5) 以下关于方法 spec 的说法,不恰当的是___
A 若客户端传递进来的参数不满足前置条件,则方法可直接退出或随意返回一个结果
B 方法的 spec 描述里不能使用内部代码中的局部变量或该方法所在类的 private 属性
C 方法 A 的前置条件比方法 B 的前置条件更强,后置条件相同,那么开发者实现 A 的难度要高于实现
B 的难度
D 如果修改了某个方法的 spec 使之强度变弱了,那么 client 调用该方法的代价可能变大了,即
client 需要对调用时传入该方法的参数做更多的检查
(6) 某方法 public Number info(Set<Number> a) throws Exception,以下__是它的合法 override
A private Object info(Set<Number> m) throws Exception
B public Number info(HashSet<? extends Number> m)
C public Number info(Set<Integer> m, Number n) throws IOException
D public Integer info(Set<Number> m) throws IOException, InterruptedException
(7) 关于 ADT 的 equals 和 hashCode 的说法,正确的是____
A Immutable 的 ADT 对象 a 和 b,若 a.hashCode()=b.hashCode(),那么 a.equals(b)一定为真
B Override equals()的时候,equals()的代码中需要逐个比较 rep 中每一个域的值是否相等
C 某 ADT 的对象 a 和 b,若 a.equals(b)为假,那么该 ADT 不应存在任何方法 op 使得 a.op()=b.op()
D 已知 List 及其子类型实现的是观察等价性,那么针对以下代码中的 a 和 b,a.equals(b)为真
List<String> a = Arrays.asList(new String("c"));
List<String> b = Arrays.asList("c");
(8) 针对 assertion 和 exception 的说法,最恰当的是___
A 代码中的 assert 语句太多,会影响代码运行性能,这是为了 correctness 所需付出的必要代价
B 代码执行期间抛出的 RuntimeException 及其子类型异常是程序员在代码中无法捕获的,而所有抛
出的 checked 异常均需利用 try 和 catch 进行捕获和处理
C 若为了代码的简洁性更高,开发者应更倾向于使用 unchecked 异常;若为了程序的健壮性更高,则
应倾向于使用 checked 异常
D 某 public 方法的第一行是 if(! pre-condition) {...},那么用以下每行代码分别替换“...”,
在任何情况下所起的效果是一样的:
throw new AssertionError();
throw new IllegalArgumentException();
assert false;
(9) 某程序运行期间的控制台输出如下所示,以下说法最恰当的是____
Exception in thread "main" exception.CarAlreadyParkingException:
MN007 is already in parking field, cannot be parked again
at field.A.parking(A.java:111)
at field.B.parking(B.java:40)
at field.C.parking(C.java:44)
at application.D.main(D.java:55)
A 该异常发生的第一现场是 D 类的 55 行,在 A 类的第 111 行被捕获
B 不确定此次抛出的是一个 unchecked 类型还是 checked 类型的异常
C A、B、C 类均有名为 parking 的方法,且其 spec 中一定包含 throws CarAlreadyParkingException
D 该异常未被捕获,也未被处理
第3页(共 12 页)
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
密
…
…
…
…
…
…
…
…
…
…
…
…
封
…
…
…
…
…
…
…
…
…
…
…
…
线
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
(10) 关于测试的说法,正确的是___
A 所用测试用例的数量越多,代表对代码的覆盖度越高,发现 bug 的能力就越强
B 如果某方法返回值类型是 void,则无法对其单独进行测试,必须联合 ADT 的其他方法进行联合测试
C 如果某 bug 已被正确修复并已通过测试,那么为了降低后续测试的代价,应将该 bug 对应的测试用例
从测试库中删除
D 对只有 getXXX()和 setXXX(...)方法的 ADT,因为其业务逻辑非常简单,无需为其撰写测试用例
(11) 某个 ADT 的 rep 中有一个 static int 类型的变量 a、有一个 final String 类型的变量 b,在该
ADT 的某方法中使用了一个类型为 int[]的局部变量 c。那么在 Java 8 环境下运行程序时,变量 a、
b、c 所指向的存储空间分别在____
A Metaspace heap heap
B Heap metaspace stack
C Heap perm heap
D Perm metaspace stack
(12) Java 程序在启动时,通过 JVM 参数配置不能做到的是___
A 设置运行中使用的 GC 算法
B 设置运行中可占用的 heap 最大尺寸、young generation 和 metaspace 的最大尺寸
C 设置运行过程中两次 GC 的最大时间间隔
D 设置将 GC 日志写入文件的路径
(13) 针对 ADT 的性能,以下说法不恰当的是____
A 防御式拷贝避免了 ADT 表示泄露,但增加了程序运行时内存消耗和 GC 的时间代价
B 带泛型的 ADT,在运行时需要进行动态的类型匹配,会造成程序运行时间的轻微增加
C 使用 JConsole 或 VisualVM 进行程序性能监控和分析,会造成程序运行性能的轻微下降
D 使用 Singleton 或 Flyweight 模式设计 ADT 的目的是降低因 new 对象和频繁 GC 而带来的性能损失
(14) 关于多线程 Java 程序及其 threadsafe,以下说法正确的是___
A 线程执行 Thread.sleep(1000)期间,该线程休眠之前所获得的锁会被释放给其他线程
B 即使是通过 Collections.synchronizedList(...)得到的 List 对象,也难以在任何多线程场景
下做到 threadsafe
C 若 ADT 的 rep 所有属性是 final 和 immutable 的,则它在任何多线程场景下都可做到 threadsafe
D 操作系统和 JVM 在调度多线程 Java 程序执行时,以单个 Java 方法或操作符为基本单元进行
interleaving
(15) 以下代码执行结束后,用下图描述内存里的对象状态 (假设代码执行期间 JVM 未进行任何 GC)。关于
该图中存在的错误及其修改,说法正确的是___
String s1 = new String("a");
String s2 = "b";
final StringBuilder s3 = new StringBuilder("c");
final Set<String> set = new HashSet<>();
set.add(s1);
set.add(s2);
set.add(s3.toString());
s3.append("d");
set.add("b");
A 因为 s3 由 final 所修饰,s3 所指向的椭圆应为双线椭圆,且连接二者之间的箭头应为双线箭头
B 最右侧的 String("b")以及 HashSet<String>指向它的箭头不应该存在
剩余11页未读,继续阅读
StoneChan
- 粉丝: 27
- 资源: 321
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0