1. 程式人生 > >Android面試題:okhttp

Android面試題:okhttp

相關視訊:

okhttp框架解析與應用

相關文章:

OKHttp原始碼解析(一)--初階

okhttp原始碼解析

Android面試題-OkHttp3原始碼分析

OkHttp原始碼解析

Okhttp與其他網路框架的對比:

Android 網路(三)

常見問題一:簡述一下OkHttp

OkHttp是一個非常優秀的網路請求框架,已被谷歌加入到Android的原始碼中。目前比較流行的Retrofit也是預設使用OkHttp的。

  • 支援HTTP1.0、HTTP1.1、HTTP2.0、SPDY
  • 支援同步非同步
  • 可以快取響應資料,來減少重複的網路請求
  • 可以從很多常用的連線問題中自動恢復
  • 使用簡單(api多,可擴充套件性好)

常見問題二:看過OkHttp的原始碼嗎,簡單說一下

上面是OKHttp總體設計圖,主要是通過Diapatcher不斷從RequestQueue中取出請求(Call),根據是否已快取呼叫Cache或Network這兩類資料獲取介面之一,從記憶體快取或是伺服器取得請求的資料。該引擎有同步和非同步請求,同步請求通過Call.execute()直接返回當前的Response,而非同步請求會把當前的請求Call.enqueue新增(AsyncCall)到請求佇列中,並通過回撥(Callback)的方式來獲取最後結果。

一、基本知識:

(一)、HTTP協議結構:

請求頭

  •     表明本次請求的客戶端
  •     本次請求所使用的cookie
  •     本次請求希望返回的資料型別
  •     本次請求是否採用資料壓縮等等一系列設定

請求體

  •     指定本次請求所使用的方法
  •     主要用來攜帶本次請求的引數    

響應頭

  •     伺服器標識
  •     狀態碼
  •     內容編碼
  •     返回給客戶端的cookie等

響應體

  •     本次請求所返回的資料

(二)、HTTP工作流程

    首先客戶機與伺服器需要建立連線(通過socket)
    建立連線後,客戶機發送一個請求給伺服器
    伺服器接到請求後,給予相應的響應資訊
    客戶端接受伺服器所返回的資訊,連線斷開

(三)、HTTP優勢:

  •     簡單快速
  •     靈活
  •     無連線
  •     無狀態

解釋:其中最重要的事無連線和無狀態,在早期的網際網路中,由於協議都是一些比較簡單的協議,內容基本上都是一些靜態的頁面、圖片等,所以無連線、無狀態的HTTP可以發揮自己簡單快速、靈活的優勢。 但隨著業務邏輯越來越複雜以及我們對安全性的重視,無連線、無狀態反而成為了HTTP的劣勢,所以也就又來後來更加高階的網際網路協議的誕生。

(四)、SPDY(發音spidi)

  •     SPDY是一種HTTP的相容協議
  •     支援多路複用請求
  •     對請求劃分優先順序(優先返回文字,圖片音訊等隨後返回)
  •     壓縮HTTP頭,以減少請求資料量

(五)、HTTP2.0介紹

  •     基於SPDY,IETF定製的新一代HTTP
  •     擁有更安全的SSL協議
     

(六)、okhttp

  •     為我們android客戶端支援HTTP2.0提供了途徑
  •     由著名的square團隊開發,開源
     

(七)、okhttp優勢:

  •     支援SPDY、HTTP2.0,共享同一個socket來處理同一個伺服器的所有請求
  •     如果SPDY不可用,則通過連線池來減少請求延時
  •     無縫支援GZIP來減少資料流量
  •     支援同步、非同步(非同步使用較多)
  •     快取響應資料來減少重複的網路請求
  •     可以從很多常用的連線問題中自動恢復
  •     使用簡單(api多,可擴充套件性好)

二、OkHttp

OKHttp原始碼解析

(一)、總體設計

上面是OKHttp總體設計圖,主要是通過Diapatcher不斷從RequestQueue中取出請求(Call),根據是否已快取呼叫Cache或Network這兩類資料獲取介面之一,從記憶體快取或是伺服器取得請求的資料。該引擎有同步和非同步請求,同步請求通過Call.execute()直接返回當前的Response,而非同步請求會把當前的請求Call.enqueue新增(AsyncCall)到請求佇列中,並通過回撥(Callback)的方式來獲取最後結果。

(二)、流程圖

(三)、詳細類關係圖

由於整個設計類圖比較大,所以本人將從核心入口client、cache、interceptor、網路配置、連線池、平臺適配性…這些方面來逐一進行分析原始碼的設計。下面是核心入口OkHttpClient的類設計圖

三、封裝

網路模組封裝好處;
    強大的可複用性;
    與業務邏輯完全隔離;
    強大的可擴充套件性;

封裝思路講解:
    封裝一個公共的OkHttpClient(超時時間等基本設定,get,post等請求方法);
    封裝一個通用的請求建立類CommonRequest;
    封裝一個通用的響應解析類JsonCommonRequest;