更新時間:2019-07-24 14:10:20 來源:動力節(jié)點 瀏覽3955次
最近好多同學(xué)在找小編要一些關(guān)于Java面試題及答案的相關(guān)內(nèi)容,這里在給大家整理一套各大互聯(lián)網(wǎng)公司面試都喜歡問的一些問題或者一些出場率很高的Java面試題,給在校招或者社招路上的你一臂之力。
首先我們需要明白一個事實,招聘的一個很關(guān)鍵的因素是在給自己找未來的同事,同級別下要找比自己優(yōu)秀的人,面試是一個雙向選擇的過程,也是一個將心比心去溝通的過程。
就像我們有的人感覺自己很厲害,但是拿不到offer,而其他的人比他還要差,卻可以拿到offer,遇到這種情況大家也不要感覺到有什么不可描述的心情,一切隨緣即可!

開場白
簡單的介紹一下自己的工作經(jīng)歷與職責(zé),在?;蛘吖ぷ髦兄饕墓ぷ鲀?nèi)容,主要負責(zé)的內(nèi)容;(你的信息一清二白的寫在簡歷上,能答出來的最好寫在上面,模棱兩可不是很清楚的最好不要寫,否則會被問的很尷尬)
介紹下自己最滿意的,有技術(shù)亮點的項目或平臺,重點介紹下自己負責(zé)那部分的技術(shù)細節(jié);(主要對自己做過的事情是否有清晰的描述)
面向?qū)ο?/span>的特征有哪些方面?
抽象:將同類對象的共同特征提取出來構(gòu)造類。
繼承:基于基類創(chuàng)建新類。
封裝:將數(shù)據(jù)隱藏起來,對數(shù)據(jù)的訪問只能通過特定接口。
多態(tài)性:不同子類型對象對相同消息作出不同響應(yīng)。
String是最基本的數(shù)據(jù)類型嗎?
答:不是。Java中的基本數(shù)據(jù)類型只有8個:byte、short、int、long、float、double、char、boolean;除了基本類型(primitivetype),剩下的都是引用類型(referencetype),Java5以后引入的枚舉類型也算是一種比較特殊的引用類型。
floatf=3.4;是否正確?
答:不正確。3.4是雙精度數(shù),將雙精度型(double)賦值給浮點型(float)屬于下轉(zhuǎn)型(down-casting,也稱為窄化)會造成精度損失,因此需要強制類型轉(zhuǎn)換floatf=(float)3.4;或者寫成floatf=3.4F;
shorts1=1;s1=s1+1;有錯嗎?shorts1=1;s1+=1;有錯嗎?
答:對于shorts1=1;s1=s1+1;由于1是int類型,因此s1+1運算結(jié)果也是int型,需要強制轉(zhuǎn)換類型才能賦值給short型。而shorts1=1;s1+=1;可以正確編譯,因為s1+=1;相當(dāng)于s1=(short)(s1+1);其中有隱含的強制類型轉(zhuǎn)換。
Java有沒有g(shù)oto?
答:goto是Java中的保留字,在目前版本的Java中沒有使用。(根據(jù)JamesGosling(Java之父)編寫的《TheJavaProgrammingLanguage》一書的附錄中給出了一個Java關(guān)鍵字列表,其中有g(shù)oto和const,但是這兩個是目前無法使用的關(guān)鍵字,因此有些地方將其稱之為保留字,其實保留字這個詞應(yīng)該有更廣泛的意義,因為熟悉C語言的程序員都知道,在系統(tǒng)類庫中使用過的有特殊意義的單詞或單詞的組合都被視為保留字)

&和&&的區(qū)別?
答:&運算符有兩種用法:(1)按位與;(2)邏輯與。&&運算符是短路與運算。邏輯與跟短路與的差別是非常巨大的,雖然二者都要求運算符左右兩端的布爾值都是true整個表達式的值才是true。&&之所以稱為短路運算是因為,如果&&左邊的表達式的值是false,右邊的表達式會被直接短路掉,不會進行運算。很多時候我們可能都需要用&&而不是&,例如在驗證用戶登錄時判定用戶名不是null而且不是空字符串,應(yīng)當(dāng)寫為:username!=null&&!username.equals(""),二者的順序不能交換,更不能用&運算符,因為第一個條件如果不成立,根本不能進行字符串的equals比較,否則會產(chǎn)生NullPointerException異常。注意:邏輯或運算符(|)和短路或運算符(||)的差別也是如此。
補充:如果你熟悉JavaScript,那你可能更能感受到短路運算的強大,想成為JavaScript的高手就先從玩轉(zhuǎn)短路運算開始吧。
Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在參數(shù)上加0.5然后進行下取整。
switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:在Java5以前,switch(expr)中,expr只能是byte、short、char、int。從Java5開始,Java中引入了枚舉類型,expr也可以是enum類型,從Java7開始,expr還可以是字符串(String),但是長整型(long)在目前所有的版本中都是不可以的。
數(shù)組有沒有l(wèi)ength()方法?String有沒有l(wèi)ength()方法?
答:數(shù)組沒有l(wèi)ength()方法,有l(wèi)ength的屬性。String有l(wèi)ength()方法。JavaScript中,獲得字符串的長度是通過length屬性得到的,這一點容易和Java混淆。
在Java中,如何跳出當(dāng)前的多重嵌套循環(huán)?
答:在最外層循環(huán)前加一個標(biāo)記如A,然后用breakA;可以跳出多重循環(huán)。(Java中支持帶標(biāo)簽的break和continue語句,作用有點類似于C和C++中的goto語句,但是就像要避免使用goto一樣,應(yīng)該避免使用帶標(biāo)簽的break和continue,因為它不會讓你的程序變得更優(yōu)雅,很多時候甚至有相反的作用,所以這種語法其實不知道更好)
構(gòu)造器(constructor)是否可被重寫(override)?
答:構(gòu)造器不能被繼承,因此不能被重寫,但可以被重載。

