1. 程式人生 > 實用技巧 >面試了無數公司才總結的JAVA面試題(含答案),搞定80%以上的技術面!

面試了無數公司才總結的JAVA面試題(含答案),搞定80%以上的技術面!

前言

最近技術交流群裡面很多群友在最近面試完之後,都將面試題都發到群裡一起討論,還是比較火熱的,都將答案討論出來了,但是面試題都比較零散,所以博主將大家和博主自己蒐集的面試題統一整理了下分享給大家!

文章結尾有驚喜哦!

演算法

建議準備一些常見的題目比較好,8大排序演算法一定是要會的,然後就是可以針對連結串列、樹分別找出常考的20-30道題目去做去吸收,還有一些DP、貪心、排列組合經典題目,圖的話可能code的不多,但是圖的演算法還是要掌握的,必要時講出來,拓撲、迪傑斯特拉、普利姆和克魯斯卡爾啥的。

資料結構

資料結構 ,無非就是陣列、連結串列、棧、佇列、樹、圖這幾類,最重要的應該是對他們的使用場景和區別要有所瞭解。比如樹的話,搜尋樹、平衡搜尋樹、紅黑樹、字首樹、B、B+這些。

計算機網路

  1. 說一說七層模型,各層都是幹什麼的?有哪些協議?
  2. TCP和UDP區別,各自的組成部分,基於TCP和UDP的應用層協議?各自應用場景?
  3. TCP三次握手、四次揮手、為什麼三次握手?四次揮手?,三次揮手行不行,連線後客戶端出現故障怎麼辦?
  4. TCP如何保證可靠,擁塞控制過程?
  5. TCP粘包、拆包出現原因場景及如何解決?
  6. CLOSE-WAIT 和 TIME-WAIT ?
  7. TIME-WAIT連線過多什麼原因?解決?
  8. 瀏覽器輸入URL並回車的過程發生了什麼?DNS查詢過程?DNS什麼時候用TCP,什麼時候用UDP?CDN知道嗎?
  9. HTTP1.0、1.1、2.0區別?
  10. HTTP報文格式?常用欄位?強快取和協商快取?
  11. HTTP和HTTPS的區別?HTTPS的建立過程?對稱加密和非u對稱加密?
  12. HTTP請求方式?GET和POST區別?
  13. 常見狀態碼?301和302區別?502和504區別?
  14. cookie和session區別?
  15. 跨域?怎樣解決跨域?
  16. SYN泛洪攻擊?XSS指令碼攻擊?csrf跨站請求偽造?解決方式?
  17. ARP欺騙?DNS劫持?傻瓜視窗?等等。。。

作業系統

個人覺得OS這塊還是比較好準備的,考的主要就是程序執行緒、虛擬記憶體這兩大塊比較多。Linux考的更多的是常用命令,以及給你個問題怎麼排查什麼的。

面試題舉例:

  1. 程序由什麼組成?程序的幾種狀態?低地址到高地址都存放哪些東西?
  2. 程序與執行緒的區別?
  3. 程序通訊方式有哪些,對比優缺點?
  4. 使用者態和核心態?
  5. 上下文是什麼?程序執行緒上下文切換?
  6. 程序排程演算法?產生死鎖必要條件?解決方式?
  7. 分頁和分段,頁面置換演算法?
  8. swap分割槽?fork函式?殭屍程序?孤兒程序?
  9. CPU快取?MESI瞭解嗎?等等
  10. IO模型?多路複用select、poll、epoll?

Java多執行緒

  1. Java中執行緒通訊方式
  2. Java中樂觀鎖?CAS問題?什麼時候用樂觀鎖?
  3. volatile關鍵字?如何防止重排序?底層指令?
  4. Sychronized 與 ReentrentLock 對比?
  5. Sychronized底層怎麼實現?MarkWord是什麼?偏向鎖、輕量級鎖、重量級鎖?自旋引數怎麼設定?
  6. AQS原理?如何實現的公平鎖,非公平鎖?
  7. 讀寫鎖?鎖降級?變數的高16位低16位分別儲存什麼資訊?
  8. CountDownLatch、CyclicBarrier、Semaphore?
  9. 執行緒池?7大引數?執行緒池工作過程?自帶的執行緒池為什麼不建議用?核心數量應該怎麼設定?
  10. 手寫個生產者消費者、阻塞佇列、多執行緒輪流列印ABC?等等吧

