Android面試一天一題(Day 40:標(biāo)配RxJava+Retrofit+OkHttp該怎么面野崇?)

這近兩年RxJava和Retrofit都很熱門,Android SDK4.4版本后其HttpURLConnection的內(nèi)部實(shí)現(xiàn)已經(jīng)變?yōu)镺kHttp亩钟,很多公司也在開(kāi)始嘗試使用RxJava+Retrofit+OkHttp組合做為應(yīng)用框架的根基乓梨。網(wǎng)上這類教程也遍地開(kāi)花,不管是工作幾年的Android工程師們清酥,還是在象牙塔中的準(zhǔn)工程師們都把“RxJava+Retrofit+OkHttp的組合”定為了自己的標(biāo)配扶镀。

不過(guò)問(wèn)題也就來(lái)了,如果大家的框架都是同一個(gè)組合焰轻,那么面試官怎么考察不同的面試者對(duì)這個(gè)框架的理解和應(yīng)用呢臭觉?或者換一個(gè)角度說(shuō),你作為面試者辱志,怎么樣在簡(jiǎn)歷或者面試中體現(xiàn)你對(duì)“標(biāo)配”的理解和運(yùn)用蝠筑,來(lái)突出自己呢?

面試題:你是怎么搭建Android應(yīng)用框架的揩懒?

如果問(wèn)這樣的面試題什乙,我想(我也試過(guò))很多人都會(huì)回答上面所說(shuō)的“標(biāo)配”組合,頂多再加下MVP或者M(jìn)VVM模式已球,然后就構(gòu)成了一個(gè)比較流行的應(yīng)用框架臣镣。

不可否認(rèn)這確實(shí)是一個(gè)不錯(cuò)的選擇辅愿,那么如果是我們?cè)谡线@些庫(kù)和模式成為一個(gè)框架,我們是基于什么樣的原則選擇它們的呢忆某?

RxJava
給我們的項(xiàng)目引入響應(yīng)式編程方式渠缕,讓異步方式變得更簡(jiǎn)潔,而且它的簡(jiǎn)潔與眾不同之處在于褒繁,隨著程序邏輯變得越來(lái)越復(fù)雜亦鳞,它依然能夠保持簡(jiǎn)潔。它流式編程的思想棒坏,豐富的操作符燕差,線程的任意切換等優(yōu)點(diǎn)廣受大家的喜愛(ài)。

響應(yīng)式編程是一種面向數(shù)據(jù)流和變化傳播的編程范式坝冕。這意味著可以在編程語(yǔ)言中很方便地表達(dá)靜態(tài)或動(dòng)態(tài)的數(shù)據(jù)流徒探,而相關(guān)的計(jì)算模型會(huì)自動(dòng)將變化的值通過(guò)數(shù)據(jù)流進(jìn)行傳播。

Retrofit
Retrofit是一個(gè)RESTful的Http網(wǎng)絡(luò)請(qǐng)求框架的封裝喂窟。注意這里并沒(méi)有說(shuō)它是網(wǎng)絡(luò)請(qǐng)求框架测暗,主要原因在于網(wǎng)絡(luò)請(qǐng)求的工作并不是Retrofit來(lái)完成的。

Retrofit 2.0開(kāi)始內(nèi)置OkHttp磨澡,前者專注于接口的封裝碗啄,后者專注于網(wǎng)絡(luò)請(qǐng)求的高效,二者分工協(xié)作稳摄。

而且Retrofit提供不同的Converter實(shí)現(xiàn)(也可以自定義)稚字,同時(shí)提供RxJava支持(返回Observable對(duì)象),配合Gson和RxJava厦酬,你可以用很少的代碼就實(shí)現(xiàn)請(qǐng)求胆描、返回?cái)?shù)據(jù)解析和操作等功能。

OkHttp
OkHttp是Retrofit底層使用的Http請(qǐng)求庫(kù)仗阅,都是Square公司的開(kāi)源產(chǎn)品昌讲。OkHttp是一個(gè)快速、高效的Http客戶端實(shí)現(xiàn)减噪,它幫我們完成了很多很多事情:

  • 支持SPDY, 可以合并多個(gè)到同一個(gè)主機(jī)的請(qǐng)求
  • 使用連接池技術(shù)減少請(qǐng)求的延遲(如果SPDY是可用的話)
  • 使用GZIP壓縮減少傳輸?shù)臄?shù)據(jù)量
  • 緩存響應(yīng)避免重復(fù)的網(wǎng)絡(luò)請(qǐng)求
  • ......

OkHttp還提供了攔截器(Interceptors)短绸,方便我們來(lái)監(jiān)控,改寫(xiě)和重試HTTP訪問(wèn)旋廷。通過(guò)攔截器鸠按,我們很容易就能實(shí)現(xiàn)對(duì)Http的請(qǐng)求和響應(yīng)記錄到日志礼搁。

整合

如果我們直接這樣組合就認(rèn)為是一個(gè)應(yīng)用框架的話饶碘,那我認(rèn)為你還沒(méi)有真正認(rèn)識(shí)框架,或者沒(méi)有遇到稍大一點(diǎn)復(fù)雜一點(diǎn)的項(xiàng)目馒吴,所以你毫不費(fèi)力就有了自己“高大上”的框架扎运。

