日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

温故而知新!这篇文章可以满足你80%日常工作!面试真题解析

發(fā)布時間:2023/11/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 温故而知新!这篇文章可以满足你80%日常工作!面试真题解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

程序員這個行業(yè),日新月異,技術(shù)體系更新速度快,新技術(shù)新框架層出不窮,所有的技術(shù)都像是一個無底洞,當(dāng)你學(xué)得越多就會發(fā)現(xiàn)不懂的越多,不懂的越多,需要學(xué)習(xí)的就更多。

因此,一旦選擇了這個行業(yè),就意味著你必須不斷學(xué)習(xí)才能跟得上大家的腳步,而要想成為一名優(yōu)秀的程序員,更是需要通過正確的方法,設(shè)定正確的目標(biāo)來進(jìn)行不斷地學(xué)習(xí)。

作為一名常年在各種技術(shù)群里吹水卻又無比熱心腸的老司機(jī),看到有人提問時,總是會蹦出來幫忙解決問題,因此,群里的很多小伙伴經(jīng)常會找我詢問應(yīng)該怎么樣學(xué)習(xí)一門技術(shù),和大家也都非常親切了。

只要需要幫助的地方就會有我的身影,所以,為了幫助部分同學(xué)解決一些學(xué)習(xí)上的困惑,今天我就來分享和探討下我的一些學(xué)習(xí)經(jīng)驗,大家如果有什么意見或建議,歡迎在評論中留言哈。

組件化

1.1 組件化初衷

  • APP版本不斷的迭代,新功能的不斷增加,業(yè)務(wù)也會變的越來越復(fù)雜,維護(hù)成本高。
  • 業(yè)務(wù)耦合度高,代碼越來越臃腫,團(tuán)隊內(nèi)部多人協(xié)作開發(fā)困難。
  • Android項目在編譯代碼的時候電腦會非常卡,又因為單一工程下代碼耦合嚴(yán)重,每修改一處代碼后都要重新編譯打包測試,導(dǎo)致非常耗時。
  • 方便單元測試,改動單獨一個業(yè)務(wù)模塊,不需要著重于關(guān)注其他模塊被影響。

1.2 什么是組件化

組件化就是將一個app分成多個Module,如下圖,每個Module都是一個組件(也可以是一個基礎(chǔ)庫供組件依賴),開發(fā)的過程中我們可以單獨調(diào)試部分組件,組件間不需要互相依賴,但可以相互調(diào)用,最終發(fā)布的時候所有組件以lib的形式被主app工程依賴并打包成一個apk。

1.3 組件化優(yōu)勢

  • 組件化就是將通用模塊獨立出來,統(tǒng)一管理,以提高復(fù)用,將頁面拆分為粒度更小的組件,組件內(nèi)部除了包含UI實現(xiàn),還包含數(shù)據(jù)層和邏輯層。
  • 每個工程都可以獨立編譯、加快編譯速度,獨立打包。
  • 每個工程內(nèi)部的修改,不會影響其他工程。
  • 業(yè)務(wù)庫工程可以快速拆分出來,集成到其他App中。
  • 迭代頻繁的業(yè)務(wù)模塊采用組件方式,業(yè)務(wù)線研發(fā)可以互不干擾、提升協(xié)作效率,并控制產(chǎn)品質(zhì)量,加強(qiáng)穩(wěn)定性。
  • 并行開發(fā),團(tuán)隊成員只關(guān)注自己的開發(fā)的小模塊,降低耦合性,后期維護(hù)方便等。

2 組件化通信

2.1 組件化通信

組件化互相不直接依賴,如果組件A想調(diào)用組件B的方法是不行的。很多開發(fā)者因為組件化之間通信比較復(fù)雜 則放棄了組件化的使用

組件通信有以下幾種方式:

####### 1.本地廣播

本地廣播,也就是LoacalBroadcastRecevier。更多是用在同一個應(yīng)用內(nèi)的不同系統(tǒng)規(guī)定的組件進(jìn)行通信,好處在于:發(fā)送的廣播只會在自己的APP內(nèi)傳播,不會泄漏給其他的APP,其他APP無法向自己的APP發(fā)送廣播,不用被其他APP干擾。本地廣播好比對講通信,成本低,效率高,但有個缺點就是兩者通信機(jī)制全部委托與系統(tǒng)負(fù)責(zé),我們無法干預(yù)傳輸途中的任何步驟,不可控制,一般在組件化通信過程中采用比例不高。

2.進(jìn)程間的AIDL

進(jìn)程間的AIDL。這個粒度在于進(jìn)程,而我們組件化通信過程往往是在線程中,況且AIDL通信也是屬于系統(tǒng)級通信,底層以Binder機(jī)制,雖說Android提供模板供我們實現(xiàn),但往往使用者不好理解,交互比較復(fù)雜,往往也不適用應(yīng)用于組件化通信過程中。

3.匿名的內(nèi)存共享

匿名的內(nèi)存共享。比如用Sharedpreferences,在處于多線程場景下,往往會線程不安全,這種更多是存儲一一些變化很少的信息,比如說組件里的配置信息等等

4.Intent Bundle傳遞

Intent Bundle傳遞。包括顯性和隱性傳遞,顯性傳遞需要明確包名路徑,組件與組件往往是需要互相依賴,這背離組件化中SOP(關(guān)注點分離原則),如果走隱性的話,不僅包名路徑不能重復(fù),需要定義一套規(guī)則,只有一個包名路徑出錯,排查起來也稍顯麻煩,這個方式往往在組件間內(nèi)部傳遞會比較合適,組件外與其他組件打交道則使用場景不多。

