java 面试 --java 基础

1 、ArrayList、Vector、LinkedList 之间的 区别?

ArrayList:底层数组,查询快,增删慢,线程不安全,效率高
Vector:底层数组,查询快(因为线程安全,其实查询也不快),增删慢,线程安全,效率低
LinkedList:底层双重链表,查询慢,增删快,线程不安全,效率高。数组

三、列举Collections工具类经常使用方法?

Collections.sort(list);按天然顺序排序;
Collections.binarySearch(list,key); 二分查找;
Collections.reverse(list) 反转;
Collections.shuffle(list) 随机替换;安全

四、final、finally、finalize的区别?

final:修饰类,不能被继承,修饰方法不能被重写,修饰变量是常量
finally:是异常处理的一部分,用于释放资源,通常来讲代码确定会执行,除非在执行finally以前,jvm退出了。
finalize:是Object的一个方法,用于垃圾回收。多线程


五、若是catch里有return语句,请问finally还会执行吗?若是会是在return前仍是return后?

会,在return前执行。不过finally的逻辑不会改变return的返回值。jvm

六、实现多线程有几种方式?分别是什么

有三种方式,继承Thread类,实现runnable接口,实现callable接口工具

七、runnable与callable的区别?

Callable任务执行后能够有返回值,而runnable不能返回值,call方法能够抛出异常,而run方法只能try catch,运行callable任务能够拿到一个Future对象,callable依赖线程池。性能

八、使用线程池的好处?

使用线程池提升系统的性能,减小建立,销毁线程的资源开销,由于代码结束后,线程不会死亡,而是再回到线城池,等待下一个对象的调用。spa

 
 
九、线程的生命周期?

十、sleep()和wait()的区别?

    Sleep  会把执行机会给其余线程,到时后自动恢复,不会释放对象锁,线程

    wait    会释放对象锁,只有对象发出notify或notifyAll才准备获取对象锁。3d

11 、join()对象


join  单核cpu运行多线程时底层实现原理是多个线程间切换,因为cpu的处理速度很快,看上去像多个线程同时运行。

         那么咱们如何实现让线程T1,T2,T3,在T1执行完成后才执行T2,T2执行完成后才执行T3,

         也就是线程的串行化,经过Thread类的join方法就能够实现。

 

十一、run()和start()的区别?

 

Run仅仅是调线程执行的普通方法,start首先会启动线程,由Jvm调用run方法。

相关文章
相关标签/搜索