Java面試題

看到一篇不錯的java面試題的文章,自己整理一下议慰,作為備用吧蠢古!

Java面試題

面向?qū)ο蟮奶卣饔心男┓矫妫?/h3>
  • 封裝

    最常見的是把屬性私有化封裝在一個類里面,只能通過方法去訪問

  • 繼承

    子類繼承父類别凹,從而繼承了父類的方法和屬性

  • 抽象

    比如一個英雄類草讶,抽象出了name,hp這些屬性,使得開發(fā)過程中更加易于理解

  • 多態(tài)

    多態(tài)分操作符的多態(tài)和類的多態(tài)炉菲。 類的多態(tài)指父類引用指向子類對象堕战,并且有繼承坤溃,有重寫。

String是最基本的數(shù)據(jù)類型嗎嘱丢?

  • String是類類型薪介,不是基本類型。

  • 基本類型有八種: 整型 (4種)字符型 (1種)浮點型 (2種)布爾型(1種)

int 和 Integer 有什么區(qū)別越驻?

  • int 是基本類型32位長度的整數(shù),而Integer 是類類型汁政,是int的封裝類

  • int和Integer之間可以通過自動裝箱、自動拆箱互相轉(zhuǎn)換

String 和StringBuffer的區(qū)別缀旁?

  • String是immutable的,其內(nèi)容一旦創(chuàng)建好之后记劈,就不可以發(fā)生改變。

  • StringBuffer 是可以變長的并巍,內(nèi)容也可以發(fā)生改變 改變的原理是StringBuffer內(nèi)部采用了字符數(shù)組存放數(shù)據(jù)抠蚣,在需要增加長度的時候,創(chuàng)建新的數(shù)組履澳,并且把原來的數(shù)據(jù)復(fù)制到新的數(shù)組這樣的辦法來實現(xiàn)。

運行時異常與一般異常有何異同怀跛?

  • 運行時異常 又叫做非可查異常距贷,在編譯過程中,不要求必須進(jìn)行顯示捕捉

  • 一般異常又叫做可查異常吻谋,在編譯過程中忠蝗,必須進(jìn)行處理,要么捕捉漓拾,要么通過throws 拋出去.是如何實現(xiàn)的阁最。

說出ArrayList,Vector, LinkedList的存儲性能和特性。

  • ArrayList和Vector

    兩者都繼承了抽象類AbstractList骇两,但是Vector是線程安全的速种,而ArrayList是非線程安全的

  • ArrayList和LinkedList的區(qū)別

    ArrayList 是數(shù)組結(jié)構(gòu),所以定位很快低千,但是插入和刪除很慢 LinkedList 是雙向鏈表結(jié)構(gòu)配阵,所以插入和刪除很快,但是定位很慢

Collection 和 Collections的區(qū)別示血。

首先不要說成了一個是單數(shù)棋傍,一個是復(fù)數(shù)。难审。瘫拣。

  • Collection是接口,是List和Set的父接口

  • Collections是工具類告喊,提供了排序麸拄,混淆等等很多實用方法

&和&&的區(qū)別

  • & 有兩個作用派昧,分別是 位與 和 邏輯與,&& 就是邏輯與,作為邏輯與, & 和 && 分別表示長路與和短路與

    長路與 兩側(cè)感帅,都會被運算 短路與 只要第一個是false斗锭,第二個就不進(jìn)行運算了

HashMap和Hashtable的區(qū)別

HashMap和Hashtable都實現(xiàn)了Map接口,都是鍵值對保存數(shù)據(jù)的方式

  • 區(qū)別1:

    HashMap可以存放 null Hashtable不能存放null

  • 區(qū)別2:

    HashMap不是線程安全的類 Hashtable是線程安全的類

