Android Framework面試題

 

Framework面試題

Android

系統基礎

JVM、Dalvik和ART是什麼以及他們的關係

01

Binder機制

02

系統級app和第三方應用級app分別在什麼目錄下?system/priva-app和system/app目錄的權限有什麼不同

03

android系統的啓動流程

04

android中UID和PID的作用及區別

05

android系統的低電耗模式(Doze模式)是怎麼工作的

06

android最近幾個版本的系統差異或特性

07

如何把一個APP配置成系統應用

 

有沒有熟悉的一個系統服務如:AMS,PMS,WMS等,說說對它的理解

 

ActivityManagerService

13

 

Framework面試題答案

01

JVM、Dalvik和ART是什麼以及他們的關係

JVM 是 java虛擬機,是實現java誇平臺的主要方式,可以使得java這樣的高級語言編譯成機器可以識別的機器語言,讓java 可以一次編譯,到處運行

Dalvik 是Android系統在上面運行的虛擬機,Dalvik虛擬機是專門爲移動設備定製的,它允許在有限的內存中同時運行多個虛擬機的實例,並且每一個Dalvik應用都是一個獨立的Linux進程。獨立的進程可以防止虛擬機崩潰的時所有進程都被關閉。

ART 是指 Android Runtime ,是安卓4.4之後推出替代DVM的,DVM中的應用每次運行時,字節碼都需要通過即時編譯器(Just In Time,JIT)轉換成機器碼,這會使應用的運行效率降低。而在ART中,系統在安裝應用時會進行一次預編譯(Ahead Of Time,AOT),將字節碼預先編譯成機器碼並存在本地,這樣應用每次運行時就不需要再執行編譯了,能大大提高運行效率。

       

[Android Runtime (ART)和apk的預編譯]

(https://blog.csdn.net/qq_25804863/article/details/48696619)

02

Binder機制

Binder機制 是一種進程間通信機制,提供了遠程過程調用功能,就是RPC。他把系統的一系列組件連接在了一起,這些組件分別是上層的 Client 和server,中間層的 Service Manager,該組件 ;底層的 Binder驅動程序,系統的核心組件。開發者只要實現要client和server就可以了

03

系統級app和第三方應用級app分別在什麼目錄下?SystemUI是在system/priva-app還是system/app路徑下?

系統級的app一般分成兩種,一種在system/priva-app 另一種在system/app, 如果修改較多的還可能在sytem/vendor/app. system/priva-app路徑下的應用權限比system/app高,SystemUI在system/priva-app下. 用戶級的APP在data/app下面.system分區下的APP不可卸載而data分區下的APP可卸載

04

android系統的啓動流程

BootLoader --> Linux kernel --> init --> SystemServer --> Launcher

詳細啓動流程: https://blog.csdn.net/qq_25804863/article/details/48669547

05

android中UID和PID的作用及區別

PID是各進程的身份標識,程序一運行系統就會自動分配給進程一個獨一無二的PID.進程中止後PID被系統回收,可能會被繼續分配給新運行的程序,但是在android系統中一般不會把已經kill掉的進程ID重新分配給新的進程,新產生進程的進程號,一般比產生之前所有的進程號都要大.

UID在linux中就是用戶的ID,表明是哪個用戶運行了這個程序,主要用於權限的管理.而在android 中又有所不同,因爲android爲單用戶系統,這時UID 便被賦予了新的使命,數據共享,爲了實現數據共享,android爲每個應用幾乎都分配了不同的UID,不像傳統的linux,每個用戶相同就爲之分配相同的UID.

如果讓其他的開發者知道了我們的shareUserId,那我們的數據不是暴露了?

其實我們要使不同的程序能夠相互訪問,還需要擁有相同的簽名,每個公司或者開發者的簽名是唯一的,這樣我們就不用擔心了

06

android系統的低電耗模式(Doze模式)是怎麼工作的

https://blog.csdn.net/qq_25804863/article/details/50229437

07

android最近幾個版本的系統差異或特性

https://blog.csdn.net/qq_25804863/article/details/83348760

08

ActivityManagerService

ActivityManagerService是AndroidFramework的核心,它管理着Android系統中的4大組件:Activity、Service、ContentProvider和BroadcastReceiver,同時也管理和調度所有用戶進程.

https://blog.csdn.net/qq_25804863/article/details/49459223

09

 
 

 

C/C++ 面試題

C/C++

基礎

引用和指針有什麼區別?

08

函數參數傳遞中值傳遞、地址傳遞、引用傳遞有什麼區別?

09

static關鍵字有什麼作用?

10

鏈表和數組的區別在哪裏?

11

當i是一個整數的時候i++和++i那個更快?它們的區別是什麼?

12

C/C++ 面試題及答案

08

引用和指針有什麼區別?

(1)定義一個指針變量編譯器會爲它分配內存,而引用不佔用任何內存;

(2)引用必須在定義時被初始化,指針不必;

(3)不存在指向空值的引用,但存在指向空值的指針。

09

函數參數傳遞中值傳遞、地址傳遞、引用傳遞有什麼區別?

(1) 值傳遞,會爲形參重新分配內存空間,將實參的值拷貝給形參,形參的值不會影響實參的值,函數調用結束後形參被釋放;

(2) 引用傳遞,不會爲形參重新分配內存空間,形參只是實參的別名,形參的改變會影響實參的值,函數調用結束後形參不會被釋放;

(3) 地址傳遞,形參爲指針變量,將實參的地址傳遞給函數,可以在函數中改變實參的值,調用時爲形參指針變量分配內存,結束時釋放指針變量。

10

static關鍵字有什麼作用?

(1)函數體內static變量的作用範圍爲該函數體,不同於auto變量,該變量的內存只被分配一次,因此其值在下次調用時維持上次的值;

(2)在模塊內的static全局變量可以被模塊內所用函數調用,但不能被模塊外其他函數訪問;

(3)在模塊內的static函數只能被這一模塊內的其他函數調用,這個函數的使用範圍被限制在聲明它的模塊內;

(4)在類中的static成員變量屬於整個類擁有,對類的對象只有一份拷貝;

(5)在類中的static成員函數屬於整個類擁有,這個函數不接收this指針,因而只能訪問static成員變量。

11

鏈表和數組的區別在哪裏?

(1) 鏈表和數組都可以叫線性表,數組又叫順序表,主要區別在於,順序表是在內存中開闢一段連續的空間來存儲數據,而鏈表是靠指針來連接多塊不連續的空間,在邏輯上形成一片連續的空間來存儲數據;

(2) 數組要求空間連續,佔用總空間小,鏈表不要求空間連續,佔用總空間大;

(3) 數組方便排序和查找,但刪除和插入較慢;鏈表方便刪除和插入,但查找較慢,不方便排序。

12

當i是一個整數的時候i++和++i那個更快?它們的區別是什麼?

幾乎一樣。i++返回的是i的值,++i返回的是i+1的值,即++i是一個確定的值,是一個可以修改的左值。

Framework面試題: https://blog.csdn.net/qq_25804863/article/details/102851515

Android應用面試題及答案彙總: https://blog.csdn.net/qq_25804863/article/details/102395660

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章