100道Java基礎面試題

來源:互聯網
上載者:User

標籤:cte   java   keyword   表達   index   通過   double   list   左右   

1.什麼是B/S架構?什麼是C/S架構
  1. B/S(Browser/Server),瀏覽器/伺服器程式
  2. C/S(Client/Server),用戶端/服務端,傳統型應用程式

    2.你所知道網路通訊協定有那些?

    HTTP:超文字傳輸通訊協定 (HTTP)
    FTP:檔案傳輸通訊協定
    SMPT:簡單郵件協議
    TELNET:遠程終端協議
    POP3:郵件讀取協議

3.Java都有那些開發平台?
JAVA SE:主要用在用戶端開發JAVA EE:主要用在web應用程式開發JAVA ME:主要用在嵌入式應用程式開發
4.什麼是JVM?java虛擬機器包括什嗎?

JVM:java虛擬機器,運用硬體或軟體手段實現的虛擬電腦,Java虛擬機器包括:寄存器,堆棧,處理器

5.Java是否需要開發人員回收記憶體垃圾嗎?

大多情況下是不需要的。Java提供了一個系統級的線程來跟蹤記憶體配置,不再使用的記憶體區將會自動回收

6.什麼是JDK?什麼是JRE?

JDK:java development kit:java開發套件,是開發人員所需要安裝的環境

JRE:java runtime environment:java運行環境,java程式運行所需要安裝的環境

7.什麼是資料結構?

電腦儲存,組織資料的方式

8.Java的資料結構有那些?
線性表(ArrayList)鏈表(LinkedList)棧(Stack)隊列(Queue)圖(Map)樹(Tree)
9.什麼是OOP?

物件導向編程

10.什麼是物件導向?

世間萬物都可以看成一個對象。每個物體包括動態行為和靜態屬性,這些就構成了一個對象。

11.類與對象的關係?

類是對象的抽象,對象是類的具體,類是對象的模板,對象是類的執行個體

12.Java中有幾種資料類型
整形:byte,short,int,long浮點型:float,double字元型:char布爾型:boolean
13.什麼是隱式轉換,什麼是顯式轉換

顯示轉換就是類型強轉,把一個大類型的資料強制賦值給小類型的資料;隱式轉換就是大範圍的變數能夠接受小範圍的資料;隱式轉換和顯式轉換其實就是自動類型轉換和強制類型轉換。

14.Char類型能不能轉成int類型?能不能轉化成string類型,能不能轉成double類型

Char在java中也是比較特殊的類型,它的int值從1開始,一共有2的16次方個資料;Char<int<long<float<double;Char類型可以隱式轉成int,double類型,但是不能隱式轉換成string;如果char類型轉成byte,short類型的時候,需要強轉。

15.什麼是拆裝箱?
拆箱:把封裝類型轉成基礎資料型別 (Elementary Data Type)裝箱:把基礎資料型別 (Elementary Data Type)轉成封裝類型
16.Java中的封裝類都是那些?
byte:Byte short:Short int:Integer long:Long float:Float double:Double char:Character boolean:Boolean
17.一個java類中包含那些內容?

屬性、方法、內部類、構造方法、代碼塊。

18.例如: if(a+1.0=4.0),這樣做好嗎?

不好,因為電腦在浮點型資料運算的時候,會有誤差,盡量在布林運算式中不使用浮點型資料(if,while,switch中判斷條件不使用浮點型)

19.那針對浮點型資料運算出現的誤差的問題,你怎麼解決?

使用Bigdecimal類進行浮點型資料的運算

20.++i與i++的區別
++i:先賦值,後計算i++:先計算,後賦值
21.程式的結構有那些?
順序結構選擇結構迴圈結構
22.數組執行個體化有幾種方式?

靜態執行個體化:建立數組的時候已經指定數組中的元素,

?
1 int[] a=new int[]{1,3,3}

動態執行個體化:執行個體化數組的時候,只指定了數組程度,數組中所有元素都是數群組類型的預設值

23.Java中各種資料預設值
Byte,short,int,long預設是都是0Boolean預設值是falseChar類型的預設值是’’Float與double類型的預設是0.0物件類型的預設值是null
24.Java常用包有那些?
Java.langJava.ioJava.sqlJava.utilJava.awtJava.netJava.math
25.Java最頂級的父類是哪個?

Object

26.Object類常用方法有那些?
EqualsHashcodetoStringwaitnotifyclonegetClass
27.java中有沒有指標?