final, finally, finalize的區(qū)別

  • final

    final修飾類失球,方法岖是,基本類型變量,引用的時候分別有不同的意思 修飾類 表示該類不能被繼承 修飾方法 表示該方法不能被重寫 修飾基本類型變量 表示該變量只能被賦值一次 修飾引用 表示該引用只有一次指向?qū)ο蟮臋C會

  • finally

    finally 是用于異常處理的場面实苞,無論是否有異常拋出豺撑,都會執(zhí)行

  • finalize

    finalize是Object的方法,所有類都繼承了該方法黔牵。 當(dāng)一個對象滿足垃圾回收的條件聪轿,并且被回收的時候,其finalize()方法就會被調(diào)用

Overload和Override的區(qū)別猾浦,即重載和重寫的區(qū)別陆错。 Overloaded的方法是否可以改變返回值的類型?

  • Overload是方法重載的意思,指的是在同一個類里面金赦,方法名一樣音瓷,但是參數(shù)不一樣

  • Override是方法重寫的意思,指的是子類繼承了父類的某個方法后夹抗,重新又寫了一遍

    • Overloaded的方法是否可以改變返回值的類型?

      可以绳慎,重載其實本質(zhì)上就是完全不同的方法,只是恰好取了相同的名字

Error和Exception有什么區(qū)別?

  • Error和Exception都實現(xiàn)了Throwable接口

  • Error指的是JVM層面的錯誤漠烧,比如內(nèi)存不足OutOfMemoryError

  • Exception 指的是代碼邏輯的異常杏愤,比如下標(biāo)越界OutOfIndexException

abstract class和interface有什么區(qū)別?

abstract class 抽象類和interface接口的區(qū)別

  • 使用方式:

    抽象類只能夠通過繼承被使用 接口必須通過實現(xiàn)被使用

  • 實現(xiàn)方法:

    抽象類不僅可以提供抽象方法,也可以提供實現(xiàn)方法 接口只能提供抽象方法已脓,不能提供實現(xiàn)方法珊楼。 但是在JAVA8版本開始,接口可以提供實現(xiàn)方法了度液,前提是要在方法前加一個default修飾符

heap和stack有什么區(qū)別

  • heap: 堆

  • stack: 棧 (在一些書籍里亥曹,會被翻譯為堆棧,實際上指的就是單純的這個棧)

  • 存放的內(nèi)容不一樣:

    heap: 是存放對象的 stack: 是存放基本類型(int, float, boolean 等等)恨诱、引用(對象地址)媳瞪、方法調(diào)用

  • 存取方式不一樣:

    heap: 是自動增加大小的,所以不需要指定大小照宝,但是存取相對較慢 stack: 是固定大小的蛇受,并且是FILO 先入后出的順序,并且存取速度比較快

GC是什么? 為什么要有GC?

GC是Garbage Collection的縮寫厕鹃,即垃圾回收 這里所謂的垃圾兢仰,指的是那些不再被使用的對象乍丈,JVM的垃圾回收機制使得開發(fā)人員從無聊、容易犯錯的手動釋放內(nèi)存資源的過程中解放出來把将。 開發(fā)人員可以更加專注的進(jìn)行業(yè)務(wù)功能的開發(fā)轻专,而資源回收的工作交由更加專業(yè)的垃圾回收機制自動完成。

short s1 = 1; s1 = s1 + 1;有什么錯?

short s1 = 1; //這一句沒有錯誤察蹲,編譯器會自動把1這個整數(shù)處理為short.
s1 = s1 + 1; //右側(cè)的表達(dá)式會返回一個Int類型的整數(shù)请垛,再把這個int類型的整數(shù)賦給short類型的s1的時候,就會出現(xiàn)強制轉(zhuǎn)換錯誤

Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round 的意思是+0.5 取整數(shù)
所以 Math.round(11.5) 即 11.5+0.5 = 12
Math.round(-11.5) 即 -11.5+0.5 = -11

String s = new String("xyz");創(chuàng)建了幾個String Object?

String s = new String("xyz");

首先構(gòu)造方法 new String("xyz"); 中的"xyz" 這本身就是一個字符串對象 然后 new 關(guān)鍵字一定會創(chuàng)建一個對象 所以總共創(chuàng)建了兩個String對象

