Java面試題二十一

更多面試題歡迎訪問:面試題專欄​​​​​​​

1,volatile關鍵字是否能保證線程安全?()

 

答案:否

        volatile關鍵字用在多線程同步中,可保證讀取的可見性,JVM只是保證從主內存加載到線程工作內存的值是最新的讀取值,而非cache中。但多個線程對volatile的寫操作,無法保證線程安全。

        假如線程1,線程2 在進行read,load 操作中,發現主內存中count的值都是5,那麼都會加載這個最新的值,在線程1對count進行修改之後,會write到主內存中,主內存中的count變量就會變爲6;線程2由於已經進行read,load操作,在進行運算之後,也會更新主內存count的變量值爲6;導致兩個線程及時volatile關鍵字修改之後,還是會存在併發的情況。

 

2,下面哪個流類屬於面向字符的輸入流(  )

A、BufferedWriter           

B、FileInputStream          

C、ObjectInputStream          

D、InputStreamReader

 

答案:D

        Java的IO操作中有面向字節(Byte)和麪向字符(Character)兩種方式。
        面向字節的操作爲以8位爲單位對二進制的數據進行操作,對數據不進行轉換,這些類都是InputStream和OutputStream的子類。
        面向字符的操作爲以字符爲單位對數據進行操作,在讀的時候將二進制數據轉爲字符,在寫的時候將字符轉爲二進制數據,這些類都是Reader和Writer的子類。

 

3,Java能不能不通過構造函數創建對象()

A、能     B、不能

 

答案:A

        Java創建對象的幾種方式:

        (1) 用new語句創建對象,這是最常見的創建對象的方法。
        (2) 運用反射手段,調用java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實例方法。
        (3) 調用對象的clone()方法。
        (4) 運用反序列化手段,調用java.io.ObjectInputStream對象的 readObject()方法。

        (1)和(2)都會明確的顯式的調用構造函數 ;(3)是在內存上對已有對象的影印,所以不會調用構造函數 ;(4)是從文件中還原類的對象,也不會調用構造函數。

 

4,下列哪個敘述是正確的()
A.子類繼承父類的構造方法。 
B.abstract類的子類必須是非abstract類。 
C.子類繼承的方法只能操作子類繼承和隱藏的成員變量。 
D.子類重寫或新增的方法也能直接操作被子類隱藏的成員變量。

 

答案:C

        子類是不繼承父類的構造方法的,而是必須調用其父類的構造方法。 
abstract類的子類可以是abstract類,如果是非abstract類,就必須重寫父類中所有的abstract方法。 
D中子類新增的方法是不能直接操作被子類隱藏的成員變量的。

 

5,下列哪個敘述是正確的()
A.final類可以有子類。 
B.abstract類中只可以有abstract方法。 
C.abstract類中可以有非abstract方法,但該方法不可以用final修飾。 
D.不可以同時用final和abstract修飾同一個方法。 
E.允許使用static修飾abstract方法。

 

答案:D

        用final修飾的類是不允許被繼承的,A錯誤 
        abstract類中也可以有普通成員方法,B錯誤 
        abstract類中的非abstract方法是可以用final修飾的,而abstract方法是不可以被final修飾的,C錯誤 
        D同上,正確
        不允許使用static修飾abstract方法,E錯誤。

 

6,當檢索一個壓縮文件時,首先要建立壓縮文件輸入流對象,該對象()

  A、以選中的壓縮文件爲參數

  B、以FileInputStream對象爲參數

  C、以InputStreamReader對象爲參數

  D、以BufferedReader對象爲參數

 

答案:B

  在java.io包中提供了對壓縮文件進行操作的能力。它是通過壓縮文件輸入流與壓縮文件輸出流來實現的,其分別繼承自InflaterInputStream與DeflaterOutputStream。

       在創建壓縮文件輸入流時,其初始化參數是一個FileInputStream類的實例。

 

7,已知一個有序線性表爲()(13,18,24,35,47,50,62,83,90,115,134),當用二分法查找值爲90的元素時,查找成功的比較次數爲( )

A,1         B,2       C,3       D,9

 

答案:B

        根據二分法查找需要兩次:首先將90與表中間的元素50進行比較,由於90大於50,所以在線性表的後半部分查找;第二次比較的元素是後半部分的中間元素,即90,這時兩者相等,即查找成功。

 

8,Java程序的併發機制是( )

A.多線程

B.多接口

C.多平臺

D.多態性

 

答案:A

        Java是通過多線程實現併發機制的。多線程是指一個程序中包含多個執行流, 多線程程序設計的含義是可以將程序任務分成幾個並行的子任務。

 

9,下列選項中,不屬於模塊間耦合的是( )
A.數據耦合
B.標記耦合
C.異構耦合
D.公共耦合


答案:C
        模塊之間的耦合程度反映了模塊的獨立性,也反映了系統分解後的複雜程度。 按照耦合程度從弱到強,可以將其分成7級。

        分別是非直接耦合、數據耦合、標記耦合、控制 耦合、外部耦合、公共耦合和內容耦合。其中沒有異構耦合這種方式。

 

10,下列關於內部類的說法不正確的是  (  )
A,內部類的類名只能在定義它的類或程序段中或在表達式內部匿名使用
B,內部類可以使用它所在類的靜態成員變量和實例成員變量
C,內部類不可以用abstract修飾符定義爲抽象類
D,內部類可作爲其他類的成員,而且可訪問它所在類的成員

 

答案:C

        內部類不僅可以用abstract修飾定義爲抽象類,也可以用private或protected定義,所以選項C說法錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章