Java 最常見的 208 道面試題:第一模塊答案(JAVA基礎(chǔ))

?

目前市面上的面試題存在兩大問題:第一撒顿,題目太舊好久沒有更新了扯再,還都停留在 2010 年之前的狀態(tài)离熏;第二佳谦,近幾年 JDK 更新和發(fā)布都很快,Java 的用法也變了不少滋戳,加上 Java 技術(shù)棧也加入了很多新的框架钻蔑,比如 Spring Boot、Spring Cloud 等奸鸯,但類似的面試題卻極少咪笑。

相比與這些問題,我的這 208 道面試題具備以下優(yōu)點:

披沙揀金提煉出每個 Java 模塊中最經(jīng)典的面試題娄涩;

答案準(zhǔn)確窗怒,每個題目都是我仔細校對過的;

接近最真實的企業(yè)面試蓄拣,題目實用有效果扬虚;

難懂的題目,我加入了代碼解析和原理分析球恤。

本篇是這 208 道題中辜昵,第一部分“Java 基礎(chǔ)”模塊的題和答案。

Java 基礎(chǔ)

1. JDK 和 JRE 有什么區(qū)別咽斧?

JDK:Java Development Kit 的簡稱堪置,java 開發(fā)工具包,提供了 java 的開發(fā)環(huán)境和運行環(huán)境收厨。

JRE:Java Runtime Environment 的簡稱晋柱,java 運行環(huán)境,為 java 的運行提供了所需環(huán)境诵叁。

具體來說 JDK 其實包含了 JRE,同時還包含了編譯 java 源碼的編譯器 javac钦椭,還包含了很多 java 程序調(diào)試和分析的工具拧额。簡單來說:如果你需要運行 java 程序,只需安裝 JRE 就可以了彪腔,如果你需要編寫 java 程序侥锦,需要安裝 JDK。

2. == 和 equals 的區(qū)別是什么德挣?

== 解讀

對于基本類型和引用類型 == 的作用效果是不同的恭垦,如下所示:

基本類型:比較的是值是否相同;

引用類型:比較的是引用是否相同;

代碼示例:??????

String x = "string";String y = "string";String z = new String("string");System.out.println(x==y); // trueSystem.out.println(x==z); // falseSystem.out.println(x.equals(y)); // trueSystem.out.println(x.equals(z)); // true

代碼解讀:因為 x 和 y 指向的是同一個引用番挺,所以 == 也是 true唠帝,而 new String()方法則重寫開辟了內(nèi)存空間,所以 == 結(jié)果為 false玄柏,而 equals 比較的一直是值襟衰,所以結(jié)果都為 true。

equals 解讀

equals 本質(zhì)上就是 ==粪摘,只不過 String 和 Integer 等重寫了 equals 方法瀑晒,把它變成了值比較∨且猓看下面的代碼就明白了苔悦。

首先來看默認(rèn)情況下 equals 比較一個有相同值的對象,代碼如下:

class Cat { ? ?public Cat(String name) { ? ? ? ?this.name = name; ? ?} ? ?private String name; ? ?public String getName() { ? ? ? ?return name; ? ?} ? ?public void setName(String name) { ? ? ? ?this.name = name; ? ?}}Cat c1 = new Cat("王磊");Cat c2 = new Cat("王磊");System.out.println(c1.equals(c2)); // false

輸出結(jié)果出乎我們的意料椎咧,竟然是 false间坐?這是怎么回事,看了 equals 源碼就知道了邑退,源碼如下:

???????

public boolean equals(Object obj) { ? ?return (this == obj);}

原來 equals 本質(zhì)上就是 ==竹宋。

那問題來了,兩個相同值的 String 對象地技,為什么返回的是 true蜈七?代碼如下:

???????

String s1 = new String("老王");String s2 = new String("老王");System.out.println(s1.equals(s2)); // true

同樣的,當(dāng)我們進入 String 的 equals 方法莫矗,找到了答案飒硅,代碼如下:

