經歷了慘痛的春招與秋招以後,也積攢了一些面經,但願能對你們有所幫助。因爲字數限制須要答案的能夠關注GZH【程序員空間】 免費領取完整版PDFjava
多個線程同時讀寫,讀線程的數量量遠遠⼤大於寫線程,你認爲應該如何解決
併發的問題?你會選擇加什什麼樣的鎖?mysql
JAVA的AQS是否了了解,它是⼲幹嗎的?linux
除了了synchronized關鍵字以外,你是怎麼來保障線程安全的?程序員
什什麼時候須要加volatile關鍵字?它能保證線程安全嗎?web
線程池內的線程若是所有忙,提交⼀一個新的任務,會發⽣生什什麼?隊列列所有
塞滿了了以後,仍是忙,再提交會發⽣生什什麼?正則表達式
Tomcat自己的參數你⼀通常會怎麼調整?redis
synchronized關鍵字鎖住的是什什麼東⻄西?在字節碼中是怎麼表示的?在內
存中的對象上表現爲什什麼?sql
wait/notify/notifyAll⽅方法需不不須要被包含在synchronized塊中?這是爲什什
麼?數據庫
ExecutorService你⼀通常是怎麼⽤用的?是每一個service放⼀一個仍是⼀一個項⽬目
⾥裏里⾯面放⼀一個?有什什麼好處?
Springvim
你有沒有⽤用過Spring的AOP? 是⽤用來⼲幹嗎的? ⼤大概會怎麼使⽤用?
若是⼀一個接⼝口有2個不不同的實現, 那麼怎麼來Autowire⼀一個指定的實現?
Spring的聲明式事務 @Transaction註解⼀通常寫在什什麼位置? 拋出了了異常
會⾃自動回滾嗎?有沒有辦法控制不不觸發回滾?
若是想在某個Bean⽣生成並裝配完畢後執⾏行行⾃自⼰己的邏輯,能夠什什麼⽅方式實
現?
SpringBoot沒有放到web容器器⾥裏里爲什什麼能跑HTTP服務?
SpringBoot中若是你想使⽤用⾃自定義的配置⽂文件⽽而不不僅僅是
application.properties,應該怎麼弄弄?
SpringMVC中RequestMapping能夠指定GET, POST⽅方法麼?怎麼指定?
SpringMVC若是但願把輸出的Object(例例如XXResult或者XXResponse)這
種包裝爲JSON輸出, 應該怎麼處理理?
怎樣攔截SpringMVC的異常,而後作⾃自定義的處理理,⽐好比打⽇日誌或者包裝
成JSON
若是有不少數據插⼊入MYSQL 你會選擇什什麼⽅方式?
若是查詢很慢,你會想到的第⼀一個⽅方式是什什麼?索引是⼲幹嗎的?
若是建了了⼀一個單列列索引,查詢的時候查出2列列,會⽤用到這個單列列索引嗎?
若是建了了⼀一個包含多個列列的索引,查詢的時候只⽤用了了第⼀一列列,能不不能⽤用上
這個索引?查三列列呢?
接上題,若是where條件後⾯面帶有⼀一個 i + 5 < 100 會使⽤用到這個索引嗎?
怎麼看是否⽤用到了了某個索引?
like %aaa%會使⽤用索引嗎? like aaa%呢?
drop、 truncate、 delete的區別?
平時大家是怎麼監控數據庫的? 慢SQL是怎麼排查的?
大家數據庫是否⽀支持emoji表情,若是不不⽀支持,如何操做?
大家的數據庫單表數據量量是多少?⼀通常多⼤大的時候開始出現查詢性能急
劇降低?
查詢死掉了了,想要找出執⾏行行的查詢進程⽤用什什麼命令?找出來以後⼀通常你
會⼲幹嗎?
讀寫分離是怎麼作的?你認爲中間件會怎麼來操做?這樣操做跟事務有
什什麼關係?
分庫分表有沒有作過?線上的遷移過程是怎麼樣的?如何肯定數據是正
確的?
你知道哪些或者大家線上使⽤用什什麼GC策略略? 它有什什麼優點,適⽤用於什什麼
場景?
JAVA類加載器器包括⼏幾種?它們之間的⽗父⼦子關係是怎麼樣的?雙親委派機
制是什什麼意思?有什什麼好處?
如何⾃自定義⼀一個類加載器器?你使⽤用過哪些或者你在什什麼場景下須要⼀一個⾃自
定義的類加載器器嗎?
堆內存設置的參數是什什麼?
Perm Space中保存什什麼數據? 會引發OutOfMemory嗎?
作gc時,⼀一個對象在內存各個Space中被移動的順序是什什麼?
你有沒有遇到過OutOfMemory問題?你是怎麼來處理理這個問題的?處理理
過程當中有哪些收穫?
1.8以後Perm Space有哪些變更? MetaSpace⼤大⼩小默認是⽆無限的麼? 仍是
大家會經過什什麼⽅方式來指定⼤大⼩小?
Jstack是⼲幹什什麼的? Jstat呢? 若是線上程序週期性地出現卡頓,你懷疑可
能是gc致使的,你會怎麼來排查這個問題?線程⽇日誌⼀通常你會看其中的什什麼
部分?
StackOverFlow異常有沒有遇到過?⼀通常你猜想會在什什麼狀況下被觸
發?如何指定⼀一個線程的堆棧⼤大⼩小?⼀通常大家寫多少?
0.添加Java學習:1037935907
⽇日誌特別⼤大隻想看最後100⾏行行怎麼弄弄? 若是想⼀一直看⽇日誌的持續輸出,⽤用
什什麼命令?
若是⽇日誌⼀一邊輸出,⼀一邊想實時看到有沒有某個關鍵字應該怎麼弄弄?
grep若是忽略略⼤大⼩小寫應該怎麼弄弄? 正則表達式呢?
vim往下⼀一⾏行行是什什麼鍵?往下30⾏行行呢? 跳到⽂文件末尾⼀一⾏行行是什什麼? 跳回來
是什什麼? 向後搜索是什什麼?
若是有個⽂文本⽂文件,按空格做爲列列的分隔符,若是想統計第三列列⾥裏里⾯面的每
個單詞的出現次數應該怎麼弄弄?
若是把上⾯面的出現次數排個序應該怎麼弄弄? 想按照數字自己的順序⽽而不不是
字符串串的順序排列列怎麼弄弄?
Linux環境變量量是以什什麼做爲分隔符的?環境變量量經過什什麼命令設置?
給某個⽂文件權設置限⽐好比設置爲644 是⽤用什什麼命令?這個6是什什麼意思?
Linux下⾯面若是想看某個進程的資源佔⽤用狀況是怎麼看的?系統load⼤大概
指的什什麼意思?大家線上系統load⼀通常多少?若是⼀一個4核機器器,你認爲多
少load是⽐比較正常的? top命令⾥裏里⾯面按⼀一下1會發⽣生什什麼?
top命令⾥裏里⾯面,有時候全部進程的CPU使⽤用率加起來超過100%是怎麼回
事?
還有哪些查看系統性能或者供你發現問題的命令?你⼀通常是看哪一個參
數?
想看某個進程打開了了哪些⽹網絡鏈接是什什麼命令?⾥裏里⾯面鏈接的狀態你⽐比較
關⼼心哪⼏幾種?
-- 偏題
有沒有作過Linux系統參數⽅方⾯面的優化,⼤大概優化過什什麼?
系統參數⾥裏里⾯面有個叫作backlog的能夠⽤用來⼲幹什什麼?
查看⽹網絡鏈接發現好多TIME_WAIT 多是什什麼緣由?對你的應⽤用會有什什
麼影響?你會選擇什什麼樣的⽅方式來減小這些TIME_WAIT
能否介紹⼀一下TCP三次握⼿手的過程,若是如今有個⽹網絡程序,你⽤用第三⽅方
的library來發送數據,你懷疑這個library發送的數據有問題,那麼怎麼來驗
證? tcpdump導出的⽂文件你⼀通常是怎麼分析的?
KeepAlive是⽤用來⼲幹什什麼的?這樣的好處是什什麼?
-- 開發
緩存穿透能夠介紹⼀一下麼?你認爲應該如何解決這個問題
你是怎麼觸發緩存更更新的? (⽐好比設置超時時間(被動⽅方式), ⽐好比更更新的時
候主動update)?若是是被動的⽅方式如何控制多個⼊入⼝口同時觸發某個緩存更更
新?
大家⽤用Redis來作什什麼?爲什什麼不不⽤用其餘的KV存儲例例如Memcached,
Cassandra等?
大家⽤用什什麼Redis客戶端? Redis⾼高性能的緣由⼤大概能夠講⼀一些?
你熟悉哪些Redis的數據結構? zset是⼲幹什什麼的? 和set有什什麼區別?
Redis的hash, 存儲和獲取的具體命令叫什什麼名字?
LPOP和BLPOP的區別?
Redis的有⼀一些包含SCAN關鍵字的命令是⼲幹嗎的? SCAN返回的數據量量是
固定的嗎?
Redis中的Lua有沒有使⽤用過? 能夠⽤用來作什什麼? 爲什什麼能夠這麼⽤用?
Redis的Pipeline是⽤用來⼲幹什什麼的?
-- 運維
Redis持久化⼤大概有⼏幾種⽅方式? aof和rdb的區別是什什麼? AOF有什什麼優缺
點嗎?
Redis Replication的⼤大體流程是什什麼? bgsave這個命令的執⾏行行過程?
-- 偏題
若是有不少 KV數據要存儲到Redis, 可是內存不不⾜足, 經過什什麼⽅方式能夠縮
減內存? 爲什什麼這樣能夠縮⼩小內存?
Redis中List, HashTable都⽤用到了了ZipList, 爲什什麼會選擇它?
監控、穩定性
業務⽇日誌是經過什什麼⽅方式來收集的?
線上機器器如何監控?採⽤用什什麼開源產品或者⾃自研的產品?它是分鐘級的還
是秒級的?
若是讓你來想辦法收集⼀一個JAVA後端應⽤用的性能數據,你會在乎哪些⽅方
⾯面? 你會選擇什什麼樣的⼯工具、思路路來收集?
⼀通常你調⽤用第三⽅方的時候會不不會監控調⽤用狀況?