1. 程式人生 > >Java基礎語法面試題

Java基礎語法面試題


title: Java筆試題

基礎語法和演算法:

1.a++和++a的區別

a++:在資料使用之後自增
++a:在資料使用之前自增

2.&和&&的區別

邏輯與和短路與,用&連線的兩個條件的最後結果計算第一個表示式為false也會計算第二個表示式,而&&如果第一個表示式為false整個表示式直接為false跳過第二個判斷表示式

3.說說JVM

JVM,即Java Vistual Machinal,虛擬機器
比較常見的功能就是,
1.提供了Java語言的跨平臺性,對於相同的原始碼會根據作業系統的不同或者版本的不同會編譯成不同的位元組碼檔案,從而相容各個作業系統
2.GC,即Garrbish Collection,垃圾回收機制
因為系統記憶體是有限的,一旦記憶體達到的極限我們無法再向其中新增物件,類,方法等,所以JVM提供了垃圾回收機制,根據分代回收演算法對不同的物件進行回收,回收無用的記憶體空間,以提高系統執行效能

4.GC是什麼?為什麼要有GC?

GC,即Garbish Collection,垃圾回收機制
參上

5.陣列有沒有length()這個方法?String有沒有length()這個方法?

陣列沒有方法,更沒有length方法
String有length()方法,檢視當前字串的字元個數

面向物件

1.什麼是多型

多型,在Java中我們將型別分為編譯時型別和執行時型別,如果編譯時型別與執行時型別不一致,那我們就稱之為多型
多型的三個前提:
父類引用指向子類物件
繼承或實現關係
方法重寫

2.Integer封裝類可以被繼承嗎?

不可以,它是一個Final最終類

3.String可以被繼承?

不可以,它是一個Final最終類

4.int 和 Integer有什麼區別?

int是基本資料型別,Integer是引用資料型別,我們也稱其為基本資料型別的包裝類
Integer預設為null,int沒有預設值,使用前必須賦值,不然編譯報錯

5.extends和implements的區別

繼承和實現的區別,Java類只支援單繼承,但是介面之間支援多繼承,Java類支援多實現,即一個類可以實現多個介面,介面與介面之間不能實現;
繼承,即繼承父類的非私有屬性和非構造或私有方法,可以對父類的方法進行重寫,通過可以新增自己獨有的屬性和方法,如果父類是抽象類,子類必須重寫其抽象方法,除非子類也是抽象類;
實現,即子類實現介面,需要實現介面中的所有方法,如果是抽象類也可以不實現;

6.構造器Constructor是否可以被override?

不可以,但是可以通過super關鍵字呼叫父類的構造器

7.介面是否可以繼承介面?抽象類是否可以實現介面?抽象類是否可以繼承具體類?抽象類中是否可以有靜態main方法?

介面可以繼承介面
抽象類可以實現介面
抽象類可以繼承具體類
抽象類中可以有靜態main方法

8.類的載入機制

1.載入階段
類載入到方法區,生成類物件
2.連線階段
驗證->準備(靜態分配)->解析(常量,顯式關鍵字)
3.初始化階段
靜態Field初始化

9.請簡述面向物件的一些基本概念

封裝:私有化屬性,對外提供get/set方法,即內部結構對外是透明的
繼承:Object是基類,所有的類都繼承與Object類,子類繼承父類可以使用父類的屬性和方法,可以重寫方法
多型:對於同一個父類的方法,不同子類有不同的實現,從而實現同一個型別不同階段下實現不同的功能
抽象:當前類的相關方法不能確定其具體實現,就將實現交給子類

10.Java中常用類,不少於6個

Math,String,StringBuffer,StringBuild,SimpleDateFormat,ArrayList,LinkedList,HashMap…

集合

1.List,Set,Map是否繼承自Collection介面

集合分為兩大體系,Collection和Map

2.HashMap的資料結構,存放資料的機制和擴容問題

HashMap底層是雜湊表的資料結構,雜湊表的資料結構特點就一個字,快,能夠在最短時間內獲得想要的資料
HashMap使用了連結串列來解決雜湊衝突
對於所有key,雜湊表會通過雜湊函式獲得一個雜湊值,只要key是相同的則雜湊值一定相同,然後如果兩個key的雜湊值相同,HashMap則通過連結串列將key連線起來,當我們查詢的時候我們就可以通過key很快的得到雜湊值並找到其所在的位置,然後在通過equals()方法比較是否是同一個key將其拿出來
擴容機制的話我們需要知道當前雜湊表的填充因子,HashMap的填充因子是0.75,即當雜湊表中雜湊值的數量達到了雜湊表最大容量的0.75那麼HashMap就會進行擴容,這也是雜湊表所希望的,因為雜湊表的效能會隨著元素的個數越多而下降,而通過擴容,雜湊表可以將元素再次計算打散,使得雜湊表的效能得到提升

