. 前言
面試考察的知識點多而雜,要完全掌握需要花費大量的時間和精力。但是面試中經常被問到的知識點卻沒有多少,你完全可以用 20% 的時間去掌握 80% 常問的知識點。在這裏我將這 80% 常問的知識點整理出來,方便大家快速地掌握。這些知識點也標註了重要程度,從而讓大家可以根據知識點的重要程度去制定學習計劃。
如果你想更好的學習這些知識點,可以參考 知識總結方法 一文,這篇文章的最後給出了比本文更詳細的思維導圖。
下圖列出了面試考察的九大知識點,也標出了重要程度和複習難度。
其實重要程度根據不同的公司會有所不同,針對上圖做一下幾點說明:
- 分佈式與系統設計部分對於大廠面試來說至關重要,但是小廠面試考察的會少一點。
- 語言基礎部分,阿里喜歡問 Java、騰訊喜歡問 C++,其它大廠面試考察會少一些,小廠面試會考察多一些。
- 數據庫、中間件和框架部分對於大廠面試來說不是那麼重要,但是對於小廠面試會重要一些。
最後再說一下項目部分,它在實習招聘階段中不是特別重要,但是在校園招聘階段重要程度會增高。但是如果你的學歷不好,而且沒有博客、開源項目、競賽等加分項,那麼最好做個比較出色的項目來增加簡歷通過率。
💻
2. 操作系統
2.1 基礎
- ★★★ 進程與線程的本質區別、以及各自的使用場景。
- ★☆☆ 進程狀態。
- ★★★ 進程調度算法的特點以及使用場景。
- ★☆☆ 線程實現的方式。
- ★★☆ 協程的作用。
- ★★☆ 常見進程同步問題。
- ★★★ 進程通信方法的特點以及使用場景。
- ★★★ 死鎖必要條件、解決死鎖策略,能寫出和分析死鎖的代碼,能說明在數據庫管理系統或者 Java 中如何解決死鎖。
- ★★★ 虛擬內存的作用,分頁系統實現虛擬內存原理。
- ★★★ 頁面置換算法的原理,特別是 LRU 的實現原理,最好能手寫,再說明它在 Redis 等作爲緩存置換算法。
- ★★★ 比較分頁與分段的區別。
- ★★★ 分析靜態鏈接的不足,以及動態鏈接的特點。
2.2 Linux
- ★★☆ 文件系統的原理,特別是 inode 和 block。數據恢復原理。
- ★★★ 硬鏈接與軟鏈接的區別。
- ★★☆ 能夠使用常用的命令,比如 cat 文件內容查看、find 搜索文件,以及 cut、sort 等管線命令。瞭解 grep 和 awk 的作用。
- ★★★ 殭屍進程與孤兒進程的區別,從 SIGCHLD 分析產生殭屍進程的原因。
☁️
3. 網絡
3.1 基礎
- ★★★ 各層協議的作用,以及 TCP/IP 協議的特點。
- ★★☆ 以太網的特點,以及幀結構。
- ★★☆ 集線器、交換機、路由器的作用,以及所屬的網絡層。
- ★★☆ IP 數據數據報常見字段的作用。
- ★☆☆ ARP 協議的作用,以及維護 ARP 緩存的過程。
- ★★☆ ICMP 報文種類以及作用;和 IP 數據報的關係;Ping 和 Traceroute 的具體原理。
- ★★★ UDP 與 TCP 比較,分析上層協議應該使用 UDP 還是 TCP。
- ★★★ 理解三次握手以及四次揮手具體過程,三次握手的原因、四次揮手原因、TIME_WAIT 的作用。
- ★★★ 可靠傳輸原理,並設計可靠 UDP 協議。
- ★★☆ TCP 擁塞控制的作用,理解具體原理。
- ★★☆ DNS 的端口號;TCP 還是 UDP;作爲緩存、負載均衡。
3.2 HTTP
- ★★★ GET 與 POST 比較:作用、參數、安全性、冪等性、可緩存。
- ★★☆ HTTP 狀態碼。
- ★★★ Cookie 作用、安全性問題、和 Session 的比較。
- ★★☆ 緩存 的Cache-Control 字段,特別是 Expires 和 max-age 的區別。ETag 驗證原理。
- ★★★ 長連接與短連接原理以及使用場景,流水線。
- ★★★ HTTP 存在的安全性問題,以及 HTTPs 的加密、認證和完整性保護作用。
- ★★☆ HTTP/1.x 的缺陷,以及 HTTP/2 的特點。
- ★★★ HTTP/1.1 的特性。
- ★★☆ HTTP 與 FTP 的比較。
3.3 Socket
- ★★☆ 五種 IO 模型的特點以及比較。
- ★★★ select、poll、epoll 的原理、比較、以及使用場景;epoll 的水平觸發與邊緣觸發。
💾
4. 數據庫
4.1 SQL
- ★★☆ 手寫 SQL 語句,特別是連接查詢與分組查詢。
- ★★☆ 連接查詢與子查詢的比較。
- ★★☆ drop、delete、truncate 比較。
- ★★☆ 視圖的作用,以及何時能更新視圖。
- ★☆☆ 理解存儲過程、觸發器等作用。
4.2 系統原理
- ★★★ ACID 的作用以及實現原理。
- ★★★ 四大隔離級別,以及不可重複讀和幻影讀的出現原因。
- ★★☆ 封鎖的類型以及粒度,兩段鎖協議,隱式和顯示鎖定。
- ★★★ 樂觀鎖與悲觀鎖。
- ★★★ MVCC 原理,當前讀以及快照讀,Next-Key Locks 解決幻影讀。
- ★★☆ 範式理論。
- ★★★ SQL 與 NoSQL 的比較。
4.3 MySQL
- ★★★ B+ Tree 原理,與其它查找樹的比較。
- ★★★ MySQL 索引以及優化。
- ★★★ 查詢優化。
- ★★★ InnoDB 與 MyISAM 比較。
- ★★☆ 水平切分與垂直切分。
- ★★☆ 主從複製原理、作用、實現。
- ★☆☆ redo、undo、binlog 日誌的作用。
4.4 Redis
- ★★☆ 字典和跳躍表原理分析。
- ★★★ 使用場景。
- ★★★ 與 Memchached 的比較。
- ★☆☆ 數據淘汰機制。
- ★★☆ RDB 和 AOF 持久化機制。
- ★★☆ 事件驅動模型。
- ★☆☆ 主從複製原理。
- ★★★ 集羣與分佈式。
- ★★☆ 事務原理。
- ★★★ 線程安全問題。
5. 面向對象
5.1 思想
- ★★★ 面向對象三大特性
- ★☆☆ 設計原則
5.2 設計模式
- ★★☆ 設計模式的作用。
- ★★★ 手寫單例模式,特別是雙重檢驗鎖以及靜態內部類。
- ★★★ 手寫工廠模式。
- ★★★ 理解 MVC,結合 SpringMVC 回答。
- ★★★ 理解代理模式,結合 Spring 中的 AOP 回答。
- ★★★ 分析 JDK 中常用的設計模式,例如裝飾者模式、適配器模式、迭代器模式等。