描述一下JVM加載class文件的原理機制?
答:JVM中類的裝載是由類加載器(ClassLoader)和它的子類來實現(xiàn)的,Java中的類加載器是一個重要的Java運行時系統(tǒng)組件,它負責(zé)在運行時查找和裝入類文件中的類。
由于Java的跨平臺性,經(jīng)過編譯的Java源程序并不是一個可執(zhí)行程序,而是一個或多個類文件。當(dāng)Java程序需要使用某個類時,JVM會確保這個類已經(jīng)被加載、連接(驗證、準(zhǔn)備和解析)和初始化。類的加載是指把類的.class文件中的數(shù)據(jù)讀入到內(nèi)存中,通常是創(chuàng)建一個字節(jié)數(shù)組讀入.class文件,然后產(chǎn)生與所加載類對應(yīng)的Class對象。加載完成后,Class對象還不完整,所以此時的類還不可用。當(dāng)類被加載后就進入連接階段,這一階段包括驗證、準(zhǔn)備(為靜態(tài)變量分配內(nèi)存并設(shè)置默認(rèn)的初始值)和解析(將符號引用替換為直接引用)三個步驟。最后JVM對類進行初始化,包括:1)如果類存在直接的父類并且這個類還沒有被初始化,那么就先初始化父類;2)如果類中存在初始化語句,就依次執(zhí)行這些初始化語句。
類的加載是由類加載器完成的,類加載器包括:根加載器(BootStrap)、擴展加載器(Extension)、系統(tǒng)加載器(System)和用戶自定義類加載器(java.lang.ClassLoader的子類)。從Java2(JDK1.2)開始,類加載過程采取了父親委托機制(PDM)。PDM更好的保證了Java平臺的安全性,在該機制中,JVM自帶的Bootstrap是根加載器,其他的加載器都有且僅有一個父類加載器。類的加載首先請求父類加載器加載,父類加載器無能為力時才由其子類加載器自行加載。JVM不會向Java程序提供對Bootstrap的引用。下面是關(guān)于幾個類加載器的說明:
Bootstrap:一般用本地代碼實現(xiàn),負責(zé)加載JVM基礎(chǔ)核心類庫(rt.jar);
Extension:從java.ext.dirs系統(tǒng)屬性所指定的目錄中加載類庫,它的父加載器是Bootstrap;
System:又叫應(yīng)用類加載器,其父類是Extension。它是應(yīng)用最廣泛的類加載器。它從環(huán)境變量classpath或者系統(tǒng)屬性java.class.path所指定的目錄中加載類,是用戶自定義加載器的默認(rèn)父加載器。
一個".java"源文件中是否可以包含多個類(不是內(nèi)部類)?有什么限制?
答:可以,但一個源文件中最多只能有一個公開類(publicclass)而且文件名必須和公開類的類名完全保持一致。
AnonymousInnerClass(匿名內(nèi)部類)是否可以繼承其它類?是否可以實現(xiàn)接口?
答:可以繼承其他類或?qū)崿F(xiàn)其他接口,在Swing編程和Android開發(fā)中常用此方式來實現(xiàn)事件監(jiān)聽和回調(diào)。
內(nèi)部類可以引用它的包含類(外部類)的成員嗎?有沒有什么限制?
答:一個內(nèi)部類對象可以訪問創(chuàng)建它的外部類對象的成員,包括私有成員。
Java中的final關(guān)鍵字有哪些用法?
答:(1)修飾類:表示該類不能被繼承;(2)修飾方法:表示方法不能被重寫;(3)修飾變量:表示變量只能一次賦值以后值不能被修改(常量)。
相關(guān)閱讀