![秋招我憑這份《面試筆記》拿下阿里,京東,美團等11家大廠的offer](http://p2.ttnews.xyz/loading.gif)
一、Java 基礎
1. JDK 和 JRE 有什麼區別?
2.== 和 equals 的區別是什麼?
== 既可以運用於基本數據類型,也可以運用於引用數據類型,對於基本數據類型,很簡單,比較的就是數值是否相等。而對應引用數據類型,比較的其實就是兩個對象的地址值是否相等,也就是看兩個對象是否是同一個對象。
equals 只能運用於引用數據類型,不能運用於基本數據類型。
一般在String類中,他底層是重寫了equals方法的,將字符串變成了字符數組,然後一個字符一個字符的比較。在其他Object類中並沒有重寫equals方法,所以比較的是地址值,但是比較地址值又沒有意思,所以我們需要重寫equals方法,然後比較兩個對象中內容是否相等。舉個例子吧。一個User對象,成員變量姓名,年齡,然後創建一個user1,姓名小明,年齡18,另一個user2,姓名小明,年齡18。然後user1.equals(user2)。如果我們在User實體類中並沒有重寫equals方法,很顯然,結果為false,如果我們重寫了equals方法,結果為true。
3.兩個對象的 hashCode()相同,則 equals()也一定為 true,對嗎?
不一定,比如“通話”和“重地”的hashcode值相同,但是返回false
4.final 在 java 中有什麼作用?
5.java 中的 Math.round(-1.5) 等於多少?
四捨五入取整(在本來值的基礎上加上0.5,再取向下取整)
6.String 屬於基礎的數據類型嗎?
java中基礎數據類型只有8種:
byte,short,int,long,double,float,char,boolean
7.java 中操作字符串都有哪些類?它們之間有什麼區別?
StringBuilder和StringBuffer,後者是線程安全(記憶方法:builder只是高樓,而buffer相當於給樓加了一層外套,所以線程安全)
8.String str="i"與 String str=new String("i")一樣嗎?
不一樣,前者是常量池一個常量,後者會新建一個對象
9.如何將字符串反轉?
直接調用
把字符串轉換成字符數組倒序拼接然後返回值(調用inverse()方法)
10.String 類的常用方法都有那些?
11.抽象類必須要有抽象方法嗎?
不一定,但是有抽象方法的一定是抽象類
12.普通類和抽象類有哪些區別?
- a.抽象類不能被實例化。
- b.抽象類可以有構造函數,被繼承時子類必須繼承父類一個構造方法,抽象方法不能被聲明為靜態。
- c.抽象方法只需申明,而無需實現,抽象類中可以允許普通方法有主體
- d.含有抽象方法的類必須申明為抽象類
- e.抽象的子類必須實現抽象類中所有抽象方法,否則這個子類也是抽象類。
13.抽象類能使用 final 修飾嗎?
不能
14.接口和抽象類有什麼區別?
- a.抽象類和接口都不能直接實例化,如果要實例化,抽象類變量必須指向實現所有抽象方法的子類對象,接口變量必須指向實現所有接口方法的類對象。
- b.抽象類要被子類繼承,接口要被類實現。
- c.接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實現
- d.接口裡定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。
- e.抽象類裡的抽象方法必須全部被子類所實現,如果子類不能全部實現父類抽象方法,那麼該子類只能是抽象類。同樣,一個實現接口的時候,如不能全部實現接口方法,那麼該類也只能為抽象類。
- f.抽象方法只能申明,不能實現,接口是設計的結果 ,抽象類是重構的結果
- g.抽象類裡可以沒有抽象方法
- h.如果一個類裡有抽象方法,那麼這個類只能是抽象類
- i.抽象方法要被實現,所以不能是靜態的,也不能是私有的。
- j.接口可繼承接口,並可多繼承接口,但類只能單根繼承。
- k.從JDk1.8開始,接口中可以定義default修飾的默認方法
- l.從jdk1.9開始,接口中可以定義private修飾的方法,但是隻能在接口中調用
15.java 中 IO 流分為幾種?
16.BIO、NIO、AIO 有什麼區別?
- BIO,同步阻塞式IO,簡單理解:一個連接一個線程——你到飯館點餐,然後在那等著,還要一邊喊:好了沒啊!
- NIO,同步非阻塞IO,簡單理解:一個請求一個線程——在飯館點完餐,就去遛狗了。不過溜一會兒,就回飯館喊一聲:好了沒啊!
- AIO,異步非阻塞IO,簡單理解:一個有效請求一個線程——飯館打電話說,我們知道您的位置,一會給你送過來,安心遛狗就可以了。
17.Files的常用方法都有哪些?
- createNewFile():在指定位置創建一個空文件,成功就返回true,如果已存在就不創建,然後返回false。
- mkdirs() 在指定位置創建一個多級文件夾。
- mkdir() 在指定位置創建一個單級文件夾。
- delete() 刪除文件或者一個空文件夾,不能刪除非空文件夾,馬上刪除文件,返回一個布爾值。
- exists() 文件或文件夾是否存在。
- isFile() 是否是一個文件,如果不存在,則始終為false。
- isDirectory() 是否是一個目錄,如果不存在,則始終為false。
![秋招我憑這份《面試筆記》拿下阿里,京東,美團等11家大廠的offer](http://p2.ttnews.xyz/loading.gif)
二、容器
18.java 容器都有哪些?
19.Collection 和 Collections 有什麼區別?
- Collection 是一個集合接口,List,Set,Queue繼承自Collection;
- Collections是一個工具類,包含有各種有關集合操作的靜態方法
20.List、Set、Map 之間的區別是什麼?
list和set屬於collection接口的子接口,list存儲的數據有序,可重複,可用普通for循環遍歷,實現類一般有:vector(線程安全),arrayList(底層數據結構為數組(查詢快,增刪慢,),線程不安全)
- List:列表;
- Set:集合;
- Map:映射;
21.HashMap 和 Hashtable 有什麼區別?
- HashTable先出來;
- HashMap允許空鍵空值,因此線程不安全,非synchronized,只有一個線程訪問的情況下,效率較高;
- Hashtable繼承自Dictionary類,而HashMap繼承自AbstractMap類。但二者都實現了Map接口;
- HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。因為contains方法容易讓人引起誤解。
- 兩個遍歷方式的內部實現上不同。Hashtable、HashMap都使用了Iterator。而由於歷史原因,Hashtable還使用了Enumeration的方式
22.如何決定使用 HashMap 還是 TreeMap?
如果需要在map中進行插入、刪除、定位元素這些操作,HashMap是最好的選擇。如果只需要對一個有序的key集合進行遍歷,TreeMap是更好的選擇
23.說一下 HashMap 的實現原理?
通過hash的方法,通過put和get存儲和獲取對象。存儲對象時,我們將K/V傳給放方法時,它調用hashCode計算hash從而得到到bucket位置,進一步存儲,HashMap會根據當前桶的佔用情況自動調整容量(超過LoadFactor則resize為原來的2倍)。獲取對象時,我們將K傳給get,它調用hashCode計算hash從而得到到bucket位置,並進一步調用equals()方法確定鍵值對。如果發生碰撞的時候,Hashmap通過鏈表將產生碰撞衝突的元素組織起來,在Java8中,如果一個桶中碰撞衝突的元素超過某個限制(默認是8),則使用紅黑樹來替換鏈表,從而提高速度。
24.說一下 HashSet 的實現原理?
HashSet 的內部採用 HashMap來實現。由於 Map 需要 key 和 value,所以HashSet中所有 key 的都有一個默認 value。類似於HashMap,HashSet 不允許重複的 key,只允許有一個null key,意思就是 HashSet 中只允許存儲一個 null 對象。
25.ArrayList 和 LinkedList 的區別是什麼?
ArrayList底層是數組,每個元素對應有數組下標,因此能查詢效率快,而增加刪除效率慢,因為數組每個元素的位置都需要向後移動;
而LinkedList底層是鏈表,每個元素有一個起始位置,一個結束位置,這個元素的結束位置指向下一個元素的起始位置。因此增加刪除效率快,只需要將指向位置開邊即可,而查詢效率慢,需要遍歷所有元素。
26.如何實現數組和 List 之間的轉換?
- List->數組:List.toArray
- Set->數組:Set.toArray
27.ArrayList 和 Vector 的區別是什麼?
- Vector線程安全,效率較低
- 當元素超過它的初始大小時,Vector會將它的容量翻倍,而ArrayList只增加50%的大小,這樣,ArrayList就有利於節約內存空間。
28.Array 和 ArrayList 有何區別?
Array:數組
- Array可以包含基本類型和引用類型,ArrayList只能包含對象類型。
- 數組大小是固定的,ArrayList的大小是動態變化的。
- ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
- 數組是連續的存儲結構,List是不連續的存儲結構,每個節點都有一個Next屬性,記錄著下一個節點的地址。
- 如果插入、刪除操作頻繁時,使用List;需要大量查找操作時候,最好使用Array
- 給出個不太重要的補充,由於List需要存儲他下一個節點的地址,所以List 比Array相對起來浪費了更多的空間。
29.在 Queue 中 poll()和 remove()有什麼區別?
remove() 和 poll() 方法都是從隊列中刪除第一個元素。如果隊列元素為空,調用remove() 的行為與 Collection 接口的版本相似會拋出異常,但是新的 poll() 方法在用空集合調用時只是返回 null。因此新的方法更適合容易出現異常條件的情況。
30.哪些集合類是線程安全的?
Vector、HashTable、CocurrentHashMap
31.迭代器 Iterator 是什麼?
Iterator接口提供了很多對集合元素進行迭代的方法。每一個集合類都包括了可以返回迭代器實例的迭代方法。迭代器可以在迭代過程中刪除底層集合的元素,但是不可以直接調用集合的remove(Object obj)刪除,可以通過迭代器的remove()方法刪除
32.Iterator 怎麼使用?有什麼特點?
33.Iterator 和 ListIterator 有什麼區別?
- ListIterator有add()方法,可以向List中添加對象,而Iterator不能
- ListIterator和Iterator都有hasNext()和next()方法,可以實現順序向後遍歷,但是ListIterator有hasPrevious()和previous()方法,可以實現逆向(順序向前)遍歷。Iterator就不可以。
- ListIterator可以定位當前的索引位置,nextIndex()和previousIndex()可以實現。Iterator沒有此功能。
- ListIterator可以實現對象的修改 ->set()方法。Iterator僅能遍歷。
34.怎麼確保一個集合不能被修改?
Collections.unmodifiableMap(map);
三、多線程
35.並行和併發有什麼區別?
併發和並行的區別就是一個處理器同時處理多個任務和多個處理器或者是多核的處理器同時處理多個不同的任務。
來個比喻:併發和並行的區別就是一個人同時吃三個饅頭和三個人同時吃三個饅頭。
36.線程和進程的區別?
進程:程序的一次運行;
線程:進程中一個執行單元
線程沒有單獨的地址空間,共享進程的;
進程有單獨的地址空間
進程是有單獨的資源分配;
同一個進程內的線程共享該進程的資源
線程是處理器調度的基本單位,但進程不是
兩者均可併發執行
37.守護線程是什麼?
服務於其他線程的線程,其他線程沒有退出時,守護線程不會退出。例如GC線程就是最典型的守護線程。
38.創建線程有哪幾種方式?
- 繼承Thread類;
- 實現Runnable接口的run方法;
- 實現Callable接口的call方法,使用FutureTask類包裹Callable對象,再用Thread類包裹FutureTask對象,調用start方法;
- Java6之後,可以通過線程池來創建線程。
39.說一下 runnable 和 callable 有什麼區別?
相同點:
- 都是接口;
- 都可用來編寫多線程程序;
- 都需要調用Thread.start()來啟動線程;
不同點:
- Callable的call方法能返回執行結果,Runnable的run方法沒有返回結果;
- call()方法允許拋異常,run()方法的異常只能在內部消化,不能繼續上拋。
40.線程有哪些狀態?
- 新建(new)
- 可運行(runnable)
- 運行(running)
- 阻塞(blocked)
- 死亡(dead)
45.線程池都有哪些狀態?
1.running(運行)
- 狀態說明:線程池處在RUNNING狀態時,能夠接收新任務,以及對已添加的任務進行處理。
- 狀態切換:線程池的初始化狀態是RUNNING。換句話說,線程池被一旦被創建,就處於RUNNING狀態,並且線程池中的任務數為0!
2.shutdown
- 狀態說明:線程池處在SHUTDOWN狀態時,不接收新任務,但能處理已添加的任務。
3.stop
- 不接受新任務,不處理已添加任務,中斷正在處理的任務
4.tidying(整理,收拾)
當線程池在STOP狀態下,線程池中執行的任務為空時,就會由STOP -> TIDYING
5.terminated(終止)
線程池徹底終止
41.sleep() 和 wait() 有什麼區別?
- sleep()是Tread類的方法,wait()是Object類的方法;
- sleep()可以指定時間讓其醒過來,如果時間不到只能調用interrupt()來強行打斷,wait()可以用notify()直接喚起。
- 最重要的一點:sleep()後,程序並不會釋放同步鎖,wait()後,程序會釋放同步鎖。
42.notify()和 notifyAll()有什麼區別?
43.線程的 run()和 start()有什麼區別?
- start()才是真正啟動一條線程,無需等待run方法體代碼執行完畢就可以直接執行下面的代碼;
- run()當做普通方法的方式調用,程序還是要順序執行,要等待run方法體執行完畢後,才可以繼續執行後續代碼。程序中只有主線程這一個線程。
46.線程池中 submit()和 execute()方法有什麼區別?
- execute()只能提交一個Runnable的對象,沒有返回值
- submit()提交Callable對象,返回一個Future對象
- submit()方便異常處理
47.在 java 程序中怎麼保證多線程的運行安全?
synchronized,lock
48.多線程鎖的升級原理是什麼?
偏向鎖,輕量級鎖,重量級鎖。
49.什麼是死鎖?
由於兩個或者多個線程互相持有對方所需要的資源,導致線程一直處於等待狀態。
死鎖的產生是必須要滿足一些特定條件的:
- 互斥條件:一個資源同時只能被一個線程佔用;
- 請求和保持條件:一個進程阻塞時,不會放棄已獲得的資源。
- 不剝奪條件:資源沒有被線程釋放前,
- 循環等待條件:當發生死鎖時,所等待的進程必定會形成一個環路(類似於死循環),造成永久阻塞。
50.怎麼防止死鎖?
- 按照同一順序訪問對象
- 避免事務中的用戶交互
- 保持事務簡短並在一個批處理中
- 使用低隔離級別
51.ThreadLocal 是什麼?有哪些使用場景?
所謂ThreadLocal,簡單一點想,就是一個全局的Map,Map的key是當前線程對象,value是你要保存的對象。進入某個線程後,就可以從map中取得之前存儲的相應線程關聯的對象。當然,ThreadLocal並不是一個Map,但用Map來理解是沒有問題的
最常見的ThreadLocal使用場景為 用來解決數據庫連接、Session管理等
52.說一下 synchronized 底層實現原理?
同步方法和同步代碼塊底層都是通過monitor來實現同步的。
兩者的區別:同步方式是通過方法中的access_flags中設置ACC_SYNCHRONIZED標誌來實現;同步代碼塊是通過monitorenter和monitorexit來實現
我們知道了每個對象都與一個monitor相關聯。而monitor可以被線程擁有或釋放。
53.synchronized 和 volatile 的區別是什麼?
- volatile只能修飾變量,synchronized可以用在變量、方法、類上;
- volatile修飾的變量,如果某一個線程修改了該值,新值對其他線程立即可見;
- volatile僅能實現變量的修改可見性,並不能保證原子性,synchronized則可以保證變量的修改可見性和原子性
- volatile不會造成線程的阻塞,synchronized可能會造成線程的阻塞。
54.synchronized 和 Lock 有什麼區別?
- synchronized是java內置關鍵字,Lock是一個類
- synchronized無法判斷是否獲取到鎖,Lock可以判斷
- synchronized會自動釋放鎖,Lock需要手動釋放鎖,否則容易造成線程死鎖
- synchronized的鎖可重入、不可中斷、非公平,而Lock鎖可重入、可判斷、可公平
- Lock適合代碼量大的情況,synchronized適合代碼量少的情況
55.synchronized 和 ReentrantLock 區別是什麼?
56.說一下 atomic 的原理?
四、反射
57.什麼是反射?
指程序可以訪問、檢測和修改它本身狀態或者行為的一種能力
58.什麼是 java 序列化?什麼情況下需要序列化?
對象序列化是java的一個特徵,可以將對象寫作一組字節碼,當在其他位置讀到這些字節碼時,可以依此創建一個新的對象,而且新對象的狀態與原對象完全相同。
- 對象序列化可以實現分佈式對象。RMI(遠程調用方法)時,利用序列化運行遠程主機上的服務,就像在本地機上運行一樣
- java序列化會遞歸保存對象引用的每個對象的數據--“深複製”:即複製對象本身及引用的對象本身。
59.動態代理是什麼?有哪些應用?
當想給實現了某個接口的類中的方法,加一些額外的處理。例如加日誌、事務等。可以給這個類創建一個代理類,不禁包含原來類方法的功能,而且還在原來的基礎上添加了額外處理的功能。這個代理類並不是定義好的,是在運行時動態生成的。
Spring的AOP,事務,權限,日誌
60.怎麼實現動態代理?
兩個重要的類和接口:
- InvocationHandler(接口)
- Proxy(類)
五、對象拷貝
61.為什麼要使用克隆?
開發中多個地方需要共同引用和操作一個引用變量,但是引用指向的物理存儲堆地址是相同的,操作之間會互相影響。因此需要將操作的對象進行克隆,避免多操作帶來的相互影響。
62.如何實現對象克隆?
- 實現Cloneable接口並重寫Object類中的clone()方法;
- 實現Serializable接口,通過對象的序列化和反序列化實現克隆,可以實現真正的深度克隆
63.深拷貝和淺拷貝區別是什麼?
淺拷貝只複製了對象的引用地址;深拷貝將對象和值複製過來
六、Java Web
64.jsp 和 servlet 有什麼區別?
jsp本質就是servlet,
jvm只能識別java類,jsp頁面執行時候,web容器將jsp的代碼編譯成jvm能識別的java類
65.jsp 有哪些內置對象?作用分別是什麼?
1.request 用戶端請求
2.response 用戶端回應
3.pageContext 網頁的屬性在這裡管理
4.session 與請求有關會話期
5.application servlet正在執行的內容
6.out 用來傳送回應的輸出
7.config servlet的架構部件
8.page jsp網頁本身
9.exception 針對錯誤網頁,未捕捉的除外
66.說一下 jsp 的 4 種作用域?
application 在所有應用程序中有效
session 在當前會話中有效
request 在當前請求中有效
page 在當前頁面有效
67.session 和 cookie 有什麼區別?
- 存儲session保存在服務端,cookie保存在客戶端
- cookie保存的數據不能超過4k,session沒有大小限制
- cookie不安全,別人可以分析本地的cookie並進行cookie欺騙。用戶登錄這種場景應當使用session
- session會在一定時間內保存在服務器上,會佔用服務器的性能,如果併發量大的情況,應當使用cookie
68.說一下 session 的工作原理?
69.如果客戶端禁止 cookie 能實現 session 還能用嗎?
70.spring mvc 和 struts 的區別是什麼?
71.如何避免 sql 注入?
採用PreparedStatement預編譯SQL,PreparedStatement會將sql預先編譯好,執行階段只是把所有的輸入內容作為數據處理,不會再對sql語句進行解析。
72.什麼是 XSS 攻擊,如何避免?
73.什麼是 CSRF 攻擊,如何避免?
七、異常
74.throw 和 throws 的區別?
throws是用來聲明一個方法可能拋出的所有異常信息,放在方法體後面;
throw自己進行異常處理,處理時候有兩種方式,要麼使用try catch捕捉,要麼聲明拋出(throws Exception),throw一旦執行,程序會立刻轉入異常處理階段,後面的語句不再執行,並且所在的方法不再返回有意義的值。
75.final、finally、finalize 有什麼區別?
final可以用來修飾類、方法、變量
- 修飾類時候,表示類不能被繼承。(final類中所有的成員方法都會隱式的定義為final)
- 修飾方法的時候,繼承類無法對其更改
- 修飾變量,只能被賦值一次,無法再更改。
finally:異常處理的一部分,它只能用在try/catch語句塊之後,表示這段語句最終一定會被執行(不管是否拋出異常)
並不一定是一定會執行
76.try-catch-finally 中哪個部分可以省略?
77.try-catch-finally 中,如果 catch 中 return 了,finally 還會執行嗎?
78.常見的異常類有哪些?
讀者福利:我把本文所涉及到的209到Java面試筆記已經整理成了一份完整的PDF文件,面試筆記是免費分享給大家的,需要的朋友幫忙轉發一下,然後私信我【888】即可免費獲取!
八、網絡
- 79.http 響應碼 301 和 302 代表的是什麼?有什麼區別?
- 80.forward 和 redirect 的區別?
- 81.簡述 tcp 和 udp的區別?
- 82.tcp 為什麼要三次握手,兩次不行嗎?為什麼?
- 83.說一下 tcp 粘包是怎麼產生的?
- 84.OSI 的七層模型都有哪些?
- 85.get 和 post 請求有哪些區別?
- 86.如何實現跨域?
- 87.說一下 JSONP 實現原理?
九、設計模式
- 88.說一下你熟悉的設計模式?
- 89.簡單工廠和抽象工廠有什麼區別?
十、Spring/Spring MVC
- 90.為什麼要使用 spring?
- 91.解釋一下什麼是 aop?
- 92.解釋一下什麼是 ioc?
- 93.spring 有哪些主要模塊?
- 94.spring 常用的注入方式有哪些?
- 95.spring 中的 bean 是線程安全的嗎?
- 96.spring 支持幾種 bean 的作用域?
- 97.spring 自動裝配 bean 有哪些方式?
- 98.spring 事務實現方式有哪些?
- 99.說一下 spring 的事務隔離?
- 100.說一下 spring mvc 運行流程?
- 101.spring mvc 有哪些組件?
- 102.@RequestMapping 的作用是什麼?
- 103.@Autowired 的作用是什麼?
十一、Spring Boot/Spring Cloud
- 104.什麼是 spring boot?
- 105.為什麼要用 spring boot?
- 106.spring boot 核心配置文件是什麼?
- 107.spring boot 配置文件有哪幾種類型?它們有什麼區別?
- 108.spring boot 有哪些方式可以實現熱部署?
- 109.jpa 和 hibernate 有什麼區別?
- 110.什麼是 spring cloud?
- 111.spring cloud 斷路器的作用是什麼?
- 112.spring cloud 的核心組件有哪些?
十二、Hibernate
- 113.為什麼要使用 hibernate?
- 114.什麼是 ORM 框架?
- 115.hibernate 中如何在控制檯查看打印的 sql 語句?
- 116.hibernate 有幾種查詢方式?
- 117.hibernate 實體類可以被定義為 final 嗎?
- 118.在 hibernate 中使用 Integer 和 int 做映射有什麼區別?
- 119.hibernate 是如何工作的?
- 120.get()和 load()的區別?
- 121.說一下 hibernate 的緩存機制?
- 122.hibernate 對象有哪些狀態?
- 123.在 hibernate 中 getCurrentSession 和 openSession 的區別是什麼?
- 124.hibernate 實體類必須要有無參構造函數嗎?為什麼?
十三、Mybatis
- 125.mybatis 中 #{}和 ${}的區別是什麼?
- 126.mybatis 有幾種分頁方式?
- 127.RowBounds 是一次性查詢全部結果嗎?為什麼?
- 128.mybatis 邏輯分頁和物理分頁的區別是什麼?
- 129.mybatis 是否支持延遲加載?延遲加載的原理是什麼?
- 130.說一下 mybatis 的一級緩存和二級緩存?
- 131.mybatis 和 hibernate 的區別有哪些?
- 132.mybatis 有哪些執行器(Executor)?
- 133.mybatis 分頁插件的實現原理是什麼?
- 134.mybatis 如何編寫一個自定義插件?
十四、RabbitMQ
- 135.rabbitmq 的使用場景有哪些?
- 136.rabbitmq 有哪些重要的角色?
- 137.rabbitmq 有哪些重要的組件?
- 138.rabbitmq 中 vhost 的作用是什麼?
- 139.rabbitmq 的消息是怎麼發送的?
- 140.rabbitmq 怎麼保證消息的穩定性?
- 141.rabbitmq 怎麼避免消息丟失?
- 142.要保證消息持久化成功的條件有哪些?
- 143.rabbitmq 持久化有什麼缺點?
- 144.rabbitmq 有幾種廣播類型?
- 145.rabbitmq 怎麼實現延遲消息隊列?
- 146.rabbitmq 集群有什麼用?
- 147.rabbitmq 節點的類型有哪些?
- 148.rabbitmq 集群搭建需要注意哪些問題?
- 149.rabbitmq 每個節點是其他節點的完整拷貝嗎?為什麼?
- 150.rabbitmq 集群中唯一一個磁盤節點崩潰了會發生什麼情況?
- 151.rabbitmq 對集群節點停止順序有要求嗎?
十五、Kafka
- 152.kafka 可以脫離 zookeeper 單獨使用嗎?為什麼?
- 153.kafka 有幾種數據保留的策略?
- 154.kafka 同時設置了 7 天和 10G 清除數據,到第五天的時候消息達到了 10G,這個時候 kafka 將如何處理?
- 155.什麼情況會導致 kafka 運行變慢?
- 156.使用 kafka 集群需要注意什麼?
十六、Zookeeper
- 157.zookeeper 是什麼?
- 158.zookeeper 都有哪些功能?
- 159.zookeeper 有幾種部署模式?
- 160.zookeeper 怎麼保證主從節點的狀態同步?
- 161.集群中為什麼要有主節點?
- 162.集群中有 3 臺服務器,其中一個節點宕機,這個時候 zookeeper 還可以使用嗎?
- 163.說一下 zookeeper 的通知機制?
十七、MySql
- 164.數據庫的三範式是什麼?
- 165.一張自增表裡面總共有 7 條數據,刪除了最後 2 條數據,重啟 mysql 數據庫,又插入了一條數據,此時 id 是幾?
- 166.如何獲取當前數據庫版本?
- 167.說一下 ACID 是什麼?
- 168.char 和 varchar 的區別是什麼?
- 169.float 和 double 的區別是什麼?
- 170.mysql 的內連接、左連接、右連接有什麼區別?
- 171.mysql 索引是怎麼實現的?
- 172.怎麼驗證 mysql 的索引是否滿足需求?
- 173.說一下數據庫的事務隔離?
- 174.說一下 mysql 常用的引擎?
- 175.說一下 mysql 的行鎖和表鎖?
- 176.說一下樂觀鎖和悲觀鎖?
- 177.mysql 問題排查都有哪些手段?
- 178.如何做 mysql 的性能優化?
十八、Redis
- 179.redis 是什麼?都有哪些使用場景?
- 180.redis 有哪些功能?
- 181.redis 和 memecache 有什麼區別?
- 182.redis 為什麼是單線程的?
- 183.什麼是緩存穿透?怎麼解決?
- 184.redis 支持的數據類型有哪些?
- 185.redis 支持的 java 客戶端都有哪些?
- 186.jedis 和 redisson 有哪些區別?
- 187.怎麼保證緩存和數據庫數據的一致性?
- 188.redis 持久化有幾種方式?
- 189.redis 怎麼實現分佈式鎖?
- 190.redis 分佈式鎖有什麼缺陷?
- 191.redis 如何做內存優化?
- 192.redis 淘汰策略有哪些?
- 193.redis 常見的性能問題有哪些?該如何解決?
十九、JVM
- 194.說一下 jvm 的主要組成部分?及其作用?
- 195.說一下 jvm 運行時數據區?
- 196.說一下堆棧的區別?
- 197.隊列和棧是什麼?有什麼區別?
- 198.什麼是雙親委派模型?
- 199.說一下類加載的執行過程?
- 200.怎麼判斷對象是否可以被回收?
- 201.java 中都有哪些引用類型?
- 202.說一下 jvm 有哪些垃圾回收算法?
- 203.說一下 jvm 有哪些垃圾回收器?
- 204.詳細介紹一下 CMS 垃圾回收器?
- 205.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什麼區別?
- 206.簡述分代垃圾回收器是怎麼工作的?
- 207.說一下 jvm 調優的工具?
- 208.常用的 jvm 調優的參數都有哪些?
- 209.Java創建對象有哪幾種方式?
限於篇幅,我把本文所涉及到的209到Java面試筆記已經整理成了一份完整的PDF文件,面試筆記是免費分享給大家的,需要的朋友幫忙轉發一下,然後私信我【888】即可免費獲取!
閱讀更多 Java肖先生 的文章