我的問題備忘錄
前言
以下是我收集的一些問題,有的是網上摘錄的,有的是自己參加面試被問到的,有的是工作或學習時遇到的,等等。
為什麼要記錄這些呢?
一方面,我相信,這樣做對我自己的技術提升是有幫助的。在全文結構上我盡量使問題連貫地形成知識體系,而不是堆積的碎片,而且,每個問題我會盡量地給出答案。
另一方面,我希望,有大佬可以指出我的錯誤。因為我的答案不一定對,尤其那些帶 * 的問題。
這份資料將會持續更新,如果有其他問題也可以留言討論。歡迎交流,共同進步。
| 修改時間 | 版本 | 修改人 | 修改內容 |
|---|---|---|---|
| 2022-05-02 | 1.0.0 | ZhangZiSheng001 | 初始化 |
JDK
JVM
class文件的組成
運行時數據區
CompressedClassSpace是幹嘛用的
運行時常量池和字元串常量池的區別
Minor GC、Major GC和Full GC的區別
一次完整的GC流程是怎樣的
什麼時候觸發major gc
分配擔保機制
對象什麼時候晉陞到老年代
垃圾回收演算法
幾種垃圾回收器
怎麼手動觸發gc
新生代和老年代比例多大比較好*
字元串常量池會gc嗎
MetaSpace會gc嗎
項目里用到的JVM參數
項目中JVM調優的例子*
運行時能不能調整堆大小*
類載入器
類的載入過程
什麼是雙親委派機制
為什麼要有多個類載入器
為什麼會有雙親委派機制
為什麼破壞雙親委派機制
Class.forName和ClassLoader.loadClass的區別
自定義java.lang.String可以嗎
JUC
執行緒和進程的區別
執行緒的狀態
如何中止一個執行緒
非同步執行緒的異常怎麼處理*
執行緒池
Executors的幾種執行緒池
執行緒池的關閉方式
你們項目怎麼用執行緒池*
執行緒池設置多大合適*
ThreadLocal有什麼用
使用ThreadLocal需要注意的問題
volatile的作用
什麼是樂觀鎖、悲觀鎖
CAS的作用
CAS的缺點
什麼是 AQS
什麼是獨佔鎖、共享鎖
什麼是公平鎖、非公平鎖
synchronized原理、優化
CyclicBarrier與CountDownLatch區別
三種等待/喚醒的使用和區別
Object.notify和Condition.signal是隨機喚醒執行緒嗎
如何保證多個執行緒順序執行
用三個執行緒按順序循環列印abc三個字母
不sleep(0)和sleep(0)的區別
容器
常見容器
為什麼HashMap的數組是2的n次方
為什麼鏈表大於8且size大於64才轉紅黑樹*
紅黑樹轉回鏈表的閾值為什麼是6不是8
擴容因子為什麼是0.75
HashMap和ConcurrentHashMap的區別
TreeMap的使用場景*
ConcurrentHashMap為什麼放棄分段鎖
DelayQueue的原理
Collections.synchronizedMap本質
異常
Error和Exception的區別
RuntimeException和其他Exception的區別*
其他
String.length() 總是可靠嗎
static方法可以重寫嗎
類的實例化順序
redis
為什麼要使用快取
為什麼要使用redis
redis為什麼快
redis為什麼使用單執行緒
為什麼redis6.0又用了多執行緒
redis的數據結構
redis還可以做什麼
redis掛了怎麼辦
持久化
項目中使用哪種持久化?為什麼
怎麼讓redis不掛
高可用架構
為什麼Cluster模式不用一致性哈希,而是用哈希槽
怎麼解決一致性問題*
選舉原理
過期策略
淘汰策略
使用時需要注意的問題
快取穿透、快取擊穿、快取雪崩、熱key
雙寫不一致問題
分散式鎖
redission分散式鎖原理
如何避免多客戶端獲得同一把鎖
其他
超時時間設置的依據*
如何實現一個列表中元素不同過期時間
mysql
為什麼要用資料庫
為什麼要用mysql*
關係型資料庫和非關係型的區別
SQL和NOSQL怎麼選擇
讀寫的高效
為什麼查詢那麼快
什麼是B+樹
hash索引和B+樹索引的區別
聚簇索引和非聚簇索引
組合索引生效規則
複合索引的索引樹是怎樣的*
怎麼判斷索引是否生效
重複性高的欄位都不能加索引嗎
項目中有沒遇到慢查詢?怎麼辦
sql的執行順序
exists和in的區別
count(*)、count(欄位) 和count(1)區別
為什麼select count(*)在myisam比Innodb快
事務、鎖
事務的本質
臟讀、不可重複讀、幻讀的原因和解決方案
什麼是MVCC
RR級別能否解決幻讀
gap鎖和next-key鎖的關係
next-key的一些示例
為什麼要有意向鎖
MyISAM 和 InnoDB 的區別
如何解決死鎖*
MVCC下delete的數據會一直存在嗎
高可用
為什麼分庫分表
怎麼分庫分表
分庫分表組件
主從複製方式
mysql 的高可用方案*
主從不一致怎麼解決
其他
canal*
隊列
為什麼使用隊列
為什麼要用RabbitMQ*
項目里怎麼用的
它的架構
AMQP的協議模型
兩種模式
四種交換機
routingkey和bindingkey的區別
需要考慮的問題
如何保證消息有序*
如何保證消息不丟失
怎麼保證消費冪等性
如何避免隊列消息積壓
如何做延遲隊列
重回隊列的消息排在哪裡
高可用
高可用方案
其他
生產者創建隊列還是消費者創建隊列
死信交換(DLX)和死信隊列(DLQ)
推模式和拉模式
spring
IOC和DI的理解
beanFactory和applicationContext的區別
如何解決循環依賴
什麼情況會出現無法解析的循環依賴?為什麼
bean的生命周期
事務傳播機制
Spring Cloud中feign、ribbon和hystrix的超時時間
springboot自動裝配的過程
微服務
為什麼要用微服務
為什麼要使用集群而不是更好的單機
什麼是CAP
什麼是Service Mesh*
什麼是降級
幾種限流演算法
分散式事務*
分散式id
oauth2.0
eureka、ribbon、hystrix是如何配合的*
你們項目的日活、qps是多少
怎麼統計qps
正向代理和反向代理的區別
如何實現熱部署*
你們項目的監控告警
Counter、Gauge、Summary、Histogram的區別
鏈路
作業系統
Linux的IO模型
reactor模型
epoll和poll的區別
平時用到的Linux命令
一個進程最多可以創建多少執行緒
故障排查
為什麼 java 程式的記憶體溢出往往伴隨著 CPU 爆表
CPU爆表的排查
記憶體高的排查
線上系統突然變得異常緩慢,如何排查*
網路
網路:集線器、交換機、路由器
TCP三次握手
TCP四次揮手
TCP四次揮手為什麼要等待2msl
http和https的區別
HTTP狀態碼
當你用瀏覽器打開一個鏈接的時候,電腦做了哪些工作步驟
如何避免瀏覽器快取
如何理解HTTP協議的無狀態性
HTTP的不同method
演算法
雪花演算法
雪花演算法如何解決時鐘回撥
一致性哈希演算法
對稱加密、非對稱加密演算法
時間輪演算法
解決hash衝突的方法
paxos演算法*
raft演算法*
設計
設計模式
手寫單例模式
代理模式和裝飾模式的區別
面向對象設計的原則
如何設計一個良好的API
資料庫設計的三大範式
開發、設計中遇到的問題或挑戰
什麼是MVC
場景題
實現:搶紅包
實現:掃碼登錄
實現:秒殺*
實現:多少人在看這篇文章*
實現:瀏覽過這篇文章的還瀏覽了
實現:附近的人
實現:五億數據,找出數量top100
實現:並發安全的鏈表*
實現:30分鐘沒付款就自動關閉交易
實現:分散式環境下的countDownLatch
其他
長鏈接轉短鏈接的原理
tomcat的並發控制參數
結語
感謝閱讀。
打賞支援 ~
本文為原創文章,轉載請附上原文出處鏈接://www.cnblogs.com/ZhangZiSheng001/p/16218179.html