Java有沒有g(shù)oto?

  • 有,goto是關(guān)鍵字洽议,但是是保留字宗收,并不具備功能性

接口是否可繼承接口? 抽象類是否可實現(xiàn)(implements)接口? 抽象類是否可繼承實體類(concrete class)?

  • 接口是否可繼承接口?

    可以亚兄,比如List 就繼承了接口Collection

  • 抽象類是否可實現(xiàn)(implements)接口?

    可以混稽,比如 MouseAdapter鼠標(biāo)監(jiān)聽適配器 是一個抽象類,并且實現(xiàn)了MouseListener接口

  • 抽象類是否可繼承實體類(concrete class)审胚?

    可以匈勋,所有抽象類,都繼承了Object

List, Set, Map是否繼承自Collection接口?

List 和 Set 繼承了Collection接口

但是Map和Collection之間沒有繼承關(guān)系膳叨,因為一個是鍵值對容器洽洁,一個是單值容器,無法兼容

1960.png

abstract的method是否可同時是static,是否可同時是synchronized懒鉴?

  • abstract的method是否可同時是static,是否可同時是synchronized?

    都不可以

數(shù)組有沒有l(wèi)ength()這個方法? String有沒有l(wèi)ength()這個方法碎浇?

  • 數(shù)組獲取長度的手段是 .length 屬性

  • String獲取長度的手段是 length()方法

  • 集合獲取長度的手段是 size()方法

  • 文件獲取長度的手段是 length()方法

Set里的元素是不能重復(fù)的临谱,那么用什么方法來區(qū)分重復(fù)與否呢?

以HashSet為例,判斷重復(fù)的邏輯是:

  1. 首先看hashcode是否相同奴璃,如果不同悉默,就是不重復(fù)的

  2. 如果hashcode一樣,再比較equals苟穆,如果不同抄课,就是不重復(fù)的,否則就是重復(fù)的雳旅。

構(gòu)造器Constructor是否可被override?是否可以繼承String類?

  • 子類不能繼承父類的構(gòu)造方法跟磨,所以就不存在重寫父類的構(gòu)造方法。 注: super() 表示子類調(diào)用父類的構(gòu)造方法攒盈,這不能被叫做繼承父類的構(gòu)造方法

  • String是final修飾的抵拘,所以不能夠被繼承

switch 是否能作用在byte上,是否能作用在long上型豁,是否能作用在String上?

  • switch 可以作用在 byte,short,int String,Enum(枚舉) 上僵蛛,但是不能作用在long上面

    注:switch 作用在String上從JDK1.7開始支持尚蝌,實質(zhì)是編譯時將字符串替換為了其對應(yīng)的hash值

try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行充尉,什么時候被執(zhí)行飘言,在return前還是后?

try里的return 和 finally里的return 都會執(zhí)行,但是當(dāng)前方法只會采納finally中return的值

兩個對象值相同(x.equals(y) == true)驼侠,但卻可有不同的hash code姿鸿,這句話對不對?

因為hashCode()方法和equals()方法都可以通過自定義類重寫,是可以做到equals相同泪电,但是hashCode不同的

但是般妙,在Object類的equals()方法中有這么一段話

* Note that it is generally necessary to override the {@code hashCode}
* method whenever this method is overridden, so as to maintain the
* general contract for the {@code hashCode} method, which states
* that equal objects must have equal hash codes.
  • 翻譯如下:

通常來講,在重寫這個方法的時候相速,也需要對hashCode方法進(jìn)行重寫碟渺,

以此來保證這兩個方法的一致性——

當(dāng)equals返回true的時候,這兩個對象一定有相同的hashcode.

兩個對象值相同(x.equals(y) == true)突诬,但卻可有不同的hash code苫拍,這句話對不對?

所以這個題的答案應(yīng)該是否定的,但是得搞清楚里面的原委

