java多線程、集合和IO面試題_02


java多線程、集合和IO面試題_02

============================================================================= 邏輯思考題: 1:你有一桶果凍,其中有黃色、綠色、紅色三種,閉上眼睛抓取同種顏色的兩個。抓取多少個就可以確定你肯定有兩個同一顏色的果凍?
    4個
-----------------------------------------------------------------------------
2:如果你有無窮多的水,一個3公升的提捅,一個5公升的提捅,兩只提捅形狀上下都不均勻,問你如何才能准確稱出4公升的水?
    5-3+5-3
    3+3+3-5
-----------------------------------------------------------------------------
3:有8個顏色,大小一樣的小球,其中的一個質量和比其他的重,給你一個天平,你最少幾次就可以稱出那個重的球。(不要想着自己用手拿)
    2次
    
    先分成三份3個、3個、2個,
    稱3個、3個,
    若重的在其中一份,再分成三份1個、1個、1個;
    稱1個、1個,若重的在其中一份,就稱出了。
    若重的不在其中,那剩余的1個就是重的。
    若稱的3個相等,說明在2個里面。
    
    思想:更多可能的利用推理。 ============================================================================= 面試題: 1:請介紹一下自己(2-3分鍾)
    姓名、家鄉。
    經驗(項目經驗)和能力(自學能力)。
    態度:對編程有興趣
    興趣愛好:可提可不提
-----------------------------------------------------------------------------
2:你有男/女朋友嗎?你結婚了嗎?
    穩定性
    精力,加班,出差。
    你家庭和睦嗎?
-----------------------------------------------------------------------------
3:你有什么要問的嗎?
    對公司一定要有了解。(太偏僻的公司女同學就不要去了)
    公司的前景、業務方向。
    談錢不傷感情。(心里有個底線6000,開口7000)
============================================================================= 面試題: 
多線程: 1:多線程有幾種實現方法,都是什么?同步有幾種實現方法,都是什么?
    兩種。
    
    繼承Thread類
    實現Runnable接口
    
    兩種。
  
    同步代碼塊
    同步方法(靜態同步方法)
-----------------------------------------------------------------------------
2:啟動一個線程是用run()還是start()?
    start();
    
    run():封裝了被線程執行的代碼,直接調用僅僅是普通方法的調用。
    start():啟動線程,並由JVM自動調用run()方法。
-----------------------------------------------------------------------------
3:sleep() 和 wait() 有什么區別?
    sleep():必須指定時間,不釋放鎖。
            是Thread類中的一個方法,用於線程休眠,休眠時間結束后,該線程可以自動喚醒。
    wait():可以不指定時間,也可以指定時間,並立即釋放鎖。
            是Object類中的一個方法,用於線程等待,如果想要喚醒,必須使用notify()或notifyAll()(不能自動喚醒)。
-----------------------------------------------------------------------------
4:線程的基本概念及線程的生命周期
    線程:是進程(程序)的執行單元,執行路徑。
    
    新建-->就緒-->運行-->死亡
    新建-->就緒-->運行-->阻塞-->就緒-->運行-->死亡
----------------------------------------------------------------------------- 集合: 1: HashMap和Hashtable的區別。
    歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java1.2引進的Map接口的一個實現。
    同步性:Hashtable是線程安全的,也就是說是同步的;而HashMap是線程序不安全的,不是同步的。
    值:只有HashMap可以讓你將空值作為一個表的條目的key或value。
HashMap類和Hashtable類的區別注意:Hashtable的第二個單詞是小寫,繼承了老版本jdk1.0的命名錯誤,如同System類下的靜態方法Arraycopy()一樣)
    HashMap類:不同步,線程不安全,效率高。允許null鍵和null值。
    Hashtable類:同步,線程安全,效率低。不允許null鍵和null值。
    其實HashMap類就是用來替代Hashtable類的。如同ArrayList類用來替代Vector類一樣。

Hashtable是線程安全的,而且名字沒有按照駝峰格式命名。Hashtable雖然是線程安全的,但是效率比較低。
HashMap是非線程安全的,在多線程修改的時候,會出現異常或者是死循環。

補充掌握的知識點
    java.util.concurrent.ConcurrentHashMap<K,V>
    ConcurrentHashMap類的特點:Hashtable的線程安全 + HashMap的高性能

    只針對需要修改的數據進行加鎖(Hashtable線程安全的體現)
    對其它不需要修改的數據不添加鎖,可以直接獲取(HashMap高性能的體現)

舉例理解:
    游樂場某一項項目需要維護,這個時候只針對需要維護的這個項目加鎖,
    而其它無需維護的項目仍然對外開放(即不加鎖),而不是一個項目需要維護就必須關掉整個游樂場。
-----------------------------------------------------------------------------
2:ArrayList和Vector的區別。 
    同步性:Vector是線程安全的,也就是說是同步的;而ArrayList是線程序不安全的,不是同步的。
    數據增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半。
-----------------------------------------------------------------------------
3:Collection和Collections的區別。
    Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。 
    Collection是個java.util下的接口,它是各種集合結構的父接口,有兩個子接口List和Set。
-----------------------------------------------------------------------------
4:List、Set、Map是否繼承自Collection接口?
    List、Set不是繼承自Map接口,它們繼承自Collection接口。
   Map接口本身就是一個頂層接口。
-----------------------------------------------------------------------------
5:說出ArrayList、Vector、LinkedList的存儲性能和特性?
    ArrayList
        底層數據結構是數組,查詢快,增刪慢。
        線程不安全,效率高。
    Vector
        底層數據結構是數組,查詢快,增刪慢。
        線程安全,效率低。
    LinkedList
        底層數據結構是鏈表,查詢慢,增刪快。
        線程不安全,效率高。
-----------------------------------------------------------------------------
6:你所知道的集合類都有哪些?主要方法?
    ArrayList,LinkedList,HashSet,HashMap  
    
    Collection(接口):
        add()
        remove()
        contains()
        iterator()
        size()
        遍歷:
            增強for
            迭代器
            
        |--List
            get()
            遍歷:
                普通for
        |--Set
---------------------------------------    
    Map(接口):
        put()
        remove()
        containskey(),containsValue()
        keySet()
        value()
        get()
        entrySet()
        size()
        遍歷:
            根據鍵找值。
            根據鍵值對對象分別找鍵和值。
----------------------------------------------------------------------------- IO: 1: java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
    字節流,字符流。
    字節流繼承於InputStream、OutputStream,
    字符流繼承於Reader、Writer。
    在java.io包中還有許多其他的流,主要是為了提高性能和使用方便。 -----------------------------------------------------------------------------
2:什么是java序列化,如何實現java序列化?
    
    可以把對象寫入文本文件或者在網絡中傳輸。
    
    如何實現序列化呢?
        讓被序列化的對象所屬的類實現序列化接口。
        該接口是一個標記接口。沒有方法需要實現。
=============================================================================

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM