寫在前面
走過春招,跨過秋招,一年又一年,又將踏入新的一年。事實上,面試問題幾乎集中在JAVA基礎、JVM、算法、數據庫(MySQL、Redis)、計算機網絡、操作系統等方面,接下來小編會分類進行列舉(敲黑板,這都是要考的重點啦)!!!
注意注意:6大面試技能樹對應的“具體筆記詳解”分享在文中,私信“學習”可免費獲取!!
01 設計模式(23種設計模式)
- 單例模式 懶漢、餓漢、雙重校驗鎖、靜態內部類
- 工廠模式
02 JAVA基礎(HashMap,線程池)
- 抽象類和接口區別
- 集合類的結構 Iterator、Collection(List、Set、Queue)、Map
- ArrayList和LinkedList的區別
2.1 HashMap
- 底層結構 數組 + 鏈表
- Put 的過程
- 為什麼長度是2的倍數 找索引時 key 的 hash 值與數組的長度值減 1 進行與運算,長度為 2 的倍數時能減少碰撞
- JDK 1.7 和 1.8 中 HashMap 的區別 1.8 增加紅黑樹、頭插變為尾插、擴容後元素位置要麼在原位置,要麼在原位置 + 擴容前舊容量
- 為什麼線程不安全 擴容時鏈表可能形成閉環
- ConcurrentHashMap 怎麼保證線程安全
- ConcurrentHashMap 和 HashMap 區別
2.2 線程池
- 線程池常用參數 核心線程數、最大線程數、阻塞隊列、線程最大存活時間
- 線程池工作流程
- 線程池的類別和區別
- 阻塞隊列的類別和區別
03 JVM
- 內存結構和各自存放的內容 方法區、堆、虛擬機棧、本地方法棧、程序計數器
- 新生代和老年代垃圾回收算法 新生代 -> 複製,老年代 -> 標記-整理(CMS用的標記-清除)
- CMS/G1的流程 初始標記 -> 併發標記 -> 重新標記 -> 併發清除
- CMS/G1的特點和區別 CMS:儘可能減少停頓時間,採用標記-清除,會造成內存碎片化 G1:可以預測停頓時間,採用標記-整理,減少內存碎片化, 將內存劃分為 region 粒度
- 判斷垃圾是否可以回收的方法 引用計數法、可達性分析法
- 哪些對象可以作為GC ROOT
04 Spring
- IOC 和 AOP 的含義和原理
- Spring、SpringBoot、SpringMVC 的區別
- SpringBoot 的啟動流程
- Bean 的生命週期
- SpringMVC 的流程
05 MySQL(事務,索引)
5.1 事務
- 什麼是事務
- 事務的特性(ACID),詳細說明各個特性的含義 原子性、一致性、隔離性、持久性
- 事務隔離級別 未提交讀 -> 已提交讀 -> 可重複讀 -> 串行化
- 髒讀、不可重複讀、幻讀的區別
- 事務隔離級別怎麼實現預防上述問題(eg: 可重複讀怎麼實現預防不可重複讀)
5.2 索引
- 常用索引(B樹、Hash)
- 聚簇索引和非聚簇索引的區別
- 聯合索引和單個索引的區別,聯合索引的最左匹配原則
- B樹和B+樹的區別 B+樹的非葉子節點不保存數據,所以磁盤頁能容納更多節點元素,更“矮胖” B+樹查詢必須查找到葉子節點,B樹只要匹配到即可不用管元素位置,因此B+樹查找更穩定(也不慢) 對於範圍查找來說,B+樹只需遍歷葉子節點鏈表即可,B樹卻需要重複地中序遍歷
06 Redis
- Redis 的五種數據結構 String、Hash、List、Set、Zset(SortSet)
- Redis 為什麼快 純內存、單線程、IO多路複用(一般會繼續問IO多路複用相關問題)
- Redis 持久化 RDB、AOF
- Redis 高可用 哨兵機制、Redis Cluster、持久化(上面那個)
07 計算機網絡(TCP & UDP,HTTPS)
- 點擊一個URL到頁面返回,發生了什麼 客戶端傳給服務端時經過 TCP/IP 四層模型,中途依次加入HTTP報文、TCP報文、IP報文、MAC報文,然後逆序依次拆包
- OSI 七層模型 & TCP/IP 四層模型
- cookie 和 session 的區別
7.1 TCP & UDP
- TCP 三次握手,四次揮手的流程(最好能畫圖,說明各階段狀態)
- 為什麼需要三次握手 防止已過期的連接再次傳到被連接的主機
- 為什麼需要四次揮手 / 斷開連接時為什麼比建立連接多一次 服務端的 ACK 和 FIN 一般都會分開發送,ACK 表示自己收到了客戶端的斷開請求(但還有數據沒傳輸完),FIN 表示自己傳輸完了數據
- TCP 和 UDP 的區別
- TIME_WAIT 的作用 保證客戶端發送的最後一個ACK報文能夠到達服務器 防止類似與“三次握手”中提到了的“已經失效的連接請求報文段”出現在本連接中。客戶端發送完最後一個確認報文後,在這個2MSL時間中,就可以使本連接持續的時間內所產生的所有報文段都從網絡中消失
7.2 HTTPS
- HTTPS的優勢 CA證書認證、加密傳輸
- HTTPS建立連接流程
- 為什麼傳輸過程中採用對稱加密,協商時採用非對稱加密 對稱加密快
08 操作系統(進程 & 線程, Linux(幾乎為Linux命令),算法)
8.1 進程 & 線程
- 進程和線程的區別
- 進程間通信方式 管道、消息隊列、信號量、共享內存
- 線程間通信方式 消息隊列、全局變量
8.2 Linux(幾乎為Linux命令)
- 查找某個進程(ps aux |grep threadId)
- 殺掉某個進程(kill,參數添加-9表示強制執行)
- 查看某個端口是否被佔用(netstat -anp |grep threadId)
- 實時查看進程狀態(top)
8.3 算法
- 最大子序列和
- 反轉鏈表
- 數組中查找兩數之和為K的序列對
最後總結
跳槽無處不在,時時刻刻都在發現,新年即將來臨,弱弱的問一句:你真的準備好了嗎?
如果你正在準備2020的春招,那麼建議看看這篇6大JAVA面試技能樹:JAVA基礎+JVM+算法+數據庫+計算機網絡+操作系統,6大方向的具體筆記解析也會免費分享給大家一起學習
關注一下免費獲取學習方式:轉發 轉發 轉發+私信 私信 私信 “學習”
小編會一一回復,按回復操作即可免費領取!!!
閱讀更多 追逐仰望星空 的文章