字節跳動2020Java面經,你離高薪就只差一片面試題了
前言
經歷了慘痛的春招與秋招之後,也積攢了一些面經,希望能對大家有所幫助。由於字數限制需要答案的可以關注GZH【程式設計師空間】 免費領取完整版PDF
其他
- 什什么是冪等?什什么情況下需要考慮冪等?你怎麼解決冪等的問題?
Java
-
多個執行緒同時讀寫,讀執行緒的數量量遠遠⼤大於寫執行緒,你認為應該如何解決
並發的問題?你會選擇加什什么樣的鎖? -
JAVA的AQS是否了了解,它是⼲幹嘛的?
-
除了了synchronized關鍵字之外,你是怎麼來保障執行緒安全的?
-
什什么時候需要加volatile關鍵字?它能保證執行緒安全嗎?
-
執行緒池內的執行緒如果全部忙,提交⼀一個新的任務,會發⽣生什什么?隊列列全部
塞滿了了之後,還是忙,再提交會發⽣生什什么? -
Tomcat本身的參數你⼀一般會怎麼調整?
-
synchronized關鍵字鎖住的是什什么東⻄西?在位元組碼中是怎麼表示的?在內
存中的對象上表現為什什么? -
wait/notify/notifyAll⽅方法需不不需要被包含在synchronized塊中?這是為什什
么? -
ExecutorService你⼀一般是怎麼⽤用的?是每個service放⼀一個還是⼀一個項⽬目
⾥里里⾯面放⼀一個?有什什么好處?
Spring -
你有沒有⽤用過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
-
如果有很多數據插⼊入MYSQL 你會選擇什什么⽅方式?
-
如果查詢很慢,你會想到的第⼀一個⽅方式是什什么?索引是⼲幹嘛的?
-
如果建了了⼀一個單列列索引,查詢的時候查出2列列,會⽤用到這個單列列索引嗎?
-
如果建了了⼀一個包含多個列列的索引,查詢的時候只⽤用了了第⼀一列列,能不不能⽤用上
這個索引?查三列列呢? -
接上題,如果where條件後⾯面帶有⼀一個 i + 5 < 100 會使⽤用到這個索引嗎?
-
怎麼看是否⽤用到了了某個索引?
-
like %aaa%會使⽤用索引嗎? like aaa%呢?
-
drop、 truncate、 delete的區別?
-
平時你們是怎麼監控資料庫的? 慢SQL是怎麼排查的?
-
你們資料庫是否⽀支援emoji表情,如果不不⽀支援,如何操作?
-
你們的資料庫單表數據量量是多少?⼀一般多⼤大的時候開始出現查詢性能急
劇下降? -
查詢死掉了了,想要找出執⾏行行的查詢進程⽤用什什么命令?找出來之後⼀一般你
會⼲幹嘛? -
讀寫分離是怎麼做的?你認為中間件會怎麼來操作?這樣操作跟事務有
什什么關係? -
分庫分表有沒有做過?線上的遷移過程是怎麼樣的?如何確定數據是正
確的?
JVM
-
你知道哪些或者你們線上使⽤用什什么GC策略略? 它有什什么優勢,適⽤用於什什么
場景? -
JAVA類載入器器包括⼏幾種?它們之間的⽗父⼦子關係是怎麼樣的?雙親委派機
制是什什么意思?有什什么好處? -
如何⾃自定義⼀一個類載入器器?你使⽤用過哪些或者你在什什么場景下需要⼀一個⾃自
定義的類載入器器嗎? -
堆記憶體設置的參數是什什么?
-
Perm Space中保存什什么數據? 會引起OutOfMemory嗎?
-
做gc時,⼀一個對象在記憶體各個Space中被移動的順序是什什么?
-
你有沒有遇到過OutOfMemory問題?你是怎麼來處理理這個問題的?處理理
過程中有哪些收穫? -
1.8之後Perm Space有哪些變動? MetaSpace⼤大⼩小默認是⽆無限的么? 還是
你們會通過什什么⽅方式來指定⼤大⼩小? -
Jstack是⼲干什什么的? Jstat呢? 如果線上程式周期性地出現卡頓,你懷疑可
能是gc導致的,你會怎麼來排查這個問題?執行緒⽇日誌⼀一般你會看其中的什什么
部分? -
StackOverFlow異常有沒有遇到過?⼀一般你猜測會在什什么情況下被觸
發?如何指定⼀一個執行緒的堆棧⼤大⼩小?⼀一般你們寫多少?
Linux命令
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是⽤用來⼲干什什么的?這樣的好處是什什么?
Redis
— 開發
-
快取穿透可以介紹⼀一下么?你認為應該如何解決這個問題
-
你是怎麼觸發快取更更新的? (⽐比如設置超時時間(被動⽅方式), ⽐比如更更新的時
候主動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後端應⽤用的性能數據,你會在意哪些⽅方
⾯面? 你會選擇什什么樣的⼯工具、思路路來收集? -
⼀一般你調⽤用第三⽅方的時候會不不會監控調⽤用情況?