一、基本 1.hashmap: 1.1 轉紅黑樹條件: a.數組長度大於等於64(預設16,要經過2次擴容--當達到16*預設擴容因數0.75=12就擴容) b.鏈表長度大於8 1.2 hashmap先計算hash值,再用hash值計算下標。 2.sleep與await: 1.1 sleep是線程方 ...
一、基本
1.hashmap:
1.1 轉紅黑樹條件:
a.數組長度大於等於64(預設16,要經過2次擴容--當達到16*預設擴容因數0.75=12就擴容)
b.鏈表長度大於8
1.2 hashmap先計算hash值,再用hash值計算下標。
2.sleep與await:
1.1 sleep是線程方法,await是object方法
1.2 sleep不會釋放鎖,而await會
1.3 sleep不依賴於同步器synchronize,而await要
1.4 sleep不需要被喚醒,而await要
3.hashtable與hashmap:
1.1 前者線程安全,而後者不是
1.2 前者不可以把null作為key,而後者可以,並放在第一個節點上
1.3 兩者擴容因數預設都是0.75;前者初始容量為11,擴容是當前容量2+1;後者初始容量是16,擴容是當前容量2
4.cookie與session的區別:
前者cookie:
存放在客戶端瀏覽器中;
大小受限制,單個不超過4K,一般1個站點最多保存20個;
String類型;
不太安全(可以加密)
後者sessiono:
存放在伺服器中;
大小一般不受限制;
Key-Value(Object類型);
安全性更高;
二、JVM
4.用戶線程與記憶體線程:
1.1 多對一:不需要切換,線程創建、調度、同步非常快;但是如果其中一個用戶線程阻塞會造成其他線程無法執行,且無法像內核線程一樣實現較完整的調度、優先順序;
1.2 一對一:java的jvm幾乎把所有對線程的操作都交給了系統內核操作,線程真正啟動順序不一定是按我們啟動的順序,會引起用戶態和內核態的頻繁切換;如果系統出現大量線程,回家降低系統性能。
5.運行時數據區:
6.記憶體回收:
7.記憶體溢出:
1.1 棧溢出
1.2 堆溢出
》
》第8行設置會在堆溢出會導出Damping日誌
1.3 方法區溢出
1.4 本機直接記憶體溢出
8.記憶體泄漏:
1.1 不使用的記憶體,卻沒有被釋放;
1.2 每一次請求進來或者每一次操作處理都分配了記憶體,卻有部分不能回收(或未釋放),隨著請求越來越多,記憶體泄漏就會越來越嚴重,必然造成記憶體溢出。
1.3 記憶體泄漏一般是資源管理問題或者程式bug,記憶體溢出則是記憶體空間不足和記憶體泄漏的最終結果。
9.hotspot對象頭包含哪些部分:
10.根據類分析對象的記憶體占用:
11.jvm啟動參數:在哪裡配?
12.堆空間最大值設置:
13.G1垃圾收集器特點:
1.空間整合:哪塊垃圾最多優先清理
2.多線程+併發+可預測停頓
14.排查OOM的方法:
14.jvm的相關命令工具:
15.java8預設垃圾收集器:
16.並行垃圾收集器:
17.swt:
安全點:方法調用、迴圈跳轉、異常跳轉;設置標誌位,並不斷輪詢,主動停止。
17.cpu使用率飆升,怎麼排查?
先通過top命令找到cpu使用率高的線程;top -p 進程號;該界面輸入H查找最高cpu的線程;執行jstack 進程號做dump輸出線程信息; 同時根據線程的16進位找到對應的堆信息,然後再找出對應的代碼
6、最後根據線程信息定位到具體代碼
18.垃圾回收器的三色標記:
19.類載入、類載入器:
三、消息中間件
1.為什麼用rocketmq:
3.各種消息列隊:
4.mq的消息重覆:
5.mq的消息重覆:
4.解決MQ重覆消息:
6.roketmq性能優化:
四、緩存
1.Redis概念:
Nosql,C編寫,包含多種數據結構(字元串、列表、集合、散列表、有序集合),支持網路,基於記憶體還能持久化性能高效每秒可以處理超過10萬次讀寫操作,遵守BSD協議,支持分散式易拓展、支持多種語言的k-v存儲資料庫。
2.Redis數據類型:
2.Redis與Memcached區別:
3.Redis的應用場景:
4.Redis為什麼速度:
5.為什麼用Redis而不用map/guava做緩存:
6.Redis的持久化機制:
7.如何保持緩存與資料庫雙寫時一致:
8.緩存穿透:
五、併發編程
1.線程與進程的區別:
2.多線程中的上下文切換:
3.java記憶體模型:
4.原子操作,JUC中原子操作類有哪些:
5.CAS操作及缺點:
6.java中的volatile變數作用:
7.volatile和atomic變數區別:
8.lock介面與synchronized區別:
9.樂觀鎖和悲觀鎖的理解及實現:
10.死鎖:
11.callable及future:
13.futureTask的底層原理:
14.阻塞隊列及實現原理:
15.不可變對象對併發應用的幫助
16.生產消費者模型作用:
17.copyOnWriteArrayList應用場景:
18.java單例:
19.雙重檢查鎖定DCL的單例:
20.AQS:
wait、notify、notifyAll為什麼不在thread類中:
六、分散式
1.分散式冪等性介面設計:
2.分散式session方案:
3.分散式事務:
4.ZAB協議:
5.Zookeeper和Redis區別:
6.Zookeepr節點宕機處理:
7.Zookeeper四種類型數據節點:
8.Dubbo和cloud區別:
9.Dubbo協議:
七、資料庫
1.mysql存儲引擎:
2.innodb與myisam區別:
3.表設計欄位選擇:
4.mysql的varchar(M)最多存儲數據:
5.事務基本特性:
6.事務併發引發問題:
7.mysql索引:
8.三星索引:
9.innodb一顆b+樹存放可以存放多少行數據:
10.如何提高insert性能:
11.全局鎖、共用鎖、排他鎖:
12.mysql死鎖:
以上主要參考:https://www.bilibili.com/video/BV1vu41197Np?p=4&spm_id_from=pageDri隨心所往,看見未來。Follow your heart,see night!
歡迎點贊、關註、留言,一起學習、交流!