公司一
- 說下你所知道的設計模式與使用場景
- java語言的特點與是OOP思想
- 說下java中的線程創建方式,線程池的工作原理。
- 說下handle原理,為什么會出現內存泄漏,為什么繼承Handle就不會出現能存泄漏
- 說下Activity的啟動方式,生命周期,兩個Activity跳轉的生命周期,如果一個Activity跳轉另一個Activity再按下Home鍵在回到Activity的生命周期是什么樣的
- 說下Activity的橫豎屏的切換的生命周期,用那個方法來保存數據,兩者的區別。觸發在什么時候在那個方法里可以獲取數據等。
- 是否了SurfaceView,它是什么?他的繼承方式是什么?他與View的區別(從源碼角度,如加載,繪制等)。
- 如何實現進程保活
- 說下冷啟動與熱啟動是什么,區別,如何優化,使用場景等。
- Android中的線程有那些(我提到HandlerThread,AsyncTask又問了他們的原理與各自特點)
- 給定命題,一串字符串中有通配符與占位符,如何化簡優化(方法忘記可以簡寫)
- 說下產生OOM,ANR的原因,三級緩存原理,如何優化ListView。
- 說下你對Collection這個類的理解。
- 說下AIDL的使用與原理
- 說下你對廣播的理解
- 說下你對服務的理解,如何殺死一個服務。服務的生命周期(start與bind)。
- 是否接觸過藍牙等開發
- 設計一個ListView左右分頁排版的功能自定義View,說出主要的方法。
-說下binder序列化與反序列化的過程,與使用過程 - 是否接觸過JNI/NDK,java如何調用C語言的方法
-如何查看模擬器中的SP與SQList文件。如何可視化查看布局嵌套層數與加載時間。 - 你說用的代碼管理工具什么,為什么會產生代碼沖突,該如何解決
- 說下你對后臺的編程有那些認識,聊些前端那些方面的知識。
- 說下你對線程池的理解,如何創建一個線程池與使用。
- 說下你用過那些注解框架,他們的原理是什么。自己實現過,或是理解他的工作過程嗎?
- 說下java虛擬機的理解,回收機制,JVM是如何回收對象的,有哪些方法等
- 一些java與Android源碼相關知識等
大學成績
大學那些專業,你哪方面學得好
單片機,嵌入式,電子線路。
畢業設計什么,幾個人實現的,主要功能是什么
還有些其他硬件相關知識
自己的職業規劃與發展方向
公司二
- 數據結構與算法相關
- 實際開發中的內存優化,APK體積優化,代碼優化,資源優化,緩存,數據庫等
- 各大平臺打包上線的流程與審核時間,常見問題(主流的應用市場說出3-4)
- 支付寶與微信的支付功能接入,常見問題
- 如何和后臺交互,post請求的數據格式定義在那里定義,手寫出來。
- http與https的理解與4層都是哪4層,在一個請求過程中都是什么時候走這些流程與各自的作用
- http的結構有那些(請求頭,請求行之類的)
- session與cookie的區別
- 如何在后臺沒有給接口的情況下如何開發應用
- 你是如何封裝網絡請求,數據緩存,優化,文件下載,線程池,OKHttp3源碼的理解,如何提交
- post請求,如何處理返回數據,異常處理,實體定義等實際開發中與后臺協作相關知識。
- 說下Android中特有的數據結構與常見的java數據結構(熟悉那個說那個),存儲過程,源碼與底層實
現。
公司三
- dp是什么,sp呢,有什么區別
- 自定義View,ViewGroup注意那些回調?
- 界面卡頓的原因以及解決方法
- android中的存儲類型
- service用過么,基本調用方法
- Handler機制
- LinearLayout、FrameLayout、RelativeLayout性能對比,為什么
- Activity的生命周期,finish調用后其他生命周期還會走么?
- FW層熟悉么,源碼看過么
- GC回收機制熟悉么,分代算法知道么
- Java的類類加載原理
- 內存泄漏如何排查,MAT分析方法以及原理,各種泄漏的原因是什么比如
- Handler為什么會泄漏
- gradle熟悉么,自動打包知道么
- 介紹下先的app架構和通信
- 自己負責過哪些模塊,跟同事相比自己的優勢是什么
- 遇到過什么印象深刻的問題,怎么解決的
公司四
- 最近都做了哪些工作?
- 遇到了什么印象深刻的問題。A:會順著你介紹的項目問下具體實現。
- 推送消息有富文本么?
- 熱修復了解么,用的什么?
- apk包大小有限制么?怎么減少包大小?
- 工作中有沒有用過或者寫過什么工具?腳本,插件等等
比如:多人協同開發可能對一些相同資源都各自放了一份,有沒有方法自 動檢測這種重復之類的 - 寫過native的底層代碼么
- view的繪制熟悉么,介紹下
- gc相關的算法
- anr是因為什么產生的,怎么排查
- 界面上的話,有什么優化措施么?比如列表展示之類的,平時遇到過內存問題嗎,怎么優化的?
- 平時用過哪些設計模式?
- 介紹下最近一年主要做了什么工作
- 會對簡歷上突出的技能進行詳情的詢問:
比如:音頻合成的具體步驟,以及遇到的一些問題和細節處理。
會根據面試發散一些問題,問到,seek方法播放到末尾后重新播放會有一些卡頓的不流暢問題,怎么避免,從交互設計或者技術角度。(個人表示沒怎么關注這種)。 - 項目團隊多少人,怎么分配工作
- 線程之間怎么通信的?
- app的架構是怎么樣的,并且為什么這樣,有什么優缺點?
- 算法熟悉么?給了一個二叉排序樹,出了一個給定節點找到它的下一個元素(指的是大小順序的下一個)的算法題。
- 為什么找工作,自己的優勢是什么
- 介紹下自己主要負責的工作
- Activity的生命周期有哪些,知道onRestart么,介紹 savedInstanceState知道么,干什么用的,什么時候有值,什么時候為空,平時是怎么用的
View繪制熟悉么,介紹下,能說下是實現原理么? - 平時用過什么開發工具,分析工具?
- ANR是怎么回事?怎么查?Service會引起ANR么?
- Activity的啟動模式有哪些?棧里是A-B-C,先想直接到A,BC都清理掉,有幾種方法可以做到?這幾種方法產生的結果是有幾個A的實例?
- 有什么工具可以看到Activity棧信息么?多個棧話,有方法分別得到各個棧的Activity列表么
- 都熟悉哪些命令?知道怎么用命令啟動一個Activity么?
- SharedPrefrences的apply和commit有什么區別
- java里帶$的函數見過么,是什么意思
- MD5是加密方法么,Base64呢
- 有博客和github,主要是寫的什么?有哪些關注
- android 8.0 有哪些新特性
公司五
glide緩存策略?同一個圖片跟size有關么
android中的動畫有哪些
View事件傳遞機制
界面卡頓怎么排查和優化?
Fragment的replace和end??的區別?
MVP,MVVM,MVC解釋和實踐
項目之外的,對技術的見解,拓展知識
微信跳一跳外掛怎么實現,檢測怎么做的?
一張純色背景下怎么有效檢測各個矩形?
對接的so算法了解么,有接觸過相關的庫么?
三個算法題選一個并寫出測試用例:打印n-m之間所有的素數;計算n-m之間1出現的次數;指定數
字序列的排序;
android api層的源碼熟悉哪些?解釋一下
ACTION_CANCEL什么時候觸發,觸摸button然后滑動到外部抬起會觸發點擊事件嗎,在+ + 滑動
回去抬起會么
怎么處理嵌套View的滑動沖突問題
熱修復相關的原理,框架熟悉么
gradle打包流程熟悉么
任意提問環節:其實可以問之前面試中遇到的問題:比如,多模塊開發的時候不同的負責人可能會
引入重復資源,相同的字符串,相同的icon等但是文件名并不一樣,怎樣去重?
Canvas的底層機制,繪制框架,硬件加速是什么原理,canvas lock的緩沖區是怎么回事
surfaceview, suface,surfacetexure等相關的,以及底層原理
android文件存儲,各版本存儲位置的權限控制的演進,外部存儲,內部存儲
上層業務activity和fragment的遇到什么坑??頁面展示上的一些坑和優化經驗
網絡請求的開源框架:OKHttp介紹,寫過攔截器么
公司六
數據層有統一的管理么,數據緩存是怎么做的,http請求等有提供統一管理么?
有用什么模式么,邏輯什么的都在Activity層?怎么分離的
如果用了一些解耦的策略,怎么管理生命周期的?
有什么提高編譯速度的方法?
對應用里的線程有做統一管理么?
jni的算法提供都是主線程的?是不是想問服務類的啊
邊沿檢測用的啥?深度學習相關的有了解么?
上線后的app性能分析檢測有做么
進程間通信方式?Binder的構成有幾部分?
HttpClient和HttpConnection的區別
View的事件傳遞機制
MVC,MVP,MVVM分別是什么?
Android中常用的設計模式,說三個比較高級的?
內存優化,OOM的原因和排查方法
想改變listview的高度,怎么做
Https是怎么回事?
除了日常開發,其他有做過什么工作?比如持續化集成,自動化測試等等
公司七:
ActivityA跳轉ActivityB然后B按back返回A,各自的生命周期順序,A與B均不透明。
Synchronize關鍵字后面跟類或者對象有什么不同。
單例的DCL方式下,那個單例的私有變量要不要加volatile關鍵字,這個關鍵字有什么用
JVM的引用樹,什么變量能作為GCRoot?GC垃圾回收的幾種方法
ThreadLocal是什么?Looper中的消息死循環為什么沒有ANR?
Android中main方法入口在哪里
jdk1.5?SparseArray和ArrayMap各自的數據結構,前者的查找是怎么
實現的,與HashMap的區別
Runnable與Callable、Future、FutureTask的區別,AsyncTask用到哪個?AsyncTask是順序執行
么,for循環中執行200次new AsyncTask并execute,會有異常嗎
IntentService生命周期是怎樣的,使用場合等
RecyclerView和ListView有什么區別?局部刷新?前者使用時多重type場景下怎么避免滑動卡頓。
懶加載怎么實現,怎么優化滑動體驗。
SQLite的數據庫升級用過么
開放問題:如果提高啟動速度,設計一個延遲加載框架或者sdk的方法和注意的問題。
Scroller有什么方法,怎么使用的。
分享下項目中遇到的問題
webwiew了解?怎么實現和javascript的通信?相互雙方的通信。@JavascriptInterface在?版本有
bug,除了這個還有其他調用android方法的方案嗎?
ReactiveNative了解多少
JNI和NDK熟悉么?Java和C方法之前的相互調用怎么做?
公司八:
fragment的生命周期
事件分發機制,以及涉及到的設計模式
onMeasure的測量模式與特點
線程間通信和進程間通信
ArrayList刪除元素
寫出你認為最優的懶漢式單例模式
activity意外退出時信息的儲存與恢復,onCreate正常進入時的判斷。
談談性能優化
JS的交互理解嗎?平時工作用的多嗎,項目中是怎么與Web交互的?
MVC -> MVP -> MVVM 這樣變化的原因,MVP的不足,MVVM為什么代替了MVP
MVC的情況下怎么把Activity的C和V抽離
各個網絡框架之間的差異和優缺點,網絡框架代替進化的原因
圖片緩存框架的差異和優缺點,有沒有比Glide更好的圖片加載框架?
項目框架里有沒有Base類,BaseActivity和BaseFragment這種封裝導致的問題,以及解決方法
框架里是怎樣實現MVC的
Reftofit用過沒有,注解實現的好處?
項目中的的界面既然是基于View的,有沒有動畫的處理?
為什么不推薦軟引用,軟引用在dvm上的垃圾回收機制和jvm上一樣嗎?
LRUCache的刪除條件,LRU是什么意思
啟動頁緩存設計 白屏問題
網絡圖片怎么加載?Glide如何確定圖片加載完畢
項目框架中對多View的支持?
Http的request和response的協議組成
RecyclerView和ListView相比有哪些好處,為什么ListView被RecyclerView代替?
公司九
Java
- 多線程并發
sleep 和 wait 區別
join 的用法
線程同步:synchronized 關鍵字等
線程通信
線程池
手寫死鎖 - Java 中的引用方式,及各自的使用場景
- HashMap 的源碼
- GC(垃圾回收)是什么?如何工作的?回收算法有哪些
- Error 和 Exception 區別?
- 反射和注解了解嗎?項目中有使用過嗎?
- 網絡相關:
http 狀態碼
http 與 https 的區別?https 是如何工作的? - Java 中 LRUCache 是如何實現的(源碼角度)?為什么要用 LinkedHashmap?
- 設計模式:
手寫單例,volitate 關鍵字的原理
手寫生產者消費者模式
項目中都使用過哪些設計模式?
編碼常遵循的設計原則:單一職責、開閉原則、里氏替換等 - ArrayList 和 LinkedList 區別?
Android - 源碼相關:
Activity 啟動過程
事件分發源碼,以及由此衍生的事件攔截如何實現
消息機制:Handler 源碼(結合Looper、MessageQueue),以及取不到消息時會怎樣?
View.post 為什么可以拿到寬高? - 自定義 View
流程:onMeasure, onLayout, onDraw
onMeasure 中的 MeasureSpec 是如何計算的? - 優化:
內存泄漏,以及 LeakCanary 源碼
內存優化:大對象占用、內存抖動
布局優化:層級、過度繪制等
網絡優化 - 如何捕獲應用全局異常?
- Service 是使用,bind 和 start 的區別?
- Android 中的 IPC 機制有哪些?(接著往下問)
- 屬性動畫源碼?
- 大圖加載。
- ANR 如何定位,如何分析?(trace 日志)
- 項目中使用了哪些開源庫?挑一個說說源碼?
- MVC 和 MVP 區別?
- Activity:
A 啟動 B,生命周期是怎么走的?(注意區分B是否是透明的)
啟動模式 - AsyncTask 原理?
- Android 新特性(考察對新技術、新方向的觀察)
公司十
Service的源碼
Handler的實現,Looper怎么終止。
項目是MVC,那根據自己負責的項目講下Model、View、Controller層
問了下晝夜模式、多語種、屏幕適配的問題,追問了下,如果要關閉晝夜模式功能怎么辦?很多類
的話,一個個去關嗎?
有沒有接觸過JNI和NDK?
ListView的錯位問題原因以及如何處理?
如何設計一個抽獎系統,比如滿200抽20,滿500抽50
公司十一
Android:
1.內存泄漏的場景,Handler機制
2.四大組件
3.進程間通信
4.自定義view
5.Binder的使用
6.性能優化
Java:
1.接口和抽象類區別
2.繼承和重寫
3.ArrayList和LinkedList區別
4.死鎖產生條件和應用場景
5.Java的修飾符的使用,static final修飾原理
6.多線程空指針解決方法
7.異常處理流程,何時必須要catch
操作系統
1.進程和線程區別
2.多線程同步和異步問題
3.同步死鎖應用場景
設計模式
1.代理模式
2.單例模式以及雙重鎖原理
3.觀察者模式應用場景
數據結構和算法
1.無序數組建立二叉搜索樹
2.前序和中序遍歷二叉樹(我寫了遞歸和非遞歸)
1.四大引用區別和引用場景
2.內存泄漏的場景,Handler內存泄漏的原因以及解決方法
3.Handler機制,主線程如何向子線程發送消息,Handler能否多進程通信
4.多線程并發,sychronized,類鎖和對象鎖
5.線程安全類,StringBuffer和StringBuilder
6.jvm工作內存和主內存,volatile原理,jvm的靜態塊,內存屏障的實現原理
7.一個m*n的棋盤,一個蟲子從左上走到右下方,只能向右或者向下,有多少種走法,可以用組合
數學的知識解答
8.靜態廣播和動態廣播區別,service啟動的兩種方式區別
1.將知道的操作系統說一遍,引入操作系統的最終目的(計算的功能),進線程區別,虛擬地址的
原理和作用,指針是物理地址還是虛擬地址,指針的地址長度的影響因素,32位系統是4個字節,
64位系統是8個字節。
2.Java的三大特性,寫一個多態的例子,注意命名的規范
3.一個很大的數組,其中有一個數出現的次數是奇數次,其他都是偶數次。求這個數。除了異或寫
另外一種方法
1.Android的體系架構,深入到framework,native層
2.單例模式的幾種實現具體的區別,工廠模式的種類以及區別
3.對C語言的理解
4.Android的觸摸事件分發流程
5.Android第三方框架的源碼實現原理
公司十二
1.講一下項目,主要是深入框架的源碼
2.Java忘記問啥了,Android問啟動模式的時候,對四種啟動模式的實際運用問得比較深,還有觸
摸事件的細節問得深
3.sp的commit和apply區別
4.左連接和右連接區別
5.算法:輸出二叉樹每層的最大值
1.集合類,線程安全如何實現,寫一個算法ArrayList刪除所有值是50的。
這里有坑:http://blog.csdn.net/lazy_p/article/details/7365324
除了遍歷還有更優的方法嗎?想不出來。換成LinkedList性能如何?
2.異常類的繼承結構,如何捕捉異常,如何全局捕捉異常并上報
3.數據的存儲方式與其的應用場景,ContentProvider的底層實現,如何保證多進程讀寫安全
4.類加載,jvm內存模型
5.自旋鎖
6.Linux的fork
7.數據庫的ACID
8.手寫反轉鏈表
1.intent是什么來的?為什么不是動作,用來干什么的?
(什么向什么表現什么意圖)
2.為什么設置tcp三次握手,四次揮手
3.hashmap的底層實現
4.場景題分析:手機掃網頁端的二維碼如何提起的登錄的過程,是如何實現的?
公司十三
一面(Android Leader)
請舉出你認為你在工作中挑戰最大的事例;
RecyclerView 一個適配器如何適配多種布局,不考慮根據不同 Type 設置不同 ViewHolder;
用過數據庫么?如何防止數據庫讀寫死鎖?
可以考慮采用 ContentProvider && 單例實現。
CardView 真的好么?除了 CardView 還能用什么方式實現圓角等?假設我們有上千個 Shape 文
件,如何維護?
了解過 MVVM 么?它和 MVP 有什么差距?
是否用過 DataBinding?ButterKnife 是怎么做到布局綁定的?
使用過什么圖片加載庫,Glide 的源碼設計哪里很微妙?
知道 Linux 的線程間通信么? Android 為啥會采用 Binder?Binder 的機制又是怎樣的?
講講 AIDL。
如何能保證隨時隨地都能拿到一個 Activity 的當前生命周期?
會用 Kotlin 么?
可見 Kotlin 自從成為了谷歌首推語言后,確實還挺重要的,必須學習一下了。
Android 7.0 都適配了什么?
你還有什么想問我的?
二面(移動端 Leader)
講講 HTTPS 是怎么做加密的?講講非對稱加密算法。
Android 8.0 都有些什么新特性?
畫中畫;
自適應 icon?
WebView 增強;
通知分類別,增加圓點,通知延后,通知增加背景,同樣增加歷史,通知超時自動清除;
自動填充信息(類似瀏覽器的選擇保存的賬號密碼功能)
后臺執行增加限制(主要是服務和廣播);
藍牙提升。支持藍牙低功耗 5.0 標準;
智能文本選擇與智能共享;
WLAN 感知;
取消屏幕縱橫比限制;
多顯示器支持;
可下載字體、XML 定義字體;
自適應 TextView,統一布局邊框;
更豐富的色彩管理功能;
可以聲明應用類別。
使用過 Gradle 的哪些功能。
RecyclerView 滑動卡頓,請分析原因,并提供解決方案。TraceView 都能看到哪些成分?
操作系統里面的一個「虛擬內存」是指的什么?
虛擬內存指的是一個對內存和外存進行調度,只是從邏輯上擴充了內存,但實際上不存在的內存存
儲器。
原理是:基于局部性原理,在程序裝入的時候,可以將程序的一部分裝入內存,而在其余部分留在
外存,就可啟動程序執行;在程序執行時,當所訪問的信息不在內存的時候,由操作系統所需要的
部分調入內存,然后繼續執行程序;操作系統再將內存中暫時不使用的內容換出到外存上,從而騰
出空間存放將要調入內存的信息。
Android 是如何做的性能調優?
講講適配器模式中適配器是干嘛的?在開發中都在哪里有用到?
都用過哪些開源庫?
會用 KotLin 么?
你還有什么想問我的?
三面:技術總監
為什么大多數 API 會選擇短連接而不是長連接?
為什么會選擇用 RxJava?
MVVM 模式到底有什么好處?
詳細講講 Android 8.0 新特性。
Kotlin 學習的怎么樣了?
你的職業規劃是怎么樣的?
你有什么想問我的?
四面:HR
你目前是在職還是已經離職?
你為什么離職?
對咕咚 APP 的了解?
你是一個自律的人么?
你的職業規劃是怎么樣的?
五面:CT0
先做個自我介紹。
你在原來公司發展挺好的,但你為什么離職?
你們的 APP 采用藍牙協議了么?
公司十四
一面(Android 技術)
講講你工作開發的項目是干嘛的。
手寫快排;
手寫二分查找,并分析時間復雜度;
講講 APK 是如何做瘦身的?
說說你項目中挑戰最大的一件事。
講講 HTTPS 是如何做加密的,說下非對稱加密算法;
說一下 HTTP 協議請求頭我們常用的 3 個字段;
講講你這個圖片壓縮庫是怎么做的?
進程保活怎么做?進程拉活現在還可以做么?
用過線程池么?講講 AsyncTask 的原理。
講講 HashMap 的原理。
講講 Android 如何做性能調優?
你們是如何做 UI 的機型適配的?
講講你們的多渠道打包是怎么做的?
bugly 是干嘛用的?Handler 怎么處理內存泄漏,除了使用弱引用。你還知道哪些地方需要注意內
存泄漏?
Bitmap 使用需要注意哪些問題?Bitmap.recycle() 會立即回收么?什么時候會回收?如果沒有地方
使用這個 Bitmap,為什么垃圾回收不會直接回收它?
如何存儲一個大圖,但顯示在 UI 上的是小圖。
官方為什么會把 HttpClient 和 HttpUrlConnection 替換為 OkHttp 默認實現?它有什么好處?
你的 GitHub 上都開源了些什么東西?都為哪些開源庫貢獻了源碼?ImagePicker 為啥會出現有些
圖片拿不到?
了解二叉樹的遍歷么?講一講他們。
講講 SVN 和 Git 的差別,Git 的優勢是什么。
講講 MVVM,主要是為了解決 MVP 和 MVC 的什么問題?
equals() 和 hashCode() 的區別是什么?平時有重寫過它們么?什么情況下會去重寫。
講下為什么在 Android 下推薦使用 ArrayMap,相比 HashMap 它到底有什么優勢?
整理來自公眾號 秦子帥