前言
這是我在工作几晤、面試中學(xué)習(xí)并總結(jié)到的一些知識點(diǎn)盛撑,都是一些比較典型的、面試常常被問到的問題曾我。
如果你平時(shí)沒有注意去總結(jié)的話粉怕,那么當(dāng)你面試被問到的時(shí)候可能會是一臉懵圈,就算這個問題你知道怎么回事抒巢,但是你平時(shí)沒有認(rèn)真總結(jié)贫贝,你也可能會出現(xiàn)邏輯混亂的情況,從而錯失工作機(jī)會虐秦。
有些知識點(diǎn)不經(jīng)常使用就會忘記平酿,但是面試還會問,對此悦陋,我也是深受其害蜈彼,所以我決定將這些遇見的問題整理下來,分享出去俺驶,幫助更多的人幸逆,我們共同進(jìn)步。
JDK暮现、JRE还绘、JVM之間的區(qū)別
- JDK(Java SE Development Kit),Java標(biāo)準(zhǔn)開發(fā)包栖袋,它提供了編譯拍顷、運(yùn)?Java程序所需的各種?具和資源,包括Java編譯器塘幅、Java運(yùn)?時(shí)環(huán)境昔案,以及常?的Java類庫等
- JRE( Java Runtime Environment) ,Java運(yùn)?環(huán)境电媳,?于運(yùn)?Java的字節(jié)碼?件踏揣。JRE中包括了JVM以及JVM?作所需要的類庫,普通?戶?只需要安裝JRE來運(yùn)?Java程序匾乓,?程序開發(fā)者必須安裝JDK來編譯捞稿、調(diào)試程序。
- JVM(Java Virtual Mechinal),Java虛擬機(jī)娱局,是JRE的?部分彰亥,它是整個java實(shí)現(xiàn)跨平臺的最核?的部分,負(fù)責(zé)運(yùn)?字節(jié)碼?件铃辖。
我們寫Java代碼剩愧,?txt就可以寫,但是寫出來的Java代碼娇斩,想要運(yùn)?仁卷,需要先編譯成字節(jié)碼,那就需要編譯器犬第,?JDK中就包含了編譯器javac锦积,編譯之后的字節(jié)碼,想要運(yùn)?歉嗓,就需要?個可以執(zhí)?字節(jié)碼的程序丰介,這個程序就是JVM(Java虛擬機(jī)),專??來執(zhí)?Java字節(jié)碼的鉴分。
String哮幢、StringBuffer、StringBuilder的區(qū)別
String是不可變的志珍,如果嘗試去修改橙垢,會新?成?個字符串對象,StringBuffer和StringBuilder是可變的
StringBuffer是線程安全的伦糯,StringBuilder是線程不安全的柜某,所以在單線程環(huán)境下StringBuilder效率會更?
==和equals?法的區(qū)別
- ==:如果是基本數(shù)據(jù)類型,?較是值敛纲,如果是引?類型喂击,?較的是引?地址
- equals:具體看各個類重寫equals?法之后的?較邏輯,?如String類淤翔,雖然是引?類型翰绊,但是String類中重寫了equals?法,?法內(nèi)部?較的是字符串中的各個字符是否全部相等旁壮。
1辞做、重載和重寫的區(qū)別
2、List和Set的區(qū)別
3寡具、ArrayList和LinkedList區(qū)別
4、談?wù)凜oncurrentHashMap的擴(kuò)容機(jī)制稚补,答案解析童叠。
5、Jdk1.7到Jdk1.8 HashMap 發(fā)?了什么變化(底層)?
6、說?下HashMap的Put?法
7厦坛、深拷?和淺拷?
8五垮、HashMap的擴(kuò)容機(jī)制原理
9、CopyOnWriteArrayList的底層原理是怎樣的
10杜秸、什么是字節(jié)碼放仗?采?字節(jié)碼的好處是什么?
11撬碟、Java中的異常體系是怎樣的
12诞挨、在Java的異常處理機(jī)制中,什么時(shí)候應(yīng)該拋出異常呢蛤,什么時(shí)候捕獲異常惶傻?
13、Java中有哪些類加載器
14其障、說說類加載器雙親委派模型
15银室、JVM中哪些是線程共享區(qū)
16、你們項(xiàng)?如何排查JVM問題
17励翼、?個對象從加載到JVM蜈敢,再到被GC清除,都經(jīng)歷了什么過程汽抚?
18抓狭、怎么確定?個對象到底是不是垃圾?
19殊橙、JVM有哪些垃圾回收算法辐宾?
20、什么是STW膨蛮?
21叠纹、JVM參數(shù)有哪些?
22敞葛、說說對線程安全的理解
23誉察、對守護(hù)線程的理解
24、ThreadLocal的底層原理
25惹谐、并發(fā)持偏、并?、串?之間的區(qū)別
26氨肌、Java死鎖如何避免鸿秆?
27、線程池的底層?作原理
28怎囚、線程池為什么是先添加列隊(duì)?不是先創(chuàng)建最?線程卿叽?
29、ReentrantLock中的公平鎖和?公平鎖的底層實(shí)現(xiàn)
30、ReentrantLock中tryLock()和lock()?法的區(qū)別
31考婴、CountDownLatch和Semaphore的區(qū)別和底層原理
32贩虾、Sychronized的偏向鎖、輕量級鎖沥阱、重量級鎖
33缎罢、Sychronized和ReentrantLock的區(qū)別
34、談?wù)勀銓QS的理解考杉,AQS如何實(shí)現(xiàn)可重?鎖策精?
35、談?wù)勀銓OC的理解
36奔则、單例Bean和單例模式
37蛮寂、Spring事務(wù)傳播機(jī)制
38、Spring事務(wù)什么時(shí)候會失效?
39易茬、Spring中的Bean創(chuàng)建的?命周期有哪些步驟
40酬蹋、Spring中Bean是線程安全的嗎
41、ApplicationContext和BeanFactory有什么區(qū)別
42抽莱、Spring中的事務(wù)是如何實(shí)現(xiàn)的
43范抓、Spring中什么時(shí)候@Transactional會失效
44、Spring容器啟動流程是怎樣的
45食铐、Spring?到了哪些設(shè)計(jì)模式
46匕垫、Spring Boot中常?注解及其底層實(shí)現(xiàn)
47、Spring Boot是如何啟動Tomcat的
48虐呻、Mybatis的優(yōu)缺點(diǎn)
49象泵、#{}和${}的區(qū)別是什么?
50斟叼、索引的基本原理
51偶惠、索引設(shè)計(jì)的原則?
52朗涩、事務(wù)的基本特性和隔離級別
53忽孽、什么是MVCC
54、簡述MyISAM和InnoDB的區(qū)別
55谢床、Explain語句結(jié)果中各個字段分表表示什么
56兄一、索引覆蓋是什么
57、最左前綴原則是什么
58识腿、Innodb是如何實(shí)現(xiàn)事務(wù)的
59出革、B樹和B+樹的區(qū)別,為什么Mysql使?B+樹
60渡讼、Mysql鎖有哪些蹋盆,如何理解
61费薄、Mysql慢查詢該如何優(yōu)化?
62栖雾、什么是RDB和AOF
63、Redis的過期鍵的刪除策略
64伟众、簡述Redis事務(wù)實(shí)現(xiàn)
65析藕、Redis 主從復(fù)制的核?原理
66、Redis有哪些數(shù)據(jù)結(jié)構(gòu)凳厢?分別有哪些典型的應(yīng)?場景账胧?
67、Redis分布式鎖底層是如何實(shí)現(xiàn)的先紫?
68治泥、Redis主從復(fù)制的核?原理
69、Redis集群策略
70遮精、緩存穿透居夹、緩存擊穿、緩存雪崩分別是什么
71本冲、Redis和Mysql如何保證數(shù)據(jù)?致
72准脂、Redis的持久化機(jī)制
73、Redis單線程為什么這么快
74檬洞、什么是CAP理論
75狸膏、什么是BASE理論
76、什么是RPC
77添怔、數(shù)據(jù)?致性模型有哪些
78湾戳、分布式ID是什么?有哪些解決?案广料?
79砾脑、分布式鎖的使?場景是什么?有哪些實(shí)現(xiàn)?案性昭?
80拦止、什么是分布式事務(wù)?有哪些實(shí)現(xiàn)?案糜颠?
81汹族、什么是ZAB協(xié)議
82、為什么Zookeeper可以?來作為注冊中?
83其兴、Zookeeper中的領(lǐng)導(dǎo)者選舉的流程是怎樣的顶瞒?
84、Zookeeper集群中節(jié)點(diǎn)之間數(shù)據(jù)是如何同步的
85元旬、Dubbo?持哪些負(fù)載均衡策略
86榴徐、Dubbo是如何完成服務(wù)導(dǎo)出的守问?
87、Dubbo是如何完成服務(wù)引?的坑资?
88耗帕、Dubbo的架構(gòu)設(shè)計(jì)是怎樣的?
89袱贮、負(fù)載均衡算法有哪些
90仿便、分布式架構(gòu)下,Session 共享有什么?案
91攒巍、如何實(shí)現(xiàn)接?的冪等性
92嗽仪、簡述zk的命名服務(wù)、配置管理柒莉、集群管理
93闻坚、講下Zookeeper中的watch機(jī)制
94、Zookeeper和Eureka的區(qū)別
95兢孝、存儲拆分后如何解決唯?主鍵問題
96窿凤、雪花算法原理
97、如何解決不使?分區(qū)鍵的查詢問題
98西潘、Spring Cloud有哪些常?組件卷玉,作?是什么?
99喷市、如何避免緩存穿透相种、緩存擊穿、緩存雪崩品姓?
100寝并、分布式系統(tǒng)中常?的緩存?案有哪些
101、緩存過期都有哪些策略腹备?
102衬潦、常?的緩存淘汰算法?
總結(jié)
java只是一個工具植酥;應(yīng)用必不可少镀岛,但是基礎(chǔ)知識是安身立命以及決定自己上限的東西,雖然是為了應(yīng)付面試官友驮,但是最重要的還是看自己技術(shù)底層是否鞏固漂羊,這樣才能逐步的提升自己的技術(shù)能力。
如果基礎(chǔ)知識比較扎實(shí)了卸留,可以看看網(wǎng)絡(luò)上的面試經(jīng)驗(yàn)走越,找找自己不會的知識點(diǎn),查漏補(bǔ)缺耻瑟。也祝大家都能拿到心儀的offer旨指!