白盒测试 简单的几行代码也需要扎实的代码功底

qianxing for 点点点 · October 13, 2018 · 987 hits

“生存本来就是一种幸运,过去的地球上是如此,现在这个冷酷的宇宙中也到处如此。但不知从什么时候起,人类有了一种幻觉,认为生存成了唾手可得的东西,这就是你们失败的根本原因。” --《三体》 智子
弱小和无知不是生存的障碍,傲慢才是。 --《三体》

自增的陷阱

问题来自《编写高质量代码:改善Java程序的151个建议》。

书中作者提出一个++i的问题,需要读者确认下述一段代码输出结果是多少? 书中给出的答案是0.

作者详细的介绍了为什么返回值是0,让读者准确理解表达式的含义。并借此来告诫读者不要掉入自增的陷阱里面了。

public class Counter {
public static void main(String[] args) {
int count = 0;
for (int i = 0; i < 10; i++) {
count =count++;
}
System.out.println("count="+count);
}
}

多线程并发问题

问题来自《Clean Code》.

书中作者举例说明两个线程并发访问lastIdUsed可能出现的情况。当lastIdUsed初始值为93时,两个线程并发调用下述代码,可能产生的值为94、95。
读者并且展开讲解多线程并发情况下代码执行的可能顺序及其数量。

public class IdGenerator {
private int lastIdUsed;

public int increamentValue() {
return ++lastIdUsed;
}
}

问题如此简单为何分享?

在软件开发、测试过程中,需要有扎实的基础知识,以便发现、解决软件开发过程中潜藏很深的bug。

备注

本文由作者同步发布到知乎

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up