垃圾回收的優(yōu)點和原理旺隙。并考慮2種回收機制绒极。

  • 與C語言開發(fā)人員需要手動進(jìn)行內(nèi)存資源的釋放不同,Java提供垃圾回收機制蔬捷,自動進(jìn)行GC垄提,將開發(fā)人員從容易犯錯的內(nèi)存資源管理中解放出來。

  • 原理:當(dāng)某個一個對象周拐,沒有任何引用指向它的時候铡俐,那么它就滿足垃圾回收的條件,在適當(dāng)?shù)臅r候妥粟,JVM虛擬機進(jìn)行GC將其回收审丘,釋放空間,以供后續(xù)再利用勾给。

  • 兩種常見的回收機制:

  1. 定時回收 每隔30分鐘進(jìn)行一次回收滩报,這種機制的弊端是如果垃圾產(chǎn)生的比較快,有可能30分鐘之內(nèi)垃圾已經(jīng)把內(nèi)存占用光了播急,導(dǎo)致性能變慢

  2. 當(dāng)垃圾占到某個百分比的時候脓钾,進(jìn)行回收 比如,當(dāng)垃圾占到70%的時候桩警,進(jìn)行回收惭笑。 這種機制的弊端是,如果垃圾產(chǎn)生的頻率很快,那么JVM就必須高頻率的進(jìn)行垃圾回收沉噩。 而在垃圾回收的過程中捺宗, JVM會停頓下來,只做垃圾回收川蒙,而影響業(yè)務(wù)功能的正常運行蚜厉。

一般說來 JVM會采用兩種機制結(jié)合的方式進(jìn)行垃圾回收。

你所知道的集合類都有哪些畜眨?主要方法昼牛?

常見的集合
ArrayList,LinkedList,HashSet,HashMap,TreeSet 等等
常見方法:
size()
add()
remove()
等等

char型變量中能不能存貯一個中文漢字?為什么?

char是16位的,占兩個字節(jié) 漢字通常使用GBK或者UNICODE編碼康聂,也是使用兩個字節(jié) 所以可以存放漢字

解析XML文檔有哪幾種方式贰健?

主要是兩種,SAX和DOM:

SAX 就是逐行讀取恬汁,直到找到目標(biāo)數(shù)據(jù)為止

DOM 是先全文檔加載伶椿,然后讀取

關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎氓侧?

  • throws 用在方法聲明上面脊另,表示該方法有可能拋出某個異常

  • throw 拋出一個指定的異常

  • try catch 在try中有可能會拋出某個異常,一旦某個異常拋出后约巷,就會在catch中進(jìn)行捕捉偎痛,他倆一般說來都是成對出現(xiàn)的。

  • finally: 表示無論是否捕捉住異常独郎,都會執(zhí)行

一個".java"源文件中是否可以包括多個類(不是內(nèi)部類)踩麦?有什么限制?

可以包括多個類氓癌,但是只能出現(xiàn)一個public修飾的類谓谦,但是可以出現(xiàn)多個非public修飾的類。

java中有幾種類型的流顽铸?

Java中所有的流都是基于字節(jié)流茁计,所以最基本的流是

  • 輸入輸出字節(jié)流

    InputStream OutputStream

  • 在字節(jié)流的基礎(chǔ)上料皇,封裝了字符流

    Reader Writer

  • 進(jìn)一步谓松,又封裝了緩存流

    BufferedReader PrintWriter

  • 以及數(shù)據(jù)流

    DataInputStream DataOutputStream

  • 對象流

    ObjectInputStream ObjectOutputStream

以及一些其他的奇奇怪怪的流 ~~~

java中會存在內(nèi)存泄漏嗎,請簡單描述践剂。

因為Java是自動進(jìn)行垃圾回收管理的鬼譬,所以不存在 C語言中同等概念的內(nèi)存泄漏,但是存在Java特色的內(nèi)存泄漏

當(dāng)某些對象不被使用逊脯,但是又有非直接引用指向的時候月洛,那么就不滿足垃圾回收的條件撕贞,而形成內(nèi)存泄漏胶滋。

比如代碼中的例子室囊,每個Object創(chuàng)建的時候,有一個引用o指向瘟栖,接著就被放進(jìn)了集合al中。 下一個Object創(chuàng)建的時候,上一個Object就沒有引用指向了爷耀。

