java面试

string、stringbuffer、StringBuilder的区别:

  • string赋值变化后是个新的对象,stringbuffer赋值变化后还是原来的对象
  • string是不可变对象,String、Integer及其它包装类.不可变对象最大的好处是线程安全.。
  • string、stringbuffer都是线程安全,StringBuilder是线程不安全的。
  • 为什么是线程不安全:count += len; 不是一个原子操作。假设count的值是10len的值为1,两个线程同时执行到了第七行,拿到的值都是10,执行完加法运算后将结果赋值给count,所以两个线程最终得到的结果都是11,而不是12,这就是最终结果小于我们预期结果的原因。
    • StringBuffer sb = new StringBuffer(“abc”);
    • sb.append(“123”);
    • String user = “test”;
    • StringBuilder stringBuilder = new StringBuilder();
    • stringBuilder.append("a");

多态:

  • Animal cat = new Cat(); //创建Cat对象
  • Animal dog = new Dog(); //创建Dog对象

重载(Overload):同一个类里,两个方法的名称相同,但参数不同

  • public void test(int a){}
  • public String test(int a,String s){}

重写(Override):基类的成员方法只能被它的派生类重写

 

创建对象的方式:

  • new
  • 反射机制
  • clone机制:浅拷贝,深拷贝
  • 序列化机制:Externalizable或者Serializable

 

JDK 1.7之后switch开始支持String类型(之前支持byte,short,char,int,Enum).但到目前为止,switch都不支持long类型。

 

==eqauls()的区别:

  • ==:运算符,比较变量的值,比较对象的地址
  • eqauls():Object类的方法,比较对象的地址,比较结果取决于equals()具体实现
    • 如果两个对象根据equal()方法比较相等,那么调用这两个对象中任意一个对象的hashCode()方法必须产生相同的哈希值;
    • 如果两个对象根据eqaul()方法比较不相等,那么产生的哈希值不一定相等(碰撞的情况下还是会相等的.)
    • 在产生hash冲突时,两个不相等的对象就会有相同的 hashcode 值.当hash冲突产生时,一般有以下几种方式来处理:
      • 拉链法:每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链表,被分配到同一个索引上的多个节点可以用这个单向链表进行存储.
      • 开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入
      • 再哈希:又叫双哈希法,有多个不同的Hash函数.当发生冲突时,使用第二个,第三个….等哈希函数计算地址,直到无冲突.
         

32 位和64位 的Java 虚拟机中,int 类型的长度都是占4字节.。

int是基本类型,直接存数值;而integer是对象;用一个引用指向这个对象.由于Integer是一个对象,在JVM中对象需要一定的数据结构进行描述,相比int而言,其占用的内存更大一些.

3*0.1==0.3返回false

a+=b隐式的将加操作的结果类型强制转换为持有结果的类型,而a=a+b则不会自动进行类型转换

  • short s1= 1;
  • s1 += 1 (不报错)
  • s1 = s1 + 1 (报错)

 

wait()与sleep()的区别:

  • sleep()来自Thread类,和wait()来自Object类.调用sleep()方法的过程中,线程不会释放对象锁。而 调用 wait 方法线程会释放对象锁
  • sleep()睡眠后不出让系统资源,wait让其他线程可以占用CPU
  • sleep(milliseconds)需要指定一个睡眠时间,时间一到会自动唤醒.而wait()需要配合notify()或者notifyAll()使用
     

synchronized和ReentrantLock的区别

  • synchronized是和if、else、for、while一样的关键字,ReentrantLock是类,

 

你可能感兴趣的:(java)