2020年騰訊丶百度丶字節丶OPPO等Android面試大全,附帶教你如何寫好簡歷

每到「金三銀四」的季節,總人不少人去尋找名叫「面經」同樣的東西,其實就是一個個具體的題目,而後臨陣磨槍,去「背」答案,若是一直是這樣的話,我相信你的能力不會有任何提升,即便工做三年五年也達不到高級工程師的水平,事實證實這類「程序員」佔大多數。並且我認爲一個「面經」真正有價值的內容是面試前你是如何學習的,面試中面對不會的題目你是如何回答的,以及面試後的你的感覺和總結,而不是冷冰冰的羅列題目。

最近兩個月,由於其餘緣由,辭了職,目前已經創業並順利度過了十來天,感覺仍是很複雜,同時也但願能夠給同齡工做經驗的夥伴們一點點幫助和啓發。html

更多面試內容,面試專題,flutter視頻 ,音視頻從0到高手開發。視頻教程
關注GitHub:https://github.com/xiangjiana/Android-MS
免費獲取面試PDF合集java

一丶如何寫一份更好的簡歷

一份簡歷整體能夠分爲 6個 模塊:基本信息,我的簡介,技能列表,工做經歷,項目經驗,教育狀況,其餘。這個順序能讓 HR 從淺到深快速瞭解求職者的優點與技能。學校信息若是是重點學校或者萌新工程師,能夠提早並放在基本信息以後。
git

1.我的資料

姓名:XXX
性別:X
年齡:XX
學歷:本科
工做經驗:8年開發經驗
居住地:XXXX程序員

2.求職意向

求職意向:Android軟件開發工程師
目前狀態:離職github

3.工做經驗

2012/10– 2014/05面試

xx網絡科技有限公司 | Android軟件開發工程師算法

2014/11– 2016/05數據庫

xxxxxx網絡科技有限公司 | Android軟件開發工程師設計模式

2016/06– 2019/02數組

xxx網絡科技有限公司 | Android軟件開發工程師兼後臺開發兼平面設計

2019/02– 2020/02

湖南XXXXXXXXXXXXX | AndroidXXXXXXXXXXXX

4.我的能力

1.熟練Android的五大組件,並瞭解最新組件LifeCycle,以及Jatpack組件庫的部分API。

2.熟練掌握性能優化技能,能在NDK層面和框架層面進行深度優化,並能使用第三方工具進行性能優化。

3.熟練掌握Android動態加載技術,包括掌握動態加載技術框架網易雲換膚以及手寫插件化框架。

4.掌握OkHttp,Retrofit,Glide,ButterKnife,IOC,ARouter,AndFix,EventBus,LiveDataBus等一線互聯網框架和線下行業最流行的框架的核心原理以及可以手寫打造簡易版。

5.可以熟練使用MVC,MVP,MVVM等架構模式進行項目開發

6.熟練掌握第三方框架的使用,好比微信相關API,支付寶相關API,推送相關API,shareSDK,銀聯API等。

7.熟練掌握java的24種設計模式,Hook技術,註解,註解處理器等並能熟練運用.

8.深刻了解個Android系統源碼,瞭解Handler,Message,Binder,AIDL,AMS,PMS,Http,BroadcastReceiver等底層API,並對虛擬機的原理以及特性有必定了解。

9.熟悉Android Studio、Visual Studio 201三、Visual Studio Code、Eclipse等開發工具。

10.掌握OkHttp,Retrofit,Glide,ButterKnife,EventBus等一線互聯網框架和線下行業最流行的框架

5.項目經驗

開發項目一: xxxxxx 名稱
項目描述: xxxxxxxxxxxxxxx讓用戶能以優惠的價格購買到商品。

篇幅加大 3-5行
若是有項目上線地址 貼個連接

項目職責:
1:需求分析: 技術文檔編寫,功能開發,測試,框架搭建,技術選型

2.技術難點攻克: 架構搭建 權限庫封裝,EventBus 數據通訊封裝,公共標題封裝,經常使用工具類添加,litepal數據庫集成等

3.技術要點:

一、使用Rxjava2+retrofit2+MVP架構,利用Gson進行Json數據解析
二、經過 bsdiff和bspatch 開源庫實現增量更新。
三、WebView的加載html頁面與js的交互處理和頁面跳轉處理。
四、使用litepal數據庫進行數據存儲操做功能實現。
五、百度地圖導航定位集成、友盟三方登陸分享的集成和三方支付集成。
六、集成Zxing的二維碼掃描預定取貨、預定維修服務工位和長按識別二維等功能。
七、集成MPAndroidChart開源庫實現數據統計圖表,數據刷新等功能。

