1,volatile關(guān)鍵字是否能保證線(xiàn)程安全?()
答案:否
volatile關(guān)鍵字用在多線(xiàn)程同步中,可保證讀取的可見(jiàn)性,JVM只是保證從主內(nèi)存加載到線(xiàn)程工作內(nèi)存的值是最新的讀取值,而非cache中。但多個(gè)線(xiàn)程對(duì)volatile的寫(xiě)操作,無(wú)法保證線(xiàn)程安全。
假如線(xiàn)程1,線(xiàn)程2 在進(jìn)行read,load 操作中,發(fā)現(xiàn)主內(nèi)存中count的值都是5,那么都會(huì)加載這個(gè)最新的值,在線(xiàn)程1對(duì)count進(jìn)行修改之后,會(huì)write到主內(nèi)存中,主內(nèi)存中的count變量就會(huì)變?yōu)?;線(xiàn)程2由于已經(jīng)進(jìn)行read,load操作,在進(jìn)行運(yùn)算之后,也會(huì)更新主內(nèi)存count的變量值為6;導(dǎo)致兩個(gè)線(xiàn)程及時(shí)volatile關(guān)鍵字修改之后,還是會(huì)存在并發(fā)的情況。
2,下面哪個(gè)流類(lèi)屬于面向字符的輸入流( )
A、BufferedWriter
B、FileInputStream
C、ObjectInputStream
D、InputStreamReader
答案:D
Java的IO操作中有面向字節(jié)(Byte)和面向字符(Character)兩種方式。
面向字節(jié)的操作為以8位為單位對(duì)二進(jìn)制的數(shù)據(jù)進(jìn)行操作,對(duì)數(shù)據(jù)不進(jìn)行轉(zhuǎn)換,這些類(lèi)都是InputStream和OutputStream的子類(lèi)。
面向字符的操作為以字符為單位對(duì)數(shù)據(jù)進(jìn)行操作,在讀的時(shí)候?qū)⒍M(jìn)制數(shù)據(jù)轉(zhuǎn)為字符,在寫(xiě)的時(shí)候?qū)⒆址D(zhuǎn)為二進(jìn)制數(shù)據(jù),這些類(lèi)都是Reader和Writer的子類(lèi)。
3,Java能不能不通過(guò)構(gòu)造函數(shù)創(chuàng)建對(duì)象()
A、能 B、不能
答案:A
Java創(chuàng)建對(duì)象的幾種方式:
(1) 用new語(yǔ)句創(chuàng)建對(duì)象,這是最常見(jiàn)的創(chuàng)建對(duì)象的方法。
(2) 運(yùn)用反射手段,調(diào)用java.lang.Class或者java.lang.reflect.Constructor類(lèi)的newInstance()實(shí)例方法。
(3) 調(diào)用對(duì)象的clone()方法。
(4) 運(yùn)用反序列化手段,調(diào)用java.io.ObjectInputStream對(duì)象的 readObject()方法。
(1)和(2)都會(huì)明確的顯式的調(diào)用構(gòu)造函數(shù) ;(3)是在內(nèi)存上對(duì)已有對(duì)象的影印,所以不會(huì)調(diào)用構(gòu)造函數(shù) ;(4)是從文件中還原類(lèi)的對(duì)象,也不會(huì)調(diào)用構(gòu)造函數(shù)。
4,下列哪個(gè)敘述是正確的()
A.子類(lèi)繼承父類(lèi)的構(gòu)造方法。
B.abstract類(lèi)的子類(lèi)必須是非abstract類(lèi)。
C.子類(lèi)繼承的方法只能操作子類(lèi)繼承和隱藏的成員變量。
D.子類(lèi)重寫(xiě)或新增的方法也能直接操作被子類(lèi)隱藏的成員變量。
答案:C
子類(lèi)是不繼承父類(lèi)的構(gòu)造方法的,而是必須調(diào)用其父類(lèi)的構(gòu)造方法。
abstract類(lèi)的子類(lèi)可以是abstract類(lèi),如果是非abstract類(lèi),就必須重寫(xiě)父類(lèi)中所有的abstract方法。
D中子類(lèi)新增的方法是不能直接操作被子類(lèi)隱藏的成員變量的。
5,下列哪個(gè)敘述是正確的()
A.final類(lèi)可以有子類(lèi)。
B.abstract類(lèi)中只可以有abstract方法。
C.abstract類(lèi)中可以有非abstract方法,但該方法不可以用final修飾。
D.不可以同時(shí)用final和abstract修飾同一個(gè)方法。
E.允許使用static修飾abstract方法。
答案:D
用final修飾的類(lèi)是不允許被繼承的,A錯(cuò)誤
abstract類(lèi)中也可以有普通成員方法,B錯(cuò)誤
abstract類(lèi)中的非abstract方法是可以用final修飾的,而abstract方法是不可以被final修飾的,C錯(cuò)誤
D同上,正確
不允許使用static修飾abstract方法,E錯(cuò)誤。
6,當(dāng)檢索一個(gè)壓縮文件時(shí),首先要建立壓縮文件輸入流對(duì)象,該對(duì)象()
A、以選中的壓縮文件為參數(shù)
B、以FileInputStream對(duì)象為參數(shù)
C、以InputStreamReader對(duì)象為參數(shù)
D、以BufferedReader對(duì)象為參數(shù)
答案:B
在java.io包中提供了對(duì)壓縮文件進(jìn)行操作的能力。它是通過(guò)壓縮文件輸入流與壓縮文件輸出流來(lái)實(shí)現(xiàn)的,其分別繼承自InflaterInputStream與DeflaterOutputStream。
在創(chuàng)建壓縮文件輸入流時(shí),其初始化參數(shù)是一個(gè)FileInputStream類(lèi)的實(shí)例。
7,已知一個(gè)有序線(xiàn)性表為()(13,18,24,35,47,50,62,83,90,115,134),當(dāng)用二分法查找值為90的元素時(shí),查找成功的比較次數(shù)為( )
A,1 B,2 C,3 D,9
答案:B
根據(jù)二分法查找需要兩次:首先將90與表中間的元素50進(jìn)行比較,由于90大于50,所以在線(xiàn)性表的后半部分查找;第二次比較的元素是后半部分的中間元素,即90,這時(shí)兩者相等,即查找成功。
8,Java程序的并發(fā)機(jī)制是( )
A.多線(xiàn)程
B.多接口
C.多平臺(tái)
D.多態(tài)性
答案:A
Java是通過(guò)多線(xiàn)程實(shí)現(xiàn)并發(fā)機(jī)制的。多線(xiàn)程是指一個(gè)程序中包含多個(gè)執(zhí)行流, 多線(xiàn)程程序設(shè)計(jì)的含義是可以將程序任務(wù)分成幾個(gè)并行的子任務(wù)。
9,下列選項(xiàng)中,不屬于模塊間耦合的是( )
A.數(shù)據(jù)耦合
B.標(biāo)記耦合
C.異構(gòu)耦合
D.公共耦合
答案:C
模塊之間的耦合程度反映了模塊的獨(dú)立性,也反映了系統(tǒng)分解后的復(fù)雜程度。 按照耦合程度從弱到強(qiáng),可以將其分成7級(jí)。
分別是非直接耦合、數(shù)據(jù)耦合、標(biāo)記耦合、控制 耦合、外部耦合、公共耦合和內(nèi)容耦合。其中沒(méi)有異構(gòu)耦合這種方式。
10,下列關(guān)于內(nèi)部類(lèi)的說(shuō)法不正確的是 ( )
A,內(nèi)部類(lèi)的類(lèi)名只能在定義它的類(lèi)或程序段中或在表達(dá)式內(nèi)部匿名使用
B,內(nèi)部類(lèi)可以使用它所在類(lèi)的靜態(tài)成員變量和實(shí)例成員變量
C,內(nèi)部類(lèi)不可以用abstract修飾符定義為抽象類(lèi)
D,內(nèi)部類(lèi)可作為其他類(lèi)的成員,而且可訪(fǎng)問(wèn)它所在類(lèi)的成員
答案:C
內(nèi)部類(lèi)不僅可以用abstract修飾定義為抽象類(lèi),也可以用private或protected定義,所以選項(xiàng)C說(shuō)法錯(cuò)誤。