面试积累之java篇(七)

static方法和static成员字段有什么用处?可以被重载么?

用static修饰的方法叫类方法,用static修饰的字段叫做类变量。
static修饰的静态方法和静态变量,会随着类的定义而分配和装载入内存中
被所有的实例共享。
所以 非静态方法可以调用静态成员变量和非静态成员变量,而静态方法只能
调用静态变量,不能调用非静态成员变量。

请讲一下同步和异步?

同步和异步主要针对于多线程而言。
同步可以防止并发。主要出于对数据安全的考虑。如果我们的数据在多线程之间共享,
例如一个正在写的数据同时可能,其他线程也在读数据,这样就会导致脏数据,所以这些数据需要加同步锁
同步存取。

异步允许并发
ajax技术是异步实现的,当我们执行一个动作需要花费长时间等待时,
希望能够做其他事情,就需要使用异步编程  。
异步在效率和操作体验上都比较好

Hashcode和Equals的联系

equals()和hashcode()都是从object对象中继承过来的,主要用来比较对象时调用。
  1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。
 2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。 
(生成hash值的公式可能存在的问题)

所有对于需要大量并且快速的对比的话如果都用equal()去做显然效率太低,所以解决方式是,
每当需要对比的时候,首先用hashCode()去对比,
如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了)
,如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,
则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!

咳..咳 java的哪些特性使得“一次编译,到处运行”成为可能

核心是java一次编译的结果是生成一种java虚拟机可以执行的.class文件。而只要装有java虚拟机的电脑就可以跑.class文件。基本上所有的操作系统都有它支持的java虚拟机,所以JAVA一次编译,处处运行。

你可能感兴趣的:(面试积累之java篇(七))