在準備面試過程中,發現一份不錯的很全面的面試視頻資源,它涵蓋的Java高級工程師所需要掌握的絕大部分知識點,將它整理成文檔形式,方便複習,以及後期學習的查漏補缺。
文末回覆 “面試” ,獲取視頻地址
由於篇幅過長,故分成上下兩篇,此篇主要講解:
- 操作系統與計算機網絡
- Java語言特性及設計模式
- 深入淺出JVM
- 併發與多線程
- 數據結構與算法
- 常用工具
1、操作系統與計算機網絡
面試題整理
- 進程與線程的區別與聯繫(資源的佔用,切換效率,通信方式)
- 簡單介紹一下進程的切換過程 (線程上下文的切換代價,切換保存寄存器、棧,用戶態切換內核態,vmstat 命令)
- 操作系統中的進程調度算法
- 經常使用的 Linux 命令,使用場景
- OSI 七層模型
- 簡述 TCP\UDP的區別
- TCP 如何實現可靠性傳輸
- TCP 的三次握手和四次揮手過程
- 爲什麼 TCP 關閉鏈接時需要 TIME_WAIT 狀態,爲什麼要等 2MSL?
- 一次完整的 HTTP 請求過程(DNS TCP HTTP)
- 簡述 HTTP 中 GET 和 POST 的區別
- HTTP2 與 HTTP 之間的區別
參考
https://www.cnblogs.com/midiyu/p/7897086.html
2、Java語言特性及設計模式
面試題整理
- 項目中使用過哪些設計模式?主要用來解決什麼問題?
- 簡單描述一下Java的異常機制
- 線上使用的哪個版本JDK,爲什麼使用這個版本(有什麼特徵)?
- Java的四種對象引用,及其各自的特點
- HashMap和ConcurrentHashMap的底層實現原理,在1.8中的改變
- 談談對JUC的理解
3、深入淺出JVM
面試題整理
- 簡單描述JVM的內存模型
- 什麼情況下會觸發 FullGC
- Java 類加載器有幾種,關係怎樣
- 雙親委派機制的加載流程及其好處
- 1.8爲什麼用 Metaspace 替換 PermGen,Metaspace 保存在哪裏
- 編譯器會對指令做哪些優化(簡單描述編譯器的指令重排)
- 對 ZGC 的瞭解,使用場景
- 簡單描述 volatile 可以解決什麼問題?如何做到的?
- 簡單描述 GC 的分代回收
- G1 垃圾回收算法與 CMS 的區別有哪些
- 對象引用有哪幾種方式,有什麼特點?
- 問題排查經驗與思路
- JVM 調優經驗和調優思路
4、併發與多線程
面試題整理
- 如何實現一個生產者與消費者模型?(鎖、信號量、線程通信、阻塞隊列等)
- 如何理解線程的同步與異步、阻塞與非阻塞?
- 線程池處理任務的流程是怎樣的?線程池的原理、使用場景、常用配置
- wait與sleep有什麼不同?(4點)
- Synchronized 和 ReentrantLock 有什麼不同?
- 讀寫鎖適用於什麼場景?ReentrantReadWriteLock是如何實現的?
- 線程之間如何通信?
- 保證線程安全的方法有哪些?
- 如何儘可能提高多線程併發性能?
- ThreadLocal用來解決什麼問題?ThreadLocal是如何實現的?
- 死鎖的產生條件?如何分析是否有線程死鎖?
- 在實現過程中遇到過什麼樣的併發問題,如何發現排查並解決的?
- JUC工具的使用場景和實現原理
- 瞭解Java8對JUC的增強
- 瞭解Reactive異步編程思想
5、數據結構與算法
面試題整理
- 各種排序算法實現和複雜度、穩定性
- 二叉樹的前、中、後序遍歷
- 翻轉句子中單詞的順序
- 用棧模擬隊列(或用隊列模擬棧)
- 對10億個數進行排序,限制內存爲1G(分治思想)
- 去掉(或找出)數組中重複的數字(排序、Hash)
- 將一顆二叉樹轉換成其鏡像
- 確定一個字符串中的括號是否匹配(單模、多模匹配)
- 給定一個開始詞,一個結束詞,一個字典,如何找到從開始詞到結束詞的最短單詞接龍路徑(深度優先搜索)
- 如何查找兩個二叉樹節點的最近公共祖先(遞歸和非遞歸實現)
6、常用工具
JVM工具
面試題整理
- 排查JVM問題有哪些常用工具?(曾經遇到的問題,如何排查,如何解決)
- Git合併代碼有哪兩種方法?有什麼區別?
- Git與SVN有哪些區別
關注後,回覆“面試”
回覆 “面試” 即可,獲取視頻地址