有指標,但是隱藏了,開發人員無法直接操作指標,由jvm來操作指標

28.java中是值傳遞引用傳遞?

理論上說,java都是引用傳遞,對於基礎資料型別 (Elementary Data Type),傳遞是值的副本,而不是值本身。對於物件類型,傳遞是對象的引用,當在一個方法操作巨集指令引數的時候,其實操作的是引用所指向的對象。

29.假設把執行個體化的數組的變數當成方法參數,當方法執行的時候改變了數組內的元素,那麼在方法外,數組元素有發生改變嗎?

改變了,因為傳遞是對象的引用,操作的是引用所指向的對象

30.執行個體化數組後,能不能改變數組長度呢?

不能,數組一旦執行個體化,它的長度就是固定的

31.假設數組內有5個元素,如果對數組進行反序,該如何做?

建立一個新數組,從後到前迴圈遍曆每個元素,將取出的元素依次順序放入新數組中

32.形參與實參

形參:全稱為“形式參數”,是在定義方法名和方法體的時候使用的參數,用於接收調用該方法時傳入的實際值;實參:全稱為“實際參數”,是在調用方法時傳遞給該方法的實際值。

33.構造方法能不能顯式調用?

不能構造方法當成普通方法調用,只有在建立對象的時候它才會被系統調用

34.構造方法能不能重寫?能不能重載?

可以重寫,也可以重載

35.什麼是方法重載?

方法的重載就是在同一個類中允許同時存在一個以上的同名方法,只要它們的參數個數或者類型不同即可。在這種情況下,該方法就叫被重載了,這個過程稱為方法的重載(override)

36.內部類與靜態內部類的區別?

靜態內部類相對與外部類是獨立存在的,在靜態內部類中無法直接存取外部類中變數、方法。如果要訪問的話,必須要new一個外部類的對象,使用new出來的對象來訪問。但是可以直接存取靜態變數、調用靜態方法;

普通內部類作為外部類一個成員而存在,在普通內部類中可以直接存取外部類屬性,調用外部類的方法。

如果外部類要訪問內部類的屬性或者調用內部類的方法,必須要建立一個內部類的對象,使用該對象訪問屬性或者調用方法。

如果其他的類要訪問普通內部類的屬性或者調用普通內部類的方法,必須要在外部類中建立一個普通內部類的對象作為一個屬性,外同類可以通過該屬性調用普通內部類的方法或者訪問普通內部類的屬性

如果其他的類要訪問靜態內部類的屬性或者調用靜態內部類的方法,直接建立一個靜態內部類對象即可。

37.Static關鍵字有什麼作用?

Static可以修飾內部類、方法、變數、代碼塊

Static修飾的類是靜態內部類

Static修飾的方法是靜態方法,表示該方法屬於當前類的,而不屬於某個對象的,靜態方法也不能被重寫,可以直接使用類名來調用。在static方法中不能使用this或者super關鍵字。

Static修飾變數是靜態變數或者叫類變數,靜態變數被所有執行個體所共用,不會依賴於對象。靜態變數在記憶體中只有一份拷貝,在JVM載入類的時候,只為靜態分配一次記憶體。

Static修飾的代碼塊叫靜態代碼塊,通常用來做程式最佳化的。靜態代碼塊中的代碼在整個類載入的時候只會執行一次。靜態代碼塊可以有多個,如果有多個,按照先後順序依次執行。

38.Final在java中的作用
Final可以修飾類,修飾方法,修飾變數。修飾的類叫最終類。該類不能被繼承。修飾的方法不能被重寫。修飾的變數叫常量,常量必須初始化,一旦初始化後,常量的值不能發生改變。
39.Java中操作字串使用哪個類?

String,StringBuffer,StringBuilder

40.StringBuffer,Stringbuilder有什麼區別?

StringBuffer與StringBuilder都繼承了AbstractStringBulder類,而AbtractStringBuilder又實現了CharSequence介面,兩個類都是用來進行字串操作的。

在做字串拼接修改刪除替換時,效率比string更高。

StringBuffer是安全執行緒的,Stringbuilder是非安全執行緒的。所以Stringbuilder比stringbuffer效率更高,StringBuffer的方法大多都加了synchronized關鍵字

41.String str=”aaa”,與String str=new String(“aaa”)一樣嗎?
不一樣的。因為記憶體配置的方式不一樣。第一種,建立的”aaa”是常量,jvm都將其分配在常量池中。第二種建立的是一個對象,jvm將其值分配在堆記憶體中。
42.String str=”aa”,String s=”bb”,String aa=aa+s;一種建立了幾個對象?

