【面试题】java中高以上必会技能
java基础
1.集合相关
1.1 java中常见的集合
答:Arraylist,LinkedList,ListedList,HashMap,HashSet。
1.2 arraylist和linkedlist区别
答:ArrayList和LinkedList都实现了List这个接口继承了Collection接口,collection接口又继承了lterable这个接口,所以List有了这两种特性。然后去实现List的集合去实现List的方式又有所不同。
ArrayList实现了List接口,它是以数组的方式来实现的,数组的特性是可以使用索引的方式来快速定位对象的位置,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好.。
LinkedList是采用链表的方式来实现List接口的。所以在进行增加和删除上比ArrayList快,效率高。
LinkedList的特有方法(本身定义的方法)如:addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast()等。
ArrayList是非线程安全的,LinkedList是线程安全的。
ArrayList自我感觉在写项目中比LinkedList常用。
1.3 Vector和ArrayList区别
答:ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。
当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
1.4 HashMap与TreeMap区别
答:在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。
HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。
1.5HashTable与HashMap区别
答:HashTable的方法是同步 的,在方法的前面都有synchronized来同步,HashMap未经同步,所以在多线程场合要手动同步
HashMap这个区别就像Vector和ArrayList一样。
HashTable不允许null值(key和value都不可以) ,HashMap允许null值(key和value都可以)。
HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。
HashTable使用Enumeration进行遍历,HashMap使用Iterator进行遍历。
2.线程相关
2.1线程启动方式哪几种?
答:1.继承Thread 2.实现Runnable接口 3.直接在函数体使用
2.2多线程中start()和run()区别
答:多线程原理:相当于玩游戏机,只有一个游戏机(cpu),可是有很多人要玩,于是,start是排队!等CPU选中你就是轮到你,你就run(),当CPU的运行的时间片执行完,这个线程就继续排队,等待下一次的run()。
start方法是就绪状态,run方法是运行状态。为什么不直接调用run方法?.
start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。然后CPU再调度其它线程。如果直接调用run方法就相当于调用一个普通方法一样。
2.3有没有用过JUC下面的工具类(如果有的话会再问问相关)
答:CountDownLatch、CyclicBarrier和Semaphore。