public boolean equals(Object anObject) { ? ?if (this == anObject) { ? ? ? ?return true; ? ?} ? ?if (anObject instanceof String) { ? ? ? ?String anotherString = (String)anObject; ? ? ? ?int n = value.length; ? ? ? ?if (n == anotherString.value.length) { ? ? ? ? ? ?char v1[] = value; ? ? ? ? ? ?char v2[] = anotherString.value; ? ? ? ? ? ?int i = 0; ? ? ? ? ? ?while (n-- != 0) { ? ? ? ? ? ? ? ?if (v1[i] != v2[i]) ? ? ? ? ? ? ? ? ? ?return false; ? ? ? ? ? ? ? ?i++; ? ? ? ? ? ?} ? ? ? ? ? ?return true; ? ? ? ?} ? ?} ? ?return false;}

原來是 String 重寫了 Object 的 equals 方法,把引用比較改成了值比較作谚。

總結(jié):== 對于基本類型來說是值比較三娩,對于引用類型來說是比較的是引用;而 equals 默認(rèn)情況下是引用比較妹懒,只是很多類重新了 equals 方法雀监,比如 String、Integer 等把它變成了值比較眨唬,所以一般情況下 equals 比較的是值是否相等会前。

3. 兩個對象的 hashCode()相同,則 equals()也一定為 true匾竿,對嗎瓦宜?

不對,兩個對象的 hashCode()相同岭妖,equals()不一定 true临庇。

代碼示例:

???????

String str1 = "通話";String str2 = "重地";System.out.println(String.format("str1:%d | str2:%d", ?str1.hashCode(),str2.hashCode()));System.out.println(str1.equals(str2));

執(zhí)行的結(jié)果:

str1:1179395 | str2:1179395

false

代碼解讀:很顯然“通話”和“重地”的 hashCode() 相同反璃,然而 equals() 則為 false,因為在散列表中假夺,hashCode()相等即兩個鍵值對的哈希值相等淮蜈,然而哈希值相等,并不一定能得出鍵值對相等侄泽。

小編分類整理了許多java進階學(xué)習(xí)材料和BAT面試題礁芦,需要資料的請加JAVA高階學(xué)習(xí)Q群:8515318105;就能領(lǐng)取2019年java架構(gòu)師進階學(xué)習(xí)資料和BAT面試題悼尾。

4. final 在 java 中有什么作用柿扣?

final 修飾的類叫最終類,該類不能被繼承闺魏。

final 修飾的方法不能被重寫未状。

final 修飾的變量叫常量,常量必須初始化析桥,初始化之后值就不能被修改司草。

5. java 中的 Math.round(-1.5) 等于多少?

等于 -1泡仗,因為在數(shù)軸上取值時埋虹,中間值(0.5)向右取整,所以正 0.5 是往上取整娩怎,負 0.5 是直接舍棄搔课。

6. String 屬于基礎(chǔ)的數(shù)據(jù)類型嗎?

String 不屬于基礎(chǔ)類型截亦,基礎(chǔ)類型有 8 種:byte爬泥、boolean、char崩瓤、short袍啡、int、float却桶、long境输、double,而 String 屬于對象肾扰。

7. java 中操作字符串都有哪些類畴嘶?它們之間有什么區(qū)別?

操作字符串的類有:String集晚、StringBuffer、StringBuilder区匣。

String 和 StringBuffer偷拔、StringBuilder 的區(qū)別在于 String 聲明的是不可變的對象蒋院,每次操作都會生成新的 String 對象,然后將指針指向新的 String 對象莲绰,而 StringBuffer欺旧、StringBuilder 可以在原有對象的基礎(chǔ)上進行操作,所以在經(jīng)常改變字符串內(nèi)容的情況下最好不要使用 String蛤签。

StringBuffer 和 StringBuilder 最大的區(qū)別在于辞友,StringBuffer 是線程安全的,而 StringBuilder 是非線程安全的震肮,但 StringBuilder 的性能卻高于 StringBuffer称龙,所以在單線程環(huán)境下推薦使用 StringBuilder,多線程環(huán)境下推薦使用 StringBuffer戳晌。

