1. 程式人生 > >針對高階java面試所總結需要會的技術及面試會問的問題

針對高階java面試所總結需要會的技術及面試會問的問題

一、Java相關

    樂觀悲觀鎖的設計,如何保證原子性,解決的問題;

   char和double的位元組,以及在記憶體的分佈是怎樣;

    物件記憶體佈局,然後講下物件的死亡過程?

    物件頭,詳細講下;

   sync原理詳細,sync內拋異常會怎樣,死鎖嗎?還是釋放掉?怎麼排查死鎖?死鎖會怎樣?有沒有什麼更好的替代方案?

    詳細講一下集合,HashSet原始碼,HashMap原始碼,如果要執行緒安全需要怎麼做?

    多執行緒是解決什麼問題的?執行緒池解決什麼問題?

    執行緒池,如何設計的,裡面的引數有多少種,裡面的工作佇列和執行緒佇列是怎樣的結構,如果給你,怎樣設計執行緒池?

   AQS原理,ReentranLock原始碼,設計原理,整體過程。

    繼續聊多執行緒原始碼,sync原理,然後一個場景設計題;

   float f = 1.4f;double d = 1.4d; 與 float f =1.5f;double d = 1.5d; 是否為true,記憶體是怎樣的;

   split的原始碼,split("a|b|c");得出多少個數組;

    把所有認識熟用的JUC(java.util.concurrent(簡稱JUC)包)下的類寫出來,講下使用,然後講下原生的執行緒操作;

    開閉原則,解析工廠方法模式,建造者模式,區別。手擼出來。

    講下JVM的大頁模式,JVM記憶體模型;

    什麼是敏捷開發,防禦性程式設計,並行程式設計。Team Leader的思考;

    逃逸分析是什麼,作用是什麼,用途是什麼;

    怎麼認為一個類是執行緒安全?執行緒安全的定義是什麼?Java有多少個關鍵字進行同步?為什麼這樣設計?(聊了一大堆,一堆為什麼);

    兩個執行緒設計題。記得一個是:t1,t2,t3,讓t1,t2執行完才執行t3,原生實現。

    寫個字尾表示式,為什麼要設計字尾表示式,有什麼好處?然後寫下中綴。

    我看你做過效能優化,比如你怎麼分析專案裡面的OOM的,記憶體洩露呢?詳細說思路;

    說下多執行緒,我們什麼時候需要分析執行緒數,怎麼分析,分析什麼因素;

    抽象方法和類方法的區別,static的抽象方法可以嗎?

    說下Java的克隆體系;

    涉及OOM、JVM優化、原始碼問題、資料庫優化、多執行緒等問題;

   CPU高?什麼情況CPU高?解決什麼問題?

    你有遇到過臨界區問題嗎?有遇到過嗎?你在專案遇到這個問題是怎樣解決的?

   volatile關鍵字作用;

   Java的多型怎麼實現;

    解釋一下自旋;

    解釋一下訊號量;

    什麼情況下會觸發類載入;

   Java記憶體抖動嚴重,優化的思路;

二、資料庫相關

   SQL優化思路,聯合索引與底層樹結構的映像關係,索引結構(B+、B-),為什麼用這樣的結構;

    講下MySQL的叢集?叢集遇到過什麼問題?sql的優化?

    你目前為止遇到的最大資料量是多少?知道100萬時候怎麼設計嗎?1000萬呢?過幾十億呢?

   MySQL有多少個引數可調,除了最大連線數。全部列出來,一個個分析。

    聊下優化過的索引,怎麼優化;

    紅黑樹和平衡樹的區別,為什麼資料庫不用紅黑樹;

   mysql有哪些鎖,意向鎖有什麼用;

    資料庫高併發下的優化思路;

    資料庫什麼情況下索引會失效;

三、資料結構和作業系統相關

    資料結構學過吧,聊一下?學過什麼結構?講下樹和佇列?B樹呢?

    作業系統學過吧,聊一下?講一下系統記憶體是怎樣的?分段分頁虛擬記憶體?

    頁面置換演算法呢?多少種?有最優的置換演算法嗎?

    你學過什麼課程?然後聊下作業系統,核心、使用者之類。

    反轉連結串列手擼;

    快排,給一串陣列,把具體每次patition寫下,最終結果也寫45, 32, 41, 35, 38, 20, 50;

    一個整數status, 判斷第K個位元位是否為位元1;

    把遞迴實現的快排改成非遞迴,你知道非遞迴有什麼好處嗎;

    舉例使用分治思想的演算法;

四、網路相關

    講下請求頭細節?

   Http和Https?Http1.0,1.1,2.0,講下長連線和短連線?Https是怎樣的?如果我篡改了公鑰呢?怎麼防止?

   Get和Post,講下區別,要我模擬出抓包來。

    詳細講下Cookie和Session,Token,OAuth2.0協議;

    擁塞演算法知道嗎?哪些,分別怎樣?

    學過計算機網路是吧?socket熟悉嗎?對它的讀寫緩衝區有理解嗎?怎麼的?那滑動視窗是怎樣的?為什麼這樣設計?

    再聊下Http的Http basicauthentication;

   Https的過程;

