java 面试 --java 基础

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

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

3、列举Collections工具类常用方法?

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

4、final、finally、finalize的区别?

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


5、如果catch里有return语句,请问finally还会执行吗?如果会是在return前还是return后?

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

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

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

7、runnable与callable的区别?

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

8、使用线程池的好处?

使用线程池提高系统的性能,减少创建,销毁线程的资源开销,因为代码结束后,线程不会死亡,而是再回到线城池,等待下一个对象的调用。

 
 
9、线程的生命周期?

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

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

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

11 、join()


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

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

         也就是线程的串行化,通过Thread类的join方法就可以实现。

11、run()和start()的区别?

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

 

原文地址:https://www.cnblogs.com/ou-pc/p/9656761.html