我的騰訊Android面試經曆分享,全網獨家首發

mb612e2d70ec53f 2021-09-19 06:51:24 阅读数:147

android 分享

一、Android基礎

我的騰訊Android面試經曆分享,全網獨家首發_Android

Android基礎知識點比較多,看圖。

建議閱讀:

《Android開發藝術探索》

1. Activity

# Activity的四大啟動模式,以及應用場景?

Activity的四大啟動模式:

  • standard:標准模式,每次都會在活動棧中生成一個新的Activity實例。通常我們使用的活動都是標准模式。
  • singleTop:棧頂複用,如果Activity實例已經存在棧頂,那麼就不會在活動棧中創建新的實例。比較常見的場景就是給通知跳轉的Activity設置,因為你肯定不想前臺Activity已經是該Activity的情况下,點擊通知,又給你再創建一個同樣的Activity
  • singleTask:棧內複用,如果Activity實例在當前棧中已經存在,就會將當前Activity實例上面的其他Activity實例都移除棧。常見於跳轉到主界面。
  • singleInstance:單實例模式,創建一個新的任務棧,這個活動實例獨自處在這個活動棧中。

# Activity中onStart和onResume的區別?onPause和onStop的區別?

首先,Activity有三類:

  • 前臺Activity:活躍的Activity,正在和用戶交互的Activity
  • 可見但非前臺的Activity:常見於棧頂的Activity背景透明,處在其下面的Activity就是可見但是不可和用戶交互。
  • 後臺Activity:已經被暫停的Activity,比如已經執行了onStop方法。

所以,onStartonStop通常指的是當前活動是否比特於前臺這個角度,而onResumeonPause從是否可見這個角度來講的。

2. 屏幕適配

# 平時如何有使用屏幕適配嗎?原理是什麼呢?

平時的屏幕適配一般采用的頭條的屏幕適配方案。簡單來說,以屏幕的一邊作為適配,通常是寬。

原理:設備像素px和設備獨立像素dp之間的關系是

px = dp * density

  • 1.

假設UI給的設計圖屏幕寬度基於360dp,那麼設備寬的像素點已知,即px,dp也已知,360dp,所以density = px / dp,之後根據這個修改系統中跟density相關的知識點即可。

3. Android消息機制

# Android消息機制介紹?

Android消息機制中的四大概念:

  • ThreadLocal:當前線程存儲的數據僅能從當前線程取出。
  • MessageQueue:具有時間優先級的消息隊列。
  • Looper:輪詢消息隊列,看是否有新的消息到來。
  • Handler:具體處理邏輯的地方。

過程:

  1. 准備工作:創建Handler,如果是在子線程中創建,還需要調用Looper#prepare(),在Handler的構造函數中,會綁定其中的LooperMessageQueue
  2. 發送消息:創建消息,使用Handler發送。
  3. 進入MessageQueue:因為Handler中綁定著消息隊列,所以Message很自然的被放進消息隊列。
  4. Looper輪詢消息隊列:Looper是一個死循環,一直觀察有沒有新的消息到來,之後從Message取出綁定的Handler,最後調用Handler中的處理邏輯,這一切都發生在Looper循環的線程,這也是Handler能够在指定線程處理任務的原因。

# Looper在主線程中死循環為什麼沒有導致界面的卡死?

  1. 導致卡死的是在Ui線程中執行耗時操作導致界面出現掉幀,甚至ANRLooper.loop()這個操作本身不會導致這個情况。
  2. 有人可能會說,我在點擊事件中設置死循環會導致界面卡死,同樣都是死循環,不都一樣的嗎?Looper會在沒有消息的時候阻塞當前線程,釋放CPU資源,等到有消息到來的時候,再喚醒主線程。
  3. App進程中是需要死循環的,如果循環結束的話,App進程就結束了。

# IdleHandler介紹?

介紹: IdleHandler是在Hanlder空閑時處理空閑任務的一種機制。

執行場景:

  • MessageQueue沒有消息,隊列為空的時候。
  • MessageQueue屬於延遲消息,當前沒有消息執行的時候。

會不會發生死循環: 答案是否定的,MessageQueue使用計數的方法保證一次調用MessageQueue#next方法只會使用一次的IdleHandler集合。

4. View事件分發機制和View繪制原理

剛哥的《Android開發藝術探索》已經很全面了,建議閱讀。

5. Bitmap

# Bitmap的內存計算方式?

