目錄
一、履歷
二、技能儲備
(一)Java
(二)Android
(三)效能最佳化問題
(四)設計模式
(五)資料結構
(六)演算法
(七)源碼理解
三、最後
首頁 web前端 前端問答 分享Android面試心得【精選】

分享Android面試心得【精選】

Jul 31, 2020 pm 03:09 PM
android

推薦:《2020年Android面試題大總結【收藏】

從年前至今參加面試了很多公司,也收到了幾家巨頭的offer,還有其他公司的。總結下經驗,也是對過去的一個回顧與總結吧。

一、履歷

網路上有很多對程式設計師履歷的一些指導,這裡就不重述,大家可以搜下網路上其他大神的總結,結合自身狀況修改下。我有幾點建議:

1.盡量不要花哨,程式設計師和設計師或產品運作還不一樣,我們的履歷成功與否決定權還是在技術面試官那,而他們看重的是你的專案經驗內容和技術等描述。

2.技能描述這塊盡量只寫你懂得而且理解深刻的,可以適當加入一些新技術或流行框架,不過這塊需要理解,沒來得及看源碼的可以看看大神們對它的總結,網路上一大堆。

3.專案經驗這塊盡量加入關鍵字,例如使用了什麼技術、用到哪些設計模式、優化資料比較、擴充總結之類的。而非一味地介紹這個專案內容(那是產品經理的描述),例如性能優化這塊,分為UI性能優化、內存優化、數據庫優化、網絡優化、耗電優化等等。可以從1.如何發現問題,2.怎麼解決問題,3.解決效果對比,這幾個面向去描述。舉個簡單例子-UI優化,可以從UI出現什麼問題(卡頓不流暢),怎麼查找問題(手機開發者權限>GPU過度繪製發現層級問題,TraceView CPU使用情況分析),怎麼解決問題(降低層級、自訂View繪圖出現問題等),解決問題後效能再次比較。

二、技能儲備

(一)Java

一、HashMap和Hashtable差別?

這個一定要去看原始碼!看源碼!看源碼!實在看不下去的可以上網看別人的分析。簡單總結有幾點:

1.HashMap支援null Key和null Value;Hashtable不允許。這是因為HashMap對null進行了特殊處理,將null的hashCode值定為了0,從而將其存放在哈希表的第0個bucket。

2.HashMap是非執行緒安全,HashMap實作執行緒安全方法為Map map = Collections.synchronziedMap(new HashMap());Hashtable是執行緒安全

3.HashMap預設長度是16,擴容是原先的2倍;Hashtable預設長度是11,擴容是原先的2n 1

4.HashMap繼承AbstractMap;Hashtable繼承了Dictionary

擴展,HashMap 對比ConcurrentHashMap ,HashMap 對比SparseArrayray ,LinkedArray比較ArrayList,ArrayList比較Vector

二、Java垃圾回收機制

需要理解JVM,記憶體劃分-方法區、記憶體堆、虛擬機器堆疊(執行緒私有)、本地方法棧(線程私有)、程式計數器(線程私有), 理解回收演算法-標記清除演算法、可達性分析演算法、標記-整理演算法、複製演算法、分代演算法,優缺點都理解。

詳細的可以看看其他同學寫的 點擊打開連結

三、類別載入機制

這個可以結合 熱修復 深入理解下。點選開啟連結

四、執行緒和執行緒池,並發,鎖等一系列問題

這個可以擴充下 如何自己實作一個執行緒池?

五、HandlerThread、IntentService理解

六、弱引用、軟引用區別

七、int、Integer有什麼區別

主要考值傳遞和引用傳遞問題

八、手寫生產者/消費者模式

(二)Android

一、android啟動模式

需要了解下Activity堆疊和taskAffinity

1.Standard:系統默認,啟動一個就多一個Activity實例

2.SingleTop:棧頂復用,如果處於棧頂,則生命週期不走onCreate( )和onStart(),會呼叫onNewIntent(),適合推送訊息詳情頁,例如新聞推送詳情Activity;