備註: 我在這個項目中主要負責的是xxxxxxxx,平時也喜歡跟其餘開發人員進行溝通,因此開發效率很高 xxxxxxxxxxxxxxxxx 不要出現主觀意識太強的東西

開發項目二: xxxxxxxxx
項目職責: 參與項目需求分析及評估,制定項目計劃,框架搭建;根據項目需求進行分析,UI部分實現優化,協同測試人員測試,修改項目bug,完善項目。

項目描述: xxxxxxxxxxxxxxx

技術要點:
一、配合Rxjava2+retrofit2+Okhttp做爲項目的數據傳送和處理
二、ViewPager和Fragment結合實現側滑與圖片輪播效果
三、實現app皮膚換膚功能
四、項目使用MVP模式做架構
五、使用MPChart安卓框架圖庫繪製折線圖和柱狀圖

開發項目三: xxxxxxx
項目職責: 負責項目框架搭建,不斷重構優化代碼,保證代碼健壯性、可讀性、易維護性;協同測試人員測試,修改項目bug,app的版本開發迭代。

項目描述: xxxxxxxxxxxxx。

技術要點:
一、配合Rxjava2+retrofit2+Okhttp做爲項目的數據傳送和處理
二、音視頻錄製和圖片壓縮上傳處理
三、使用GreenDao數據庫實現數據操做
四、集成百度地圖實現用戶定位、周邊檢索、地址反編譯、路線規劃、覆蓋物顯示等功能
五、使用BaseRecyclerViewAdapterHelper 實現RecyclerView列表展現和多佈局顯示的實現
六、實現微信登錄、分享等功能和銀行卡提現功能

教育經歷

xxxxxxxxxx |xxxxxxxxx院 | xxxxxx | 2009/09至2012/07

自我評價

本人以前一直從事軟件開發工做,於xxxxxxxxxxxx,多是由於我的在以前的工做當中就喜歡分享技術的緣故吧,在xxxxxxxxxxx項,因而沉下心來繼續在這個神聖的職業中走下去。以前xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx。在xxxxxxxxxxx。雖然說這些經歷很平凡,可是這也是我在這個行業可以繼續走下去的動力之一。個人我的理念是:給公司創造價值,幫助別人創造更高的價值,實現本身的價值。

二丶面試前的準備

面試前必定要系統的複習各個模塊的知識點,不要匆忙的出去面試,尤爲是對於大公司來講,面試機會原本就不易,不要由於本身沒有複習準備好,而白白的喪失了機會,尤爲是對於忽然被裁,事前沒有充分準備的同窗來講,更應該注意這一點。

對於Android應用開發而言,須要複習的並非不少,無非是都熟知的那幾大類:Java 基礎,JVM,Java 併發,Android 源碼,Android 第三方框架,Android 性能優化,數據結構與算法,再加上一些網絡知識等等

另外我在補充兩個點,咱們在複習具體的題目或知識點時,還能夠着重去百度查找具體公司的面試題目,由於不少面試官都會習慣性的問同一問題或同類問題,這樣更有針對性。再者就是本身簡歷上所描述的內容必定要會,包括具體的知識點,也包括你的項目經驗,都同等重要。

當本身感受複習的差很少了,先不要投遞和預定大公司或者本身嚮往的公司,先去幾家小公司,或者本身確定不會去的公司面試,這樣即便沒有經過面試也不算是浪費了機會,還能順便幫助本身更好的查漏補缺,若是經過了還能夠更加本身後面面試的信心。雖然這樣的行爲「欺騙」了一些公司的hr同窗,但面對本身求職的利益來講,只能抱歉了。

學習方法:

學生時代的咱們,經常聽到的一個詞就是「學習方法」,它看不見摸不着,卻經常體如今咱們的考試成績上。等到畢業,真正工做的時候,這個詞彷佛離咱們愈來愈遠,不變的是咱們依然只是在不停的作計劃,這一年要讀幾本書,這一月要學會哪些知識點,甚至以天來量化,但不多去思考爲何去學習這些,更重要的是如何去學習。
  • 系統

「系統」很好理解,也就是咱們在複習知識點時必定要全面,只有全面了,咱們的基礎才能夠打的牢,這個基礎很重要,基礎有了才能夠更好的進行思考和總結。
好比咱們常常會使用以及研究一些 Android 第三方的框架,如 OKHttp ,咱們要從三個方面去全面理解它

