1. 程式人生 > 其它 >2021大廠Android開發面試總結+解答,成為阿里P7移動架構師到底有多難

2021大廠Android開發面試總結+解答,成為阿里P7移動架構師到底有多難

JNI 簡介

JNI (Java Native Interface英文縮寫),譯為Java本地介面。是Java眾多開發技術中的一門技術,意在利用原生代碼,為Java程式提供更高效、更靈活的拓展。儘管Java一貫以其良好的跨平臺性而著稱,但真正的跨平臺非C/C++莫屬,因為當前世上90%的系統都是基於C/C++編寫的。同時,Java的跨平臺是以犧牲效率換來對多種平臺的相容性,因而JNI就是這種跨平臺的主流實現方式之一。

總之,JNI是一門技術,是Java 與C/C++ 溝通的一門技術。首先,來回顧下Android的系統架構圖。

我們來簡單介紹下每一層的作用。

Linux層

Linux 核心

由於Android 系統是基礎Linux 核心構建的,所以Linux是Android系統的基礎。事實上,Android 的硬體驅動、程序管理、記憶體管理、網路管理都是在這一層。

硬體抽象層

硬體抽象層(Hardware Abstraction Layer縮寫),硬體抽象層主要為上層提供標準顯示介面,並向更高級別的 Java API 框架提供顯示裝置硬體功能。HAL 包含多個庫模組,其中每個模組都為特定型別的硬體元件實現一個介面,例如相機或藍芽模組。當框架 API 要求訪問裝置硬體時,Android 系統將為該硬體元件載入對應的庫模組。

系統執行庫和執行環境層

Android Runtime

Android 5.0(API 21)之前,使用的是Dalvik虛擬機器,之後被ART所取代。ART是Android作業系統的執行環境,通過執行虛擬機器來執行dex檔案。其中,dex檔案是專為安卓設計的的位元組碼格式,Android打包和執行的就是dex檔案,而Android toolchain(一種編譯工具)可以將Java程式碼編譯為dex位元組碼格式,轉化過程如下圖。

如上所示,Jack就是一種編譯工具鏈,可以將Java 原始碼編譯為 DEX 位元組碼,使其可在 Android 平臺上執行。

原生C/C++ 庫

很多核心 Android 系統元件和服務都是使用C 和 C++ 編寫的,為了方便開發者呼叫這些原生庫功能,Android的Framework提供了呼叫相應的API。例如,您可以通過 Android 框架的 Java OpenGL API 訪問 OpenGL ES,以支援在應用中繪製和操作 2D 和 3D 圖形。

應用程式框架層

Android平臺最常用的元件和服務都在這一層,是每個Android開發者必須熟悉和掌握的一層,是應用開發的基礎。

Application層

Android系統App,如電子郵件、簡訊、日曆、網際網路瀏覽和聯絡人等系統應用。我們可以像呼叫Java API Framework層一樣直接呼叫系統的App。

題外話

我們見過很多技術leader在面試的時候,遇到處於迷茫期的大齡程式設計師,比面試官年齡都大。這些人有一些共同特徵:可能工作了7、8年,還是每天重複給業務部門寫程式碼,工作內容的重複性比較高,沒有什麼技術含量的工作。問到這些人的職業規劃時,他們也沒有太多想法。

其實30歲到40歲是一個人職業發展的黃金階段,一定要在業務範圍內的擴張,技術廣度和深度提升上有自己的計劃,才有助於在職業發展上有持續的發展路徑,而不至於停滯不前。

不斷奔跑,你就知道學習的意義所在!

注意:我們之前因為秋招收集的二十套一二線網際網路公司Android面試真題(含BAT、小米、華為、美團、滴滴)和我自己整理Android複習筆記(包含Android基礎知識點、Android擴充套件知識點、Android原始碼解析、設計模式彙總、Gradle知識點、常見演算法題彙總。)

本文已被CODING開源專案:《Android學習筆記總結+移動架構視訊+大廠面試真題+專案實戰原始碼》收錄