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