但是在你整合這些庫(kù)時(shí)瑟曲,你更應(yīng)該學(xué)習(xí)一下他們是怎么能無(wú)縫地對(duì)接上的,這一點(diǎn)也是我認(rèn)為可以問(wèn)面試者的一個(gè)重要的點(diǎn)豪治。

如Retrofit的解耦方式:

1洞拨、通過(guò)注解來(lái)配置請(qǐng)求參數(shù);

2负拟、通過(guò)工廠來(lái)生成CallAdapter烦衣,Converter。

  • 你可以使用不同的請(qǐng)求適配器(CallAdapter)掩浙,比如RxJava花吟;
  • 你可以使用不同的反序列化工具(Converter),比如Gson厨姚、protobuff等衅澈。
Retrofit retrofit = new Retrofit.Builder()
  .baseUrl("http://api.github.com/api/")
  .addConverterFactory(GsonConverterFactory.create())
  .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
  .build();

Retrofit是如何做到的呢?其間的實(shí)現(xiàn)代碼值得好好看看谬墙,好在代碼量并不是很大今布,看前先學(xué)習(xí)一個(gè)Java動(dòng)態(tài)代理方面的知識(shí),也可緩解一些“痛苦”拭抬。

所以總結(jié)果一下部默,關(guān)于標(biāo)配我會(huì)這樣問(wèn):RxJava+Retrofit+OkHttp的內(nèi)部是如何整合在一起的,還有就是它們?nèi)绾魏蛿?shù)據(jù)與業(yè)務(wù)邏輯層進(jìn)行整合造虎?

看大家的熱情甩牺,也許稍后會(huì)就這個(gè)整合進(jìn)行案列展示。

小結(jié)

很多面試者只是把“RxJava+Retrofit+OkHttp”的使用做為標(biāo)配了累奈,即使你用了這個(gè)組合贬派,它對(duì)于自身的技能或者架構(gòu)能力提升其實(shí)并不大,相反因?yàn)樘菀琢伺烀剑曳庋b得比較好還會(huì)減少你遇到問(wèn)題的機(jī)會(huì)搞乏,當(dāng)然也會(huì)讓你失去提升的機(jī)會(huì)。

所以戒努,我關(guān)注怎么整合它們请敦,并學(xué)會(huì)他們整合在一起的具體方法和手段。

相關(guān)面試題
1储玫、MVP和MVVM模式:
“Android面試一天一題(Day 33:Android開(kāi)發(fā)的套路MVP & MVVM)”
2侍筛、第三方開(kāi)源庫(kù):
“Android面試一天一題(Day 32:談?wù)勈褂眠^(guò)的第三方開(kāi)源庫(kù))”

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市撒穷,隨后出現(xiàn)的幾起案子匣椰,更是在濱河造成了極大的恐慌,老刑警劉巖端礼,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件禽笑,死亡現(xiàn)場(chǎng)離奇詭異入录,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)佳镜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門僚稿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蟀伸,你說(shuō)我怎么就攤上這事蚀同。” “怎么了啊掏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵唤崭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我脖律,道長(zhǎng)谢肾,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任小泉,我火速辦了婚禮芦疏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘微姊。我一直安慰自己酸茴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布兢交。 她就那樣靜靜地躺著薪捍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪配喳。 梳的紋絲不亂的頭發(fā)上酪穿,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音晴裹,去河邊找鬼被济。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涧团,可吹牛的內(nèi)容都是我干的只磷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泌绣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钮追!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起阿迈,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤元媚,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體惠毁,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年崎页,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鞠绰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡飒焦,死狀恐怖蜈膨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情牺荠,我是刑警寧澤翁巍,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站休雌,受9級(jí)特大地震影響灶壶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杈曲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一驰凛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧担扑,春花似錦恰响、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至燕垃,卻和暖如春枢劝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卜壕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工呈野, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人印叁。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓被冒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親轮蜕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子昨悼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,527評(píng)論 25 707
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,401評(píng)論 2 45
  • 天空在逐漸的褪色 雨滴卻還不忍告別 在草叢里 在石階上 還有我那攤開(kāi)的手心兒 都有她的痕跡 她是一個(gè)調(diào)皮的姑娘 在...
    月誠(chéng)閱讀 315評(píng)論 0 2
  • 上一篇文章《泥城 食記》介紹了幾家景德鎮(zhèn)的美食跃洛,顯然這一篇是要介紹景德鎮(zhèn)的美景率触。景德鎮(zhèn)最美的景色無(wú)疑是陶瓷。這幾...
    親愛(ài)的戈多在哪閱讀 640評(píng)論 6 0
  • 首先介紹下該片導(dǎo)演:劉國(guó)楠汇竭,一位西北漢子葱蝗,他竟是老謀子的副導(dǎo)以及很多廣告穴张,宣傳片的導(dǎo)演,這是他第一次獨(dú)立執(zhí)導(dǎo)...
    妞crystal閱讀 419評(píng)論 0 0