疫情被裁?不要愁!給你2020安卓開發精選面試題及答案!

yilian發表於2020-02-19

近日,一位在家的某網際網路員工匿名發帖稱:**疫情期間,通知被裁員? **

疫情被裁?不要愁!給你2020安卓開發精選面試題及答案!

真的是過年沒得剩,年後沒得掙!

受疫情影響,不少企業已延長假期或開啟了遠端辦公,大家終於實現了躺著掙錢的夢想了;但這種舒適的背後,更多的卻是讓人憂愁。

現國內很多行業已遭受一定的經濟衝擊,今後絕大部分的企業都將面臨資金問題,不出意外,未來是殘酷的。

嗅覺敏銳的人已開始一邊放著假,一邊啟動著plan B的計劃(找下家),透過線上學習提高自己的競爭力,把握金三銀四的面試機會!

接下來我們針對Android高階展開的完整面試題


image.png
image.png

1、請解釋下在單執行緒模型中Message,Handler,Message Queue,Looper之間的關係。

拿主執行緒來說,主執行緒啟動時會呼叫Looper.prepare()方法,會初始化一個Looper,放入Threadlocal中,接著呼叫Looper.loop()不斷遍歷Message Queue,

Handler的建立依賴與當前執行緒中的Looper,如果當前執行緒沒有Looper則必須呼叫Looper.prepare()。Handler , sendMessage到MessageQueue,Looper不斷

從MessageQueue中取出訊息,回撥handleMessage方法。

2、如果有個100M大的檔案,需要上傳至伺服器中,而伺服器form表單最大隻能上傳2M,可以用什麼方法。

這個問題不是很明確我覺得,首先來說使用http協議上傳資料,特別在android下,跟form沒什麼關係。傳統的在web中,在form中寫檔案上傳,其實瀏覽器所做

的就是將我們的資料進行解析組拼成字串,以流的方式傳送到伺服器,且上傳檔案用的都是POST方式,POST方式對大小沒什麼限制。

回到題目,可以說假設每次真的只能上傳2M,那麼可能我們只能把檔案截斷,然後分別上傳了。

3、記憶體溢位和記憶體洩漏有什麼區別?何時會產生記憶體洩漏?記憶體最佳化有哪些方法?

記憶體溢位通俗理解就是軟體(應用)執行需要的記憶體,超出了它可用的最大記憶體。

記憶體洩漏就是我們對某一記憶體空間的使用,使用完成後沒有釋放。

記憶體最佳化:Android中容易記憶體溢位的部分,就是圖片的載入,我們可以使用圖片的壓縮加上使用LruCache快取的目的來控制圖片所能夠使用的記憶體。

還有對於比較耗資源的物件及時的關閉,例如Database Conn , 各種感測器 , Service 等等。

4、AsyncTask使用在哪些場景?它的缺陷是什麼?如何解決?

AsyncTask 運用的場景就是我們需要進行一些耗時的操作,耗時操作完成後更新主執行緒,或者在操作過程中對主執行緒的UI進行更新。

缺陷:AsyncTask中維護著一個長度為128的執行緒池,同時可以執行5個工作執行緒,還有一個緩衝佇列,當執行緒池中已有128個執行緒,緩衝佇列已滿時,如果

此時向執行緒提交任務,將會丟擲RejectedExecutionException。

解決:由一個控制執行緒來處理AsyncTask的呼叫判斷執行緒池是否滿了,如果滿了則執行緒睡眠否則請求AsyncTask繼續處理。

5、Activity用SharedPreferences儲存資料,大小有木有限制?

這個真心查不到。。。

6、Activity間透過Intent傳遞資料大小有沒有限制?

貌似是40K。

7、 啟動一個程式,可以主介面點選圖示進入,也可以從一個程式中跳轉過去,二者有什麼區別?

是因為啟動程式(主介面也是一個app),發現了在這個程式中存在一個設定為的activity,

所以這個launcher會把icon提出來,放在主介面上。當使用者點選icon的時候,發出一個Intent:

Intent intent = mActivity.getPackageManager().getLaunchIntentForPackage(packageName);

mActivity.startActivity(intent);

跳過去可以跳到任意允許的頁面,如一個程式可以下載,那麼真正下載的頁面可能不是首頁(也有可能是首頁),這時還是構造一個Intent,startActivity.

這個intent中的action可能有多種view,download都有可能。系統會根據第三方程式向系統註冊的功能,為你的Intent選擇可以開啟的程式或者頁面。所以唯一的一點

不同的是從icon的點選啟動的intent的action是相對單一的,從程式中跳轉或者啟動可能樣式更多一些。本質是相同的。

8、程式之間的親和性的理解。

1、預設情況下一個應用的所有Activity都是具有相同的affinity,都是從application中繼承,application的affinity預設就是manifest的包名。

2、affinity對Activity來說,就像是身份證一樣,可以告訴所在的Task,自己屬於其中的一員。

3、應用場合:

a:根據affinity重新為Activity選擇合適的宿主Task;

b:與allowTaskReparenting屬性配合;

c:啟動Activity使用Intent設定了FLAG_ACTIVITY_NEW_TASK標記。

9、同一個程式,但不同的Activity是否可以放在不同的Task任務棧中?

可以放在不同的Task中。需要為不同的activity設定不同的affinity屬性,啟動activity的Intent需要包含FLAG_ACTIVITY_NEW_TASK標記。

10、橫豎屏切換時候Activity的生命週期。

1、不設定Activity的android:configChanges時,切屏會重新呼叫各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次

2、設定Activity的android:configChanges=”orientation”時,切屏還是會重新呼叫各個生命週期,切橫、豎屏時只會執行一次

3、設定Activity的android:configChanges=”orientation|keyboardHidden”時,切屏不會重新呼叫各個生命週期,只會執行onConfigurationChanged方法

11、AIDL的全稱是什麼?如何工作?

12、dvm的程式和Linux的程式, 應用程式的程式是否為同一個概念

Dvm的程式是dalivk虛擬機器程式,每個android程式都執行在自己的程式裡面,每個android程式系統都會給他分配一個單獨的liunx uid(user id),

每個dvm都是linux裡面的一個程式.所以說這兩個程式是一個程式.

最後

暫且分享這些,在此我還有一份 安卓開發面試指南,1612頁的PDF文件,25個模組

  • Java基礎
  • Java併發
  • Java虛擬機器
  • Android基礎
  • Android進階
  • 開源框架
  • 線性表
  • 棧和隊
  • 雜湊查詢
  • 排序
  • 海量資料處理
  • 劍指offer
  • LeetCode
  • 建立型模式
  • 結構型模式
  • 行為型模式
  • TCP/IP
  • HTTP
  • HTTPS
  • 作業系統
  • 程式與執行緒
  • 記憶體管理
  • SQL語句

現在大家學習的時間比較多,剛好可以來學習準備

免費領取方式:點贊+評論,關注我,私信【面試指南 】獲取,滿滿的都是乾貨,學習完可以幫助大家心裡有個底,好好準備,疫後去升職加薪!

疫情被裁?不要愁!給你2020安卓開發精選面試題及答案!


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2676290/,如需轉載,請註明出處,否則將追究法律責任。

相關文章