TOP
轉眼就到了開學季的9月,而我畢業走出學校已有五年了,真想在回到大學時代,去談一場轟轟烈烈的戀愛…… 而不會像現在是一個沒人疼沒人愛的單身狗!
在這個五年的時光里,我一直在Android 行業摸爬滾打,待過的公司差不多有五六家了,待得最久的一家時長好像是一年多,基本都是中大型的公司,在進入這些公司前,少不了的肯定是面試環節,而在這些年內去面試的公司也比較多,如何要說具體多少家公司的話,說實話我自己也記得不是很清楚了,但是近一年中我去面試的公司,我是有所簡單的記錄,
想在金九銀十面試的這個季度,通過這篇文章分享給大家做個參考,失敗和成功的面經案例都有,我們一起往下看吧,

面試前期準備
相信大家在面試前都會一個備戰的預習期,因為大家都想把Offer拿到手,然后自己進行去挑選公司,這個周期的長短不宜過長,其實在這個期間最重要的是,給自己做好一份優質的簡歷,HR或者面試官第一眼見的就是你的簡歷,從簡歷中進行篩選確定是否通知你來面試,這個是最關鍵的一步,二就是對自己簡歷中所記錄熟知的技術點和專案進行復習,從網路上去找相關的面試題進行刷,還有就是回想之前做的專案中遇到的一些問題,自己是如何卻解決,這個是面試官跟你聊專案中可能會問道的,