2.2 目前主流做法之一就是引入第三者,比如圖中的Base Module。

3 ARouter組件通信框架

3.1 ARouter 簡介

是ARouter是阿里巴巴開源的Android平臺中對頁面、服務(wù)提供路由功能的中間件,提倡的是簡單且夠用。主要用作組件化通信

Intent intent = new Intent(mContext, XxxActivity.class);intent.putExtra("key","value");startActivity(intent);Intent intent = new Intent(mContext, XxxActivity.class);intent.putExtra("key","value");startActivityForResult(intent, 666);

上面一段代碼,在Android開發(fā)中,最常見也是最常用的功能就是頁面的跳轉(zhuǎn),我們經(jīng)常需要面對從瀏覽器或者其他App跳轉(zhuǎn)到自己App中頁面的需求,不過就算是簡簡單單的頁面跳轉(zhuǎn),隨著時間的推移,也會遇到一些問題:

  • 集中式的URL管理:談到集中式的管理,總是比較蛋疼,多人協(xié)同開發(fā)的時候,大家都去AndroidManifest.xml中定義各種IntentFilter,使用隱式Intent,最終發(fā)現(xiàn)AndroidManifest.xml中充斥著各種Schame,各種Path,需要經(jīng)常解決Path重疊覆蓋、過多的Activity被導(dǎo)出,引發(fā)安全風(fēng)險等問題

  • 可配置性較差:Manifest限制于xml格式,書寫麻煩,配置復(fù)雜,可以自定義的東西也較少

  • 跳轉(zhuǎn)過程中無法插手:直接通過Intent的方式跳轉(zhuǎn),跳轉(zhuǎn)過程開發(fā)者無法干預(yù),一些面向切面的事情難以實施,比方說登錄、埋點這種非常通用的邏輯,在每個子頁面中判斷又很不合理,畢竟activity已經(jīng)實例化了

  • 跨模塊無法顯式依賴:在App小有規(guī)模的時候,我們會對App做水平拆分,按照業(yè)務(wù)拆分成多個子模塊,之間完全解耦,通過打包流程控制App功能,這樣方便應(yīng)對大團(tuán)隊多人協(xié)作,互相邏輯不干擾,這時候只能依賴隱式Intent跳轉(zhuǎn),書寫麻煩,成功與否難以控制。

  • 為了解決以上問題,我們需要一款能夠解耦、簡單、功能多、定制性較強(qiáng)、支持?jǐn)r截邏輯的路由組件:我們選擇了Alibaba的ARouter,偷個懶,直接貼ARouter的中文介紹文檔:

    3.2 ARouter 優(yōu)勢

    從 ARouter Github 了解到它的優(yōu)勢:

    支持直接解析標(biāo)準(zhǔn)URL進(jìn)行跳轉(zhuǎn),并自動注入?yún)?shù)到目標(biāo)頁面中 支持多模塊工程使用 支持添加多個攔截器,自定義攔截順序 支持依賴注入,可單獨作為依賴注入框架使用 支持InstantRun 支持MultiDex(Google方案) 映射關(guān)系按組分類、多級管理,按需初始化 支持用戶指定全局降級與局部降級策略 頁面、攔截器、服務(wù)等組件均自動注冊到框架 支持多種方式配置轉(zhuǎn)場動畫 支持獲取Fragment 完全支持Kotlin以及混編 典型的應(yīng)用:

    從外部URL映射到內(nèi)部頁面,以及參數(shù)傳遞與解析 跨模塊頁面跳轉(zhuǎn),模塊間解耦 攔截跳轉(zhuǎn)過程,處理登陸、埋點等邏輯

    跨模塊API調(diào)用,通過控制反轉(zhuǎn)來做組件解耦

    三、典型應(yīng)用場景

  • 從外部URL映射到內(nèi)部頁面,以及參數(shù)傳遞與解析
  • 跨模塊頁面跳轉(zhuǎn),模塊間解耦
  • 攔截跳轉(zhuǎn)過程,處理登陸、埋點等邏輯
  • 跨模塊API調(diào)用,模塊間解耦(注冊ARouter服務(wù)的形式,通過接口互相調(diào)用)
  • 總結(jié)

    最后為了幫助大家深刻理解Android相關(guān)知識點的原理以及面試相關(guān)知識,這里放上相關(guān)的我搜集整理的14套騰訊、字節(jié)跳動、阿里、百度等2021面試真題解析,我把技術(shù)點整理成了視頻和PDF(實際上比預(yù)期多花了不少精力),包知識脈絡(luò) + 諸多細(xì)節(jié)。



    網(wǎng)上學(xué)習(xí) Android的資料一大堆,但如果學(xué)到的知識不成體系,遇到問題時只是淺嘗輒止,不再深入研究,那么很難做到真正的技術(shù)提升。希望這份系統(tǒng)化的技術(shù)體系對大家有一個方向參考。

    的技術(shù)提升。希望這份系統(tǒng)化的技術(shù)體系對大家有一個方向參考。

    [外鏈圖片轉(zhuǎn)存中…(img-AYNRCNAN-1621242753120)]

    總結(jié)

    以上是生活随笔為你收集整理的温故而知新!这篇文章可以满足你80%日常工作!面试真题解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。