3.SingleTask:堆疊內復用,如果存在堆疊內,則在其上所有Activity全部出棧,使得其位於棧頂,生命週期和SingleTop一樣,app首頁基本上是用這個

4.SingleInstance:這個是SingleTask加強本,系統會為要啟動的Activity單獨開一個棧,這個棧裡只有它,適用新開Activity和app能獨立開的,如係統鬧鐘,微信的視訊聊天介面不知道是不是,知道的同學告訴我下,在此謝過!

另外,SingleTask和SingleInstance好像會影響到onActivityResult的回調,具體問題大家搜下,我就不詳說。

Intent也需要進一步了解,Action、Data、Category各自的用法和作用,還有常用的

Intent.FLAG_ACTIVITY_SINGLE_TOP
Intent.FLAG_ACTIVITY_NEW_TASK
Intent.FLAG_ACTIVITY_CLEAR_TOP
登入後複製

等等,請看下原始碼吧。

二、View的繪製流程

ViewRoot
-> performTraversal()
-> performMeasure()
-> performLayout()
-> perfromDraw()
-> View/ViewGroup measure()
-> View/ViewGroup onMeasure()
-> View/ViewGroup layout()
-> View/ViewGroup onLayout()
-> View/ViewGroup draw()
-> View/ViewGroup onDraw()
登入後複製

看下invalidate方法,有4個參數的,和不帶參數有什麼差別;requestLayout觸發measure和layout,如何實現局部重新測量,避免全局重新測量問題。

三、事件分發機制

-> dispatchTouchEvent()
-> onInterceptTouchEvent()
-> onTouchEvent()
requestDisallowInterceptTouchEvent(boolean)
登入後複製

還有onTouchEvent()、onTouchListener、onClickListener的先後順序

四、訊息分發機制

這個考得非常常見。一定要看源碼,代碼不多。帶著幾個問題去看:

1.為什麼一個執行緒只有一個Looper、只有一個MessageQueue?

2.如何取得目前執行緒的Looper?是怎麼實現的? (理解ThreadLocal)

3.是不是任何執行緒都可以實例化Handler?有沒有什麼約束條件?

4.Looper.loop是個死循環,拿不到需要處理的Message就會阻塞,那在UI執行緒為什麼不會導致ANR?

5.Handler.sendMessageDelayed()怎麼實現延遲的?在結合Looper.loop()迴圈中,Message=messageQueue.next()和MessageQueue.enqueueMessage()分析。

五、AsyncTask原始碼分析

優劣分析,這個網路上一大堆,不重述。

六、如何保證Service不被殺死?如何保證進程不被殺死?

這兩個問題我面試過程有3家公司問。

七、Binder機制,進程通訊

Android用到的進程通訊底層基本上都是Binder,AIDL、Messager、廣播、ContentProvider。不是很深入理解的,至少ADIL怎麼用,Messager怎麼用,可以寫寫看,另外序列化(Parcelable和Serilizable)需要做對比,這方面可以看看任玉剛大神的android藝術開發探索一書。

八、動態權限適配問題、換膚實現原理

這方面看下鴻洋大神的博文吧

九、SharedPreference原理,能否跨進程?如何實現?

(三)效能最佳化問題

一、UI最佳化

a.合理選擇RelativeLayout、LinearLayout、FrameLayout,RelativeLayout會讓子View呼叫2次onMeasure,而且佈局相對複雜時,onMeasure相對較為複雜,效率比較低,LinearLayout在weight>0時也會讓子View呼叫2次onMeasure。 LinearLayout weight測量分配原則。

b.使用標籤

c.減少佈局層級,可以透過手機開發者選項>GPU過渡繪製查看,一般層級控制在4層以內,超過5層時需要考慮是否重新排版佈局。

d.自訂View時,重寫onDraw()方法,不要在該方法中新建對象,否則容易觸發GC,導致性能下降

e.使用ListView時需要復用contentView,並使用Holder減少findViewById載入View。

f.移除不必要背景,getWindow().setBackgroundDrawable(null)

g.使用TextView的leftDrawabel/rightDrawable取代ImageView TextView佈局

二、記憶體最佳化

主要為了避免OOM和頻繁觸發到GC導致性能下降

