1.10 個線程和 2 個線程的同步代碼,哪個更容易寫?
從寫代碼的角度來說,兩者的復雜度是相同的,因為同步代碼與線程數(shù)量是相互獨立的。但是同步策略的選擇依賴于線程的數(shù)量,因為越多的線程意味著更大的競爭,所以你需要利用同步技術(shù),如鎖分離,這要求更復雜的代碼和專業(yè)知識。
2.我們能創(chuàng)建一個包含可變對象的不可變對象嗎?
是的,我們是可以創(chuàng)建一個包含可變對象的不可變對象的,你只需要謹慎一點,不要共享可變對象的引用就可以了,如果需要變化時,就返回原對象的一個拷貝。最常見的例子就是對象中包含一個日期對象的引用。
3.我能在不進行強制轉(zhuǎn)換的情況下將一個 double 值賦值給 long 類型的變量嗎?
不行,你不能在沒有強制類型轉(zhuǎn)換的前提下將一個 double 值賦值給 long 類型的變量,因為 double 類型的范圍比 long 類型更廣,所以必須要進行強制轉(zhuǎn)換。
4.如何避免死鎖?
死鎖是指兩個或兩個以上的進程在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外力作用,它們都將無法推進下去。這是一個嚴重的問題,因為死鎖會讓你的程序掛起無法完成任務,死鎖的發(fā)生必須滿足以下四個條件:
互斥條件:一個資源每次只能被一個進程使用。
請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
循環(huán)等待條件:若干進程之間形成一種頭尾相接的循環(huán)等待資源關系。
最簡單的方法就是阻止循環(huán)等待條件,將系統(tǒng)中所有的資源設置標志位、排序,規(guī)定所有的進程申請資源必須以一定的順序(升序或降序)做操作來避免死鎖。這篇教程有代碼示例和避免死鎖的討論細節(jié)。
5.有三個線程T1,T2,T3,怎么確保它們按順序執(zhí)行?
在多線程中有多種方法讓線程按特定順序執(zhí)行,你可以用線程類的join()方法在一個線程中啟動另一個線程,另外一個線程完成該線程繼續(xù)執(zhí)行。為了確保三個線程的順序你應該先啟動最后一個(T3調(diào)用T2,T2調(diào)用T1),這樣T1就會先完成而T3最后完成。
6.short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎?
對于short s1 = 1; s1 = s1 + 1;由于1是int類型,因此s1+1運算結(jié)果也是int 型,需要強制轉(zhuǎn)換類型才能賦值給short型。而short s1 = 1; s1 += 1;可以正確編譯,因為s1+= 1;相當于s1 = (short)(s1 + 1);其中有隱含的強制類型轉(zhuǎn)換。
7.描述一下JVM加載class文件的原理機制?
JVM中類的裝載是由類加載器(ClassLoader)和它的子類來實現(xiàn)的,Java中的類加載器是一個重要的Java運行時系統(tǒng)組件,它負責在運行時查找和裝入類文件中的類。類的加載是指把類的.class文件中的數(shù)據(jù)讀入到內(nèi)存中,通常是創(chuàng)建一個字節(jié)數(shù)組讀入.class文件
8.獲得一個類的類對象有哪些方式?
方法1:class,如:String.class
方法2:Class.forName(),如:Class.forName("java.lang.String")
方法3::對象.getClass,如:“hello”.getClass()
9.一個”.java“源文件中是否可以包括多個類?有什么限制
可以包括多個類,但只能有一個Public,而且Public的類必須與文件名相一致
10.簡述你所知道的Linux
Linux起源于1991年,1995年流行起來的免費操作系統(tǒng),目前, Linux是主流的服務器操作系統(tǒng), 廣泛應用于互聯(lián)網(wǎng)、云計算、智能手機(Android)等領域。由于Java主要用于服務器端的開發(fā),因此Java應用的部署環(huán)境有很多為Linux。
Linux不像Windows的圖形操作界面,是通過命令的方式進行操作,常用命令有:
a . pwd:用于顯示當前工作目錄;
b . ls:用于查看當前工作目錄內(nèi)容;
c . cd:用于改變當前工作目錄。
11.Java集合框架是什么?
最初的Java版本包含幾種集合類:Vector、Stack、HashTable和Array。隨著集合的廣泛使用,Java1.2提出了囊括所有集合接口、實現(xiàn)和算法的集合框架。在保證線程安全的情況下使用泛型和并發(fā)集合類,Java已經(jīng)經(jīng)歷了很久。它還包括在Java并發(fā)包中,阻塞接口以及它們的實現(xiàn)。
12.如果兩個鍵的hashcode相同,你如何獲取值對象?
當我們調(diào)用get()方法,HashMap會使用鍵對象的hashcode找到bucket位置,然后會調(diào)用keys.equals()方法去找到鏈表中正確的節(jié)點,最終找到要找的值對象。
13.Array和ArrayList有何區(qū)別?什么時候更適合用Array?
Array可以容納基本類型和對象,而ArrayList只能容納對象。
Array是指定大小的,而ArrayList大小是固定的
以上就是長沙牛耳教育Java培訓機構(gòu)小編介紹的“2020年Java應屆生面試題應答”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。
相關推薦
最新最全java面試題及答案(初級到高級)
史上最全的中高級JAVA工程師面試題及答案匯總
Java高級開發(fā)工程師面試題
2019史上最全java面試題題庫大全800題
哪有資深java工程師面試題