3.談談HashSet的儲存原理

HashSet底層就是直接使用HashMap存值所以儲存原理就是參上的原理

4.list和map的應用場景

list用來儲存一系列有序且允許重複的單個物件
map用來儲存無序且唯一個鍵值對

5.常用集合的底層實現?

ArrayList:底層由動態陣列實現,執行緒不安全
LinkedList:底層由雙向連結串列實現,在中間插入和刪除元素快
Vector:底層由動態陣列實現,執行緒安全
HashSet:
TreeSet:

HashMap: HashMap的是Map集合的常用實現類,底層採用的是雜湊表的資料結構存放資料的。特點是插入和查詢速度很快。但是隨著元素個數越來越多,效率會有所下降,但是仍然是效率很高的一種資料結構。HashMap的key值是無序且不重複的。
TreeMap:底層採用的紅黑樹實現的,相對於雜湊表,紅黑樹的插入和查詢速度要慢,但是紅黑樹可以維護元素本身的字典順序,所以需要對key排序的是時候才考慮使用TreeMap
linkedHashMap:和HashMap相比,多了一個連結串列維護插入順序,所以插入和刪除效能有所下降,但是查詢的速度會比HashMap要快,並且可以按插入的順序遍歷

6.Map怎麼實現有序

通過LinkedHashMap實現有序,具體實現同上

7.Set和Map的底層

Set底層就是Map,Map底層由不同的實現類決定

8.HashMap和Hashtable的區別

HashMap是執行緒不安全的,效能高,key和value都不允許為null
Hashtable是執行緒安全的,效能低,key和value允許為null,且只有一個null

9.Collections和Conllection比較

Collections是工具類,用於集合的排序等…
Collection是單列集合的父介面

10.List和Set比較

List:儲存有序可以重複的物件,可以用下表遍歷
Set:儲存無序唯一的物件,不可以下標遍歷

11.集合的工具類有哪些?如何實現集合排序?不使用工具類怎麼排序

Collections集合工具類
Iterator迭代器
Comparator比較器
Collection.sort(Collection c,Comparator c)
如果不適用工具類可以使用排序演算法,比如快速排序,希爾排序,歸併排序,堆排序,基數排序

12.ArrayList和LinkedList

ArrayList: 通過動態陣列的方式儲存物件,查詢和向後追加元素效率高
LinkedList:通過雙向連結串列的方式儲存物件,連續位置新增和刪除效率高

13.Set和Map

聯絡: Set的儲存是通過Map來實現的
區別: Set儲存單個物件無序且唯一, Map儲存鍵值對(key-value),key無序且唯一

14.ConcurrentHashMap和HashMap,LinkedHashMap

HashMap:
查詢和插入速度極快,但是執行緒不安全,在多執行緒情況下在擴容的情況下可能會形成閉環鏈路,耗光cpu資源。
LinkedHashMap:
基本和HashMap實現類似,多了一個連結串列來維護元素插入的順序,因此維護的效率會比HashMap略低。但是因為有連結串列的存在,遍歷效率會高於HashMap。
ConcurrentHashMap:
執行緒安全的,採用了分段鎖的機制實現資料同步,因此相對於Hashtable來說效率要高,所以我們一般在多執行緒情況下都是用ConcurrentMap,但是由於引入了分段鎖,底層每次進行元素的插入和獲取,需要進行兩次雜湊演算法,第一次先確定段,第二次才能找到陣列座標,因此效率低於HashMap,不過在多執行緒情況下用來保證資料安全性是值得的,

IO流與異常

1.執行時的異常和一般異常有什麼異同?

RuntimeException:可以編譯通過,執行時報錯
一般異常:檢查異常,編譯器就會報錯,需要處理異常後執行

2.try-catch中return和finally哪個優先執行

finally在return中間執行return的資料無法再finally中修改後return

3.請說出常見的執行異常

NullPointException
ClassNotFoundException
ClassFormatException
NumberFormatException
算術異常
迭代異常
IllegerAgrumentExcetion

4.有用過NIO嗎?NIO的優點在哪裡?

NIO底層採用的是記憶體對映實現,因此效率會比普通的IO效率要高

5.NIO是什麼他跟IO有什麼區別?

N基於通道與緩衝區操作的流,是非堵塞的
IO是基於讀寫操作的是堵塞的,效率低於NIO

多執行緒,網路程式設計

1.執行緒池有沒有用過,怎麼用的,在哪裡用的?

在需要建立和銷燬大量臨時執行緒時,可以使用執行緒池減少執行緒建立和銷燬的消耗