a.Bitmap.recycle(),Cursor.close,inputStream.close()

#b.大量加載Bitmap時,根據View大小載入Bitmap,合理選擇inSampleSize,RGB_565編碼方式;使用LruCache快取

c.使用靜態內部類別WeakReference 取代內部類,如Handler、執行緒、AsyncTask

d .使用線程池管理線程,避免線程的新建

e.使用單例持有Context,需要記得釋放,或使用全域上下文

f.靜態集合物件注意釋放

g.屬性動畫造成記憶體外洩

h.使用webView,在Activity.onDestory需要移除和銷毀,webView.removeAllViews()和webView.destory()

備:使用LeakCanary偵測記憶體外洩

三、反應速度最佳化

Activity如果5秒之內無法回應螢幕觸碰事件和鍵盤輸入事件,就會出現ANR,而BroadcastReceiver如果10秒之內部尚未執行操作也會出現ANR,Serve20秒會出現ANR 為了避免ANR,可以開啟子執行緒執行耗時操作,但子執行緒無法更新UI,因此需要Handler訊息機制、AsyncTask、IntentService進行執行緒通訊。

備:出現ANR時,adb pull data/anr/tarces.txt 結合log分析

四、其他效能最佳化

a.常數使用static final修飾

b.使用SparseArray代替HashMap

c.使用線程池管理線程

d.ArrayList遍歷使用常規for循環,LinkedList使用foreach

#e.不要過度使用枚舉,枚舉佔用記憶體空間比整數大

f.字串的拼接優先考慮StringBuilder和StringBuffer

g.資料庫儲存是採用批次插入交易

(四)設計模式

1.單例模式:好幾種寫法,要求會手寫,分析優劣。一般雙重校驗鎖中用到volatile,需要分析volatile的原理

2.觀察者模式:要求會手寫,有些面試官會問你在專案中用到了嗎?實在沒有到的可以講一講EventBus,它用到的就是觀察者模式

3.適配器模式:要求會手寫,有些公司會問和裝飾器模式、代理模式有什麼區別?

4.建造者模式 工廠模式:要求會手寫

5.策略模式:這個問得比較少,不過有些做電商的會問。

6.MVC、MVP、MVVM:比較異同,選擇一種你拿手的著重講就行

(五)資料結構

1.HashMap、LinkedHashMap、ConcurrentHashMap,在用法和原理上有什麼差異,很多公司會考HashMap原理,透過它​​做一些擴展,例如中國13億人口年齡的排序問題,年齡對應桶的個數,年齡相同和hash相同問題類似。

2.ArrayList和LinkedList對比,這個相對簡單一點。

3.平衡二元樹、二元查找樹、紅黑樹,這幾個我也被考到。

4.Set原理,這個和HashMap考得有點類似,考hash演算法相關,被問到過常用hash演算法。 HashSet內部用到了HashMap

(六)演算法

演算法主要考刷題吧,去LeetCode和牛客網刷下。

(七)源碼理解

專案中多多少少會用到開源框架,很多公司都喜歡問原理和是否看過源碼,比如網絡框架Okhttp,這是最常用的,現在Retrofit RxJava也很流行。

一、網路框架庫 Okhttp

okhttp原始碼一定要去看下,裡面幾個關鍵的類別要記住,還有連接池,攔截器都需要理解。被問到如何為某些特定網域的url增加header,如果是自己封裝的程式碼,可以在封裝Request中可以解決,也可以增加攔截器,透過攔截器去做。

推薦一篇講解Okhttp不錯的文章

二、訊息通知 EventBus

1.EventBus原理:建議看下原始碼,不多。內部實現:觀察者模式 註解 反射

2.EventBus可否跨進程問題?取代EventBus的方法(RxBus)

三、圖片載入庫(Fresco、Glide、Picasso)

1.專案中選擇了哪個圖片載入庫?為什麼選擇它?其他庫不好嗎?這幾個函式庫的差異

