天天看點

GitHub2021年度前100的Java高頻知識點彙總前言JDK、JRE、JVM之間的差別String、StringBuffer、StringBuilder的差別==和equals⽅法的差別1、重載和重寫的差別2、List和Set的差別3、ArrayList和LinkedList差別總結

前言

這是我在工作、面試中學習并總結到的一些知識點,都是一些比較典型的、面試常常被問到的問題。

如果你平時沒有注意去總結的話,那麼當你面試被問到的時候可能會是一臉懵圈,就算這個問題你知道怎麼回事,但是你平時沒有認真總結,你也可能會出現邏輯混亂的情況,進而錯失工作機會。

有些知識點不經常使用就會忘記,但是面試還會問,對此,我也是深受其害,是以我決定将這些遇見的問題整理下來,分享出去,幫助更多的人,我們共同進步。

GitHub2021年度前100的Java高頻知識點彙總前言JDK、JRE、JVM之間的差別String、StringBuffer、StringBuilder的差別==和equals⽅法的差別1、重載和重寫的差別2、List和Set的差別3、ArrayList和LinkedList差別總結

JDK、JRE、JVM之間的差別

  • JDK(Java SE Development Kit),Java标準開發包,它提供了編譯、運⾏Java程式所需的各種⼯具和資源,包括Java編譯器、Java運⾏時環境,以及常⽤的Java類庫等
  • JRE( Java Runtime Environment) ,Java運⾏環境,⽤于運⾏Java的位元組碼⽂件。JRE中包括了JVM以及JVM⼯作所需要的類庫,普通⽤戶⽽隻需要安裝JRE來運⾏Java程式,⽽程式開發者必須安裝JDK來編譯、調試程式。
  • JVM(Java Virtual Mechinal),Java虛拟機,是JRE的⼀部分,它是整個java實作跨平台的最核⼼的部分,負責運⾏位元組碼⽂件。

我們寫Java代碼,⽤txt就可以寫,但是寫出來的Java代碼,想要運⾏,需要先編譯成位元組碼,那就需要編譯器,⽽JDK中就包含了編譯器javac,編譯之後的位元組碼,想要運⾏,就需要⼀個可以執⾏位元組碼的程式,這個程式就是JVM(Java虛拟機),專⻔⽤來執⾏Java位元組碼的。

String、StringBuffer、StringBuilder的差別

  1. String是不可變的,如果嘗試去修改,會新⽣成⼀個字元串對象,StringBuffer和StringBuilder是可變的
  2. StringBuffer是線程安全的,StringBuilder是線程不安全的,是以在單線程環境下StringBuilder效率會更⾼

==和equals⽅法的差別

  • ==:如果是基本資料類型,⽐較是值,如果是引⽤類型,⽐較的是引⽤位址
  • equals:具體看各個類重寫equals⽅法之後的⽐較邏輯,⽐如String類,雖然是引⽤類型,但是String類中重寫了equals⽅法,⽅法内部⽐較的是字元串中的各個字元是否全部相等。

1、重載和重寫的差別

GitHub2021年度前100的Java高頻知識點彙總前言JDK、JRE、JVM之間的差別String、StringBuffer、StringBuilder的差別==和equals⽅法的差別1、重載和重寫的差別2、List和Set的差別3、ArrayList和LinkedList差別總結

2、List和Set的差別

GitHub2021年度前100的Java高頻知識點彙總前言JDK、JRE、JVM之間的差別String、StringBuffer、StringBuilder的差別==和equals⽅法的差別1、重載和重寫的差別2、List和Set的差別3、ArrayList和LinkedList差別總結

3、ArrayList和LinkedList差別

GitHub2021年度前100的Java高頻知識點彙總前言JDK、JRE、JVM之間的差別String、StringBuffer、StringBuilder的差別==和equals⽅法的差別1、重載和重寫的差別2、List和Set的差別3、ArrayList和LinkedList差別總結

4、談談ConcurrentHashMap的擴容機制,

答案解析

5、Jdk1.7到Jdk1.8 HashMap 發⽣了什麼變化(底層)?

6、說⼀下HashMap的Put⽅法

7、深拷⻉和淺拷⻉

8、HashMap的擴容機制原理

9、CopyOnWriteArrayList的底層原理是怎樣的

10、什麼是位元組碼?采⽤位元組碼的好處是什麼?

GitHub2021年度前100的Java高頻知識點彙總前言JDK、JRE、JVM之間的差別String、StringBuffer、StringBuilder的差別==和equals⽅法的差別1、重載和重寫的差別2、List和Set的差別3、ArrayList和LinkedList差別總結

11、Java中的異常體系是怎樣的

12、在Java的異常處理機制中,什麼時候應該抛出異常,什麼時候捕獲異常?

13、Java中有哪些類加載器

14、說說類加載器雙親委派模型

15、JVM中哪些是線程共享區

16、你們項⽬如何排查JVM問題

17、⼀個對象從加載到JVM,再到被GC清除,都經曆了什麼過程?

18、怎麼确定⼀個對象到底是不是垃圾?