面試程序(不分時間先后)
小米(三面)
一面
兩個面試官(一個我們小組Android的leader,一個是同事),上來先當著他們的面寫了一個筆試題(都是很基礎的題沒啥難度,演算法題也就是一個list的反轉,但是小米比較注重手寫代碼的一些細節,所以要考慮好該判空的判空,還有防止越界啥的問題),然后就開始問,90%都在問Java基礎(GC的機制,GC演算法,記憶體相關的問的比較多,多執行緒執行緒安全問題是如何發生的,HashMap的原理)
二面
我們組的主管(全程聊專案,沒有問技術相關的了,然后介紹了一下這個部門的作業內容啊之類的)
三面:
本來應該有三面…三面是我們部門的領導,但是因為一些其他的原因吧,三面就沒有面直接過了
感受:
其實自已算是運氣好,遇到的問題算是偏容易的,要多看看演算法方面的視頻
騰訊音樂(5次技術面)
面試內容:
1.activity和service的生命周期與使用場景
2.thread和服務的差別,單例的型別,多少種?優缺點說一下死鎖的原因,與場景,單例的使用場景
3.使用過啥來源框架,有啥特點,為什么,從中學到了什么,
4.kotlin的特點與java的差別,
5.三種架構的區別handler和view的原理,
6.執行緒池原理與種類
7.javastackoverflow的原因
8.性能優化和卡頓優化的實際案例
9.虛擬機的構成與原理
10.熱修復和插件化的區別與原理
11.rxjava原始碼
12.多執行緒應該注意的問題
13.databinding原理
14.binder原理
15.網路方面知識
16.平時解決問題的流程
感受:
掌味訓礎知識很重要,演算法也有問到,還有就是開放式問題,他想知道我怎么解決問題的一個程序,怎么發現和定位,平時學習的方法,
美團
1.java的話static變數各種訪問可見性,final關鍵字的作用,封裝繼承多型展開問,多執行緒通訊,執行緒池原理,執行緒同步方式,jvm記憶體模型,常見的gc演算法,類加載程序
2.網路的話主要是問的https,http1/2/3的區別特性
Android問了一些常見的handler原理,recycleview快取機制,view事件的分發3.glide快取機制
4.然后引申如何實作我LRU,記憶體泄露和如何預防處理,
5.演算法的話,有top-k排序(堆排序,位圖法),旋轉輸出矩陣,鏈表逆序,hashmap concurrenthashmap原理,執行緒安不安全,它的鎖機制等等
華捷艾米(基礎面)
1.冒泡排序,堆排序演算法
2.平衡二叉樹和紅黑樹的區別
3.多執行緒,用過哪些并發api?踩過哪些坑?
4.C++的 指標和參考的區別
5.手寫對賦值運算子多載
6.GC 會不會把所有執行緒暫停?
7.GC不同時期有何區別?
8.說一下Handler Looper的休眠機制
9.設計一個演算法,已知某年某月某日是星期幾,求另外年月日對應的星期幾,
廈門美圖
1.多執行緒
2.handler
3.網路請求
4.性能優化
5.view繪制
6.opengl部分
7.camera相關
8.自定義view
9.asyncTask
10.圖片加載框架原理
匯豐銀行
1.執行緒池的作業原理
2.synchronized鎖方法和鎖靜態方法有什么區別
3.鎖的理解,什么是樂觀鎖,悲觀鎖,可重入鎖,
4.View的事件分發流程
5.View的三種測量模式理解,什么時候會發生Excatly
6.HashMap的作業原理,
7.怎么實作多執行緒下載,斷點續傳怎么實作,
8.rxjava的背壓了解嗎
9.kotlin的協程,怎么做到和rxjava的zip操作一樣,等待所有結果后再處理,
盒馬生鮮
1.bitmap在記憶體中的大小計算
2.系統級的全域例外如何捕獲列印堆疊?
3.APT技術原理(這個居然忘了?)
4.如何中斷一個執行緒?AsyncTask如何中斷?(加標記位中斷)
5.CoordinatorLayout滑動機制?兩個CoordinatorLayout嵌套如何通過事件分發傳遞處理滑動?
父View中嵌套子View,快速滑動fling狀態,如何處理在父View到頂部停止滑動,子View繼續滑動?
6.Flutter熱多載原理
7.組件化用了什么技術?實作原理是什么?
8.如何分析主執行緒中的訊息佇列耗時情況
9.繪制優化、APP啟動優化,activity跳轉啟動速度優化?(網路請求可不可以放在setContentView之前?)
10.如何實作旋轉影片?(幀影片、屬性影片、gif、Lottie影片框架)
11.GC分代回收介紹?Eden和survivor為什么是8:1?老年代存活下來的會進入永久代么?
12.如何修改JVM記憶體分配?(AS中在vmoptions修改,gradle.properties)
13.Android9.0隱藏的屬性方法是咋反射獲取的 (原理居多)
小紅書
(1)concurrentHashMap 如何加鎖的
(2)measure引數詳解,view設定wrap不起作用
(3)Bind service,如何實作保活
(4)兩個行程act,如何加快啟動速度
(5)性能優化(面試官老插嘴,都說不上話)
(6)Eventbus如何實作執行緒的切換
(7)jetpack的Navigation的xml參考,在什么時候呼叫的?
(8)Inflater.inflate如何實作xml轉java的(framework),方法中的各個引數含義,
京東(涼經)
(1)如何設計模塊,組件,sdk,如何考慮
(2)說說你專案的架構,為何這么設計或這么考慮
(3) 說說記憶體泄漏,越多越好
(4) 說說你的技術難點,如何解決,如何思考
(5)apk安全,你如何考慮
(6)act+fragment的完全生命周期(不是單個說哦)
(7)京東北辰:recyclerView原始碼,必會,包括快取如何實作,哪幾個快取,運作流程等;各種notifyXX的原理,觸發哪些重繪;如何實作下半部分item不移動,上半部分的item高度變化的實作?
探探(涼經)
(1)手拖動View,手松開后完成一個泡泡破裂的影片效果(本質是view事件分發機制+影片選型,分發機制哪個方法處理什么引數,之后怎么觸發影片效果等,問的灰常具體,吐了)
(2) 自定義view相關,invalidate,postInvalidate,requestLayout,深入的說說framework層的流程原理
(3)kotlin 協程深層原理如何實作的
(4)dcl是否執行緒安全?哪一塊出問題,為什么volatile能實作防止指令重排,指令級別如何實作的,物件的創建程序等(多家都問了,很深入)
shopee基金
shopee一面:
1.java的四種參考分析
2.synchronize和volatile各自的機制是怎樣的
3.handler原始碼原理相關的問題
4.自定義view的繪制,事件分發機制,怎么解決滑動沖突,activity啟動的程序
5.https單向認證,對稱加密和非對稱加密,在瀏覽器輸入url發生了什么
6.jvm相關,如new一個物件的程序發生了什么,垃圾回識訓制
8.問了關于執行緒池的一些問題
9.跨行程通信有什么方案
10.binder機制
11.hashmap原始碼
12.用什么方案縮小apk體積
13.recyclerview和listview對比
14.做過什么記憶體優化,性能優化
15.okhttp原始碼設計原理
16.手寫一道演算法題,關于DFS+回溯演算法的
shopee二面:
1.問了之前的一些專案經歷,在團隊做了什么,主要負責哪一塊,選擇一兩塊自己認為做得最好的展開講講,程序中會打斷問問題
2.有沒有做過插件化,做到什么程度,講講原理
3.由于我之前專案有用到mvvm和jetpack,問了一些jetpack組件相關的原始碼,和mvvm跟mvp的對比
4.又問了okhttp,快取攔截器原理是怎樣的
5.專案中做過什么性能優化,具體說說
6.平時專案中用到什么設計模式,挑幾個常用講講
7.聊人生聊職業規劃
WPS
1.執行緒切換(handler機制)
2.多執行緒,幾種鎖,有什么區別
3.如何實作執行緒排隊
4.Https加密機制
5.專案經驗
6.Okhttp原理
7.設計一個線上日志收集系統
8.專案經驗
9.Activity啟動流程
10.性能優化
11.Viewstub實作原理,自己設計一個類似的
12.Https如何保證安全的,如何防止中間人攻擊,可以偽造證書嗎
13.Looper死回圈為什么不會導致主執行緒卡死
14.epoll機制是怎么樣子的
15.熱修復資源id沖突怎么解決
16.AIDL如何實作的
17.Binder原理
位元組跳動
一面:
1.SharedPreferences執行緒安全嗎
2.SharedPreferences多行程呼叫會有問題嗎?如果需要多行程呼叫,怎么實作
3.自己在專案代碼中寫一個java.lang.String類會有問題嗎
4.記憶體泄漏除了用LeakCanary還有沒有其他辦法檢測
5.如何監控線上記憶體泄漏
6.native的記憶體泄漏怎么監控
7.如何監控線上OOM,如何知道是哪里造成的OOM
8.Error和Exception的區別
9.怎么監控應用中的執行緒,都是在哪創建的(AOP)
10.post一個延遲5秒的訊息,怎么做到5秒后才執行的
11.同步屏障原理
12.ContentProvider初始化的時機
13.組件化-A組件要呼叫B組件的某個功能,怎么呼叫(回答了介面下沉,AutoService等等)
14.組件化-如果不用介面下沉,沒有任何依賴,怎么方便的呼叫(不讓用反射,太麻煩)
15.A行程呼叫B行程的b方法(AIDL實作的,B行程有個服務),B行程沒有創建的情況下,B行程中是b方法先執行還是Application的onCreate方法先執行?16.如果b方法很耗時,A行程會被阻塞住嗎
17.演算法:寫一個二叉樹的層序遍歷
18.資料庫的索引原理
19.B+樹和二叉樹的區別,性能對比
20.HashMap的缺點,怎么解決
21.ArrayMap的原理,為什么記憶體消耗低
22.flutter與其他跨平臺方案對比,flutter為什么好(除了跨平臺),跟原生的性能比怎么樣
23.硬體加速的原理
二面:
1.觸摸事件中的cancel事件什么時候觸發
2.handler延時訊息怎么實作的
3.主執行緒有好多handler,分發訊息的時候怎么知道給哪個handler
4.主執行緒每5秒鐘發一個需要執行10秒的訊息到子執行緒,會發生什么
5.實作了AIDL介面的服務的方法是運行在哪個執行緒?有多個方法,是不是運行在同一個執行緒?
6.Binder通訊中,客戶端呼叫服務端是阻塞的嗎?怎么做到不阻塞?
7.bitmap的像素資料在哪里?一直申請bitmap會oom嗎?
8.view的繪制重繪機制是怎么樣的?vsync信號發出后怎么觸發繪制邏輯的?
9.頁面靜止的時候,onDraw會執行嗎?vsync信號會發嗎?
10.vsync信號發出的時候,怎么控制需不需要onDraw?
11.用canvas怎么繪制一個倒影
12.對canvas做矩陣變換的matrix有哪些引數配置
13.做過哪些性能相關的優化
14.怎么分析anr問題
15.如果是死鎖導致的anr,在日志上怎么看
16.應用啟動速度怎么優化
17.沒有記憶體泄漏的情況下,應用占用記憶體比業內其他應用記憶體要多,怎么分析優化
18.布局層級太多怎么優化
19.頁面內有一些不需要每次都顯示的view,怎么優化
20.recyclerview里面的圖片顯示速度比較慢,怎么優化
21.做過的最復雜的專案
22.作業幾年中自身提升比較大的地方
23.JavaScript中bind,call,apply的區別
24.RxJava中的背壓是什么意思
25.flutter有了解嗎
26.最近有學習什么
27.mvvm與mvp的區別
28.裝飾模式和代理模式的區別
三面:
1.介紹在上一家公司做的app,app的crash率是多少
2.詳細介紹最有技術難度的專案
3.應用crash的本質原因是什么
4.重寫和多載的區別,應用場景
5.hybrid開發中遇到了什么問題
6.線性布局和相對布局那個性能更優
7.js和java之間傳遞大物件會怎么樣,怎么保證傳輸性能
8.activity橫豎屏切換會發生什么?怎么避免
其實還有幾家小型公司的面試,我就不在此一一的說明了,因為文章篇幅長度有限,所以就挑選了幾個自己覺得面的還不錯的公司進行跟大家分享,大家可以參考這些面試題,去進行記錄學習,可能對你將來面試是有幫助的,
推薦分享
之前在做面試準備的時候,從網上查找收集整理了一些 Android 開發相關的學習筆記、面試題等等,進行刷題復習 Android 相關的知識,通過這次的面試效果檢測,也體驗出了結果,這次面試能通過一半原因是自己的技識訓過的去,
所以我想拿出來跟大家進行分享,希望能幫助到大家學習提升,在面試中能順利通過,如有需要參考的可以直接去我 GitHub



轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/299717.html
標籤:其他
