我的問題備忘錄

前言

以下是我收集的一些問題,有的是網上摘錄的,有的是自己參加面試被問到的,有的是工作或學習時遇到的,等等。

為什麼要記錄這些呢?

一方面,我相信,這樣做對我自己的技術提升是有幫助的。在全文結構上我盡量使問題連貫地形成知識體系,而不是堆積的碎片,而且,每個問題我會盡量地給出答案。

另一方面,我希望,有大佬可以指出我的錯誤。因為我的答案不一定對,尤其那些帶 * 的問題。

這份資料將會持續更新,如果有其他問題也可以留言討論。歡迎交流,共同進步。

修改時間 版本 修改人 修改內容
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