1,利用 okhttp 實現基本的網絡訪問功能,包括基本的數據請求,表單提交,文件上傳,文件斷點下載,https的設置等等。
2,深刻研究 okhttp 源碼,熟悉 okhttp 中的調用過程,攔截器原理,緩存原理以及其中涉及的設計模式,並能夠自定義攔截器實現特殊的功能,如日誌打印等等。
3,在研究 okhttp 緩存原理以前,得首先熟悉 http 緩存的相關字段以及在設置 https 時,也要全面複習 https 的相關原理。
經過以上思路的複習,慢慢地你的知識體系就會建成,基礎也就日漸牢固
  • 思考

我認爲思考和下面的總結都是比較困難的,由於這和每一個人的基礎和視野有很大的關係,基礎差、視野小的工程師必定和基礎牢固、見識廣範的人所思考的深度和方向不同,就拿我這種中級工程師來講,我面對 okhttp 所能想到的方向有:它與 retrofit 是什麼關係;okhttp 與其餘網絡框架的比較;由於涉及到網絡相關,還可能再延伸到網絡優化方向等等。可是無論你所思考的方向是什麼,只有有所思考就是進步,而不是單純的停留在 okhttp 框架的自己。

  • 總結

這裏的總結是在上一步思考的基礎之上進行的,並不僅僅是把本身所學習過的知識點所有羅列出來就能夠了。由於每一個知識點在學習的過程當中看似是獨立的,實際上知識點之間大都是有關聯的,咱們要學會去思考並總結各個有關聯的知識點,而後盡本身所能深挖出更多的知識點,使之串聯,後面我會利用實際的面試題再來更加清楚的解釋這一點。

面試官都是如何去問問題的

  • 所有按照簡歷上所列舉的知識點問。在以前面試經歷中一面和二面的面試官都是這樣問的,所以咱們必定要熟知咱們簡歷上所寫的內容,包括新技術例如koltin,flutter,只要簡歷上有寫,就必須得會
  • 從簡歷中挑選問題問,並不全問,固然面試官也會根據本身的習慣提問簡歷上沒有寫的內容。這種狀況是最多的。
  • 在你介紹項目經驗的時候,從中選擇感興趣的問題或相關知識點去提問。
  • 只關注你的項目自己,包括項目介紹,項目難點等等。在此次網易一面中就是這樣的,只詢問了我簡歷上所列舉的項目重難點,以及解決方案。
  • 不提問任何具體知識點和項目經驗,讓你回答一些開放性的問題,好比你是經過什麼途徑學習的;你對跨平臺的技術如何看待等等。這種面試方式通常出如今技術面的最後一面。

三丶面試

3.1美團

技術一面:
  • 1.生產者消費者模式(手撕代碼)
  • 2.wait 和 sleep的區別
  • 3.String、StringBuffer 、StringBuilder的區別
  • 4.String a = "abc" 和 String str = new String(「abc」) 的區別
  • 5.談談四種引用
  • 6.HashSet和HashMap的關係
  • 7.HashMap與HashTable的區別
  • 8.ConcurrentHashMap知道嗎,ConcurrentHashMap在jdk1.8以後的優化
  • 9.重寫和重載的區別
  • 10.談談Activity的四種啓動模式,SingleTop和SingleTask啓動模式的應用場景
  • 11.圖片的三級緩存是怎麼作的?
  • 12.Service的兩種啓動方式以及有什麼區別
  • 13.如何在Activity和Service進行通訊
  • 14.談談本地廣播
  • 15.binder機制
  • 16.Handler消息機制,子線程能夠建立handler嗎
  • 17.View的繪製流程,MeasureSpec(MS)知道嗎?如何肯定一個View的MS?那DecorView呢?
  • 18.OkHttp的源碼講解,它涉及哪些設計模式
  • 19.爲何TCP要三次握手,兩次不行嗎?
  • 20.TCP與UDP的區別,OSI五層結構
  • 21.死鎖的四個條件
  • 22.操做系統中頁面置換算法
  • 23.線程的全部狀態
  • 24.synchronized關鍵字(選擇題,問題關鍵在於synchronized鎖住的是哪一個對象,針對普通同步方法和靜態同步方法)

