金三銀四,銅五鐵六,我的面試通關祕籍(含HR)
前言:
前一段時間和大牛們交流了一下,據反饋現在Android崗位也沒有以前那麼多了,沒這麼好找了,面臨著網際網路的寒冬,不僅僅是Android,大量公司模仿O2O模式導致死掉企業的很多,在加之培訓機構大量的培訓人,導致供大於求,當然這不意味著飽和,只是市場更趨於合理一些( 只要技術好不用怕的 )。最近結合一些面試的同學和大牛們反饋,前幾天有大牛去阿里面試順便整理了下一些面試題目。希望對大家有所幫助,後期會不斷更新新增新的面試題。可以幫大家查漏不缺。以下是( 阿里、騰訊、百度、華為、和位元組跳動的試題彙集 )
就算寫出答案也沒必要( 我寫了部分面試答案,有需要的朋友可以瀏覽文末資料領取全部 ),因為開發與實際答案會有所不同,再者怕誤導大家,所以這些面試題答案還是自己去理解吧! 切記:不要背答案,多理解。
Android高階總結
1.說下你所知道的設計模式與使用場景
2.Java語言的特點與OOP思想
3.說下java中的執行緒建立方式,執行緒池的工作原理。
4.說下handler原理
5.記憶體洩漏的場景和解決辦法
**6.如何避免OOM? **
答:1.使用更加輕量的資料結構:如使用ArrayMap/SparseArray替代HashMap,HashMap更耗記憶體,因為它需要額外的例項物件來記錄Mapping操作,SparseArray更加高效,因為它避免了Key Value的自動裝箱,和裝箱後的解箱操作
2.便面列舉的使用,可以用靜態常量或者註解@IntDef替代
3.Bitmap優化:
a.尺寸壓縮:通過InSampleSize設定合適的縮放
b.顏色質量:設定合適的format,ARGB_6666/RBG_545/ARGB_4444/ALPHA_6,存在很大差異
c.inBitmap:使用inBitmap屬性可以告知Bitmap解碼器去嘗試使用已經存在的記憶體區域,新解碼的Bitmap會嘗試去使用之前那張Bitmap在Heap中所佔據的pixel data記憶體區域,而不是去問記憶體重新申請一塊區域來存放Bitmap。利用這種特性,即使是上千張的圖片,也只會僅僅只需要佔用螢幕所能夠顯示的圖片數量的記憶體大小,但複用存在一些限制,具體體現在:在Android 4.4之前只能重用相同大小的Bitmap的記憶體,而Android 4.4及以後版本則只要後來的Bitmap比之前的小即可。使用inBitmap引數前,每建立一個Bitmap物件都會分配一塊記憶體供其使用,而使用了inBitmap引數後,多個Bitmap可以複用一塊記憶體,這樣可以提高效能
4.StringBuilder替代String: 在有些時候,程式碼中會需要使用到大量的字串拼接的操作,這種時候有必要考慮使用StringBuilder來替代頻繁的“+”
5.避免在類似onDraw這樣的方法中建立物件,因為它會迅速佔用大量記憶體,引起頻繁的GC甚至記憶體抖動
6.減少記憶體洩漏也是一種避免OOM的方法
7.說下Activity的啟動模式,生命週期,兩個Activity跳轉的生命週期,如果一個Activity跳轉另一個Activity再按下Home鍵在回到Activity的生命週期是什麼樣的
8.onRestart的呼叫場景
9.是否了SurfaceView,它是什麼?他的繼承方式是什麼?他與View的區別(從原始碼角度,如載入,繪製等)。
10.如何實現程序保活
答:a: Service設定成START_STICKY kill 後會被重啟(等待5秒左右),重傳Intent,保持與重啟前一樣
b: 通過 startForeground將程序設定為前臺程序, 做前臺服務,優先順序和前臺應用一個級別,除非在系統記憶體非常缺,否則此程序不會被 kill
c: 雙程序Service: 讓2個程序互相保護對方,其中一個Service被清理後,另外沒被清理的程序可以立即重啟程序
d: 用C編寫守護程序(即子程序) : Android系統中當前程序(Process)fork出來的子程序,被系統認為是兩個不同的程序。當父程序被殺死的時候,子程序仍然可以存活,並不受影響(Android5.0以上的版本不可行)聯絡廠商,加入白名單
e.鎖屏狀態下,開啟一個一畫素Activity
11.說下冷啟動與熱啟動是什麼,區別,如何優化,使用場景等。
12.為什麼冷啟動會有白屏黑屏問題?
13.Android中的執行緒有那些,原理與各自特點
14.ANR的原因
15.三級快取原理
16.LruCache底層實現原理:
17.說下你對Collection這個類的理解。
18.JVM老年代和新生代的比例
19.jvm,jre以及jdk三者之間的關係?JDK(Java Development Kit)是針對Java開發員的產品,是整個Java的核心,包括了Java執行環境JRE、Java工具和Java基礎類庫。
20.談談你對 JNIEnv 和 JavaVM 理解?
21.Serializable與Parcable的區別?
Android多執行緒總結
1.什麼是執行緒
2.執行緒的狀態
3.執行緒的建立
4.執行緒中斷
5.Thread為什麼不能用stop方法停止執行緒
答:1.即刻丟擲ThreadDeath異常,線上程的run()方法內,任何一點都有可能丟擲ThreadDeath Error,包括在catch或finally語句中。
2.釋放該執行緒所持有的所有的鎖。呼叫thread.stop()後導致了該執行緒所持有的所有鎖的突然釋放,那麼被保護資料就有可能呈現不一致性,其他執行緒在使用這些被破壞的資料時,有可能導致一些很奇怪的應用程式錯誤。
6.重入鎖與條件物件,同步方法和同步程式碼塊
7.volatile關鍵字
8.java記憶體模型
9.原子性 可見性 有序性
10.執行緒池ThreadPoolExecutor
11.執行緒池的種類
12.執行緒同步機制與原理,舉例說明
13.arrayList與linkedList的讀寫時間複雜度
14.為什麼HashMap執行緒不安全(hash碰撞與擴容導致)
答:HashMap的底層儲存結構是一個Entry陣列,每個Entry又是一個單鏈表,一旦發生Hash衝突的的時候,HashMap採用拉鍊法解決碰撞衝突,因為hashMap的put方法不是同步的,所以他的擴容方法也不是同步的,在擴容過程中,會新生成一個新的容量的陣列,然後對原陣列的所有鍵值對重新進行計算和寫入新的陣列,之後指向新生成的陣列。當多個執行緒同時檢測到hashmap需要擴容的時候就會同時呼叫resize操作,各自生成新的陣列並rehash後賦給該map底層的陣列table,結果最終只有最後一個執行緒生成的新陣列被賦給table變數,其他執行緒的均會丟失。而且當某些執行緒已經完成賦值而其他執行緒剛開始的時候,就會用已經被賦值的table作為原始陣列,這樣也會有問題。擴容的時候 可能會引發連結串列形成環狀結構
15.程序執行緒的區別
16.Binder的記憶體拷貝過程
17.傳統IPC機制的通訊原理(2次記憶體拷貝)
18.Java記憶體模型(記住堆疊是記憶體分割槽,不是模型)
19.類的載入過程
20.什麼情況下會觸發類的初始化
21.雙親委託模式
22.雙親委託模式的好處
23.死鎖的產生條件,如何避免死鎖
24.App啟動流程
25.Android單執行緒模型
26.RecyclerView在很多方面能取代ListView,Google為什麼沒把ListView劃上一條過時的橫線?
27.HashMap如何保證元素均勻分佈
Android View總結
1.View的滑動方式
2.View的事件分發機制
3.View的載入流程
4.View的measure layout 和 draw流程
5.自定義view需要注意的幾點
HR問題彙總
1您在前一家公司的離職原因是什麼?
2講一件你印象最深的一件事情;
3介紹一個你影響最深的專案;
4介紹你最熱愛最擅長的專業領域;
5公司實習最大的收穫是什麼;
6與上級意見不一致時,你將怎麼辦;
7自己的優點和缺點是什麼?並舉例說明?
8你的學習方法是什麼樣的?實習過程中如何學習?實習專案中遇到的最大困難是什麼以及如何解決的;
9說一件最能證明你能力的事情;
10針對你你申請的這個職位,你認為你還欠缺什麼;
11如果通過這次面試我們單位錄用了你,但工作一段時間卻發現你根本不適合這個職位,你怎麼辦;
12專案中遇到最大的困難是什麼?如何解決的;
13你的職業規劃以及個人目標;未來發展路線及求職定位;
14如果你在這次面試中沒有被錄用,你怎麼打算;
15評價下自己,評價下自己的技術水平,個人程式碼量如何;
16通過哪些渠道瞭解的招聘資訊,其他同學都投了哪些公司;
17業餘都有哪些愛好;
18你做過的哪件事最令自己感到驕傲;
19假如你晚上要去送一個出國的同學去機場,可單位臨時有事非你辦不可,你怎麼辦;
20就你申請的這個職位,你認為你還欠缺什麼;
21當前的offer狀況;如果BATH都給了offer該如何選;
22你對一份工作更看重哪些方面?平臺,技術,氛圍,城市,money;
23理想薪資範圍;杭州崗和北京崗選哪個;
24理想中的工作環境是什麼;
25談談你對跳槽的看法;
26說說你對行業、技術發展趨勢的看法;
27實習過程中周圍同事/同學有哪些值得學習的地方;
28家人對你的工作期望及自己的工作期望;
29如果你的工作出現失誤,給本公司造成經濟損失,你認為該怎麼辦;
30若上司在公開會議上誤會你了,該如何解決;
31是否可以實習,可以實習多久;
32在五年的時間內,你的職業規劃;
33你看中公司的什麼?或者公司的那些方面最吸引你。
我是以專題的形式來分析關於Android面試通過祕籍,整理資料不易,在Android學習或者在面試方面有需要提升,準備的朋友可以加入我的技術交流群Android高階架構裡面不僅僅有Android各類專題面試資料,BAT高階原始碼面試題,還有提供學習的系統進階視訊資料,現在面對找工作的困境,需要提升自己的朋友們推薦加入。
