前言
這是我在工作、面試中學習并總結到的一些知識點,都是一些比較典型的、面試常常被問到的問題。
如果你平時沒有注意去總結的話,那麼當你面試被問到的時候可能會是一臉懵圈,就算這個問題你知道怎麼回事,但是你平時沒有認真總結,你也可能會出現邏輯混亂的情況,進而錯失工作機會。
有些知識點不經常使用就會忘記,但是面試還會問,對此,我也是深受其害,是以我決定将這些遇見的問題整理下來,分享出去,幫助更多的人,我們共同進步。

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的差別
- String是不可變的,如果嘗試去修改,會新⽣成⼀個字元串對象,StringBuffer和StringBuilder是可變的
- 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!