GitHub2021年度前100的Java高頻知識點匯總


前言

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

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

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

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、重載和重寫的區別

2、List和Set的區別

3、ArrayList和LinkedList區別

4、談談ConcurrentHashMap的擴容機制,答案解析

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

6、說⼀下HashMap的Put⽅法

7、深拷⻉和淺拷⻉

8、HashMap的擴容機制原理

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

10、什么是字節碼?采⽤字節碼的好處是什么?

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、索引的基本原理

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如何保證數據⼀致

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!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM