0.1 试试Java
第一题
Integer a = new Integer(3);
Integer b = 3;
int c = 3;
System.out.println(a == b);
System.out.println(a == c);
控制台输出结果是:
False;True
解析:
针对第四行,a和b是两个不同的object, 在heap中指向不同的地址,“==”判 定对象等价性(将在3.5节继续讨论)。
这对第五行,a作为一个Integer对象, 将会首先被auto-unboxing为一个int, 然后再跟c比较。针对int类型的==,比 较的是值。
第二题
String a = “c”;
String b = “c”;
System.out.println("a and b: " + a == b);
控制台的输出结果是:
False
解析:
+的优先级比==要高,先计算两个字符串+,然后再跟b比较。
第三题
public static void main(String args[]){
System.out.println(2.00 - 1.10);
}
控制台输出结果是:
0.8999999999999999
第四题
List<Integer> list = new ArrayList<>();
for(int i = -3; i < 3; i++)
list.add(i);
for(int i = 0; i < 3; i++)
list.remove(i);
System.out.println(list);
解析:
[-2, 0, 2]
第五题
String s = " Hello";
s += " world ";
s.trim();
System.out.println(s);
解析:
" Hello World "
1.1软件构造的多维度视图
第一题
Memory dump属于软件三维度视图的:
Moment和component-level view
第二题
Execution stack trace和code snapshot在软件三维度视图中的共性特征是:
都是run-time view
第三题
Code Churn和AST分别是Period,Build-time的视图
第四题
Static linking和Dynamic linking的区别在于:
前者发生在构造阶段,后者发生在运行阶段
第五题
以下说法正确的是:
Code static analysis是发生的在build-time
Deployment是把build-time的软件转换为run-time的软件的手段之一
Files随时间发生变化,产生各个不同版本,按时间连起来形成period view
对软件的profiling和tracing均发生在run-time
1.2软件构造的质量指标
第一题
软件构造的external quality factors:
correctness正确性
extendibility可扩展性
reusability可复用性
ease of use易用性
第二题
软件构造的质量指标:
健壮性刻画了软件能够恰当的处理spec范围之外的各类异常情况的能力。
代码行数Loc是内部质量指标之一,但它可能对多项外部质量指标产生影响。
程序的可复用性与程序的开发代价/运行效率之间存在折中。
第三题
correctness和robustness的区别在于:
前者是针对需求的正确实现,后者是针对需求之外的其他情况的恰当实现。
第四题
LoC和code complexity很高,并不代表一定有很差的reusability和extendibility。
对代码的时间/空间复杂度进行优化,可能带来其他external quality factors的降低。
每向软件里增加一点功能,都要确保其他质量属性不受到损失。
第五题
软件构造质量指标包括:
Ready to change
Safe from bugs
Easy to understand
Efficient to run
Cheap for develop
Easy to extend