面試了無數公司才總結的JAVA面試題(含答案),搞定80%以上的技術面!
前言
最近技術交流群裡面很多群友在最近面試完之後,都將面試題都發到群裡一起討論,還是比較火熱的,都將答案討論出來了,但是面試題都比較零散,所以博主將大家和博主自己蒐集的面試題統一整理了下分享給大家!
文章結尾有驚喜哦!
演算法
建議準備一些常見的題目比較好,8大排序演算法一定是要會的,然後就是可以針對連結串列、樹分別找出常考的20-30道題目去做去吸收,還有一些DP、貪心、排列組合經典題目,圖的話可能code的不多,但是圖的演算法還是要掌握的,必要時講出來,拓撲、迪傑斯特拉、普利姆和克魯斯卡爾啥的。
資料結構
資料結構 ,無非就是陣列、連結串列、棧、佇列、樹、圖這幾類,最重要的應該是對他們的使用場景和區別要有所瞭解。比如樹的話,搜尋樹、平衡搜尋樹、紅黑樹、字首樹、B、B+這些。
計算機網路
- 說一說七層模型,各層都是幹什麼的?有哪些協議?
- TCP和UDP區別,各自的組成部分,基於TCP和UDP的應用層協議?各自應用場景?
- TCP三次握手、四次揮手、為什麼三次握手?四次揮手?,三次揮手行不行,連線後客戶端出現故障怎麼辦?
- TCP如何保證可靠,擁塞控制過程?
- TCP粘包、拆包出現原因場景及如何解決?
- CLOSE-WAIT 和 TIME-WAIT ?
- TIME-WAIT連線過多什麼原因?解決?
- 瀏覽器輸入URL並回車的過程發生了什麼?DNS查詢過程?DNS什麼時候用TCP,什麼時候用UDP?CDN知道嗎?
- HTTP1.0、1.1、2.0區別?
- HTTP報文格式?常用欄位?強快取和協商快取?
- HTTP和HTTPS的區別?HTTPS的建立過程?對稱加密和非u對稱加密?
- HTTP請求方式?GET和POST區別?
- 常見狀態碼?301和302區別?502和504區別?
- cookie和session區別?
- 跨域?怎樣解決跨域?
- SYN泛洪攻擊?XSS指令碼攻擊?csrf跨站請求偽造?解決方式?
- ARP欺騙?DNS劫持?傻瓜視窗?等等。。。
作業系統
個人覺得OS這塊還是比較好準備的,考的主要就是程序執行緒、虛擬記憶體這兩大塊比較多。Linux考的更多的是常用命令,以及給你個問題怎麼排查什麼的。
面試題舉例:
- 程序由什麼組成?程序的幾種狀態?低地址到高地址都存放哪些東西?
- 程序與執行緒的區別?
- 程序通訊方式有哪些,對比優缺點?
- 使用者態和核心態?
- 上下文是什麼?程序執行緒上下文切換?
- 程序排程演算法?產生死鎖必要條件?解決方式?
- 分頁和分段,頁面置換演算法?
- swap分割槽?fork函式?殭屍程序?孤兒程序?
- CPU快取?MESI瞭解嗎?等等
- IO模型?多路複用select、poll、epoll?
Java多執行緒
- Java中執行緒通訊方式
- Java中樂觀鎖?CAS問題?什麼時候用樂觀鎖?
- volatile關鍵字?如何防止重排序?底層指令?
- Sychronized 與 ReentrentLock 對比?
- Sychronized底層怎麼實現?MarkWord是什麼?偏向鎖、輕量級鎖、重量級鎖?自旋引數怎麼設定?
- AQS原理?如何實現的公平鎖,非公平鎖?
- 讀寫鎖?鎖降級?變數的高16位低16位分別儲存什麼資訊?
- CountDownLatch、CyclicBarrier、Semaphore?
- 執行緒池?7大引數?執行緒池工作過程?自帶的執行緒池為什麼不建議用?核心數量應該怎麼設定?
- 手寫個生產者消費者、阻塞佇列、多執行緒輪流列印ABC?等等吧
JVM
首先主要掌握就是JVM的記憶體劃分,各部分儲存什麼,幹什麼的,堆的劃分、物件分配原則(物件在老年代還是新生代,怎麼移動什麼的)、垃圾回收演算法、如何標記物件(引用計數法的缺點?GCroots法都哪些物件可以當作根)、物件由哪幾部分組成、垃圾回收器(就是G1、CMS可以主要看看,再者可以看下ZGC收集器)、雙親委派原則及破壞、類的載入過程(可以從.java生成.class過程說起,JIT編譯器)等等。
大多數比較常見的題目,再者就是JVM調優相關,這個怎麼說,就是按自己理解和專案的不同來說吧。
框架
面試的話也是主要看一看各個框架的原理和理解吧,例如Spring的IOC,AOP?迴圈依賴怎麼解決的?bean的生命週期?SpringBoot的啟動流程?RPC框架都包含哪幾部分?
面試中框架問的還是不多的,問也都是一些特性原理,常見的一些問題,花點時間準備下問題不大。
資料庫
- 引擎的區別?
- 索引(失效?聯合索引?索引建立原則?)
- 鎖(行鎖?表鎖?間隙鎖?)
- 事務(隔離級別,RR怎麼避免不可重複讀(MVCC)?又怎麼避免幻讀(MVCC+間隙鎖)?)
- B+樹索引和雜湊索引、聚集索引和非聚集索引?
- 回表查詢和索引覆蓋?
- 一條SQL執行過程是怎樣的?
- 資料過大怎麼優化分頁?
- 各個日誌,都幹什麼的?
- SQL過慢怎麼排查?Explain的關鍵欄位?
- MySQL中LUR怎麼改造的?為啥這麼改?等等。
- 主從複製?分庫分表依據?
Redis
- Redis為什麼快?
- Redis持久化方式?
- 資料型別?底層資料結構?
- 過期策略和記憶體淘汰策略?
- Redis 應用場景?
- pipeline批量處理的優點?
- 主從複製原理?cluster瞭解嗎?怎麼確定一個key落在哪個節點?一致性雜湊瞭解嗎?有什麼缺點?怎麼解決?
- 快取雪崩、快取穿透
- 如何保證快取與資料庫資料一致性?等等。
中介軟體
關於中介軟體,瞭解的可能首先就是訊息佇列,我最常使用的就是 RabbitMq,但是也要對其他的產品特性與應用場景有所瞭解,例如Kafka、RocketMq的對比。訊息佇列常問的問題例如:
- 訊息佇列應用場景,作用?
- 如何保證訊息可靠?
- 如何保證消費者冪等?
- 如何保證訊息順序性?
- MQ積壓了很多怎麼辦?等。
分散式
分散式相關的知識還是要掌握的,畢竟以後的系統都不可能是單點部署的,這就可以看下CAP理論?BASE理論?分散式事務?限流的方案?分散式id生成策略?分散式鎖?或者常用的Hystrix元件等。面試時還是考的居多的。
大資料型別
這類題可以多看幾個,思路大多大同小異,還是比較好準備的,例如:
- 海量資料整數,記憶體受限找中位數?
- 如何在100億URL中快速判斷某URL是否存在?
- 海量資料找次數TOP100?等等。
總結
面試是一場持久戰,在這個過程中你不僅會收穫 滿意的offer,鍛鍊自己的 表達能力和提高情商,還能 交到來自各個地方的朋友,那群曾經與你一起戰鬥的好朋友們!
寶劍鋒從磨礪出,梅花香自苦寒來。祝願大家拿到滿意的offer。
小編也把面試題和答案整理好啦:戳這裡免費領取,暗號:CSDN,還有更多大廠面試專題資料和視訊哦!
寫文不易,覺得有幫助還請點贊關注支援一下小編,也歡迎各位大佬提出問題,感謝!!!