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