万字长文丨7个经典问题,助你拿下Java面试(建议收藏)
擅長領域:execl、word、ppt 等
今日重點:
????①??掌握面試的基本素質;
????②??學會7個典型的java面試問題。
有問題的小伙伴歡迎加我主頁vx。評論、點贊、收藏是對我最大的支持!!!
?
目錄
一、面試的目的
二、面試的要點
三、為什么要考察Java?
四、面試真題集錦
面試例題1:Java基本類型的類型轉換有幾種方式,你能簡單闡述一下嗎?
面試例題2:關于異常處理機制,你能簡單闡述一下嗎?
面試例題3:異常處理的關鍵語句是什么樣的?
面試例題4:Java有哪三大語言特性??你能說下對多態的理解嗎?
面試例題5:簡單說下Java的反射機制,能舉例說下其應用嗎?
面試例題6:類的初始化過程是怎樣的?
面試例題7:你需要存儲元素到某種數據結構中,而且要確保元素在自然隊列中沒有重復,下面哪個接口能保證這種能力?
一、面試的目的
面試,對于公司來說,是公司考察候選人各項能力的選拔性約談;對于候選人來說,是展現自己各方面能力素質的最佳機會。
所以對于雙方來看,都是一場濃縮程度極高的“對決”。
面試官問出的每一個問題,都有著背后的意圖,考察你某方面的能力。候選人的回答,也是“秀肌肉”的時刻,要體現出自己的各種能力素養。
那么,面試要注意哪些要點呢?
二、面試的要點
1、充分的知識準備
針對所申請的職位,列出相關的知識點,能夠在面試中做到舉一反三,最好將知識點徹底吃透,不僅能夠流暢的進行描述,還可以有自己的理解。這里主要考察知識點的廣度。
2、明確面試官的問題
針對面試官的問題,要仔細審題,確保回答的方向的準確,不能只捕捉關鍵字,否則容易答非所問。
3、問題的拓展
同樣針對面試官的問題,在回答問題的時候,增加一些相關知識的拓展,適當的展示自己,會贏得面試官的好感。這就需要知識點的深度和廣度達到了才能做到。
4、著裝及禮貌
著裝和禮貌一定程度透露一個人的素質,干凈簡潔的著裝和基本的禮貌給人尊重和對這份工作的重視,這對面試官來說是加分項。這里主要是對面試者的個人素質考察。?
三、為什么要考察Java?
作為穩居編程語言排行榜前三的Java語言,具有非常多的優秀特性,同時擁有龐大的類庫生態和大量的開發者。
Java語言在大數據生態體系中地位也是無可撼動,目前流行的大數據生態組件,很多都是用Java語言或基于JVM的語言(如Scala)開發的。
因此,要想玩轉大數據,或多或少需要對Java有所了解。
對于一個初級崗求職者或者應屆畢業生來說,公司除了對項目經驗有所問詢之外,最好的考察辦法就是檢查基本功,包括編程風格,以及程序結構,數據類型,賦值語句,類型轉換,運算符,異常處理等程序設計基本概念的理解。
因此面試之前,一定要對自己所掌握的基本概念知識較為熟悉,尤其是對各種細致的考點要加以重視。
Java程序設計基本概念考察中,對類型轉換和異常處理的考察最為常見,有以下原因:
1、在Java程序中,不同的基本類型的值經常需要進行互相轉換,實際工作中因為對它們的掌握不夠熟練寫出錯誤代碼的情況經常發生。
2、異常處理機制在實際工作中會經常被用來實現將程序的異常處理代碼和正常業務代碼分離,異常處理代碼的錯誤要么高調拋出以讓開發者定位處理或低調捕獲從而不影響代碼的正常執行,從而提高程序的健壯性,現在異常機制已經成為判斷一門編程語言是否成熟的標準。
四、面試真題集錦
面試例題1:Java基本類型的類型轉換有幾種方式,你能簡單闡述一下嗎?
解析:有兩種類型轉換方式:自動類型轉換和強制類型轉換,低級數據類型到高級數據類型的轉換稱為自動類型轉換,高級數據類型到低級數據類型的轉換稱為強制類型轉換。
這些類型由低級到高級分別為(byte,short,char)-->int-->long-->float-->double。
以上回答基本就是這道考題的標準答案,不過如果你能就此考題回答出更為展現你基本功底的以下擴展知識點和舉出具體示例,將會給面試大大加分。
回答話術:
基本類型的轉換首先要分為簡單數據類型之間的轉換和其他數據類型到字符串的轉換。
1、簡單數據類型之間的轉換可以分為:低級到高級的自動類型轉換、高級到低級的強制類型轉換、通過包裝類過渡類型進行轉換。
(1)自動類型轉換示例:
char c = 'c';int?i?= c;System.out.println("output:"?+ i); 輸出:output:99(2)強制類型轉換示例:
double dl = 3.14;int?i = (int)dl;//這種轉換可能會導致溢出或精度的下降(3)包裝類過渡類型轉換示例:
float f1 = 100.00f;Float F1 = new Float(f1);//根據Java的自動裝箱拆箱機制,也可直接寫成Float F1=f1;Double d1 = F1.doubleValue();2、其他數據類型轉化為字符串,一般通過toString()方法;Character、Integer、Float、Double、Boolean、Short等類的toString方法用于將字符、整數、浮點數、雙精度數、邏輯數、短整形等類型轉化為字符串。
int i1 = 10;Integer I1 = new Integer(i1);//也可直接寫成Integer I1 =i1;String s = I1.toString();面試例題2:關于異常處理機制,你能簡單闡述一下嗎?
解析:在Java程序運行時,常常會出現一些非正常的現象,根據其性質可分為錯誤和異常。一般來說,最常見的錯誤有程序進入死循環、內存泄漏等。這種情況下,程序運行時本身無法解決。Java錯誤對應的類為Error類。通常Java程序不對這類錯誤進行處理。
回答話術:異常是程序執行時遇到的可避免的程序錯誤,常見的有數組下標越界,算法溢出(超出數值表達范圍)、除數為零、無效參數等。這種情況程序運行時本身可以解決,Java異常對應的類為Exception類。它有各種不同的子類分別對應于不同類型的異常。通常異常有兩種處理方式,一種是通過catch捕獲,一種是通過throws聲明異常。
PS:實際公司面試中,若之前有筆試,很可能會針對異常處理出一道針對具體異常類型的代碼考題。所以面試者還是需要對異常處理的不同場景的具體運用有所研究和準備才行,建議在認真學習了異常處理機制的理論知識前提下,多找找相關筆試題刷刷。
面試例題3:異常處理的關鍵語句是什么樣的?
Java異常處理的關鍵語句有五個:try、catch、throw、throws、finally。
1、拋出異常并進行捕獲的完整語句格式如下,當然也允許try...catch或try...finally這兩種寫法。
try{ //throw Exception throw語句拋出明確的異常 } catch{ //find Exception //hand of it }finally{ //must be run}try、catch、finally三個語句塊可能會涉及以下考題:
1)try、catch、finally可以單獨使用嗎??不可以,只能組成以上所述三種語句格式。
2)try中定義的變量catch和finally能夠訪問嗎?不能,三個代碼塊中變量的作用域為代碼塊內部,分別獨立而不能互相訪問,如果要在三個塊中都可以訪問,則需要將變量定義到這些塊的外面。
3)如有多個catch能夠捕獲所拋出異常,那多個catch塊的代碼都會被執行嗎?不會,只會執行第一個匹配上的catch塊代碼。
4)finally語句塊的代碼一定會被執行嗎?會,無論異常是否發生,finally都會被執行。
2、如果一個方法想拋出異常但自身不進行處理,交給上層處理,它就必須標記這種行為,以使方法的調用者能夠正常運行程序,無需處理異常。要做到這點,我們可以在方法聲明中包含一個throws子句。一個throws子句列舉了一個方法可能引發的所有異常類型。
PS:Java編譯器會要求方法必須聲明拋出可能發生的未被捕獲的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。由程序錯誤導致的異常屬于運行時異常(RuntimeException);而程序本身沒有問題,但由于像I/O錯誤這類異常導致的異常屬于其他異常。程序本身的問題,也就是拋出的運行時異常最好是就地解決。
public void info() throws Exception{ //body of method}//Exception 是該方法可能引發的所有的異常,也可以是異常列表,中間以逗號隔開。3、語言特性考察
通過以上基本概念的考察,如果能夠應對如上,那么面試官對你的程序設計基本功底應該是比較認可的。接下來就會加大難度,考察你對Java語言特性的掌握深度,以下考題別看耳熟能詳,卻很能見功底,面試者完全可以侃侃而談一番,但如果說了半天還是沒能準確道出實質的話,那么,就會給面試官留下知識的探索不夠深入的印象。
此類考題重點包括:Java語言的三個特性,繼承、封裝、多態;反射機制;類的初始化過程。
面試例題4:Java有哪三大語言特性??你能說下對多態的理解嗎?
解析:面試官首先會問Java的三大語言特性是啥,通常情況下,這個問題90%多的人肯定都能答上來,所以考察的重點在于面試者答上來以后,再讓說說對這三個特性的理解或者某一個特性的理解。通常情況下,對多態的考察更為常見,當然,面試者也要做好回答另兩大特性的準備。
回答話術:Java的三大語言特性是繼承、封裝和多態。多態可以簡單地概括為“一個接口,多種方法”。在程序運行的過程中才決定調用哪個函數。通常,繼承可以擴展已存在的代碼模塊(類),它們的目的都是為了代碼重用。而多態則是為了實現另一個目的--接口重用。實際工作中,重用接口比重用代碼使用得更為普遍。
面試例題5:簡單說下Java的反射機制,能舉例說下其應用嗎?
解析:Java反射說的是在運行狀態中,對于任何一個類,我們都能夠知道這個類有哪些方法和屬性。對于任何一個對象,我們都能夠對它的方法和屬性進行調用。我們把這種動態獲取對象信息和調用對象方法的功能稱之為反射機制。反射被廣泛地用于那些需要在運行時檢測或修改程序行為的程序中。盡管反射非常強大,但也不能濫用。如果一個功能可以不用反射完成,那么最好就不用。在我們使用反射技術時,下面幾條內容應該牢記于心:
1.性能第一?
反射包括了一些動態類型,所以JVM無法對這些代碼進行優化。因此,反射操作的效率要比那些非反射操作低得多。我們應該避免在經常被執行的代碼或對性能要求很高的程序中使用反射。
2.安全限制
使用反射技術要求程序必須在一個沒有安全限制的環境中運行。如果一個程序必須在有安全限制的環境中運行,如Applet,那么這就是個問題了。
3.內部暴露
由于反射允許代碼執行一些在正常情況下不被允許的操作(比如訪問私有的屬性和方法),所以使用反射可能會導致意料之外的副作用--破壞了抽象性,降低了可移植性。
Java反射機制的應用場景,比如:
(1)工廠模式:Factory類中用反射的話,添加了一個新的類之后,就不需要再修改工廠類Factory了。
(2)數據庫JDBC中通過Class.forName(Driver)來獲得數據庫連接驅動。
(3)分析類文件:能得到類中的方法等等。
(4)訪問一些不能訪問的變量或屬性:破解別人代碼。
面試例題6:類的初始化過程是怎樣的?
解析:JVM初始化一個類包含如下幾個步驟:
1.假如這個類還沒有被加載和連接,則程序先加載并連接該類。
2.假如該類的直接父類還沒有被初始化,則先初始化其直接父類。
3.假如類中有初始化語句,則系統依次執行這些初始化語句。
在執行第2步時,系統對直接父類的初始化步驟也遵循此步驟1~3,如果該直接父類又有直接父類,則系統再次重復這三個步驟來先初始化這個父類......所以JVM最先初始化的總是java.lang.Object類。當程序主動使用任何一個類時,系統會保證該類以及所有父類(包括直接父類和間接父類)都會被初始化。
實際操作考察
如果通過了對語言特性的考察,那么,接下來就要面對實際動手能力方面的考察了。
這個方面的知識點通常都是以一個非常具體的隨機性的題目呈現,考題范圍重點包括字符串的處理、日期函數的運用、正則表達式的運用、Java的集合。
面試例題7:你需要存儲元素到某種數據結構中,而且要確保元素在自然隊列中沒有重復,下面哪個接口能保證這種能力?
? ? A. ?java.util.Map
? ? B. ?java.util.List
? ??C.??java.util.Collection
? ? D. ?java.util.Set
解析:要想正確回答這個問題,面試者需要對Java集合有一個清晰的脈絡。
Java容器類庫一共有兩種主要類型:Collection和Map。它們之間的區別在于容器內每個“槽”所存儲的元素個數不同,Collection每個槽內只能存儲一個元素,而Map類型中,每個槽內存儲key-value關聯。Java容器類都可以自動調整自己的尺寸。
各自旗下的子類關系如下:
Collection的子類:① --List:以特定次序存儲元素,取出來的順序可能和放入的順序不同 |--ArrayList:擅長隨機訪問元素,但在List中進行插入、刪除和移動元素較慢 |--LinkedList:插入、刪除、移動元素方便,但隨機訪問元素差② --Set:每個值只能保存一個對象,不能包含重復的元素 |--HashSet:使用散列函數 |--TreeSet:使用紅黑樹 |--LinkedHashSet:使用鏈表結合散列函數③ --Queue:先進先出的容器 Map的子類:① --HashMap:使用散列函數② --HashTable:使用散列函數③ --TreeMap:使用紅黑樹故答案選D。
對每個容器子類的特性上圖已做簡單說明,但如果要應對面試官的繼續追問,考察更為細節性的知識點,那么,面試者最好要對每個子類的特性有一個更全面更深入的學習和總結,一般實際動手操作過的面試者對此類問題的認識會更為深刻。比如,以前經常會被問到的考題,請說明HashMap和HashTable的區別。不能說出個兩三點,那是很難讓面試官滿意的,因為如果你實際操作過,通常會有很深的體會和印象。
(PS:現在由于HashTable的概念基本完全淡化了,該問題應該會很少再被問到了,舉此案例是為了說明面試官會出類似題型來進行深入考察面試者動實際操作情況,面試者需要深入學習總結。)
希望大家都能順利通過面試!!!
求點贊、求評論、求收藏
總結
以上是生活随笔為你收集整理的万字长文丨7个经典问题,助你拿下Java面试(建议收藏)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL流浪记(三)—— Linux安
- 下一篇: 李航《统计学习方法》-----朴素贝叶斯