2.專案中選擇圖片庫它的原理,如Glide(LruCache結合弱引用),那麼面試官會問LruCache原理,進而問LinkedHashMap原理,這樣一層一層地問,所以建議看到不懂的追進去看。如Fresco是用來MVC設計模式,5.0以下是用了共享內存,那共享內存怎麼用? Fresco怎麼實現圓角? Fresco怎麼配置快取?

四、訊息推送Push

1.專案中訊息推送是自己做的還是用了第三方?如極光。還有沒有用過其他的?這幾家有什麼優勢區別,基於什麼原因選擇它的?

2.訊息推播原理是什麼?如何實現心跳連結?

五、TCP/IP、Http/Https

網路這塊如果簡歷中寫道熟悉TCP/IP協議,Http/Https協議,那麼肯定會被問道,我就驗證了。一般我會回答網路層關係、TCP和UDP的差別,TCP三次握手(一定要講清楚,SYN、ACK等標記位怎樣的還有報文結構都需要熟悉下),四次揮手。為什麼要三次握手? DDoS攻擊。為什麼握手三次,揮手要四次? Http封包結構,一次網路請求的過程是怎樣的? Http和Https有什麼不同? SSL/TLS是怎麼進行加密握手的?證書要怎麼校驗?對稱性加密演算法和非對稱加密演算法有哪些?挑一個熟悉的加密演算法簡單介紹下? DNS解析是怎樣的?

六、熱更新、熱修復、插件化(這一塊要求高點,一般高級工程師是需要理解的)

了解classLoader

七、新技術

RxJava、RxBus、RxAndroid,這個在面試想去的公司時,可以反編譯下他們的包,看下是不是用到,如果用到了,面試過程難免會問道,如果沒有,也可以忽略,但學習心強的同學可以看下,比較是比較火的框架。

Retrofit,熟練okhttp的同學建議看下,聽說結合RxJava很爽。

Kotlin

三、最後

履歷表首選內推方式,速度快,效率高啊!然後可以在拉鉤,boss,脈脈,街上看看。履歷寫道熟悉什麼技術就一定要去熟悉它,不然被問到不會很尷尬!做過什麼項目,即使項目體量不大,但也一定要熟悉實現原理!不是你負責的部分,也可以看看同事是怎麼實現的,換你來做你會怎麼做?做過什麼,會什麼是廣度問題,取決於專案內容。但做過什麼,達到怎樣一個境界,這是深度問題,和個人學習能力和解決問題的態度有關了。大公司看深度,小公司看廣度。大公司面試你會的,小公司面試他們用到的你會不會,也就是職位匹配度。

選定你想去的幾家公司後,先去一些小的公司練練,學習下面試技巧,總結下,也算是熟悉下面試氛圍,平時和同事或者產品PK時可以講得頭頭是道,思路清晰至極,到了現場真的不一樣,怎麼描述你所做的一切,這絕對是個學術性問題!

面試過程一定要有禮貌!即使你覺得面試官不尊重你,經常打斷你的講解,或者你覺得他不如你,問的問題缺乏專業水平,你也一定要尊重他,誰叫現在是他選擇你,等你拿到offer後就是你選擇他了。

另外,描述問題一定要慢!不要一下子講一大堆,慢顯得你沉穩、自信,而且你還有時間反應思路接下來怎麼講更好。現在開發過多依賴ide,所以會有個弊端,當我們在面試講解很容易不知道某個方法怎麼讀,這是一個硬傷......所以一定要對常見的關鍵性的類名、方法名、關鍵字讀準,有些面試官不耐煩會說「你到底說的是哪個?」這時我們會容易亂了陣腳。正確的發音 沉穩的描述 好聽的嗓音決對是一個加分項!

最重要的是心態!心態!心態!重要事情說三遍!面試時間很短,在短時間內對方要摸清你的底子還是比較不現實的,所以,有時也是看眼緣,這還是個看臉的時代。

希望大家都能找到適合自己滿意的工作! fighting!

以上是分享Android面試心得【精選】的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

新報告對傳聞中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相機升級進行了嚴厲的評估 新報告對傳聞中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相機升級進行了嚴厲的評估 Sep 12, 2024 pm 12:23 PM

