2020年度Android面經總結,寫給朝夕不倦的你,2021拒絕當「小丑」!

前言

轉眼間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無償分享下載

文末

我一直以爲技術面試不是考試,考前背背題,發給你一張考卷,答完交卷等通知。

首先,技術面試是一個 認識本身 的過程,知道本身和外面世界的差距。

更重要的是,技術面試是一個雙向瞭解的過程,要讓對方發現你的閃光點,同時也要 試圖去找到對方的閃光點,由於他之後可能就是你的同事或者領導,因此,面試官問你有什麼問題的時候,不要說沒有了,要去試圖瞭解他的工做內容、瞭解這個團隊的氛圍。

找工做無非就是看三點:和什麼人、作什麼事、給多少錢,要給這三者在本身的內心劃分一個比例。

最後,祝願你們在這並不友好的環境下都能找到本身心儀的歸宿!

若是文章對你有幫助,請點個贊支持一下,也能夠分享給身邊的朋友,這對我相當重要,謝謝!

相關文章
相關標籤/搜索