一共有兩個引用,三個對象。因為”aa”與”bb”都是常量,常量的值不能改變,當執行字串拼接時候,會建立一個新的常量是” aabbb”,有將其存到常量池中。

43.將下java中的math類有那些常用方法?
Pow():冪運算Sqrt():平方根Round():四捨五入Abs():求絕對值Random():產生一個0-1的隨機數,包括0不包括1
44.String類的常用方法有那些?
charAt:返回指定索引處的字元indexOf():返回指定字元的索引replace():字串替換trim():去除字串兩端空白split():分割字串,返回一個分割後的字串數組getBytes():返回字串的byte類型數組length():返回字串長度toLowerCase():將字串轉成小寫字母toUpperCase():將字串轉成大寫字元substring():截取字串format():格式化字串equals():字串比較
45.判斷兩個對象是否相同,能使用equlas比較嗎?

不能。Equlas大多用來做字串比較,要判斷基礎資料型別 (Elementary Data Type)或者物件類型,需要使用==

46.==與equlas有什麼區別?

==可以判斷基礎資料型別 (Elementary Data Type)值是否相等,也可以判斷兩個對象指向的記憶體位址是否相同,也就是說判斷兩個對象是否是同一個對象,Equlas通常用來做字串比較。

47.如何將字串反轉?

Stringbuilder或者stringbuffer的reverse方法

48.物件導向的語言有那些特徵?

封裝、繼承、多態

49.Java中的繼承是單繼承還是多繼承

Java中既有單繼承,又有多繼承。對於java類來說只能有一個父類,對於介面來說可以同時繼承多個介面

50.什麼是重寫?什麼是重載?

重載和重寫都是java多態的表現。

重載叫override,在同一個類中多態的表現。當一個類中出現了多個相同名稱的方法,但參數個數和參數類型不同,方法重載與傳回值無關

重寫叫overwrite,是字元類中多態的表現。當子類出現與父類相同的方法,那麼這就是方法重寫。方法重寫時,子類的傳回值必須與父類的一致。如果父類方法拋出一個異常,子類重寫的方法拋出的異常類型不能小於父類拋出的異常類型。

51.構造方法能不能重載?能不能重寫?

可以重載,必須重寫

52.如果父類只有有參構造方法,那麼子類必須要重寫父類的構造方法嗎?

必須重寫

53.建立一個子類對象的時候,那麼父類的構造方法會執行嗎?

會執行。當建立一個子類對象,調用子類構造方法的時候,子類構造方法會預設調用父類的構造方法。

54.什麼是父類引用指向子類對象?

是java多態一種特殊的表現形式。建立父類引用,讓該引用指向一個子類的對象

55.當父類引用指向子類對象的時候,子類重寫了父類方法和屬性,那麼當訪問屬性的時候,訪問是誰的屬性?調用方法時,調用的是誰的方法?

子類重寫了父類方法和屬性,訪問的是父類的屬性,調用的是子類的方法

56.Super與this表示什嗎?
Super表示當前類的父類對象This表示當前類的對象
57.抽象的關鍵字是什嗎?

Abstract

58.抽象類別必須要有抽象方法嗎

不是必須。抽象類別可以沒有抽象方法。

59.如果一個類中有抽象方法,那麼這個一定是抽象類別?

包含抽象方法的類一定是抽象類別

60.抽象類別可以使用final修飾嗎?

不可以。定義抽象類別就是讓其他繼承的,而final修飾類表示該類不能被繼承,與抽象類別的理念違背了

61.普通類與抽象類別有什麼區別?
普通類不能包含抽象方法,抽象類別可以包含抽象方法抽象類別不能直接執行個體化,普通類可以直接執行個體化
62.什麼是介面?

介面就是某個事物對外提供的一些功能的聲明,是一種特殊的java類

63.JAVA為什麼需要介面?

介面彌補了java單繼承的缺點