這些Object都沒有引用指向,但是卻放在ArrayList中拍皮,而這個Arraylist忘記了回收歹叮,那么里面的所有對象,都會一直存活下去铆帽,雖然不再被使用了咆耿。

package exercise;
 
import java.util.ArrayList;
 
public class MemoryLeak {
    static ArrayList<Object> al = new ArrayList<Object>();
 
    public static void main(String[] args) {
 
        for (int i = 0; i < 100; i++) {
            Object o = new Object();
            al.add(o);
        }
 
    }
}

java中實現(xiàn)多態(tài)的機制是什么?

  • 類的多態(tài)的條件:
  1. 父類(接口)引用指向子類對象

  2. 方法有重寫

靜態(tài)變量和實例變量的區(qū)別爹橱?

  • 靜態(tài)變量 直接通過類就可以訪問萨螺,無需實例

  • 實例變量 比如通過類的某個具體實例,才可以訪問

什么是java序列化宅荤,如何實現(xiàn)java序列化屑迂?

  • 序列化指的是把一個Java對象,通過某種介質(zhì)進(jìn)行傳輸冯键,比如Socket輸入輸出流惹盼,或者保存在一個文件里

  • 實現(xiàn)java序列化的手段是讓該類實現(xiàn)接口 Serializable,這個接口是一個標(biāo)識性接口惫确,沒有任何方法手报,僅僅用于表示該類可以序列化。

是否可以從一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用改化?

  • 不行掩蛤,因為非static方法需要一個具體的實例才可以調(diào)用,而調(diào)用 static方法的時候陈肛,不一定存在一個實例

在JAVA中揍鸟,如何跳出當(dāng)前的多重嵌套循環(huán)?

  • 在外部循環(huán)的前一行句旱,加上標(biāo)簽

  • 在break的時候使用該標(biāo)簽

即能達(dá)到結(jié)束多重嵌套循環(huán)的效果

public class HelloWorld {
    public static void main(String[] args) {
        //打印單數(shù)    
        outloop: //outloop這個標(biāo)示是可以自定義的比如outloop1,ol2,out5
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                System.out.println(i+":"+j);
                if(0==j%2) 
                    break outloop; //如果是雙數(shù)阳藻,結(jié)束外部循環(huán)
            } 
        } 
    }
}

參考源:http://how2j.cn/k/j2se-interview/j2se-interview-java/624.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谈撒,隨后出現(xiàn)的幾起案子腥泥,更是在濱河造成了極大的恐慌,老刑警劉巖啃匿,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛔外,死亡現(xiàn)場離奇詭異蛆楞,居然都是意外死亡,警方通過查閱死者的電腦和手機夹厌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門豹爹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人矛纹,你說我怎么就攤上這事帅戒。” “怎么了崖技?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵逻住,是天一觀的道長。 經(jīng)常有香客問我迎献,道長瞎访,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任吁恍,我火速辦了婚禮扒秸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冀瓦。我一直安慰自己伴奥,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布翼闽。 她就那樣靜靜地躺著拾徙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪感局。 梳的紋絲不亂的頭發(fā)上尼啡,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音询微,去河邊找鬼崖瞭。 笑死,一個胖子當(dāng)著我的面吹牛撑毛,可吹牛的內(nèi)容都是我干的书聚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼藻雌,長吁一口氣:“原來是場噩夢啊……” “哼雌续!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹦疑,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤西雀,失蹤者是張志新(化名)和其女友劉穎萨驶,沒想到半個月后歉摧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年叁温,在試婚紗的時候發(fā)現(xiàn)自己被綠了再悼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡膝但,死狀恐怖冲九,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跟束,我是刑警寧澤莺奸,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站冀宴,受9級特大地震影響灭贷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜略贮,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一甚疟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逃延,春花似錦览妖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拄丰,卻和暖如春桅打,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愈案。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工挺尾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人站绪。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓遭铺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親恢准。 傳聞我的和親對象是個殘疾皇子魂挂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355