前言
轉眼間2020就接近尾聲了,年後有跳槽想法的小夥伴們內心應該也有本身的決定了。金三銀四青銅五,明年形勢嚴峻,切勿臨時抱佛腳。在博主認爲,對於Android面試以及進階的最佳學習方法莫過於刷題+博客+書籍+總結,前三者博主將淋漓盡致地揮毫於這篇博客文章中,至於總結在於我的,實際上越到後面你會發現面試並不難,其次就是在刷題的過程當中有沒有去思考,刷題只是次之,這又是一個層次了,這裏暫時不提後面再談。java
其實Android開發的知識點就那麼多,面試問來問去仍是那麼點東西。因此面試沒有其餘的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看本身複習到了哪一個階段就好。git
下面開始進入正文,如下是我進階學習所積累的歷年騰訊、頭條、阿里、美團、字節跳動等公司2020年度的高頻面試題,但願對你有幫助。github
1、計算機網絡
一、Tcp和Udp的區別?面試
二、TCP可靠傳輸原理實現(滑動窗口)。算法
三、描述TCP三次握手與四次揮手的過程與意義。數據庫
四、Http與Https的關係是什麼?編程
五、Http1.1和Http1.0及2.0的區別數組
六、Http的報文結構。瀏覽器
七、HTTPS 如何防範中間人攻擊?緩存
八、Http的請求方法。
九、Https加密原理。
十、網絡請求緩存處理,okhttp如何處理網絡緩存的
十一、權限管理系統(底層的權限是如何進行 grant 的)?
十二、Cookie與Session的做用和原理。
1三、client如何肯定本身發送的消息被server收到
1四、瀏覽器輸入地址到反饋結果發生了什麼?
2、關於數據結構與算法
算法能夠說是如今找工做必須的知識儲備,具體得看公司的業務。以個人面試經驗來看,整體來講問的很少,還有些公司基本不問算法。
可是若是去面試字節,網易,快手這種每輪必問算法的公司,由於算法題拿不到offer就很惋惜了。
算法題就好像高考語文的古詩詞默寫同樣,分很少,但丟了就很惋惜了。
主要仍是平時力扣的刷題積累
大多公司業務涉及到的算法其實很少,但大廠的面試官很喜歡問算法,其實就是想考驗/判斷,面試者是否聰明、勤奮、邏輯性怎麼樣、培養潛力大不大。(知識面廣、開源庫源碼看的多)
刷題技巧
一、多刷題,全部題目只靠本身寫出來,不是看代碼寫出來,而是本身不看代碼能寫出來。
二、多總結,重點總結以下兩個方面: 筆試考的多算法:數組、鏈表、隊列、棧、排序、查找、串、圖(圖形比較難,問的很少)、二叉樹 面試問的多算法:Hashmap、LinkedList、ArrayList
大廠經典算法題
數組
如何在一個1到100的整數數組中找到丟失的數字?(Google、騰訊)
鏈表
一個數組插入刪除查找和鏈表的效率對比?若是一個數組要反覆插入刪除怎能優化下降時間複雜度?(騰訊)
如何在不使用遞歸的狀況下逆轉單鏈表?(小米、快手)
隊列&堆棧
一個送禮的場景,禮物各有權重屬性,怎麼根據權重對禮物進行處理,而後再排隊分發,每次取一個禮物,怎麼設計數據結構(喜馬拉雅、美團)
二叉樹
已知前序遍歷爲{1,2,4,7,3,5,6,8},中序遍歷爲{4,7,2,1,5,3,8,6},他的二叉樹是怎樣的(58同城)
排序
top-k排序(堆排序,位圖法)美團
查找
設計一個算法,已知某年某月某日是星期幾,求另外年月日對應的是星期幾(華爲)
串
編寫一個函數來查找字符串數組中的最長公共前綴
Hashmap常問
1.HashMap的底層原理?線程安全嗎?(百度)
2.HashMap中的put是怎麼實現的?(滴滴)
3.講一下HashMap中何時須要進行擴容,擴容resize()是如何實現的?(阿里)
4.什麼是哈希碰撞?怎麼解決(美團)
5.HashMap和HashTable的區別(小米)
6.hashmap concurrenthashmap原理(美團)
7.ArrayList和hashmap的區別,爲何取數更快?
以上真題節選自《一線互聯網大廠面試數據結構與算法經典70題》 須要的下夥伴能夠在個人GitHub免費下載獲取
3、Java面試題
Java基礎
一、介紹下GC回收機制與分代回收策略。
二、若是讓你寫一段棧溢出的代碼你會什麼寫,一個棧大概有多大,爲何?每一個線程都有這樣大小的一個棧嗎?
三、Java中有幾種引用關係,它們的區別是什麼?
四、什麼狀況下會發生棧內存溢出?
五、JVM中一次完整的GC流程是怎樣的,對象如何晉升到老年代?
六、Jvm內存 結構說一下。
七、GC收集算法有哪些?它們的特色是什麼?
八、描述GC機制。Class會不會回收?用不到的Class怎麼回收?(東方頭條)
九、如何判斷一個對象是否被回收,有哪些GC算法,實際虛擬機使用最多的是什麼GC算法?
十、JVM DVM ART的區別(360)
十一、請描述new一個對象的流程。
十二、StackOverFlow與OOM的區別?分別發生在何時,JVM棧中存儲的是什麼,堆存儲的是什麼?
1三、String, Stringbuffer, StringBuilder 的區別是什麼?(東方頭條)
1四、Java虛擬機和Dalvik虛擬機的區別?
1五、Java對象會不會分配到棧中?
1六、抽象類和接口的區別。
1七、String爲何是不可變的?
1八、什麼是值傳遞和引用傳遞,Java 是值傳遞仍是引用傳遞?
1九、final 、finally、finalize 區別。
20、重載和重寫的區別 (京東)
2一、try-catch-finally,try裏有return,finally還執行麼?
2二、String s = new String(「」);建立了幾個對象?
2三、Static class 與non static class的區別。
2四、java裏 equals和== 區別。
2五、Excption與Error區別。
2六、描述JVM類加載過程。
2七、.PathClassLoader與DexClassLoader的區別是什麼?
2八、動態代理的方法怎麼初始化的?
2九、什麼是雙親委託機制,爲何須要雙親委託機制?
30、動態代理是什麼?如何實現? ......
併發編程
一、HandlerThread是什麼? 二、AQS原理 (小米 京東)
三、volatile關鍵字幹了什麼?(什麼叫指令重排)
四、Synchronized的原理以及與ReentrantLock的區別。(360)
五、Synchronized在JDK1.8以後作了哪些優化
六、什麼是守護線程?你是如何退出一個線程的?
七、實現非阻塞式生產者消費者
八、AsyncTask中的任務是串行的仍是並行的?
九、AyncTask的原理是什麼。
十、有三個線程T1,T2,T3,怎麼確保它們按順序執行?
十一、如何開啓一個線程,開啓大量線程會有什麼問題,如何優化?
十二、volatile和synchronize有什麼區別?
1三、sleep 、wait、yield 的區別,wait 的線程如何喚醒它?
1四、ReentrantLock的實現原理。
1五、假如只有一個cpu,單核,多線程還有用嗎 ?
1六、Synchronized static與非static鎖的區別和範圍
1七、Android中操做多線程的方式有哪些?
1八、怎樣獲取當前線程是不是主線程
1九、HandlerThread是什麼?
20、線程間如何通訊?
2一、RxJava線程切換原理,RxJava1和RxJava2的區別有哪些?
4、Android相關
Android基礎
一、Acitvity的生命週期是什麼樣的?
二、Activity的4大啓動模式,與開發中須要注意的問題,如onNewIntent() 的調用;
三、Intent顯示跳轉與隱式跳轉,如何使用?
四、Activity A跳轉B,B跳轉C,A不能直接跳轉到C,A如何傳遞消息給C?
五、Activity如何保存狀態的?
六、Fragment add與replace的區別,分別對Fragment的生命週期影響
七、 Fragment的構造函數爲啥不讓傳參?(B站)
八、Fragment的生命週期?
九、Application、Activity、Service中context的區別?可否啓動一個activity、dialog?
十、什麼是有序廣播?
十一、請描訴Activity的啓動流程,從點擊圖標開始。(B站)
十二、 Service的生命週期是什麼樣的?
1三、你會在什麼狀況下使用Service?
1四、startServer和bindServier的區別?
1五、Service和Thread的區別?
1六、能夠再onReceive中開啓線程麼,會有什麼問題?
1七、 廣播的分類與工做原理
1八、 BroadcastReciver的靜態註冊與動態註冊的區別?
1九、 ContentProvider如何自定義與使用場景是什麼?
20、IntentService與Service的區別?
view相關
一、如何優化自定義View
二、Android屬性動畫實現原理,補間動畫實現原理
三、View繪製流程與自定義View注意點。
四、在onResume中能夠測量寬高麼
五、事件分發機制是什麼過程?(東方頭條)
六、View分發反向制約的方法?
七、自定義Behavior,NestScroll,NestChild。(東方頭條)
八、View.inflater過程與異步inflater(東方頭條)
九、.inflater爲何比自定義View慢?(東方頭條)
十、onTouchListener onTouchEvent onClick的執行順序。
十一、Requestlayout,onlayout,onDraw,DrawChild區別與聯繫
十二、一個ListView或者一個RecyclerView在顯示新聞數據的時候,出現圖片錯位,可能的緣由有哪些 & 如何解決?
1三、ScrollView下嵌套一個RecycleView一般會出現什麼問題?
1四、如何對ListView & RecycleView進行局部刷新的?
1五、如何給ListView & RecyclerView加上拉刷新 & 下拉加載更多機制
1六、怎麼攔截事件 onTouchEvent若是返回false onClick還會執行麼?
1七、事件的分發機制,責任鏈模式的優缺點
1八、動畫的分類以及區別
1九、屬性動畫與普通的動畫有什麼區別?
20、插值器 估值器的區別
2一、RecyclerView與ListView的對比,緩存策略,優缺點。
2二、RecyclerView的回收複用機制
2三、RecyclerView是什麼?如何使用?如何返回不同的Item
2四、WindowMangerService中token究竟是什麼?有什麼區別
2五、爲何Dialog不能用Application的Context?
2六、如何經過WindowManager添加Window(代碼實現)?
2七、DecorView, ViewRootImpl,View之間的關係,ViewGroup.add()會多添加一個ViewrootImpl嗎
2八、自定義View執行invalidate()方法,爲何有時候不會回調onDraw()
2九、Android中的動畫有哪些? 動畫佔用大量內存,如何優化
30、.ViewHolder爲何要被聲明成靜態內部類
3一、.ListView卡頓的緣由以及優化策略
3二、.如何實現Activity窗口快速變暗
3三、Activity,Window,View三者的聯繫和區別
3四、View的繪製流程是從Activity的哪一個生命週期方法開始執行的
3五、invalidate() 和 postInvalicate() 區別
3六、View的滑動方式
3七、RecyclerView與ListView的對比,緩存策略,優缺點
.......
Android Framework
一、LiveData的生命週期如何監聽的?(B站)
二、打開多個頁面,如何實現一鍵退出?
三、若是須要在Activity間傳遞大量的數據怎麼辦?
四、Android中多進程通訊的方式有哪些?
五、描述下Binder機制原理?(東方頭條)
六、Binder線程池的工做過程是什麼樣?
七、Handler怎麼進行線程通訊,原理是什麼?(東方頭條)
八、Handler若是沒有消息處理是阻塞的仍是非阻塞的?
九、handler.post(Runnable) runnable是如何執行的?
十、handler的Callback和handlemessage都存在,但callback返回true handleMessage還會執行麼?
十一、Handler的sendMessage和postDelay的區別?
十二、IdleHandler是什麼?怎麼使用,能解決什麼問題?
1三、爲何Looper.loop不阻塞主線程?Looper無限循環爲啥沒有ANR(B站)
1四、Looper如何在子線程中建立?
1五、Looper、handler、線程間的關係。例如一個線程能夠有幾個Looper能夠對應幾個Handler?
1六、如何更新UI,爲何子線程不能更新UI?
1七、ThreadLocal的原理,以及在Looper是如何應用的?
1八、Android 有哪些存儲數據的方式?
1九、SharedPreference原理,commit與apply的區別是什麼?使用時須要有哪些注意?
20、如何判斷一個 APP 在前臺仍是後臺?
2一、一張圖片100x100在內存中的大小?
.......
Android第三方庫源碼
一、網絡底層框架:OkHttp實現原理
二、OKhttp針對網絡層有哪些優化?
三、網絡請求緩存處理,okhttp如何處理網絡緩存的?
四、從網絡加載一個10M的圖片,說下注意事項?
五、網絡封裝框架:Retrofit實現原理
六、響應式編程框架:RxJava實現原理
七、圖片加載框架:Glide實現原理
八、Glide如何肯定圖片加載完畢?
九、Glide內存緩存如何控制大小?
十、加載bitmap過程(怎樣保證不產生內存溢出)
十一、Android中軟引用與弱引用的應用場景。
十二、LruCache原理
1三、Fresco與Glide的對比:
1四、Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM?
1五、事件總線框架EventBus實現原理
1六、內存泄漏檢測框架:LeakCanary實現原理
1七、leakCannary中如何判斷一個對象是否被回收?
1八、依賴注入框架:ButterKnife實現原理
1九、依賴全局管理框架:Dagger2實現原理
20、數據庫框架:GreenDao實現原理
…...
Android APP性能優化
這個主要結合你所作過的項目問,通常面試官會問你項目作過哪些方面的優化,常見的問法就是: 優化的思路是什麼 用到了哪些技術 遇到了哪些困難(問題) 如何解決 有什麼心得 主要結合本身項目回答。切記不要本身給本身挖坑,好比沒有作過這方面優化,你爲了表現本身,說作過,結果面試官往下問回答不出來,這關乎誠信問題,大家懂的~
面試複習筆記解析
附答案解析的話文章篇幅實在太長了,因此將真題和答案整理成了騰訊面經真題PDF+解析
資料已經上傳在個人GitHub無償分享下載
這份資料我從春招開始,就會將各博客、論壇。網站上等優質的Android開發中高級面試題收集起來,而後全網尋找最優的解答方案。每一道面試題都是百分百的大廠面經真題+最優解答。包知識脈絡 + 諸多細節。 節省你們在網上搜索資料的時間來學習,也能夠分享給身邊好友一塊兒學習。 給文章留個小贊,就能夠免費領取啦~
筆記完整目錄 共計771頁PDF,完整版資料已經上傳在個人GitHub無償分享下載
文末
我一直以爲技術面試不是考試,考前背背題,發給你一張考卷,答完交卷等通知。
首先,技術面試是一個 認識本身 的過程,知道本身和外面世界的差距。
更重要的是,技術面試是一個雙向瞭解的過程,要讓對方發現你的閃光點,同時也要 試圖去找到對方的閃光點,由於他之後可能就是你的同事或者領導,因此,面試官問你有什麼問題的時候,不要說沒有了,要去試圖瞭解他的工做內容、瞭解這個團隊的氛圍。
找工做無非就是看三點:和什麼人、作什麼事、給多少錢,要給這三者在本身的內心劃分一個比例。
最後,祝願你們在這並不友好的環境下都能找到本身心儀的歸宿!
若是文章對你有幫助,請點個贊支持一下,也能夠分享給身邊的朋友,這對我相當重要,謝謝!