JVM

首先主要掌握就是JVM的記憶體劃分,各部分儲存什麼,幹什麼的,堆的劃分、物件分配原則(物件在老年代還是新生代,怎麼移動什麼的)、垃圾回收演算法、如何標記物件(引用計數法的缺點?GCroots法都哪些物件可以當作根)、物件由哪幾部分組成、垃圾回收器(就是G1、CMS可以主要看看,再者可以看下ZGC收集器)、雙親委派原則及破壞、類的載入過程(可以從.java生成.class過程說起,JIT編譯器)等等。

大多數比較常見的題目,再者就是JVM調優相關,這個怎麼說,就是按自己理解和專案的不同來說吧。

框架

面試的話也是主要看一看各個框架的原理和理解吧,例如Spring的IOC,AOP?迴圈依賴怎麼解決的?bean的生命週期?SpringBoot的啟動流程?RPC框架都包含哪幾部分?

面試中框架問的還是不多的,問也都是一些特性原理,常見的一些問題,花點時間準備下問題不大。

資料庫

  1. 引擎的區別?
  2. 索引(失效?聯合索引?索引建立原則?)
  3. 鎖(行鎖?表鎖?間隙鎖?)
  4. 事務(隔離級別,RR怎麼避免不可重複讀(MVCC)?又怎麼避免幻讀(MVCC+間隙鎖)?)
  5. B+樹索引和雜湊索引、聚集索引和非聚集索引?
  6. 回表查詢和索引覆蓋?
  7. 一條SQL執行過程是怎樣的?
  8. 資料過大怎麼優化分頁?
  9. 各個日誌,都幹什麼的?
  10. SQL過慢怎麼排查?Explain的關鍵欄位?
  11. MySQL中LUR怎麼改造的?為啥這麼改?等等。
  12. 主從複製?分庫分表依據?

Redis

  1. Redis為什麼快?
  2. Redis持久化方式?
  3. 資料型別?底層資料結構?
  4. 過期策略和記憶體淘汰策略?
  5. Redis 應用場景?
  6. pipeline批量處理的優點?
  7. 主從複製原理?cluster瞭解嗎?怎麼確定一個key落在哪個節點?一致性雜湊瞭解嗎?有什麼缺點?怎麼解決?
  8. 快取雪崩、快取穿透
  9. 如何保證快取與資料庫資料一致性?等等。

中介軟體

關於中介軟體,瞭解的可能首先就是訊息佇列,我最常使用的就是 RabbitMq,但是也要對其他的產品特性與應用場景有所瞭解,例如Kafka、RocketMq的對比。訊息佇列常問的問題例如:

  1. 訊息佇列應用場景,作用?
  2. 如何保證訊息可靠?
  3. 如何保證消費者冪等?
  4. 如何保證訊息順序性?
  5. MQ積壓了很多怎麼辦?等。

分散式

分散式相關的知識還是要掌握的,畢竟以後的系統都不可能是單點部署的,這就可以看下CAP理論?BASE理論?分散式事務?限流的方案?分散式id生成策略?分散式鎖?或者常用的Hystrix元件等。面試時還是考的居多的。

大資料型別

這類題可以多看幾個,思路大多大同小異,還是比較好準備的,例如:

  1. 海量資料整數,記憶體受限找中位數?
  2. 如何在100億URL中快速判斷某URL是否存在?
  3. 海量資料找次數TOP100?等等。

總結

面試是一場持久戰,在這個過程中你不僅會收穫 滿意的offer,鍛鍊自己的 表達能力和提高情商,還能 交到來自各個地方的朋友,那群曾經與你一起戰鬥的好朋友們!

寶劍鋒從磨礪出,梅花香自苦寒來。祝願大家拿到滿意的offer。

小編也把面試題和答案整理好啦:戳這裡免費領取,暗號:CSDN,還有更多大廠面試專題資料和視訊哦!

寫文不易,覺得有幫助還請點贊關注支援一下小編,也歡迎各位大佬提出問題,感謝!!!