生活随笔
收集整理的這篇文章主要介紹了
最新饿了么、美团、大众点评技术面面试难点整理,看完长点心
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
- Java基礎(chǔ)
- Spring
- MySQL
- JVM
- Linux命令
- Linux常問題
- Redis
- 經(jīng)驗分享
Java
多個線程同時讀寫,讀線程的數(shù)量遠遠大于寫線程,你認為應(yīng)該如何解決并發(fā)的問題?你會選擇加什么樣的鎖?JAVA的AQS是否了解,它是干嘛的?除了synchronized關(guān)鍵字之外,你是怎么來保障線程安全的?什么時候需要加volatile關(guān)鍵字?它能保證線程安全嗎?線程池內(nèi)的線程如果全部忙,提交一個新的任務(wù),會發(fā)生什么?隊列全部塞滿了之后,還是忙,再提交會發(fā)生什么?Tomcat本身的參數(shù)你一般會怎么調(diào)整?synchronized關(guān)鍵字鎖住的是什么東西?在字節(jié)碼中是怎么表示的?在內(nèi)存中的對象上表現(xiàn)為什么?wait/notify/notifyAll方法需不需要被包含在synchronized塊中?這是為什么?ExecutorService你一般是怎么用的?是每個service放一個還是一個項目里面放一個?有什么好處?
Spring
你有沒有用過Spring的AOP? 是用來干嘛的? 大概會怎么使用?如果一個接口有2個不同的實現(xiàn), 那么怎么來Autowire一個指定的實現(xiàn)?Spring的聲明式事務(wù) @Transaction注解一般寫在什么位置? 拋出了異常會?動回滾嗎?有沒有辦法控制不觸發(fā)回滾?如果想在某個Bean生成并裝配完畢后執(zhí)行自己的邏輯,可以什么方式實現(xiàn)?SpringBoot沒有放到web容器里為什么能跑HTTP服務(wù)?SpringBoot中如果你想使用自定義的配置文件而不僅僅是application.properties,應(yīng)該怎么弄?SpringMVC中RequestMapping可以指定GET, POST方法么?怎么指定?SpringMVC如果希望把輸出的Object(例如XXResult或者XXResponse)這種包裝為JSON輸出, 應(yīng)該怎么處理?怎樣攔截SpringMVC的異常,然后做自定義的處理,比如打日志或者包裝成JSON
MySQL
如果有很多數(shù)據(jù)插入MYSQL 你會選擇什么方式?如果查詢很慢,你會想到的第一個方式是什么?索引是干嘛的?如果建了一個單列索引,查詢的時候查出2列,會用到這個單列索引嗎?如果建了一個包含多個列的索引,查詢的時候只用了第一列,能不能用上這個索引?查三列呢?接上題,如果where條件后面帶有一個 i + 5 < 100 會使用到這個索引嗎?怎么看是否用到了某個索引?like %aaa%會使用索引嗎? like aaa%呢?drop、truncate、delete的區(qū)別?平時你們是怎么監(jiān)控數(shù)據(jù)庫的? 慢SQL是怎么排查的?你們數(shù)據(jù)庫是否支持emoji表情,如果不支持,如何操作?你們的數(shù)據(jù)庫單表數(shù)據(jù)量是多少?一般多大的時候開始出現(xiàn)查詢性能急劇下降?查詢死掉了,想要找出執(zhí)行的查詢進程用什么命令?找出來之后一般你會干嘛?讀寫分離是怎么做的?你認為中間件會怎么來操作?這樣操作跟事務(wù)有什么關(guān)系?分庫分表有沒有做過?線上的遷移過程是怎么樣的?如何確定數(shù)據(jù)是正確的?
JVM
你知道哪些或者你們線上使用什么GC策略? 它有什么優(yōu)勢,適用于什么場景?JAVA類加載器包括幾種?它們之間的父子關(guān)系是怎么樣的?雙親委派機制是什么意思?有什么好處?如何自定義一個類加載器?你使用過哪些或者你在什么場景下需要一個自定義的類加載器嗎?堆內(nèi)存設(shè)置的參數(shù)是什么?Perm Space中保存什么數(shù)據(jù)? 會引起OutOfMemory嗎?做gc時,一個對象在內(nèi)存各個Space中被移動的順序是什么?你有沒有遇到過OutOfMemory問題?你是怎么來處理這個問題的?處理過程中有哪些收獲?1.8之后Perm Space有哪些變動? MetaSpace大小默認是無限的么? 還是你們會通過什么方式來指定大小?Jstack是干什么的? Jstat呢? 如果線上程序周期性地出現(xiàn)卡頓,你懷疑可能是gc導(dǎo)致的,你會怎么來排查這個問題?線程日志一般你會看其中的什么部分?StackOverFlow異常有沒有遇到過?一般你猜測會在什么情況下被觸發(fā)?如何指定一個線程的堆棧大小?一般你們寫多少?
Linux命令
日志特別大只想看最后100行怎么弄? 如果想一直看日志的持續(xù)輸出,用什么命令?如果日志一邊輸出,一邊想實時看到有沒有某個關(guān)鍵字應(yīng)該怎么弄?grep如果忽略大小寫應(yīng)該怎么弄? 正則表達式呢?vim往下一行是什么鍵?往下30行呢? 跳到文件末尾一行是什么? 跳回來是什么? 向后搜索是什么?如果有個文本文件,按空格作為列的分隔符,如果想統(tǒng)計第三列里面的每個單詞的出現(xiàn)次數(shù)應(yīng)該怎么弄?如果把上面的出現(xiàn)次數(shù)排個序應(yīng)該怎么弄? 想按照數(shù)字本身的順序而不是字符串的順序排列怎么弄?Linux環(huán)境變量是以什么作為分隔符的?環(huán)境變量通過什么命令設(shè)置?給某個文件權(quán)設(shè)置限比如設(shè)置為644 是用什么命令?這個6是什么意思?Linux下面如果想看某個進程的資源占用情況是怎么看的?系統(tǒng)load大概指的什么意思?你們線上系統(tǒng)load一般多少?如果一個4核機器,你認為多少load是比較正常的?top命令里面按一下1會發(fā)生什么?top命令里面,有時候所有進程的CPU使用率加起來超過100%是怎么回事?還有哪些查看系統(tǒng)性能或者供你發(fā)現(xiàn)問題的命令?你一般是看哪個參數(shù)?想看某個進程打開了哪些網(wǎng)絡(luò)連接是什么命令?里面連接的狀態(tài)你比較關(guān)心哪幾種?
Linux常問題
有沒有做過Linux系統(tǒng)參數(shù)方面的優(yōu)化,大概優(yōu)化過什么?系統(tǒng)參數(shù)里面有個叫做backlog的可以用來干什么?查看網(wǎng)絡(luò)連接發(fā)現(xiàn)好多TIME_WAIT 可能是什么原因?對你的應(yīng)用會有什么影響?你會選擇什么樣的方式來減少這些TIME_WAIT可否介紹一下TCP三次握手的過程,如果現(xiàn)在有個網(wǎng)絡(luò)程序,你用第三方的library來發(fā)送數(shù)據(jù),你懷疑這個library發(fā)送的數(shù)據(jù)有問題,那么怎么來驗證?tcpdump導(dǎo)出的文件你一般是怎么分析的?KeepAlive是用來干什么的?這樣的好處是什么?
Redis
開發(fā)
緩存穿透可以介紹一下么?你認為應(yīng)該如何解決這個問題你是怎么觸發(fā)緩存更新的?(比如設(shè)置超時時間(被動方式), 比如更新的時候主動update)?如果是被動的方式如何控制多個入口同時觸發(fā)某個緩存更新?你們用Redis來做什么?為什么不用其他的KV存儲例如Memcached,Cassandra等?你們用什么Redis客戶端? Redis高性能的原因大概可以講一些?你熟悉哪些Redis的數(shù)據(jù)結(jié)構(gòu)? zset是干什么的? 和set有什么區(qū)別?Redis的hash, 存儲和獲取的具體命令叫什么名字?LPOP和BLPOP的區(qū)別?Redis的有一些包含SCAN關(guān)鍵字的命令是干嘛的? SCAN返回的數(shù)據(jù)量是固定的嗎?Redis中的Lua有沒有使用過? 可以用來做什么? 為什么可以這么用?Redis的Pipeline是用來干什么的?
經(jīng)驗分享
如果你的技術(shù)扎實沒問題,接下來的面試也決定你是否能得到認可拿到offer,列出以下幾點經(jīng)驗,面試前提前準(zhǔn)備好答案。
最好準(zhǔn)備好1-2兩個問題來應(yīng)對“你有什么想問的嗎?”之類的問題。離職原因,不要抱怨現(xiàn)在和以前的雇主。保持談話的時間安排節(jié)奏順利進行, 但不要就某個問題說過多,通過一個問題引入到下一個問題。面談的過程中面試官的問題可能會比較細,比較犀利,那是正常環(huán)節(jié),不必緊張。如果遇到不太了解問題,最好不要說模棱兩可的答案。溝通過程中最好保持高度的愿意性。
總結(jié)
以上是生活随笔為你收集整理的最新饿了么、美团、大众点评技术面面试难点整理,看完长点心的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。