java筆試題是程序員們都會遇到的問題,大家在面試前都會找一些java筆試題了解一下,看看企業(yè)都會考哪些問題,深圳達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)的小編為大家準(zhǔn)備了java后端筆試題部分參考,希望對大家能夠有所幫助。
1、Java 中的構(gòu)造器鏈?zhǔn)鞘裁?
當(dāng)你從一個(gè)構(gòu)造器中調(diào)用另一個(gè)構(gòu)造器,就是Java 中的構(gòu)造器鏈。這種情況只在重載了類的構(gòu)造器的時(shí)候才會出現(xiàn)。
2、JRE、JDK、JVM 及 JIT 之間有什么不同?
JRE 代表 Java 運(yùn)行時(shí)(Java run-time),是運(yùn)行 Java 引用所必須的。JDK 代表 Java 開發(fā)工具(Java development kit),是 Java 程序的開發(fā)工具,如 Java 編譯器,它也包含 JRE。JVM 代表 Java 虛擬機(jī)(Java virtual machine),它的責(zé)任是運(yùn)行 Java 應(yīng)用。JIT 代表即時(shí)編譯(Just In Time compilation),當(dāng)代碼執(zhí)行的次數(shù)超過一定的閾值時(shí),會將 Java 字節(jié)碼轉(zhuǎn)換為本地代碼,如,主要的熱點(diǎn)代碼會被準(zhǔn)換為本地代碼,這樣有利大幅度提高 Java 應(yīng)用的性能。
3、數(shù)據(jù)庫有時(shí)候會產(chǎn)生數(shù)據(jù)不一致的原因是:
answer:數(shù)據(jù)不一致性是指數(shù)據(jù)的矛盾性、不相容性。
產(chǎn)生數(shù)據(jù)不一致的原因主要有以下三種:一是由于數(shù)據(jù)冗余造成的;二是由于并發(fā)控制不當(dāng)造成的;三是由于各種故障、錯(cuò)誤造成的。
根本原因:數(shù)據(jù)冗余
4、3*0.1 == 0.3 將會返回什么?true 還是 false?
false,因?yàn)橛行└↑c(diǎn)數(shù)不能完全精確的表示出來。
5、什么是數(shù)據(jù)庫的完整性約束條件
answer:儲在數(shù)據(jù)庫中的所有數(shù)據(jù)值均正確的狀態(tài)。
如果數(shù)據(jù)庫中存儲有不正確的數(shù)據(jù)值,則該數(shù)據(jù)庫稱為已喪失數(shù)據(jù)完整性。 數(shù)據(jù)完整性
(Data Integrity)是指數(shù)據(jù)的精確性(Accuracy) 和可靠性(Reliability)。它是應(yīng)防止數(shù)據(jù)庫中存在不符合語義規(guī)定的...
6、32 位和 64 位的 JVM,int 類型變量的長度是多數(shù)?
32 位和 64 位的 JVM 中,int 類型變量的長度是相同的,都是 32 位或者 4 個(gè)字節(jié)。
7、我們能將 int 強(qiáng)制轉(zhuǎn)換為 byte 類型的變量嗎?如果該值大于 byte 類型的范圍,將會出現(xiàn)什么現(xiàn)象?
是的,我們可以做強(qiáng)制轉(zhuǎn)換,但是 Java 中 int 是 32 位的,而 byte 是 8 位的,所以,如果強(qiáng)制轉(zhuǎn)化是,int 類型的高 24 位將會被丟棄,byte 類型的范圍是從 -128 到 128。
8、你能保證 GC 執(zhí)行嗎?
不能,雖然你可以調(diào)用 System.gc() 或者 Runtime.gc(),但是沒有辦法保證 GC 的執(zhí)行。
9、Java 中堆和棧有什么區(qū)別?
JVM 中堆和棧屬于不同的內(nèi)存區(qū)域,使用目的也不同。棧常用于保存方法幀和局部變量,而對象總是在堆上分配。棧通常都比堆小,也不會在多個(gè)線程之間共享,而堆被整個(gè) JVM 的所有線程共享。
10、“a==b”和”a.equals(b)”有什么區(qū)別?
如果 a 和 b 都是對象,則 a==b 是比較兩個(gè)對象的引用,只有當(dāng) a 和 b 指向的是堆中的同一個(gè)對象才會返回 true,而 a.equals(b) 是進(jìn)行邏輯比較,所以通常需要重寫該方法來提供邏輯一致性的比較。例如,String 類重寫 equals() 方法,所以可以用于兩個(gè)不同對象,但是包含的字母相同的比較。
11、ArrayList 與 linkedList 的不區(qū)別?
最明顯的區(qū)別是 ArrrayList 底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組,支持隨機(jī)訪問,而 linkedList 的底層數(shù)據(jù)結(jié)構(gòu)書鏈表,不支持隨機(jī)訪問。使用下標(biāo)訪問一個(gè)元素,ArrayList 的時(shí)間復(fù)雜度是 O(1),而 linkedList 是 O(n)。
12、java 中怎么打印數(shù)組?
你可以使用 Arrays.toString() 和 Arrays.deepToString() 方法來打印數(shù)組。由于數(shù)組沒有實(shí)現(xiàn) toString() 方法,所以如果將數(shù)組傳遞給 System.out.println() 方法,將無法打印出數(shù)組的內(nèi)容,但是 Arrays.toString() 可以打印每個(gè)元素。
13、Java 中的 TreeMap 是采用什么樹實(shí)現(xiàn)的
Java 中的 TreeMap 是使用紅黑樹實(shí)現(xiàn)的。
14、解釋一下hibernate的延遲加載機(jī)制。
最直觀的認(rèn)識:在hibernate方法中,直接涉及到延遲加載的方法有g(shù)et和load,使用get時(shí),不會延遲加載,load則反之。另外,在many-to-one等關(guān)系配置中,我們也可以通過lazy屬性設(shè)置是否延遲加載。(詳細(xì)的自行百度。)
15、Java 中 ++ 操作符是線程安全的嗎?
不是線程安全的操作。它涉及到多個(gè)指令,如讀取變量值,增加,然后存儲回內(nèi)存,這個(gè)過程可能會出現(xiàn)多個(gè)線程交差。
16、3*0.1 == 0.3 將會返回什么?true 還是 false?
false,因?yàn)橛行└↑c(diǎn)數(shù)不能完全精確的表示出來
17、Java 中的 linkedList 是單向鏈表還是雙向鏈表?
是雙向鏈表,你可以檢查 JDK 的源碼。在 Eclipse,你可以使用快捷鍵 Ctrl + T,直接在編輯器中打開該類。
18、Java 中的 TreeMap 是采用什么樹實(shí)現(xiàn)的?
Java 中的 TreeMap 是使用紅黑樹實(shí)現(xiàn)的。
19、wait()和sleep()的區(qū)別
sleep來自Thread類,和wait來自O(shè)bject類
調(diào)用sleep()方法的過程中,線程不會釋放對象鎖。而 調(diào)用 wait 方法線程會釋放對象鎖
sleep睡眠后不出讓系統(tǒng)資源,wait讓出系統(tǒng)資源其他線程可以占用CPU
sleep(milliseconds)需要指定一個(gè)睡眠時(shí)間,時(shí)間一到會自動喚醒
20、JAVA 中堆和棧的區(qū)別,說下java 的內(nèi)存機(jī)制
a.基本數(shù)據(jù)類型比變量和對象的引用都是在棧分配的
b.堆內(nèi)存用來存放由new創(chuàng)建的對象和數(shù)組
c.類變量(static修飾的變量),程序在一加載的時(shí)候就在堆中為類變量分配內(nèi)存,堆中的內(nèi)存地址存放在棧中
d.實(shí)例變量:當(dāng)你使用java關(guān)鍵字new的時(shí)候,系統(tǒng)在堆中開辟并不一定是連續(xù)的空間分配給變量,是根據(jù)零散的堆內(nèi)存地址,通過哈希算法換算為一長串?dāng)?shù)字以表征這個(gè)變量在堆中的”物理位置”,實(shí)例變量的生命周期–當(dāng)實(shí)例變量的引用丟失后,將被GC(垃圾回收器)列入可回收“名單”中,但并不是馬上就釋放堆中內(nèi)存
e.局部變量: 由聲明在某方法,或某代碼段里(比如for循環(huán)),執(zhí)行到它的時(shí)候在棧中開辟內(nèi)存,當(dāng)局部變量一但脫離作用域,內(nèi)存立即釋放
21、JAVA多態(tài)的實(shí)現(xiàn)原理
a.抽象的來講,多態(tài)的意思就是同一消息可以根據(jù)發(fā)送對象的不同而采用多種不同的行為方式。(發(fā)送消息就是函數(shù)調(diào)用)
b.實(shí)現(xiàn)的原理是動態(tài)綁定,程序調(diào)用的方法在運(yùn)行期才動態(tài)綁定,追溯源碼可以發(fā)現(xiàn),JVM 通過參數(shù)的自動轉(zhuǎn)型來找到合適的辦法。
22、CAS(Compare And Swap) 無鎖算法:
CAS是樂觀鎖技術(shù),當(dāng)多個(gè)線程嘗試使用CAS同時(shí)更新同一個(gè)變量時(shí),只有其中一個(gè)線程能更新變量的值,而其它線程都失敗,失敗的線程并不會被掛起,而是被告知這次競爭中失敗,并可以再次嘗試。CAS有3個(gè)操作數(shù),內(nèi)存值V,舊的預(yù)期值A(chǔ),要修改的新值B。當(dāng)且僅當(dāng)預(yù)期值A(chǔ)和內(nèi)存值V相同時(shí),將內(nèi)存值V修改為B,否則什么都不做。
以上就是深圳達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)的小編針對“java后端筆試題部分參考”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
Java筆試題