zoukankan      html  css  js  c++  java
  • 【面试题】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。

     

  • 相关阅读:
    Android使用TextView实现无下划线超链接
    新浪微博Android SDK的使用
    android自定义View垂直滚动的TextView
    android开发问题集锦
    android实现TextView垂直或水平滚动
    自定义view,实现文本自动换行
    AndroidMenifest.xml中android:sharedUserId="android.uid.system权限访问sd卡问题
    【Android】报表、线图、饼图、柱状图 (工具整理)
    Python | 三种赋值(直接赋值,copy,deepcopy)
    Python | 三种赋值(直接赋值,copy,deepcopy)
  • 原文地址:https://www.cnblogs.com/java-263/p/9782898.html
Copyright © 2011-2022 走看看