风云科技


风云科技Java面试题

1. 同步和异步

同步:同步是指一个进程在执行某个请求的时候,如果该请求需要一段时间才能返回信息,那么这个进程会一直等待下去,直到收到返回信息才继续执行下去。
异步:异步是指进程不需要一直等待下去,而是继续执行下面的操作,不管其他进程的状态,当有信息返回的时候会通知进程进行处理。

2. wait()和sleep()

1、这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。

sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。

  1. 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。
一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。
Thread.Sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。

  1. 使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
 synchronized(x){ 
      x.notify() 
     //或者wait() 
   }

  1. sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

3. HashMap和HashTable

  1. 继承的父类不同
    Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。

  2. 线程安全性不同
    Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的

  3. 是否包含contains()方法
    HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。
    Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。

  4. 内部实现使用的数组初始化和扩容方式不同
    HashTable在不指定容量的情况下的默认容量为11,而HashMap为16,Hashtable不要求底层数组的容量一定要为2的整数次幂,而HashMap则要求一定为2的整数次幂。
    Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。
    Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。

4. final、finally、finalize

final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。

5. 内部类的实现

  1. 静态内部类:必须以static关键字标注,只能访问外部类中的静态的成员变量或者是静态的方法,访问一个内部类使应该这样outerClass.innerClass inter = new outerClass.innerClass();不能直接实例化内部类
  2. 成员内部类:定义在一个类的内部,但是没有static关键字修饰,生成示例的方法outerClass.innerClass inter = (new outerClass()).new innerClass(),对外部类变量的引用outClass.this.variale,可以访问外部类的静态与非静态方法
  3. 局部内部类:局部内部类指的是定义在一个方法中的类,只有在当前方法中才能对局部内部类里面的方法以及变量进行访问,局部内部类只能访问其所在方法的final类型变量
  4. 匿名内部类:隐式的继承一个父类或者是实现某个接口

6. 字符串的切分

根据给定cnt和string切分字符串

其他忘了