64.介面有什麼特點?
介面中聲明全是public static final修飾的常量介面中所有方法都是抽象方法介面是沒有構造方法的介面也不能直接執行個體化介面可以多繼承
65.介面與抽象類別有什麼區別?
抽象類別有構造方法,介面沒有構造方法抽象類別只能單繼承,介面可以多繼承抽象類別可以有普通方法,介面中的所有方法都是抽象方法介面的屬性都是public static final修飾的,而抽象的不是
66.Java中異常分為哪兩種?
編譯時間異常運行時異常
67.說幾個常見的編譯時間異常類?
NullPointerException:null 指標異常ArrayIndexOutOfBoundsException:數組下標越界NumberFormatException:數字轉換異常IllegalArgumentException:參數不匹配異常InstantiationException:對象初始化異常ArithmeticException:算術異常
68.異常的處理機制有幾種?

異常捕捉:try…catch…finally,異常拋出:throws。

69.如何自訂一個異常

繼承一個異常類,通常是RumtimeException或者Exception

70.在異常捕捉時,如果發生異常,那麼try.catch.finally塊外的return語句會執行嗎?

會執行,如果有finally,在finally之後被執行,如果沒有finally,在catch之後被執行

71.Try.catch.finally是必須要存在的嗎?

Try塊必須存在,catch和finally可以不存在,但不能同時不存在

72.Thow與thorws區別
Throw寫在代碼塊內,throw後面跟的是一個具體的異常執行個體Throw寫在方法前面後面,throws後面跟的是異常類,異常類可以出現多個
73.Error與Exception區別?

Error和Exception都是java錯誤處理機制的一部分,都繼承了Throwable類。

Exception表示的異常,異常可以通過程式來捕捉,或者最佳化程式來避免。

Error表示的是系統錯誤,不能通過程式來進行錯誤處理。

74.使用Log4j對程式有影響嗎?

有,log4j是用來日誌記錄的,記錄一些關鍵敏感的資訊,通常會將日誌記錄到本地檔案或者資料庫中。記錄在本地檔案中,會有頻繁的io操作,會耗費一些系統資源。記錄在資料庫中,會頻繁地操作資料庫表,對系統效能也有一定的影響。但是為了程式安全以及資料的恢複或者bug的跟蹤,這點資源消耗是可以承受的。

75.Log4j日誌有幾個層級?

由低到高:debug、info、wran、error

76.除了使用new建立對象之外,還可以用什麼方法建立對象?

Java反射

77.Java反射建立對象效率高還是通過new建立對象的效率高?

通過new建立對象的效率比較高。通過反射時,先找尋找類資源,使用類載入器建立,過程比較繁瑣,所以效率較低

78.Java中集合架構的有幾個?

Coillection、Map。

79.Collection介面下有那些集合架構?

List:線性表、Set:無序集合。

80.List介面有什麼特點?

順序儲存、可以有重複值。

81.Set介面有什麼特點

無須儲存、不能有重複值。

82.ArrayList與LinkedList有什麼區別?
ArrayList與LinkedList都實現了List介面。ArrayList是線性表,底層是使用數組實現的,它在尾端插入和訪問資料時效率較高, Linked是雙向鏈表,他在中間插入或者頭部插入時效率較高,在訪問資料時效率較低
83.Array與ArrayList有什麼不一樣?

Array與ArrayList都是用來儲存資料的集合。ArrayList底層是使用數組實現的,但是arrayList對數組進行了封裝和功能擴充,擁有許多原生數組沒有的一些功能。我們可以理解成ArrayList是Array的一個升級版。

84.Map有什麼特點
以索引值對儲存資料元素儲存循序是無須的不允許出現重複鍵
85.JDBC操作的步驟
載入資料庫驅動類開啟資料庫連接執行sql語句處理返回結果關閉資源
86.在使用jdbc的時候,如何防止出現sql注入的問題。

使用PreparedStatement類,而不是使用Statement類

87.怎麼在JDBC內調用一個預存程序

使用CallableStatement

88.是否瞭解串連池,使用串連池有什麼好處?

資料庫連接是非常消耗資源的,影響到程式的效能指標。串連池是用來分配、管理、釋放資料庫連接的,可以使應用程式重複使用同一個資料庫連接,而不是每次都建立一個新的資料庫連接。通過釋放空閑時間較長的資料庫連接避免資料庫因為建立太多的串連而造成的串連遺漏問題,提高了程式效能。

89.你所瞭解的資料來源技術有那些?使用資料來源有什麼好處?

Dbcp,c3p0等,用的最多還是c3p0,因為c3p0比dbcp更加穩定,安全;通過設定檔的形式來維護資料庫資訊,而不是通過寫入程式碼。當串連的資料庫資訊發生改變時,不需要再更改程式碼就實現了資料庫資訊的更新。

90.Java的io流分為哪兩種?

按功能來分