2.SimpleDataFormat是執行緒安全的嗎?

不是

3.啟動一個執行緒用的是start()還是run()?

start(),如果直接呼叫run()則會像呼叫普通方法一樣執行run方法中的內容,就不會有爭搶cpu時間片的過程

4.sleep()和wait()有什麼區別?

sleep()是Thread類中的靜態方法,當一個執行緒呼叫sleep()方法以後不會釋放同步資源鎖,其他執行緒仍然會等待資源鎖的釋放
wai()方法時Object類提供的一個普通方法,而且必須同同步資源鎖物件在同步程式碼或者同步方法資源鎖從而繼續往下執行

5.談談建立多執行緒的方式

繼承Thread的方法
使用這種方法,當前類就是代表一個執行緒類,可以直接呼叫start方法啟動執行緒,線上程執行體中藥獲取當前正在執行的執行緒只需要通過this關鍵字就可以了,缺點在Java的單繼承特性,一旦當前類繼承了Thread類就沒有辦法在繼承其他類了
實現Runable介面的方式
使用這種方法,當前類並不代表執行緒,只是代表執行緒的一個執行體,想要啟動執行緒還必須new一個Tread物件,將執行體物件傳到構造器中執行,好處是在於Runnable回一個介面,並不會導致其類無法繼承其他類,缺點就是稍微有點麻煩,獲取當前正在執行的執行緒不能用this關鍵詞,只能採用Thread.currentThread()方式
使用Callable和Future建立執行緒
這種方式建立執行緒可以有返回值

6.談談你對執行緒安全的理解?如何解決執行緒的安全問題?

當多個執行緒互相爭搶資源的時候回造成資料不一致,通過執行緒安全可以保證資料的一致性,
執行緒安全可以通過以下方式來加鎖
1.同步程式碼塊
2.同步方法
3.互斥物件鎖

7.Synchronized加在普通方法和靜態方法的區別

普通方法:要確保呼叫該方法的物件是同一個物件才能確保執行緒的安全
靜態方法屬於類,可以一定確保執行緒的安全

8.同步程式碼塊和同步方法的區別

細粒度不一樣,
同步程式碼塊作用範圍是{}中
同步方法作用於整個方法

9.談談執行緒的生命週期

1.例項化執行緒物件
2.開啟執行緒start
3.進入就緒狀態
4.cpu排程後進行執行狀態,執行run()方法
5.當cpu排程另一執行緒,或者當前執行緒進入阻塞狀態後重新回到就緒狀態
6.執行緒的結束

10.談談對執行緒池的理解?jdk提供了哪幾種執行緒池?他們有什麼區別?

執行緒池可以提高執行緒的建立和銷燬的開銷
jdk提供一下集中執行緒池:
1.newSingleThreadExecutor單執行緒的執行緒池
只有一個執行緒在執行,相當於單執行緒執行任務
2.newFixedThreadPool(固定大小的執行緒池)
固定執行緒數處理任務,當任務過多則固定執行緒數誰先執行完任務就執行剩餘任務
3.newScheduledThreadPool(可快取的執行緒池)
如果執行緒池長度超過處理需要可靈活回收空閒執行緒,若無可回收,則新建執行緒

11.對多執行緒的瞭解?在什麼地方使用到過多執行緒?是否有用過執行緒池?用的什麼執行緒池?

多執行緒是程式中的多條執行路徑,每個執行緒在程式中互搶資源;在購票系統,通訊聊天中可以用到多執行緒
newCachedThreadPool:帶快取執行緒池,如果執行緒池長度超過處理需要,可靈活回收空閒執行緒,若無可回收,則新建執行緒

12.UDP和TCP的區別

無連線的傳輸協議,資料不安全,效能高
建立連線的傳輸協議,資料安全,效能低

13.網路的分層

應用層,表示層,會話層,傳輸層,網路層,資料鏈路層,物理層
應用層,傳輸層,網路層.網路介面層

14.什麼是tcp協議

一種可靠的安全傳輸協議,傳輸效率低,需要建立連線,經過三次握手

15.Http和Https的區別

超文字傳輸協議,是一種明文的傳輸協議
https進行加密的傳輸協議

16.Http的報文裡有什麼

請求行,請求頭,空行和請求體4個部分組成

反射與解析

1.解析XML有幾種方式

SAX,DOM,PULL

2.反射你是怎麼理解的?

執行時獲得類屬性的能力
重點在於執行時
通過反射機制可以獲取私有的屬性,方法構造器
在應用上更靈活,例如檔案注入方面的使用,通過載入類名,可以得到所屬屬性物件的資訊
平常用什麼工具解析json?xml轉換成json字元展示出來是什麼樣子?
解析json的工具json-lib,Gson,Fast-json
xml解析為josn