五、框架相關

    聊下Spring原始碼,知道多少,都聊一下;

    聊下Spring註解,@Autowire,@Resource,以及他們的解析過程;

    聊一下架構,接入層架構,服務層架構。聊下技術棧,Spring Boot,Spring Cloud、Docker;

   Spring ioc的具體優勢,和直接New一個物件有什麼區別;

   Servlet生命週期,是否單例,為什麼是單例;

   Spring Mvc初始化過程;

五、分散式相關

    多少種RPC框架?

    一致性雜湊是幹嘛的?

    搭建高併發高可用系統需要怎樣設計?考慮哪些東西,有多少說多少。

    你對快取有什麼理解?快取是解決什麼問題?後端快取有哪些,分別解決什麼問題?

    聊一下分散式鎖;

    你是怎麼設計系統快取的,為什麼,什麼場景;

    也來說下,削峰的多種實現,Redis?MQ?

    為什麼用mq就能削峰?解決什麼問題?

六、設計題

    有幾臺機器儲存著幾億淘寶搜尋日誌,你只有一臺2g的電腦,怎麼選出搜尋熱度最高的十個搜尋關鍵詞;

    如何設計演算法壓縮一段URL;

    有一個頁面能同時展示兩個廣告,現在有五個廣告,設計演算法使五個廣告展示概率為1:2:3:4:5;

    有25匹馬,五個賽道,用最少比賽次數將25匹馬排序;

七、多執行緒

    AtomicInteger底層實現原理;

    synchronized與ReentraLock哪個是公平鎖;

    CAS機制會出現什麼問題;

    用過併發包下邊的哪些類;

    一個執行緒連著呼叫start兩次會出現什麼情況?

    wait方法能不能被重寫,wait能不能被中斷;

    執行緒池的實現?四種執行緒池?重要引數及原理?任務拒接策略有哪幾種?

    執行緒狀態以及API怎麼操作會發生這種轉換;

    常用的避免死鎖方法;

八、JVM

    Minor GC與Full GC分別在什麼時候發生?什麼時候觸發Full GC;

    GC收集器有哪些?CMS收集器與G1收集器的特點。

    Java在什麼時候會出現記憶體洩漏;

    Java中的大物件如何進行儲存;

    rt.jar被什麼類載入器載入,什麼時間載入;

    自己寫的類被什麼載入,什麼時間載入;

    自己寫的兩個不同的類是被同一個類載入器載入的嗎?為什麼?

    為什麼新生代記憶體需要有兩個Survivor區?

    幾種常用的記憶體除錯工具:jmap、jstack、jconsole;

    類載入的五個過程:載入、驗證、準備、解析、初始化;

    G1停頓嗎,CMS回收步驟,CMS為什麼會停頓,停頓時間;

    棧主要存的資料是什麼,堆呢?

    堆分為哪幾塊,比如說新生代老生代,那麼新生代又分為什麼?

    軟引用和弱引用的使用場景(軟引用可以實現快取,弱引用可以用來在回撥函式中防止記憶體洩露);

九、Linux基礎

    Linux下可以在/proc目錄下可以檢視CPU的核心數等;cat/proc/下邊會有很多系統核心資訊可供顯示;

    說一下棧的記憶體是怎麼分配的;

    Linux各個目錄有了解過嗎?/etc、/bin、/dev、/lib、/sbin這些常見的目錄主要作用是什麼?

    說一下棧幀的記憶體是怎麼分配的;

    Linux下排查某個死迴圈的執行緒;

    動態連結和靜態連結的區別;

    程序的記憶體分佈;

    如何查詢一個程序開啟所有的檔案;

    說一下常使用的協議及其對應的埠;

    為什麼會有核心態,保護模式你知道嗎?

    檔案是怎麼在磁碟上儲存的?

    有了程序為何還要執行緒呢,不同程序和執行緒他們之間有什麼不同。(程序是資源管理的最小單位,執行緒是程式執行的最小單位。在作業系統設計上,從程序演化出執行緒,最主要的目的就是更好的支援SMP以及減小(程序/執行緒)上下文切換開銷。)

    InnoDB聚集索引B+樹葉子節點和磁碟什麼順序相同;

    檔案系統,程序管理和排程,記憶體管理機制、虛地址保護模式;

十、其他相關

   Tomcat快取,聊下快取的整體理解,知道多少種快取;

    解釋下Mucene原理,倒排索引,怎樣進行中文分詞,基於什麼進行分詞;

   TopN的大資料量題;

    你對接入層要思考什麼東西?遇到過哪些問題?搭建系統要考量哪些因素?

    然後專案問題,優化問題;

    熟悉maven是吧?我們來聊下Maven的原始碼原理,Maven衝突的時候,怎麼選擇依賴包,我們怎麼查,我們遇到兩個不一樣的版本,我們應該如何去選擇,為什麼?

    專案如何分組,效能優化小組應該做哪些;

    我們來說下接入層的搭建,認知分析;

    問下專案的系統構建,思考,為什麼這樣構建?

如何判斷一段程式碼的好壞;