【面试题】java中高以上必会技能

java基础

1.集合相关

 1.1 java中常见的集合

  答:Arraylist,LinkedList,ListedList,HashMap,HashSet。

 1.2 arraylist和linkedlist区别

【面试题】java中高以上必会技能

  答: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。

上一篇:linux下一个有意思的问题(文件名以短划线或空格开头)


下一篇:C#winform抓取百度,Google搜索关键词结果