8. String str="i"與 String str=new String("i")一樣嗎鲫尊?

不一樣,因為內(nèi)存的分配方式不一樣沦偎。String str="i"的方式疫向,java 虛擬機會將其分配到常量池中;而 String str=new String("i") 則會被分到堆內(nèi)存中豪嚎。

9. 如何將字符串反轉(zhuǎn)搔驼?

使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。

示例代碼:????

// StringBuffer reverseStringBuffer stringBuffer = new StringBuffer();stringBuffer.append("abcdefg");System.out.println(stringBuffer.reverse()); // gfedcba// StringBuilder reverseStringBuilder stringBuilder = new StringBuilder();stringBuilder.append("abcdefg");System.out.println(stringBuilder.reverse()); // gfedcba

10. String 類的常用方法都有那些侈询?

indexOf():返回指定字符的索引舌涨。

charAt():返回指定索引處的字符。

replace():字符串替換妄荔。

trim():去除字符串兩端空白泼菌。

split():分割字符串,返回一個分割后的字符串?dāng)?shù)組啦租。

getBytes():返回字符串的 byte 類型數(shù)組哗伯。

length():返回字符串長度。

toLowerCase():將字符串轉(zhuǎn)成小寫字母篷角。

toUpperCase():將字符串轉(zhuǎn)成大寫字符焊刹。

substring():截取字符串。

equals():字符串比較恳蹲。

11. 抽象類必須要有抽象方法嗎虐块?

不需要,抽象類不一定非要有抽象方法嘉蕾。

示例代碼:

???????

abstract class Cat { ? ?public static void sayHi() { ? ? ? ?System.out.println("hi~"); ? ?}}

上面代碼贺奠,抽象類并沒有抽象方法但完全可以正常運行。

12. 普通類和抽象類有哪些區(qū)別错忱?

普通類不能包含抽象方法儡率,抽象類可以包含抽象方法挂据。

抽象類不能直接實例化,普通類可以直接實例化儿普。

小編分類整理了許多java進階學(xué)習(xí)材料和BAT面試題崎逃,需要資料的請加JAVA高階學(xué)習(xí)Q群:8515318105;就能領(lǐng)取2019年java架構(gòu)師進階學(xué)習(xí)資料和BAT面試題眉孩。

13. 抽象類能使用 final 修飾嗎个绍?

不能,定義抽象類就是讓其他類繼承的浪汪,如果定義為 final 該類就不能被繼承巴柿,這樣彼此就會產(chǎn)生矛盾,所以 final 不能修飾抽象類吟宦,如下圖所示篮洁,編輯器也會提示錯誤信息:

?

14. 接口和抽象類有什么區(qū)別?

實現(xiàn):抽象類的子類使用 extends 來繼承殃姓;接口必須使用 implements 來實現(xiàn)接口袁波。

構(gòu)造函數(shù):抽象類可以有構(gòu)造函數(shù);接口不能有蜗侈。

main 方法:抽象類可以有 main 方法篷牌,并且我們能運行它;接口不能有 main 方法踏幻。

實現(xiàn)數(shù)量:類可以實現(xiàn)很多個接口枷颊;但是只能繼承一個抽象類。

訪問修飾符:接口中的方法默認(rèn)使用 public 修飾该面;抽象類中的方法可以是任意訪問修飾符夭苗。

15. java 中 IO 流分為幾種?

按功能來分:輸入流(input)隔缀、輸出流(output)题造。

按類型來分:字節(jié)流和字符流。

字節(jié)流和字符流的區(qū)別是:字節(jié)流按 8 位傳輸以字節(jié)為單位輸入輸出數(shù)據(jù)猾瘸,字符流按 16 位傳輸以字符為單位輸入輸出數(shù)據(jù)界赔。

16. BIO、NIO牵触、AIO 有什么區(qū)別淮悼?

