前言
很多人面試之前,可能沒有在互聯(lián)網(wǎng)公司工作過或者說工作過但年頭較短,不知道互聯(lián)網(wǎng)公司技術(shù)面試都會問哪些問題? 再加上可能自己準(zhǔn)備也不充分,去面試沒幾個(gè)回合就被面試官幾個(gè)問題打蒙了,最后以慘敗收場。
下述是我整理的android面試題匯總,由于篇幅原因,在這只把熱點(diǎn)技術(shù)部分的題目列舉出來,后續(xù)還會更新其余面試題內(nèi)容,大家可以關(guān)注一下我,及時(shí)知曉我更新的知識點(diǎn),同時(shí)這份面試集錦的整理也花費(fèi)了我很多時(shí)間!
1.組件化(1)概念:
組件化:是將一個(gè)app分成多個(gè)module,每個(gè)module都是一個(gè)組件,也可以是一個(gè)基礎(chǔ)庫供組件依賴,開發(fā)中可以單獨(dú)調(diào)試部分組件,組件中不需要相互依賴但是可以相互調(diào)用,最終發(fā)布的時(shí)候所有組件以lib的形式被主app工程依賴打包成一個(gè)apk。
(2)由來:app版本迭代,新功能不斷增加,業(yè)務(wù)變得復(fù)雜,維護(hù)成本高業(yè)務(wù)耦合度高,代碼臃腫,團(tuán)隊(duì)內(nèi)部多人協(xié)作開發(fā)困難android編譯代碼卡頓,單一工程下代碼耦合嚴(yán)重,修改一處需要重新編譯打包,耗時(shí)耗力。方便單元測試,單獨(dú)改一個(gè)業(yè)務(wù)模塊,不需要著重關(guān)注其他模塊。(3)優(yōu)勢:組件化將通用模塊獨(dú)立出來,統(tǒng)一管理,以提高復(fù)用,將頁面拆分為粒度更小的組件,組件內(nèi)部出了包含ui實(shí)現(xiàn),還可以包含數(shù)據(jù)層和邏輯層每個(gè)組件度可以獨(dú)立編譯、加快編譯速度、獨(dú)立打包。每個(gè)工程內(nèi)部的修改,不會影響其他工程。業(yè)務(wù)庫工程可以快速拆分出來,集成到其他app中。迭代頻繁的業(yè)務(wù)模塊采用組件方式,業(yè)務(wù)線研發(fā)可以互不干擾、提升協(xié)作效率,并控制產(chǎn)品質(zhì)量,加強(qiáng)穩(wěn)定性。并行開發(fā),團(tuán)隊(duì)成員只關(guān)注自己的開發(fā)的小模塊,降低耦合性,后期維護(hù)方便等。(4)考慮問題:模式切換:如何使得app在單獨(dú)調(diào)試跟整體調(diào)試自由切換
組件化后的每一個(gè)業(yè)務(wù)的module都可以是一個(gè)單獨(dú)的app(ismodulerun=false), release 包的時(shí)候各個(gè)業(yè)務(wù)module作為lib依賴,這里完全由一個(gè)變量控制,在根項(xiàng)目 gradle.properties里面ismodulerun=true。ismodulerun狀態(tài)不同,加載application和androidmanifest都不一樣,以此來區(qū)分是獨(dú)立的apk還是lib。
在build.grade里面配置:
資源沖突
當(dāng)我們創(chuàng)建了多個(gè)module的時(shí)候,如何解決相同資源文件名合并的沖突,業(yè)務(wù)module和basemodule資源文件名稱重復(fù)會產(chǎn)生沖突,解決方案在于:
每個(gè) module 都有 app_name,為了不讓資源名重名,在每個(gè)組件的 build.gradle 中增加 resourceprefix “xxx_強(qiáng)行檢查資源名稱前綴。固定每個(gè)組件的資源前綴。但是 resourceprefix 這個(gè)值只能限定 xml 里面的資源,并不能限定圖片資源。
依賴關(guān)系
多個(gè)module之間如何引用一些共同的library以及工具類
組件通信
組件化之后,module之間是相互隔離的,如何進(jìn)行ui跳轉(zhuǎn)以及方法調(diào)用,具體可以使用阿里巴巴arouter或者美團(tuán)的wmrouter等路由框架。
各業(yè)務(wù)module之前不需要任何依賴可以通過路由跳轉(zhuǎn),完美解決業(yè)務(wù)之間耦合。
入口參數(shù)
我們知道組件之間是有聯(lián)系的,所以在單獨(dú)調(diào)試的時(shí)候如何拿到其它的module傳遞過來的參數(shù)
application
當(dāng)組件單獨(dú)運(yùn)行的時(shí)候,每個(gè)module自成一個(gè)apk,那么就意味著會有多個(gè)application,很顯然我們不愿意重復(fù)寫這么多代碼,所以我們只需要定義一個(gè)baseapplication即可,其它的application直接繼承此baseapplication就ok了,baseapplication里面還可定義公用的參數(shù)。
2.插件化(1)概述
提到插件化,就不得不提起方法數(shù)超過65535的問題,我們可以通過dex分包來解決,同時(shí)也可以通過使用插件化開發(fā)來解決。插件化的概念就是由宿主app去加載以及運(yùn)行插件app。
(2優(yōu)點(diǎn))
在一個(gè)大的項(xiàng)目里面,為了明確的分工,往往不同的團(tuán)隊(duì)負(fù)責(zé)不同的插件app,這樣分工更加明確。各個(gè)模塊封裝成不同的插件apk,不同模塊可以單獨(dú)編譯,提高了開發(fā)效率。 解決了上述的方法數(shù)超過限制的問題。可以通過上線新的插件來解決線上的bug,達(dá)到“熱修復(fù)”的效果。 減小了宿主apk的體積。
(3缺點(diǎn))
插件化開發(fā)的app不能在google play上線,也就是沒有海外市場。
阿里云服務(wù)器配置并發(fā)量對應(yīng)表網(wǎng)站備案一定要云服務(wù)器嗎谷歌加碼云服務(wù)器怎么用偶爾訪問提示響應(yīng)時(shí)間過長是什么原因云南centosftp服務(wù)器租用日語商務(wù)郵件的注意事項(xiàng)你都了解嗎?國際域名要實(shí)名制嗎租用云服務(wù)器的步驟