【乾貨】Java崗面試考點大合集

大閒人柴毛毛發表於2018-03-07

本文是根據我的阿里面試經驗,為大家整理Java程式猿面試所需的知識體系(持續更新中)。

【乾貨】Java崗面試考點大合集

第一部分:計算機基礎

網際網路大廠都相當重視程式設計師的基本功,也就是計算機基礎知識。一個程式設計師能走多遠、爬多高,很大程度上取決於基本功是否紮實。對於應屆生而言,大都比較缺乏實戰專案經驗,雖然會有一定的專案經驗,但這些課程設計、實驗室專案的質量與公司實際的專案有著巨大的差距。因此,基礎知識便成為面試考量的一大重點,而且基礎紮實的程式設計師可塑性比較高,做什麼都能比較容易快速上手。

計算機基礎包含如下幾門課程,相信計算機專業的同學肯定都已經學過。但網際網路公司面試的考點可能和你們期末考試的考點有一些不同,我都做了整理。

1. 計算機網路

大學課程中的計算機網路一般都按照OSI七層參考模型介紹,然而由於網際網路公司的特性,他們更加關注日常開發所涉及到的傳輸層和應用層,所以需要重點掌握傳輸層和應用層中所涉及到的所有知識點。

考點

  • 傳輸層的作用
  • 傳輸層複用和分用的含義
  • 傳輸層和網路層的區別
  • UDP協議的特點
  • UDP協議的報文結構
  • TCP協議的特點
  • TCP協議的報文結構
  • TCP三次握手過程
  • TCP四次揮手過程
  • TCP可靠傳輸是如何實現的
  • 停止等待協議
  • 滑動視窗協議
  • TCP的流量控制
  • TCP擁塞控制
  • HTTP協議
    • HTTP工作流程
    • HTTP請求格式
    • HTTP 1.1中的8種請求方式
    • HTTP響應格式
    • HTTP中重要的請求頭和響應頭欄位
    • HTTP常用狀態碼及其含義
  • HTTPS協議
    • HTTPS協議與HTTP協議的區別
    • HTTPS協議的工作流程

資料整理

2. 資料結構

熟練掌握資料結構是程式設計師最最最基本的素養,在實際開發中選擇合適的資料結構將極大影響程式的效率。面試官一般並不會直接問資料結構的問題,而是通過出一些包含資料結構的演算法題來考察你對資料結構的理解程度以及在實際專案中是否能夠靈活應用。你可以通過刷演算法題來提升這部分能力,推薦《劍指offer》和《程式設計師面試金典》(注意是金典!)。很多公司的演算法題庫都選自這兩本書。

當然,刷這兩本書的目的並不是讓你死記硬背題目,題目千變萬化,面試官可以隨意改變。刷演算法題最重要的是培養解決問題的思路和解決實際問題的能力。在刷題的過程中要多多總結,再次強調,切忌死記硬背!

3. 演算法

和資料結構一樣,演算法一般也通過具體的演算法題來考察,你也可以通過刷《劍指offer》和《程式設計師面試金典》中的演算法題來提高這方面的技能。但在刷這些演算法題之前,你需要掌握幾類基礎的演算法,並理解他們解決問題的思路(這才是最為關鍵的)。這些演算法我已經在下面整理。

4. 作業系統

考點

  • 作業系統的四個特性。
  • 作業系統的主要功能。
  • 程式的有哪幾種狀態,狀態轉換圖,及導致轉換的事件。
  • 程式與執行緒的區別。
  • 程式通訊的幾種方式。
  • 程式同步的幾種方式
  • 使用者態和核心態的區別。
  • 死鎖的概念,導致死鎖的原因。
  • 導致死鎖的四個必要條件。
  • 處理死鎖的四個方式。
  • 預防死鎖的方法、避免死鎖的方法。
  • 程式排程演算法。
  • 記憶體連續分配方式採用的幾種演算法及各自優劣。
  • 基本分頁儲存管理方式。
  • 基本分段儲存管理方式。
  • 分段分頁方式的比較各自優缺點。
  • 幾種頁面置換演算法,會算所需換頁數
  • 虛擬記憶體的定義及實現方式。

資料整理

5. 資料庫

考點

  • 什麼是索引?
  • 索引的分類
  • 索引的優缺點分析
  • 何時需要使用索引?何時無需使用索引?
  • 什麼是事務?
  • 事務的四大特性
  • 資料庫三大正規化
  • 資料庫有哪些表連線?

資料整理


第二部分:Java

作為一名合格的Java程式設計師,僅瞭解如何使用Java是遠遠不夠的。你能夠熟練使用Java只能說明你已經成為一名合格的碼農,能夠利用Java實現某些功能。而公司作為盈利機構,需要用最少的資源實現效益最大化,這就需要程式設計師具備高質量程式碼的能力,而能否寫出高質量程式碼取決於你對技術背後原理的理解程度。只有在理解Java背後的原理,你才能根據Java的特性,寫出更加高效的程式碼。這在實際業務中是非常有價值的事情。網際網路大廠服務海量使用者,更加註重系統的效能,也更加註重程式設計師對原理的理解。

關於Java的基礎知識和如何使用,這裡我就不提了,隨便一本Java書籍都有詳細的介紹。這裡我整理了Java原理性的知識點,這些知識點將會成為你面試的加分項。

1. Java虛擬機器

考點

  • Java虛擬機器記憶體模型特點和作用
    • 程式計數器
    • Java虛擬機器棧
    • 本地方法區
    • 方法區
  • 物件建立過程
  • 物件訪問過程
  • 物件的記憶體結構
  • 垃圾收集演算法
  • 如何判定哪些物件需要回收?
  • 物件記憶體分配策略
  • 分配擔保機制
  • 垃圾收集器的比較
  • Class檔案結構
  • 類載入的時機
  • 類載入過程
  • 雙親委派模型

知識點資源整理


2. Java併發程式設計

考點

  • 什麼是死鎖?如何避免死鎖?
  • 什麼是重排序?
  • volatile有哪些特性?
  • 什麼是記憶體可見性?
  • volatile為什麼能夠保證記憶體可見性?
  • 中斷機制
  • 執行緒通訊有哪些方式?
  • 執行緒池的作用?
  • ThreadPoolExecutor如何使用?
  • 如何設定執行緒池的大小?
  • 如何保證執行緒安全?
  • JDK 1.6哪些對鎖做了哪些優化?

知識點資源整理


3. Java 容器考點及資料整理


4. Java IO 考點及資料整理


5. Java其他知識點彙總

【乾貨】Java崗面試考點大合集

相關文章