技術二面:

  • 1.數據庫的範式
  • 2.數據庫中事務的特性
  • 3.用過的設計模式或者是安卓中遇到的設計模式
  • 4.責任鏈模式有哪些優點
  • 5.實現一個單例模式(寫的是DCL)
  • 6.DCL爲何要兩次判斷null呢?爲何使用volatile?
  • 7.在瀏覽器輸入一個網址到網頁顯示出來有哪些通過
  • 8.DNS如何解析域名
  • 9.HTTPS與HTTP的區別,HTTPS爲何安全
  • 10.GC過程(判斷對象是否存活,GC算法)
  • 11.知道哪些數據結構,紅黑樹的特色
  • 12.作過的安卓性能優化
  • 13.內存泄露檢測工具leakcanary的原理
  • 14.RN開發和原生開發的區別
  • 15.線程池的參數和工做流程
  • 16.IntentService能用bind方式啓動嗎?IntentService的原理
  • 17.MVP   MVVM架構
  • 18.算法題:兩個隊列實現一個棧
  • 19.HashMap的hash算法和擴容機制的緣由

3.2百度

一面
  • 簡述內存泄漏,你處理過哪些內存泄漏?
  • 以100ms/張的間隔時間播放100張圖片,且每張圖片須要400ms進行加載,如何設計?
  • 如何在無序數組中快速找到最小值(手撕二分查找算法)
  • 簡述Android中的ANR,以及爲何會出現ANR?
  • 簡述Handler消息機制(深挖內部實現原理)
二面
  • 手撕一個有序數組的二分查找算法
  • 列舉一個你在實際項目中所進行的性能優化(深挖具體細節)。
  • 簡述單例模式的實現方式,且單例模式有什麼優缺點?
  • 簡述Java的異常處理機制
  • 多線程間如何進行信息通訊?
  • 多線程如何保證線程安全?
  • 簡述線程池
  • 簡述HashMap實現機制,如何解決HashMap的線程安全問題?
  • TCP和UDP的區別,分別有哪些應用場景?
  • 簡述七層網絡模型
  • 簡述Android點擊事件的分發機制

3.3騰訊

  • GC機制;
  • RxJava有沒有了解;
  • 內存泄漏怎麼排查;
  • app的頁面忽然卡了一下,怎麼排查?
  • ANR怎麼排查?定義是什麼?
  • 使用過哪些開源庫;
  • 對OKHttp有哪些瞭解?這個框架設計怎麼樣?
  • Databinding有哪些瞭解?
  • EventBus瞭解嗎?
  • 安卓的註解有什麼瞭解?
  • RelativeLayout和LinearLayout怎麼選?爲何?
  • 自定義Layout主要有那幾個流程?
  • 滑動過程卡頓,刷新率過低,怎麼排查?

3.4字節跳動

一面
  • java泛型,反射
  • 進程間通訊的方式,安卓中有哪些方式,爲何是基於Binder的,不用傳統的操做系統進程間通訊方式呢
  • 一個app能夠開啓多個進程嘛,怎麼作呢,每一個進程都是在獨立的虛擬機上嘛
  • 異步消息處理流程,若是發送一個延時消息,messagequeue裏面怎麼個順序,messagequeue是個什麼數據結構
  • 廣播的種類,註冊的方式,以及不一樣註冊方式的生命週期。
  • 局部廣播和全局廣播的區別分別用什麼實現的。
  • activity和service的通訊方式
  • 進程和線程的區別
  • 併發和並行分別是什麼意思,多線程是併發仍是並行
  • 安卓11有什麼新的特性。
  • HTTPS過程。
  • DNS解析過程,若是服務器ip地址改變了,客戶端怎麼知道呢

算法: 二叉樹的右視圖。

二面
  • 介紹一下全部的map,以及他們之間的對比,適用場景。
  • 一個按鈕,手抖了連續點了兩次,會跳轉兩次頁面,怎麼讓這種狀況不發生。
  • 一個商品頁一個商詳頁,點擊商詳頁的一個關注按鈕,但願回- 到商品頁也可以顯示關注的狀態,怎麼作
  • 項目中定時爲何用AlarmManager,不用postDelayed
  • 項目中後臺網絡請求爲何用service不用線程
  • 也問了一些安卓的新特性。
  • 內部類會有內存泄漏問題嗎 內部類爲何能訪問外部類的變量,爲何還能訪問外部類的私有變量。

算法: 單鏈表判斷有無環。

