日月神话
这些问题在任何面试中都可能太过高级而无法提出,因为它们可能会使候选人推迟。 不管怎样,他们可能会在您自己的时间练习。
误解1)System.exit(0)阻止最终被调用
为什么这样的代码
System.setSecurityManager(new SecurityManager() {
@Override
public void checkExit(int status) {
throw new ThreadDeath();
}
});
try {
System.exit(0);
} finally {
System.out.println("In the finally block");
}
打印
In the finally block
为什么不打印堆栈跟踪?
在此代码中,str是一个String对象。
与C ++不同,所有变量都是基元或引用。 变量不能是对象。 这意味着当你有一个像
String str = "Hello";
String text = "Bye";
str == text; // compares two references, not their contents.
str = text; // assign the reference text has to str.
在许多情况下,差异不大,但会引起与此类线条的真正混淆。
final StringBuilder sb = new StringBuidler();
sb.append("Hello"); // The reference sb is final, not the instance it references.
method(sb); // method can alter the instance, but it cannot change the reference.
误解3)Java内存泄漏,因为C ++开发人员会理解它们。
在Wikipedia上,内存泄漏是
在计算机科学中 ,当计算机程序错误地管理内存分配时,就会发生内存泄漏 。 在面向对象的编程中 ,当对象存储在内存中但无法被运行的代码访问时,可能会发生内存泄漏。
但是,在Java中,对象始终是可访问的,并且清除了那些不能强烈访问的对象。 Java中的内存泄漏一词是指; 保留内存的任何不希望有的增加,通常是由于在不再需要资源时将其记录在集合中。
最近,我读了一个涉及整数加法,内存访问,模数和打印到控制台的问题。 尽管每个操作都比该列表中的每个操作慢几个数量级,但该人员仍在尝试加快最快的操作速度,但是使用了更昂贵的操作。
当您想提高性能时,您需要用便宜的操作代替更昂贵的操作,并且如果瓶颈是硬件(例如,读取硬盘驱动器上的数百万个文件),则更改软件无济于事,因为这不是问题的根源。
误解6)随机数总是看起来随机
随机数的特定组合与带模式的数一样可能。 这个问题是我在此博客上提出的问题的转贴。 许多人不敢相信随机数生成器会产生一个完全看起来不是随机的序列。
误解7)应该避免浮点数,因为它具有随机误差。
每次相同的操作,浮点都会产生相同的错误。 该错误是可预测的,因此是可管理的。 如果您知道自己在做什么,并遵循一些简单的规则(例如,对结果四舍五入),则浮点代码与使用BigDecimal相比,不会出错,但它更易于阅读并且速度提高了大约100倍(并且不会产生垃圾)。
误解8)时区是永恒的
造成混淆的常见原因是,随着时间的流逝,时区会发生变化。 这意味着欧洲/伦敦时代是1970/1/1 01:00而不是00:00,为什么? 在1968年至1970年之间,伦敦的夏令时为2.5年。
在过去几年中,许多其他时区发生了变化。 莫斯科是GMT + 3,现在是GMT + 3(从2011年3月27日开始)。如果您查看2010年的某个时间,应该会看到GMT + 3不是+4。
因为您认为这听起来很奇怪,
- 在瑞典,1721年2月30日
- 在英国1751年,第一天是3月25日,与法国相差11天。
- 当美国采用公历时,它是追溯性的,因此记录了几百年的日期可以参考这两个日历。 (通常两个日期都是为了最大程度地减少混乱),例如乔治华盛顿的生日从1731年2月11日更改为1732年2月22日。
误解9)当您在一个线程中读取一个非易失性值时,最终会看到一个更新的值。
误解10)关于Java面试问题的大多数内容都是准确的。
翻译自: https://www.javacodegeeks.com/2014/05/common-java-myths.html
日月神话