Java工程師常見面試題集錦(一)網際網路人必看!(附答案及視訊教程,持續更新)
大牛也怕面試題,尤其是基礎題,在面試中如果出現一兩題回答不準確很有可能你就被拒之門外了。CSDN學院年終傾情奉獻,海量面試題(帶答案)免費分享,幫助大家順利過關。
面試題將會持續更新,今天先跟大家分享10道Java基礎相關的面試題。
如果覺得文字學習較慢,也可以跟著老師一起視訊學習:
Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533
1、物件導向的特徵有哪些方面?
物件導向的特徵主要有以下幾個方面:
1)抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地 注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一 部分,暫時不用部分細節。
抽象包括兩個方面:一是過程抽象,二是資料抽象。
2)繼承:繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。物件的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和例項變數 ,並且類可以修改或增加新的方法使之更適合特殊的需要。
3)封裝:封裝是把過程和資料包圍起來,對資料的訪問只能通過已定義的介面 。 物件導向計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治封裝的物件,這些物件通過一個受保護的介面訪問其他物件。
4)多型性:多型性是指允許不同類的物件對同一訊息作出響應。多型性包括引數化多型性和包含多型性。多型性語言具有靈活、抽象、行為共享、程式碼共享的 優勢,很好的解決了應用程式函式同名問題。
2、Java多型的具體體現
物件導向程式設計有四個特徵:抽象,封裝,繼承,多型。多型有四種體現形式:
1)介面和介面的繼承;
2) 類和類的繼承;
3)過載;
4) 重寫。
其中過載和重寫為核心。
過載:過載發生在同一個類中,在該類中如果存在多個同名方法,但是方法的引數型別和個數不一樣,那麼說明該方法被過載了;
重寫:重寫發生在子類繼承父類的關係中,父類中的方法被子類繼承,方法名、返回值型別、引數完全一樣,但是方法體不一樣,那麼說明父類中的該方法被子類重寫了。
3、什麼時候用 assert?
答:assertion(斷言)在軟體開發中是一種常用的除錯方式,很多開發語言中都支援這種機制。
一般來說,assertion 用於保證程式最基本、關鍵的正確性。 assertion 檢查通常在開發和測試時開啟。為了提高效能,在軟體釋出後,assertion 檢查通常是關閉的。在實現中,斷言是一個包含布林表示式的語句, 在執行這個語句時假定該表示式為 true;如果表示式計算為 false,那麼系統 會報告一個 Assertionerror。 斷言用於除錯目的: assert(a > 0); // throws an Assertionerror if a <= 0 斷言可以有兩種形式: assert Expression1 ;assert Expression1 : Expression2 , Expression1 應該總是產生一個布林值, Expression2 可以是得出一個值的任意表示式;這個值用於生成顯示更多除錯資訊的 String 訊息。
斷言在預設情況下是禁用的,要在編譯時啟用斷言,需使用 source 1.4 標記 : javac -source 1.4 Test.java 。要在執行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。 要在執行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。 要在系統類中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用於驗證傳遞給私有方法的引數。
不過,斷言不應該用於驗證傳遞給公有方法的引數,因為不管是否啟用了斷言,公有方法都必須檢查其引數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試後置條件。另外,斷言不應該以任何方式改變程式的狀態。
4、String、StringBuffer 、StringBuilder 的區別:
String:字串常量,不可變,使用字串拼接時是不同的兩個空間;
StringBuffer:字串變數,可變,執行緒安全,字串拼接直接在字串後追加;
StringBuilder:字串變數,可變,非執行緒安全,字串拼接直接在字串後追加;
1)StringBuilder執行效率高於StringBuffer高於String;
2)String是一個常量,是不可變的,所以對於每一次+=賦值都會建立一個新的物件,StringBuffer和StringBuilder都是可變的,當進行字串拼接時採用append方法,在原來的基礎上進行追加,所以效能比String要高,又因為StringBuffer是執行緒安全的而StringBuilder是執行緒非安全的,所以StringBuilder的效率高於StringBuffer;
3)對於大資料量的字串的拼接,採用StringBuffer,StringBuilder。
5、陣列有沒有length()方法?String 有沒有length()方法?
答:陣列沒有length()方法,有length的屬性。String有length()方法。JavaScript中,獲得字串的長度是通過length屬性得到的,這一點容易和Java混淆。
題庫及視訊陸續更新,如有需要,請繼續關注~
Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533
6、char 型變數中能不能儲存一箇中文漢字?為什麼?
答:char型別可以儲存一箇中文漢字,因為Java中使用的編碼是Unicode(不選擇任何特定的編碼,直接使用字元在字符集中的編號,這是統一的唯一方法),一個char型別佔2個位元組(16bit),所以放一箇中文是沒問題的。
7、Java中如何實現序列化,有什麼意義?
序列化就是一種用來處理物件流的機制,所謂物件流也就是將物件的內容進行流化,可以對流化後的物件進行讀寫操作,也可將流化後的物件傳輸於網路之間。序列化是為了解決物件流讀寫操作時可能引發的問題(如果不進行序列化可能會存在資料亂序的問題)。
要實現序列化,需要讓一個類實現Serializable介面,該介面是一個標識性介面,標註該類物件是可被序列化的,然後使用一個輸出流來構造一個物件輸出流並通過writeObject(Object obj)方法就可以將實現物件寫出(即儲存其狀態);如果需要反序列化則可以用一個輸入流建立物件輸入流,然後通過readObject方法從流中讀取物件。
8、Vector與ArrayList
1)Vector是執行緒同步的,所以它也是執行緒安全的,而Arraylist是執行緒非同步的,是不安全的。如果不考慮到執行緒的安全因素,一般用Arraylist效率比較高。
2)如果集合中的元素的數目大於目前集合陣列的長度時,Vector增長率為目前陣列長度的100%,而Arraylist增長率為目前陣列長度的50%。如果在集合中使用資料量比較大的資料,用Vector有一定的優勢。
3)如果查詢一個指定位置的資料,Vector和Arraylist使用的時間是相同的,如果頻繁的訪問資料,這個時候使用Vector和Arraylist都可以。而如果移動一個指定位置會導致後面的元素都發生移動,這個時候就應該考慮到使用linklist,因為它移動一個指定位置的資料時其它元素不移動。
ArrayList 和Vector是採用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,都允許直接序號索引元素,但是插入資料要涉及到陣列元素移動等記憶體操作,所以索引資料快,插入資料慢,Vector由於使用了synchronized方法(執行緒安全)所以效能上比ArrayList要差,LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行向前或向後遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入數度較快。
9、Arraylist和Linkedlist
1)ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。
2)對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。
3)對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。 這一點要看實際情況的,若只對單條資料插入或刪除,ArrayList的速度反而優於LinkedList。但若是批量隨機的插入刪除資料,LinkedList的速度大大優於ArrayList. 因為ArrayList每插入一條資料,要移動插入點及之後的所有資料。
10、HashMap與TreeMap
1)HashMap通過hashcode對其內容進行快速查詢,而TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。
2)在Map中插入、刪除和定位元素,HashMap是最好的選擇。但如果您要按自然順序或自定義順序遍歷鍵,那麼TreeMap會更好。使用HashMap要求新增的鍵類明確定義了hashCode()和 equals()的實現。
兩個map中的元素一樣,但順序不一樣,導致hashCode()不一樣。
同樣做測試:
在HashMap中,同樣的值的map,順序不同,equals時,false;
而在treeMap中,同樣的值的map,順序不同,equals時,true;
說明,treeMap在equals( )時是整理順序了的。
題庫及視訊陸續更新,如有需要,請繼續關注~
Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533
相關文章
- Java工程師常見面試題集錦(三)網際網路人必看!(附答案及視訊教程,持續更新!)Java工程師面試題
- Java工程師常見面試題集錦(二)網際網路人必看!(附答案及視訊教程,持續更新)Java工程師面試題
- Java工程師常見面試題集錦(六)網際網路人必看!(附答案及視訊教程,持續更新)Java工程師面試題
- 來了!Java工程師常見面試題集錦(五)網際網路人必看!(附答案及視訊教程,持續更新)Java工程師面試題
- 知否?知否!Java工程師常見面試題集錦(四)網際網路人必看!(附答案及視訊教程,持續更新)Java工程師面試題
- 雲端計算工程師面試題集錦,常見雲端計算面試題及答案工程師面試題
- GO面試題集錦快答[持續更新]Go面試題
- JDBC常見面試題集錦(一)JDBC面試題
- 大資料類工程師面試題集錦附指南:網際網路公司篇!大資料工程師面試題
- Java常見面試題及答案彙總Java面試題
- 雲端計算面試題及答案,雲端計算工程師面試題集錦面試題工程師
- 雲端計算工程師面試題集錦,雲端計算面試題及答案工程師面試題
- JDBC常見面試題集錦(二)JDBC面試題
- 常見AI面試題及答案AI面試題
- J2EE面試題集錦(附答案)面試題
- 【英語面試常見問題集錦】面試
- CSS效果集錦(持續更新中)CSS
- 網際網路 Java 工程師面試題(Spring 面試題一)Java工程師面試題Spring
- Java常見問題集錦(轉)Java
- Java面試專屬視訊 最新Java阿里京東美團滴滴面試題及答案教程Java阿里面試題
- Docker常見面試題及答案!Linux入門教程Docker面試題Linux
- 新手必看!使用New File Menu常見問題集錦
- 【C++】C++常見面試題彙總,持續更新中…C++面試題
- Java常見面試題集- -Java面試題
- 求職面試常見問題:Python常見面試題全解析附答案求職Python面試題
- 10道常見的Python面試題及答案!Python入門必看Python面試題
- 金三銀四:螞蟻金服JAVA開發面試題及答案之一面(持續更新)Java面試題
- Python資料型別面試題集錦!(附答案)Python資料型別面試題
- 2018年最新大資料類工程師面試題集錦附指南:網際網路公司篇!大資料工程師面試題
- pip安裝時遇到的問題集錦,持續更新!
- 軟體測試常見面試題及答案面試題
- arcgis pro2.3教程與問題集持續更新(一)
- 2019最新Web前端經典面試試題及答案,持續更新Web前端面試
- AI面試題(持續更新)AI面試題
- Hbase面試題(持續更新)面試題
- 吐血總結!50道Python面試題集錦(附答案)Python面試題
- 總結Java開發面試常問的問題,持續更新中~Java面試
- iOS常見基礎面試題(附參考答案)iOS面試題