三面
  • 介紹項目用到了contentprovider,而後問ContentProvider的生命週期,application,activity,service,contentprovider他們的- - - context有什麼區別。
  • 內存溢出和內存泄漏,提到了bitmap
  • 而後問下載一個圖片的時候直接下載了一個5g的圖片,不壓縮必定會產生OOM問題,那麼怎麼去獲取這個圖片的長寬呢,或者說這個圖片的大小的大小在你沒下載以前如何獲得。

    在頭條的面試過程當中,印象最深入的一個問題是對MVC、MVP、MVVM的理解,以及MVVM的實現方式有哪些。

注: 我認爲這道題目很重要,由於經過這道題目的考察,能夠看出一名程序員是否在程序設計上有過本身的思考,而不是在工做中簡單的「搬磚」。

在Android架構設計中,大致上只有三種設計,組件化,插件化,再加上MVVM(或mvp、mvc),若是再可以熟練都應用各類設計模式,理解設計模式的六大原則,那麼你的代碼寫的必定很漂亮。
  • 算法相關的知識點
數組類、鏈表類、樹類,位運算類,大數處理,簡單的動態規劃,特殊的數據結構,如map,set

若是對算法並非那麼感興趣,僅僅想要應付面試而言,算法其實並不可怕,你們都知道頭條多是面試算法最多的一家公司了吧,即便這樣,頭條算法面試中的題目也都不難,無非是上面中的分類,數組,鏈表,以及二叉樹的操做,最多加一些簡單的動態規劃題目~

例如中序遍歷二叉樹,使用非遞歸方式,就拿這道題而言,很是基本,也沒有難度,但願對算法面試畏懼的同窗提升信心,認真學習數據結構就能夠了~(另外在補充一點,對於校招而言,由於有一個線上筆試環節,筆試中的算法平均難度稍微高於面試中的~)

基礎很差的夥伴在刷題的時候必定要注意一下幾點:

  • 開始時先按照類型去刷,諸現在天看數組類算法題,明天看鏈表類的等等
  • 每刷一類題目時必定要去總結其中的知識點,將這類題目的特色,經常使用的方法,常考的方向必定要理解透徹,這樣纔有效率,纔會進步。
  • 基本類型的題目都刷過一遍時,再回頭總結全部題目經常使用的思想

以上操做都應在數據結構學的比較牢固的基礎上進行才更有意義,所謂磨刀不誤砍柴功嘛

3.5OPPO

  • 項目中的重點內容
  • Service兩種區別
  • AsynTask 原理
  • 線程池原理,是否使用過
  • 性能優化,圖片內存佔用計算,持有引用,
  • TCP原理,如何確保穩定(與udp相比),阻塞,
  • 文件上傳下載原理,下載中流的大小;
  • 反射如何實現
  • 泛型
  • EventBus做用,,原理;
  • java四種引用(強軟弱虛),軟弱的回收區別
  • ListView的一些優化,如何複用,錯位,如今用glide
  • 數據結構,SparseArray和hashmap區別
  • 操做系統,cpu調度
  • 數據庫。。。
  • LRU緩存原理
  • 死鎖,鎖的幾種類型。是否項目中使用
  • 繼承和接口,優先使用級
  • 四道算法原理
  • Linux指令;

3.6網易

網易的兩輪面試中沒有提問一個具體的知識點,這點有的意外,因此印象很深入。
一面全程問的是個人項目經歷,重難點是什麼以及解決方案,在前面的「面試風格」那部分也提到過,感覺也在前面說了,總結一句話就是:平時工做中必定要多積累項目中的重難點。雖然一面的最後也問了道算法題,但很簡單,就不提了。

二面面試官我感受是一名技術總監,由於全程問的是開放性問題,其中問的最多的就是關於flutter的相關問題

四丶最後

個人面試經驗分享可能不會去羅列太多的具體題目,由於我依然認爲面試經驗中最寶貴的不是那一個個具體的題目或者具體的答案,而是結束面試時,那一刻你的感覺以及多天以後你的回味~(固然確定會有不少小夥伴想要去看具體的面試題目

這裏附上騰訊、頭條、阿里、美團等的面試題,把技術點整理成了視頻和PDF(實際上比預期多花了很多精力),包含知識脈絡 + 諸多細節,因爲篇幅有限,這裏以圖片的形式給你們展現一部分。

相信它會給你們帶來不少收穫:

更多面試內容,面試專題,flutter視頻 全套,音視頻從0到高手開發。
關注 GitHub: https://github.com/xiangjiana/Android-MS
免費獲取面試PDF合集

相關文章
相關標籤/搜索