輸入資料流(input),輸出資料流(output)

按類型來分

位元組流,字元流
91.常用io類有那些?
FileFileInputSteam,FileOutputStreamBufferInputStream,BufferedOutputSreamPrintWriteFileReader,FileWriterBufferReader,BufferedWriterObjectInputStream,ObjectOutputSream
92.位元組流與字元流的區別
以位元組為單位輸入輸出資料,位元組流按照8位傳輸以字元為單位輸入輸出資料,字元流按照16位傳輸
93.final、finalize()、finally性質不同
  1. final為關鍵字;
  2. finalize()為方法;
  3. finally為區塊標誌,用於try語句中;
作用
  1. final為用於標識常量的關鍵字,final標識的關鍵字儲存在常量池中(在這裡final常量的具體用法將在下面進行介紹);
  2. finalize()方法在Object中進行了定義,用於在對象“消失”時,由JVM進行調用用於對對象進行記憶體回收,類似於C++中的解構函式;使用者自訂時,用於釋放對象佔用的資源(比如進行I/0操作);
  3. finally{}用於標識代碼塊,與try{}進行配合,不論try中的代碼執行完或沒有執行完(這裡指有異常),該代碼塊之中的程式必定會進行;
94.抽象類別和介面的區別?

抽象類別:

  1. 抽象方法,只有行為的概念,沒有具體的行為實現。使用abstract關鍵字修飾,沒有方法體。子類必須重寫這些抽象方法。
  2. 包含抽象方法的類,一定是抽象類別。
  3. 抽象類別只能被繼承,一個類只能繼承一個抽象類別。

介面:

  1. 全部的方法都是抽象方法,屬型都是常量
  2. 不能執行個體化,可以定義變數。
  3. 介面變數可以引用具體實作類別的執行個體
  4. 介面只能被實現,一個具體類實現介面,必須實現全部的抽象方法
  5. 介面之間可以多實現
  6. 一個具體類可以實現多個介面,實現多繼承現象
95.線程同步的方法
  1. wait():讓線程等待。將線程儲存到一個線程池中。
  2. notify():喚醒被等待的線程。通常都喚醒線程池中的第一個。讓被喚醒的線程處於臨時阻塞狀態。
  3. notifyAll(): 喚醒所有的等待線程。將線程池中的所有線程都喚醒。
96.線程與進程的區別

進程是系統進行資源分派和調度的一個獨立單位,線程是CPU調度和指派的基本單位

進程和線程的關係:

  1. 一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程。
  2. 資源分派給進程,同一進程的所有線程共用該進程的所有資源。
  3. 線程在執行過程中,需要協作同步。不同進程的線程間要利用訊息通訊的辦法實現同步。
  4. 線程是指進程內的一個執行單元,也是進程內的可調度實體。

線程與進程的區別:

  1. 調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位。
  2. 並發性:不僅進程之間可以並發執行,同一個進程的多個線程之間也可以並發執行。
  3. 擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬於進程的資源。
  4. 系統開銷:在建立或撤銷進程的時候,由於系統都要為之分配和回收資源,導致系統的明顯大於建立或撤銷線程時的開銷。但進程有獨立的地址空間,進程崩潰後,在保護模式下不會對其他的進程產生影響,而線程只是一個進程中的不同的執行路徑。線程有自己的堆棧和局部變數,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程式要比多線程的程式健壯,但是在進程切換時,耗費的資源較大,效率要差些。
97.&和&&的區別

&是位元運算符。&&是布爾邏輯運算子,在進行邏輯判斷時用&處理的前面為false後面的內容仍需處理,用&&處理的前面為false不再處理後面的內容。

98.重載與重寫
  1. Overload為重載,Override為重寫方法的重寫和重載是Java多態性的不同表現。重寫是父類與子類之間多態性的一種表現,重載是一個類中多態性的一種表現。
  2. 如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Override)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。
  3. 如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overload)。
    重載的方法是可以改變傳回值的類型。
99.如果對象的引用被置為null,垃圾收集器是否會立即釋放對象佔用的記憶體?

不會,在下一個記憶體回收周期中,這個對象將是可被回收的。

100.串列(serial)收集器和輸送量(throughput)收集器的區別是什嗎?

輸送量收集器使用並行版本的新生代垃圾收集器,它用於中等規模和大規模資料的應用程式。而串列收集器對大多數的小應用(在現代處理器上需要大概100M左右的記憶體)就足夠了。

100道Java基礎面試題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.