在已知圖片的長和寬的像素的情况下,影響內存大小的因素會有資源文件比特置和像素點大小

像素點大小: 常見的像素點有:

  • ARGB_8888:4個字節
  • ARGB_4444、ARGB_565:2個字節

資源文件比特置: 不同dpi對應存放的文件夾

我的騰訊Android面試經曆分享,全網獨家首發_Android_02

比如一個一張圖片的像素為180*180pxdpi(設備獨立像素密度)為320,如果它僅僅存放在drawable-hdpi,則有:

橫向像素點 = 180 * 320/240 + 0.5f = 240 px
縱向像素點 = 180 * 320/240 + 0.5f = 240 px

  • 1.
  • 2.

如果 如果它僅僅存放在drawable-xxhdpi,則有:

橫向像素點 = 180 * 320/480 + 0.5f = 120 px
縱向像素點 = 180 * 320/480 + 0.5f = 120 px

  • 1.
  • 2.

所以,對於一張180*180px的圖片,設備dpi為320,資源圖片僅僅存在drawable-hdpi,像素點大小為ARGB_4444,最後生成的文件內存大小為:

橫向像素點 = 180 * 320/240 + 0.5f = 240 px
縱向像素點 = 180 * 320/240 + 0.5f = 240 px
內存大小 = 240 * 240 * 2 = 115200byte 約等於 112.5kb

  • 1.
  • 2.
  • 3.

# Bitmap的高效加載?

Bitmap的高效加載在Glide中也用到了,思路:

  1. 獲取需要的長和寬,一般獲取控件的長和寬。
  2. 設置BitmapFactory.Options中的inJustDecodeBounds為true,可以幫助我們在不加載進內存的方式獲得Bitmap的長和寬。
  3. 對需要的長和寬和Bitmap的長和寬進行對比,從而獲得壓縮比例,放入BitmapFactory.Options中的inSampleSize屬性。
  4. 設置BitmapFactory.Options中的inJustDecodeBounds為false,將圖片加載進內存,進而設置到控件中。

二、Android進階

我的騰訊Android面試經曆分享,全網獨家首發_程序員_03

Android進階中重點考察Android Framework、性能優化和第三方框架。

1. Binder

# Binder的介紹?與其他IPC方式的優缺點?

Binder是Android中特有的IPC方式,引用《Android開發藝術探索》中的話(略有改動):

從IPC角度來說,Binder是Android中的一種跨進程通信方式;Binder還可以理解為虛擬的物理設備,它的設備驅動是/dev/binder;從Android Framework來講,Binder是Service Manager連接各種Manager和對應的ManagerService的橋梁。從面向對象和CS模型來講,Client通過Binder和遠程的Server進行通訊。

基於Binder,Android還實現了其他的IPC方式,比如AIDLMessengerContentProvider

與其他IPC比較:

  • 效率高:除了內存共享外,其他IPC都需要進行兩次數據拷貝,而因為Binder使用內存映射的關系,僅需要一次數據拷貝。
  • 安全性好:接收方可以從數據包中獲取發送發的進程Id和用戶Id,方便驗證發送方的身份,其他IPC想要實驗只能够主動存入,但是這有可能在發送的過程中被修改。

文末

很多人在剛接觸這個行業的時候或者是在遇到瓶頸期的時候,總會遇到一些問題,比如學了一段時間感覺沒有方向感,不知道該從那裏入手去學習,對此我整理了一些資料,需要的可以免費分享給大家

這裏筆者分享一份自己收錄整理上述技術體系圖相關的幾十套騰訊、頭條、阿裏、美團等公司2021年的面試題,把技術點整理成了視頻和PDF(實際上比預期多花了不少精力),包含知識脈絡 + 諸多細節,由於篇幅有限,這裏以圖片的形式給大家展示一部分。

 CodeChina開源項目:《Android學習筆記總結+移動架構視頻+大廠面試真題+項目實戰源碼》

我的騰訊Android面試經曆分享,全網獨家首發_程序員_04

我的騰訊Android面試經曆分享,全網獨家首發_Android_05

【視頻教程】

我的騰訊Android面試經曆分享,全網獨家首發_程序員_06

天道酬勤,只要你想,大廠offer並不是遙不可及!希望本篇文章能為你帶來幫助,如果有問題,請在評論區留言。

版权声明:本文为[mb612e2d70ec53f]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210919065124065L.html