【Java面試】史上最全的JAVA專業(yè)術(shù)語(yǔ)面試100問(wèn)

【Java面試】史上最全的JAVA專業(yè)術(shù)語(yǔ)面試100問(wèn)

春風(fēng)如貴客,一到便繁華。各位看官點(diǎn)贊再看,養(yǎng)成好習(xí)慣(●′?`●)

不用關(guān)注公眾號(hào),沒(méi)有什么套路,就是直接上干貨?。?!

之后還會(huì)推出JAVA面試系列文章,敬請(qǐng)關(guān)注!

按照技術(shù)模塊:Java熱點(diǎn)技術(shù)、多線程、微服務(wù)、JVM、Redis、消息隊(duì)列、SQL相關(guān)的面試題。不要走開,稍后更精彩!

gitee上已經(jīng)開源 https://gitee.com/Li-Ren/blog 有一線大廠面試點(diǎn)腦圖,歡迎Star和留下你認(rèn)為重要的知識(shí)點(diǎn)。

話外音:最近收到很多私信,除了感謝和討論的留言之外,本篇博客也被業(yè)內(nèi)的一個(gè)大廠給翻牌子了。哈哈感謝肯定哦?乛?乛?

努力做到一周一更新吧,因?yàn)橹芰芴煳乙s小姐姐(逃...Java中的逃逸分析)。


1、面向?qū)ο蟮奶攸c(diǎn)有哪些?

抽象、繼承、封裝、多態(tài)。

2、接口和抽象類有什么聯(lián)系和區(qū)別?

3、重載和重寫有什么區(qū)別?

4、java有哪些基本數(shù)據(jù)類型?

5、數(shù)組有沒(méi)有l(wèi)ength()方法?String有沒(méi)有l(wèi)ength()方法?

數(shù)組沒(méi)有l(wèi)ength()方法,它有l(wèi)ength屬性。

String有l(wèi)ength()方法。

集合求長(zhǎng)度用size()方法。

6、Java支持的數(shù)據(jù)類型有哪些?什么是自動(dòng)拆裝箱?

7、int 和 Integer 有什么區(qū)別?

8、Java類的實(shí)例化順序?

父類靜態(tài)成員和靜態(tài)代碼塊 -> 子類靜態(tài)成員和靜態(tài)代碼塊 -> 父類非靜態(tài)成員和非靜態(tài)代碼塊 -> 父類構(gòu)造方法 -> 子類非靜態(tài)成員和非靜態(tài)代碼塊 -> 子類構(gòu)造方法

9、什么是值傳遞和引用傳遞?

10、String能被繼承嗎?為什么?

11、String和StringBuilder、StringBuffer的區(qū)別?

  • StringBuilder:適用于單線程下在字符緩沖區(qū)進(jìn)行大量操作的情況(是線程不安全的)
  • StringBuffer:適用多線程下在字符緩沖區(qū)進(jìn)行大量操作的情況(一般很少)(是線程安全的)
  • 首先說(shuō)運(yùn)行速度,或者說(shuō)是執(zhí)行速度,在這方面運(yùn)行速度快慢為:StringBuilder > StringBuffer > String

12、Java集合框架的基礎(chǔ)接口有哪些?

13、Java集合框架是什么?說(shuō)出一些集合框架的優(yōu)點(diǎn)?

14、HashMap 與HashTable有什么區(qū)別?

15、ArrayList 和 LinkedList 有什么區(qū)別?

16、簡(jiǎn)單介紹Java異??蚣?Error與Exception有什么區(qū)別?

17、java中的throw 和 throws關(guān)鍵字有什么區(qū)別?

18、列舉幾個(gè)你了解的幾個(gè)常見的運(yùn)行時(shí)異常?

19、final, finally, finalize有什么區(qū)別?

20、描述Java內(nèi)存模型?

21、java中垃圾收集的方法有哪些?

22、如何判斷一個(gè)對(duì)象是否存活?(或者GC對(duì)象的判定方法)?

23、Java GC是在什么時(shí)候,對(duì)什么東西,做了什么事情?

24、什么是類加載器雙親委派模型機(jī)制?

25、類加載器有哪些?

26、描述類加載器工作機(jī)制?

27、分別寫出堆內(nèi)存溢出與棧內(nèi)存溢出的程序?

28、Java 8 內(nèi)存模型進(jìn)行了哪些改進(jìn)?

29、簡(jiǎn)述java內(nèi)存分配與回收策率以及Minor GC和Major GC?

30、JVM,JDK和JRE有什么區(qū)別與聯(lián)系?

31、Java線程同步的方式有哪些?

32、解釋一下鎖的一些基本概念:可重入鎖、可中斷鎖、公平鎖、讀寫鎖?

33、synchronized什么情況下會(huì)釋放鎖?

  1. 獲取鎖的線程執(zhí)行完了該代碼塊,然后線程釋放對(duì)鎖的占有;
  2. 線程執(zhí)行發(fā)生異常,此時(shí)JVM會(huì)讓線程自動(dòng)釋放鎖。
  3. 調(diào)用wait方法,在等待的時(shí)候立即釋放鎖,方便其他的線程使用鎖.

34、synchronized和lock有什么區(qū)別?

35、使用過(guò)哪些數(shù)據(jù)庫(kù)連接池,分別有什么優(yōu)點(diǎn)和缺點(diǎn)?

36、Java CAS(Compare And Swap) 無(wú)鎖算法?

CAS(Compare And Swap) 無(wú)鎖算法: CAS是樂(lè)觀鎖技術(shù),當(dāng)多個(gè)線程嘗試使用CAS同時(shí)更新同一個(gè)變量時(shí),只有其中一個(gè)線程能更新變量的值,而其它線程都失敗,失敗的線程并不會(huì)被掛起,而是被告知這次競(jìng)爭(zhēng)中失敗,并可以再次嘗試。CAS有3個(gè)操作數(shù),內(nèi)存值V,舊的預(yù)期值A(chǔ),要修改的新值B。當(dāng)且僅當(dāng)預(yù)期值A(chǔ)和內(nèi)存值V相同時(shí),將內(nèi)存值V修改為B,否則什么都不做。

37、線程池的作用有哪些?

線程池的作用: 在程序啟動(dòng)的時(shí)候就創(chuàng)建若干線程來(lái)響應(yīng)處理,它們被稱為線程池,里面的線程叫工作線程

  1. 降低資源消耗。通過(guò)重復(fù)利用已創(chuàng)建的線程降低線程創(chuàng)建和銷毀造成的消耗。
  2. 提高響應(yīng)速度。當(dāng)任務(wù)到達(dá)時(shí),任務(wù)可以不需要等到線程創(chuàng)建就能立即執(zhí)行。
  3. 提高線程的可管理性。

常用線程池:ExecutorService 是主要的實(shí)現(xiàn)類,其中常用的有

  • Executors.newSingleThreadPool(),
  • newFixedThreadPool(),
  • newCachedTheadPool(),
  • newScheduledThreadPool()。

38、反射創(chuàng)建類實(shí)例的三種方式?

39、反射機(jī)制有哪些優(yōu)點(diǎn)和缺點(diǎn)?

40、哪些項(xiàng)目中用到了Java反射機(jī)制?

jdbc中有一行代碼:Class.forName('com.MySQL.jdbc.Driver.class').newInstance();
很多框架都用到反射機(jī)制,hibernate,struts都是用反射機(jī)制實(shí)現(xiàn)的。

[圖片上傳失敗...(image-36a8ba-1574749419842)]

41、Java 反射機(jī)制的作用?

42、你了解哪些設(shè)計(jì)模式,列舉幾個(gè)?jdk中用到了哪些設(shè)計(jì)模式?

43、單例模式用java有哪幾種實(shí)現(xiàn)方式?

44、Java元注解有哪些,都有什么作用?

45、jdk自帶了哪些注解,有什么作用?

46、Java8有哪些新特性?

47、簡(jiǎn)單介紹原生jdbc執(zhí)行sql過(guò)程?

  1. class.forName()加載數(shù)據(jù)驅(qū)動(dòng)
  2. DriverManager.getConnection()獲取數(shù)據(jù)庫(kù)連接對(duì)象。
  3. 根據(jù)SQL或sql會(huì)話對(duì)象,有兩種方式Statement、PreparedStatement。
  4. 執(zhí)行sql處理結(jié)果集,如果有參數(shù)就設(shè)置參數(shù)。
  5. 關(guān)閉結(jié)果集,關(guān)閉會(huì)話,關(guān)閉資源。

48、char 型變量中能不能存貯一個(gè)中文漢字,為什么?

char類型可以存儲(chǔ)一個(gè)中文漢字,因?yàn)镴ava中使用的編碼是Unicode,一個(gè)char類型占2個(gè)字節(jié)(16比特),所以放一個(gè)中文是沒(méi)問(wèn)題的。

49、兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對(duì)不對(duì)?

50、構(gòu)造器(constructor)是否可被重寫(override)?

“Constructor(構(gòu)造器)不能被繼承,所以不能被override(重寫),但是可以被overloading(重載)。

51、什么是線程安全?

52、什么是死鎖?

53、synchronized的實(shí)現(xiàn)原理是什么?

54、有了synchronized,還需要volatile做什么事?

55、synchronized的鎖優(yōu)化是怎么處理的?

(強(qiáng)烈推薦兩本書《java并發(fā)編程的藝術(shù)》、《深入理解Java虛擬機(jī)》)

Synchronized和Volatile的區(qū)別:

? 1、Volatile 僅能使用在變量級(jí)別;
Synchronized則可以使用在變量、方法、和同步代碼塊等類級(jí)別的。
2、Volatile僅能實(shí)現(xiàn)變量的修改可見性和有序性,并不能保證原子性(復(fù)合操作的原子性);
Synchronized則可以保證變量的可見性、有序性、原子性。
3、Volatile不會(huì)造成線程的阻塞;
Synchronized可能會(huì)造成線程的阻塞。
4、Volatile標(biāo)記的變量不會(huì)被編譯器優(yōu)化(因?yàn)檫@是由cpu指令完成);
Synchronized標(biāo)記的變量可以被編譯器優(yōu)化(JAVA1.6后性能優(yōu)化很多)。

56、JMM是什么?

57、Java并發(fā)包都有哪些?

58、什么是fail-fast?

59、什么是fail-safe?

60、什么是CopyOnWrite?

61、什么是AQS呢?

62、什么是CAS呢?

63、樂(lè)觀鎖是怎樣的?

64、樂(lè)觀鎖悲觀鎖區(qū)別是什么?

65、數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)悲觀鎖和樂(lè)觀鎖?

66、數(shù)據(jù)庫(kù)鎖和隔離級(jí)別有什么關(guān)系?

67、數(shù)據(jù)庫(kù)鎖和索引有什么關(guān)系?

68、什么是聚簇索引?

69、什么是非聚簇索引?

70、索引最左前綴是什么?

71、什么是B+樹索引?(有點(diǎn)長(zhǎng),值得一看)

72、什么是聯(lián)合索引?

73、什么是回表?

74、分布式鎖有了解嗎?

75、Redis怎么實(shí)現(xiàn)分布式鎖?

76、為什么要用Redis?

因?yàn)閭鹘y(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)如Mysql已經(jīng)不能適用所有的場(chǎng)景了,比如秒殺的庫(kù)存扣減,APP首頁(yè)的訪問(wèn)流量高峰等等,都對(duì)數(shù)據(jù)庫(kù)提出了更高的要求,所以引入了緩存中間件,目前市面上比較常用的緩存中間件有Redis 和 Memcached 不過(guò)中和考慮了他們的優(yōu)缺點(diǎn),最后選擇了Redis。

77、Redis和memcache區(qū)別是什么?

78、Zookeeper怎么實(shí)現(xiàn)分布式鎖?

79、什么是Zookeeper?(漫畫版)

80、什么是CAP?

81、什么是BASE?和CAP什么區(qū)別?

82、CAP怎么推導(dǎo)?如何取舍?

83、分布式系統(tǒng)怎么保證數(shù)據(jù)一致性?

84、什么是分布式事務(wù)?分布式事務(wù)方案?

85、線程安全的單例?

86、不用synchronized和lock能實(shí)現(xiàn)線程安全的單例嗎?

87、什么是Paxos算法?

88、ArrayList和LinkedList和Vector的區(qū)別·

89、談一下計(jì)模式遵循的面向?qū)ο笤O(shè)計(jì)原則!

90、Arrays.asList獲得的List使用時(shí)需要注意什么

91、List和原始類型List之間的區(qū)別?

在編譯時(shí)編譯器不會(huì)對(duì)原始類型進(jìn)行類型安全檢查,卻會(huì)對(duì)帶參數(shù)的類型進(jìn)行檢查。

**92、List<?>和List<T>之間的區(qū)別是什么?**

93、synchronized是如何實(shí)現(xiàn)的?

94、BIO、NIO和AIO的區(qū)別、三種IO的用法與原理

95、ConcurrentSkipListMap

96、String.valueOf和Integer.toString的區(qū)別

97、Integer的緩存機(jī)制

98、Set如何保證元素不重復(fù)?

99、Java中如何保證線程安全?

100、你使用過(guò)JVM相關(guān)的參數(shù),列舉幾個(gè)


創(chuàng)作不易,各位的支持和認(rèn)可,就是我創(chuàng)作的最大動(dòng)力,

【轉(zhuǎn)載請(qǐng)聯(lián)系本人】 如有問(wèn)題,請(qǐng)聯(lián)系我。歡迎斧正!不勝感激 !

求點(diǎn)贊?? 求關(guān)注?? 求分享?? 求留言??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容