前言
以下是我收集的一些問題,有的是網上摘錄的,有的是自己參加面試被問到的,有的是作業或學習時遇到的,等等,
為什么要記錄這些呢?
一方面,我相信,這樣做對我自己的技術提升是有幫助的,在全文結構上我盡量使問題連貫地形成知識體系,而不是堆積的碎片,而且,每個問題我會盡量地給出答案,
另一方面,我希望,有大佬可以指出我的錯誤,因為我的答案不一定對,尤其那些帶 * 的問題,
這份資料將會持續更新,如果有其他問題也可以留言討論,歡迎交流,共同進步,
| 修改時間 | 版本 | 修改人 | 修改內容 | 問題答案 |
|---|---|---|---|---|
| 2022-05-02 | 1.0.0 | ZhangZiSheng001 | 初始化 | 我的面試題備忘錄1.0.0.pdf |
JDK
JVM
class檔案的組成結構
說說JVM的運行時資料區
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為什么使用單執行緒
為什么redis6.0又用了多執行緒
說說redis的資料結構
redis還可以做什么
redis有哪種持久化
專案中使用哪種持久化?為什么
說說redis的高可用架構
為什么Cluster模式不用一致性哈希,而是用哈希槽
怎么解決一致性問題*
redis的過期策略
redis的淘汰策略
快取穿透、快取擊穿、快取雪崩、熱key
如何解決雙寫不一致問題
說說分布式鎖原理
如何避免多客戶端獲得同一把鎖
超時時間大小設定的依據是什么*
如何實作一個串列中元素不同過期時間
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的主從復制方式
mysql的高可用方案*
主從不一致怎么解決
佇列
為什么使用佇列
為什么要用RabbitMQ*
專案里怎么用的
AMQP的協議模型
RabbitMQ的兩種模式
RabbitMQ的四種交換機
routingkey和bindingkey的區別
如何保證訊息有序*
如何保證訊息不丟失
怎么保證消費冪等性
如何避免佇列訊息積壓
如何做延遲佇列
重回佇列的訊息排在哪里
RabbitMQ的高可用方案
生產者創建佇列還是消費者創建佇列
死信交換(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四次揮手為什么要等待2msl
http和https的區別
說幾個HTTP狀態碼
當你用瀏覽器打開一個鏈接的時候,計算機做了哪些作業步驟
如何避免瀏覽器快取
如何理解HTTP協議的無狀態性
HTTP有哪幾種method
演算法
雪花演算法
雪花演算法如何解決時鐘回撥
一致性哈希演算法
對稱加密、非對稱加密演算法
時間輪演算法
解決hash沖突的方法
paxos演算法*
raft演算法*
設計
設計模式
手寫單例模式
代理模式和裝飾模式的區別
面向物件設計的原則
如何設計一個良好的API
資料庫設計的三大范式
開發、設計中遇到的問題或挑戰
什么是MVC
場景題
實作:搶紅包
實作:掃碼登錄
實作:秒殺*
實作:多少人在看這篇文章*
實作:瀏覽過這篇文章的還瀏覽了
實作:附近的人
實作:五億資料,找出數量top100
實作:并發安全的鏈表*
實作:30分鐘沒付款就自動關閉交易
實作:分布式環境下的countDownLatch
其他
長鏈接轉短鏈接的原理
tomcat的并發控制引數
結語
感謝閱讀,
打賞支持 ~
微信|支付寶
分層,抽象,高內聚,低耦合本文為原創文章,轉載請附上原文出處鏈接:https://www.cnblogs.com/ZhangZiSheng001/p/16218179.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/469576.html
標籤:Java