最近幾天,Ice Universe 不斷披露有關 Galaxy S25 Ultra 的詳細信息,人們普遍認為這款手機將是三星的下一款旗艦智慧型手機。除此之外,洩密者聲稱三星只計劃升級一台相機

三星 Galaxy S25 Ultra 洩漏了第一張渲染圖,傳聞中的設計變化被曝光 三星 Galaxy S25 Ultra 洩漏了第一張渲染圖,傳聞中的設計變化被曝光 Sep 11, 2024 am 06:37 AM

OnLeaks 現在與 Android Headlines 合作,首次展示了 Galaxy S25 Ultra,幾天前,他試圖從他的 X(以前的 Twitter)粉絲那裡籌集到 4,000 美元以上的資金,但失敗了。對於上下文,嵌入在 h 下面的渲染圖像

IFA 2024 | TCL 的 NXTPAPER 14 在性能上無法與 Galaxy Tab S10 Ultra 相媲美,但在尺寸上幾乎可以與之媲美 IFA 2024 | TCL 的 NXTPAPER 14 在性能上無法與 Galaxy Tab S10 Ultra 相媲美,但在尺寸上幾乎可以與之媲美 Sep 07, 2024 am 06:35 AM

除了發布兩款新智慧型手機外,TCL 還發布了一款名為 NXTPAPER 14 的新 Android 平板電腦,其大螢幕尺寸是其賣點之一。 NXTPAPER 14 採用 TCL 標誌性品牌霧面液晶面板 3.0 版本

新報告對傳聞中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相機升級進行了嚴厲的評估 新報告對傳聞中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相機升級進行了嚴厲的評估 Sep 12, 2024 pm 12:22 PM

最近幾天,Ice Universe 不斷披露有關 Galaxy S25 Ultra 的詳細信息,人們普遍認為這款手機將是三星的下一款旗艦智慧型手機。除此之外,洩密者聲稱三星只計劃升級一台相機

Vivo Y300 Pro 在 7.69 毫米纖薄機身中配備 6,500 mAh 電池 Vivo Y300 Pro 在 7.69 毫米纖薄機身中配備 6,500 mAh 電池 Sep 07, 2024 am 06:39 AM

Vivo Y300 Pro剛剛全面亮相,它是最薄的中階Android手機之一,配備大電池。準確來說,這款智慧型手機厚度僅為 7.69 毫米,但配備 6,500 mAh 電池。這與最近推出的容量相同

三星 Galaxy S24 FE 預計將以低於預期的價格推出,有四種顏色和兩種記憶體選項 三星 Galaxy S24 FE 預計將以低於預期的價格推出,有四種顏色和兩種記憶體選項 Sep 12, 2024 pm 09:21 PM

三星尚未就何時更新其 Fan Edition (FE) 智慧型手機系列提供任何提示。目前來看,Galaxy S23 FE 仍然是該公司的最新版本,於 2023 年 10 月年初推出。

小米紅米 Note 14 Pro Plus 上市,成為首款配備 Light Hunter 800 相機的高通 Snapdragon 7s Gen 3 智慧型手機 小米紅米 Note 14 Pro Plus 上市,成為首款配備 Light Hunter 800 相機的高通 Snapdragon 7s Gen 3 智慧型手機 Sep 27, 2024 am 06:23 AM

Redmi Note 14 Pro Plus 現已正式成為去年 Redmi Note 13 Pro Plus 的直接後繼產品(亞馬遜售價 375 美元)。正如預期的那樣,Redmi Note 14 Pro Plus與Redmi Note 14和Redmi Note 14 Pro一起成為Redmi Note 14系列的主角。李

iQOO Z9 Turbo Plus:可能增強的系列旗艦產品已開始預訂 iQOO Z9 Turbo Plus:可能增強的系列旗艦產品已開始預訂 Sep 10, 2024 am 06:45 AM

OnePlus的姊妹品牌iQOO的2023-4年產品週期可能即將結束;儘管如此,該品牌已宣布 Z9 系列的開發尚未結束。它的最終版,也可能是最高端的 Turbo+ 變體剛剛按照預測發布。時間

See all articles