前言
以下是我收集的一些問題,有的是網上摘錄的,有的是自己參加面試被問到的,有的是工作或學習時遇到的,等等。
爲什麼要記錄這些呢?
一方面,我相信,這樣做對我自己的技術提升是有幫助的。在全文結構上我儘量使問題連貫地形成知識體系,而不是堆積的碎片,而且,每個問題我會盡量地給出答案。
另一方面,我希望,有大佬可以指出我的錯誤。因爲我的答案不一定對,尤其那些帶 * 的問題。
這份資料將會持續更新,如果有其他問題也可以留言討論。歡迎交流,共同進步。
修改時間 | 版本 | 修改人 | 修改內容 | 問題答案 |
---|---|---|---|---|
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