20道25K Android工程師面試必問面試題

2021-09-22 21:29:26 字數 3300 閱讀 2733

很多朋友都或多或少經歷過很多面試,而有的人拿到了自己心儀的offer,有的人卻被拒之門外。那麼今天整理了乙份面試經常會問到的題目,希望可以幫助到更多的人。

1.apk安裝過程應用安裝涉及到如下幾個目錄:

data/data:存放應用程式的資料

data/dalvik-cache:將apk中的dex檔案安裝到dalvik-cache目錄下

2.invalidate()和postinvalidate() 的區別

invalidate()是用來重新整理view的,必須是在ui執行緒中進行工作。比如在修改某個view的顯示時,呼叫invalidate()才能看到重新繪製的介面。

postinvalidate()在工作者執行緒中被呼叫。

3.parcelable和serializable區別

parcelable的效能比serializable好,在記憶體開銷方面較小,所以在記憶體間資料傳輸時推薦使用parcelable,如activity間傳輸資料,而serializable可將資料持久化方便儲存,所以在需要儲存或網路傳輸資料時選擇serializable,因為android不同版本parcelable可能不同,所以不推薦使用parcelable進行資料持久化。

serializable序列化不儲存靜態變數,可以使用transient關鍵字對部分欄位不進行序列化,也可以覆蓋writeobject、readobject方法以實現序列化過程自定義。

4.android裡跨程序傳遞資料的幾種方案

5.匿名共享記憶體,使用場景

在android系統中,提供了獨特的匿名共享記憶體子系統ashmem(anonymous shared memory),它以驅動程式的形式實現在核心空間中。它有兩個特點,一是能夠輔助記憶體管理系統來有效地管理不再使用的記憶體塊,二是它通過binder程序間通訊機制來實現程序間的記憶體共享。

ashmem並像binder是android重新自己搞的一套東西,而是利用了linux的 tmpfs檔案系統。tmpfs是一種可以基於ram或是swap的高速檔案系統,然後可以拿它來實現不同程序間的記憶體共享。

大致思路和流程是:

其實核心點就是建立一塊共享區域,然後2個程序同時把這片區域 mmap 到本程序,然後讀寫就像本程序的記憶體一樣。這裡要解釋下第3步,為什麼要倒騰 fd,因為在 linux 中 fd 只是對本程序是唯一的,在 proc a 中開啟乙個檔案得到乙個 fd,但是把這個開啟的 fd 直接放到 proc b 中,proc b 是無法直接使用的。但是檔案是唯一的,就是說乙個檔案(file)可以被開啟多次,每開啟一次就有乙個 fd(檔案描述符),所以對於同乙個檔案來說,需要某種轉化,把 proc a 中的 fd 轉化成 proc b 中的 fd。這樣 proc b 才能通過 fd mmap 同樣的共享記憶體檔案。

使用場景:程序間大量資料傳輸

6.contentprovider實現原理

contentprovider 有以下兩個特點:

①通過contentresolver先查詢對應給定uri的contentprovider,返回對應的binderproxy

②呼叫binderproxy的query()

7.如何使用contentprovider進行批量操作?

同時我們還可以通過contentobserver對資料進行觀察:

8.廣播註冊後不解除註冊會有什麼問題?(記憶體洩露)

我們可以通過兩種方式註冊broadcastreceiver,一是在activity啟動過程中通過**動態註冊,二是在androidmanifest.xml檔案中利用標籤進行靜態註冊。

9.屬性動畫(property animation)和補間動畫(tween animation)的區別

10.brocastreceive裡面可不可以執行耗時操作?

11.android優化工具:traceview和systrace

12.dalvik與art的區別?

13.android動態許可權?

14.viewpager如何判斷左右滑動?

實現onpagechangelistener並重寫onpagescrolled方法,通過引數進行判斷。

15.listview與recyclerview

android手機啟動過程

當我們開機時,首先是啟動linux核心,在linux核心中首先啟動的是init程序,這個程序會去讀取配置檔案system\core\rootdir\init.rc配置檔案,這個檔案中配置了android系統中第乙個程序zygote程序。

17.asset目錄與res目錄的區別

當採用多程序的時候,比如下面的service 配置:

android:process 屬性中 :的作用就是把這個名字附加到你的包所執行的標準程序名字的後面作為新的程序名稱。

這樣配置會呼叫 oncreate() 兩次

19.fragmentpageradapter 和 fragmentstateadapter 的區別?

20.su***ceview && view && glsu***ceview

更多題目答案,請文末領取

多家offer,如何選擇?

廠**大的 ,廠小選公司有錢的,都差不多選加班少的,加班都多,選錢多的。

只要技術在手,**都有飯吃,最後千萬別裸辭

有朋友說有沒有免費資料?有沒有志同道合的小夥伴共同進步?前面說的那些面試題的答案呢?

對此整理了一套適合android工程師學習的資料文件分享

領取方式:

IT開發工程師經典面試

回答樣本 如果是工作需要我會義不容辭加班,我現在單身,沒有任何家庭負擔,可以全身心的投入工作。但同時,我也會提高工作效率,減少不必要的加班。回答樣本一 我對工資沒有硬性要求,我相信貴公司在處理我的問題上會友善合理。我注重的是找對工作機會,所以只要條件公平,我則不會計較太多。回答樣本二 我受過系統的軟...

演算法工程師面試準備

貝葉斯 nb 神經網路 svm 概率圖模型 特徵選擇 其他 梯度下降的優缺點 降取樣,pca,lda pca的基於特徵值壓縮的方法 基於isolation forest識別的方法 梯度下降的優缺點 常見損失函式 bagging 和 boosting的區別 為什麼用最小二乘而不是最小四乘 gb和牛頓法...

如何面試前端工程師!

面試前端工程師對我來說是一件非常有意思的事,因為面試過程很大程度上也是自我提公升的過程。無論大公司還是小公司,之所以在如何招聘到真正有能力的前端工程師方面會遇到同樣的問題,就是因為負責招聘的那些人不知道自己公司需要什麼樣的人,結果問問題時也問不到點子上。經過這幾年在行業裡的摸索,我總結出了自己的一套...