19、JVM有哪些垃圾回收算法?

20、什麼是STW?

21、JVM參數有哪些?

22、說說對線程安全的了解

23、對守護線程的了解

24、ThreadLocal的底層原理

25、并發、并⾏、串⾏之間的差別

26、Java死鎖如何避免?

27、線程池的底層⼯作原理

28、線程池為什麼是先添加列隊⽽不是先建立最⼤線程?

29、ReentrantLock中的公平鎖和⾮公平鎖的底層實作

30、ReentrantLock中tryLock()和lock()⽅法的差別

31、CountDownLatch和Semaphore的差別和底層原理

32、Sychronized的偏向鎖、輕量級鎖、重量級鎖

33、Sychronized和ReentrantLock的差別

34、談談你對AQS的了解,AQS如何實作可重⼊鎖?

35、談談你對IOC的了解

36、單例Bean和單例模式

37、Spring事務傳播機制

38、Spring事務什麼時候會失效?

39、Spring中的Bean建立的⽣命周期有哪些步驟

40、Spring中Bean是線程安全的嗎

41、ApplicationContext和BeanFactory有什麼差別

42、Spring中的事務是如何實作的

43、Spring中什麼時候@Transactional會失效

44、Spring容器啟動流程是怎樣的

45、Spring⽤到了哪些設計模式

46、Spring Boot中常⽤注解及其底層實作

47、Spring Boot是如何啟動Tomcat的

48、Mybatis的優缺點

49、#{}和${}的差別是什麼?

50、索引的基本原理

GitHub2021年度前100的Java高頻知識點彙總前言JDK、JRE、JVM之間的差別String、StringBuffer、StringBuilder的差別==和equals⽅法的差別1、重載和重寫的差別2、List和Set的差別3、ArrayList和LinkedList差別總結

51、索引設計的原則?

52、事務的基本特性和隔離級别

53、什麼是MVCC

54、簡述MyISAM和InnoDB的差別

55、Explain語句結果中各個字段分表表示什麼

56、索引覆寫是什麼

57、最左字首原則是什麼

58、Innodb是如何實作事務的

59、B樹和B+樹的差別,為什麼Mysql使⽤B+樹

60、Mysql鎖有哪些,如何了解

61、Mysql慢查詢該如何優化?

62、什麼是RDB和AOF

63、Redis的過期鍵的删除政策

64、簡述Redis事務實作

65、Redis 主從複制的核⼼原理

66、Redis有哪些資料結構?分别有哪些典型的應⽤場景?

67、Redis分布式鎖底層是如何實作的?

68、Redis主從複制的核⼼原理

69、Redis叢集政策

70、緩存穿透、緩存擊穿、緩存雪崩分别是什麼

71、Redis和Mysql如何保證資料⼀緻

GitHub2021年度前100的Java高頻知識點彙總前言JDK、JRE、JVM之間的差別String、StringBuffer、StringBuilder的差別==和equals⽅法的差別1、重載和重寫的差別2、List和Set的差別3、ArrayList和LinkedList差別總結

72、Redis的持久化機制

73、Redis單線程為什麼這麼快

74、什麼是CAP理論

75、什麼是BASE理論

76、什麼是RPC

77、資料⼀緻性模型有哪些

78、分布式ID是什麼?有哪些解決⽅案?

79、分布式鎖的使⽤場景是什麼?有哪些實作⽅案?

80、什麼是分布式事務?有哪些實作⽅案?

81、什麼是ZAB協定

82、為什麼Zookeeper可以⽤來作為注冊中⼼

83、Zookeeper中的上司者選舉的流程是怎樣的?

84、Zookeeper叢集中節點之間資料是如何同步的

85、Dubbo⽀持哪些負載均衡政策

86、Dubbo是如何完成服務導出的?

87、Dubbo是如何完成服務引⼊的?

88、Dubbo的架構設計是怎樣的?

89、負載均衡算法有哪些

90、分布式架構下,Session 共享有什麼⽅案

91、如何實作接⼝的幂等性

92、簡述zk的命名服務、配置管理、叢集管理

93、講下Zookeeper中的watch機制

94、Zookeeper和Eureka的差別

95、存儲拆分後如何解決唯⼀主鍵問題

96、

雪花算法原理

97、如何解決不使⽤分區鍵的查詢問題

98、Spring Cloud有哪些常⽤元件,作⽤是什麼?

99、如何避免緩存穿透、緩存擊穿、緩存雪崩?

100、分布式系統中常⽤的緩存⽅案有哪些

101、緩存過期都有哪些政策?

102、常⻅的緩存淘汰算法?

總結

java隻是一個工具;應用必不可少,但是基礎知識是安身立命以及決定自己上限的東西,雖然是為了應付面試官,但是最重要的還是看自己技術底層是否鞏固,這樣才能逐漸的提升自己的技術能力。

如果基礎知識比較紮實了,可以看看網絡上的面試經驗,找找自己不會的知識點,查漏補缺。也祝大家都能拿到心儀的offer!