BIO:Block IO 同步阻塞式 IO,就是我們平常使用的傳統(tǒng) IO揽思,它的特點是模式簡單使用方便袜腥,并發(fā)處理能力低。

NIO:New IO 同步非阻塞 IO钉汗,是傳統(tǒng) IO 的升級瞧挤,客戶端和服務(wù)器端通過 Channel(通道)通訊锡宋,實現(xiàn)了多路復(fù)用儡湾。

AIO:Asynchronous IO 是 NIO 的升級特恬,也叫 NIO2,實現(xiàn)了異步非堵塞 IO 徐钠,異步 IO 的操作基于事件和回調(diào)機制癌刽。

17. Files的常用方法都有哪些?

Files.exists():檢測文件路徑是否存在尝丐。

Files.createFile():創(chuàng)建文件显拜。

Files.createDirectory():創(chuàng)建文件夾。

Files.delete():刪除一個文件或目錄爹袁。

Files.copy():復(fù)制文件远荠。

Files.move():移動文件。

Files.size():查看文件個數(shù)失息。

Files.read():讀取文件譬淳。

Files.write():寫入文件。

(完)

小編分類整理了許多java進階學(xué)習(xí)材料和BAT面試題盹兢,需要資料的請加JAVA高階學(xué)習(xí)Q群:8515318105邻梆;就能領(lǐng)取2019年java架構(gòu)師進階學(xué)習(xí)資料和BAT面試題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绎秒,一起剝皮案震驚了整個濱河市浦妄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌见芹,老刑警劉巖剂娄,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玄呛,居然都是意外死亡阅懦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門把鉴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來故黑,“玉大人,你說我怎么就攤上這事庭砍〕【В” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵怠缸,是天一觀的道長诗轻。 經(jīng)常有香客問我,道長揭北,這世上最難降的妖魔是什么扳炬? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任吏颖,我火速辦了婚禮,結(jié)果婚禮上恨樟,老公的妹妹穿的比我還像新娘半醉。我一直安慰自己,他們只是感情好劝术,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布缩多。 她就那樣靜靜地躺著,像睡著了一般养晋。 火紅的嫁衣襯著肌膚如雪衬吆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天绳泉,我揣著相機與錄音逊抡,去河邊找鬼。 笑死零酪,一個胖子當(dāng)著我的面吹牛冒嫡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蛾娶,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼灯谣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛔琅?” 一聲冷哼從身側(cè)響起胎许,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罗售,沒想到半個月后辜窑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡寨躁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年穆碎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片职恳。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡所禀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出放钦,到底是詐尸還是另有隱情色徘,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布操禀,位于F島的核電站褂策,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斤寂,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一耿焊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遍搞,春花似錦罗侯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至再愈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間护戳,已是汗流浹背翎冲。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留媳荒,地道東北人抗悍。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像钳枕,于是被迫代替她去往敵國和親缴渊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 一鱼炒、基礎(chǔ)知識:1衔沼、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,369評論 0 4
  • 1昔瞧、面向?qū)ο蟮奶卣饔心男┓矫? 答:面向?qū)ο蟮奶卣髦饕幸韵聨讉€方面: 1)抽象:抽象是將一類對象的共同特征總結(jié)出...
    yshenhn閱讀 1,155評論 0 8
  • 這是我看的第一本心理學(xué)方面的書指蚁,應(yīng)該可以歸為積極心理學(xué)那部分。這本書也是我看的第一本NLP方面的書自晰。仿佛是打開了一...
    Einstellung閱讀 1,266評論 1 1
  • 當(dāng)你悵然失意時凝化,誰會來陪伴你? ———題記 櫻花樹下的黃白梨花貓酬荞,多么有詩意搓劫。 櫻貓很討厭自己的名字。 當(dāng)小小的貓...
    蕓瑤蘭芷閱讀 432評論 0 1
  • 廉價快樂遣疯、垃圾食品、無效社交已經(jīng)開始影響我們生命的長度了。 每個人的生命長度都是一個定額缠犀,那些糟糕的事情数苫,如果你及...
    _6686閱讀 173評論 0 1