前言
我今天來分享一篇Android 開發的面經技巧方法和面試題的總結分享,該文的面經來源于本人和朋友,文中公司有騰訊、網易、美團、嗶哩嗶哩、百度等知名公司,

面試攻略
一. 簡歷攻略
簡歷的投遞,可以通過騰訊招聘網站,也可以找騰訊的朋友內推,要說明的是,內推不會增加通過幾率,更不會減少面試流程,
簡歷的基本原則是資訊真實,少數求職者可能會動歪心思,比如故意延長或縮短某段作業經歷,或是對學歷進行美容,真別這樣,一旦被發現,不只是尷尬,
簡歷的內容要展示自己才能,讓面試官看到郭靖的厲害之處,要多花點心思來寫,突出亮點,吸引面試官,
簡歷所寫內容,必須了如指掌,因為簡歷上的任何東西,都可能被問到,有些簡歷上寫研究生期間發表了幾篇論文,結果面試時被問論文的內容和原理,答不出來,真讓人懷疑,
簡歷要好好寫,用心寫,真實地寫,而且要對簡歷上的每個內容都了如指掌,自己的經歷,怎么能不清楚呢?
如果學校不錯,建議簡歷檔案名采用如下格式:XX大學_學歷_應聘騰訊安卓開發崗位.pdf,看到這簡歷名,就有想看看的沖動,
如果有github賬號且寫得很好,或者有開源作品,也可以放到簡歷中,讓人看到你對技術的熱愛和追求,這是加分項,
簡歷的其他注意點也很多,如下4點,不接受反駁:
簡歷只能是PDF格式,
簡歷不能是壓縮檔案,
簡歷中不能有錯別字,
簡歷最多不超過2頁,
總之,自己寫完簡歷后,要好好檢查和修改,多站在他人的角度審視自己的簡歷,也可以讓自己信賴的朋友幫修改,
- 簡歷的作用是展示自己的亮點給面試官,讓面試官可以在短時間內迅速了解我們,
- 簡歷一定要把自己的亮點寫上去,展示自己的能力,說人話就是:告訴面試官自己有多牛叉,這不是表現我們謙虛的時候,不管是專案亮點、還是個人技能,都通通寫上去,
- 技能點描述要精準,不要模糊,
- 寫上簡歷的內容一定要是自己掌握的內容,
例如:

二. 技術面攻略
雞湯大師說,如果看到地上有紙屑,要去撿起來,然后會被錄用,這有點反智,真的,別去撿,沒用的!要搞清楚,這是技術面,需要真刀真槍的本領,
電話面、組員面、組長面、總監面、總經理面、面委面,我們不逐一介紹攻略,這些流程,都是以考查技術為主,故統一介紹,
技術面涉及的內容實在太多,無法完全窮盡,所以,本文只聊面試前的準備方向,以及面試現場的注意事項,
還是以社招安卓開發為例,在面試之前,我去騰訊招聘網站看了相關崗位的要求,就知道要準備的技術內容和方向了,要準備的技術內容,紛繁駁雜,大致如下:
資料結構和演算法,
作業系統和Linux.
計算機網路和網路編程,
C++和STL.
存盤和資料庫,
海量資料處理,
分布式組件和原理,
后臺安全原理,
設計模式和原則,
系統方案設計,
專案介紹和講解,
三. hr面試攻略
hr面試考察的重點是情商,包括性格和溝通能力,掌握三個原則,萬問可破:
原則一:強調自己是積極進取的人,樂于挑戰自己,有更高的追求,不安于現狀,對未來有清晰的思考和規劃,并在付諸行動,
原則二:要以它們利益為目標,強調自己能為騰訊產品做出什么貢獻,而不是強調自身利益和感受,
原則三:面對問題,不要直接用yes或no一棍子打死,而應該從多角度看問題,體現出嚴謹的邏輯性和條理性,辯證思維,
面試者去面試,本質上是和它們做利益交換,面試者是來向它們要錢的,自然要多體現自己能給它們帶來什么利益,
四. 接受電子offer攻略
電子offer,就是正式的書面offer,這還要什么攻略呢?確實不需要,但也還是有些事情需要注意,
郭靖只有收到offer郵件才算數,才能開始跟自己的領導洪七公提離職,所以,這個時間節點要把控好,
收到電子offer,記得低調,千萬別在公司炫耀,也別在網上忘乎所以,當然,郭靖這種職場老手,是不會犯這種低級錯誤的,接下來,就是背景調查了,
五. 背景調查攻略
背景調查,其實談不上什么攻略,姑且稱之為注意事項吧,
首先,基本資訊不能造假,這個很好理解,毋庸置疑,無需強調,畢竟,正直是騰訊的最重要價值觀,
其次,在找同事幫做背調時,要盡量選擇關系好且會說話的,
最后,在提離職后,進行作業交接務必盡心盡力,不能跟領導和同事把關系鬧僵,背景調查會問這些東西,基本的職業道德,還是要有,
背景調查公司會通過很多方式,調查求職者的基本資訊,然后,也會打電話給求職者的直接領導、同事和所在部門的hr,
那么,背景調查公司打電話一般都會問一些什么問題呢?其實,無非就是問基本情況和表現,比如問求職者所在部門、入職時間和離職時間,比如問人品、平時表現和作業交接等問題,
背景調查公司拿到了真實資訊,很滿意,并把調查結果反饋給騰訊,還是那句話,身正不怕影子歪,對求職者而言,背景調查無非就是個流程,
有的朋友可能覺得,自己平時跟領導的關系不好,怕領導說壞話,想提供一個假領導的電話供背調,行不行呢?
我的個人看法是,不建議,很容易穿幫,而且也確實不夠誠實和正直,即使跟領導關系不好,也要想辦法,
大家都是打工的,平時就要跟同事和領導進行良好合作,為了共同的目標而合作,弄僵關系只能說明情商不高,
切記保持低調,不要跟無關人透漏即將離職,更不要透露去騰訊后的福利待遇,免得人心浮動,惹怒領導,有時,做孫子,甚至是裝孫子,是一門學問,互聯網圈子很小,口碑和人品很重要,
萬事留一線,江湖好相見,輕輕地離開,不帶走一片云彩,
面試題總結
更多大廠面試題,vx掃描二維碼免費領取

Java基礎
(1)什么情況下會發生堆疊記憶體溢位?
(2)如果讓你寫一段堆疊溢位的代碼你會什么寫,一個堆疊大概有多大,為什么?每個執行緒都有這樣大小的一個堆疊嗎? (美團)
(3)JVM中一次完整的GC流程是怎樣的,物件如何晉升到老年代?
(4)介紹下GC回識訓制與分代回收策略,
(5)Java中有幾種參考關系,它們的區別是什么?
(6)GC收集演算法有哪些?它們的特點是什么?
(7)如何判斷一個物件是否被回收,有哪些GC演算法,實際虛擬機使用最多的是什么GC演算法?(美團) (8).Jvm記憶體 結構說一下,
a.描述JVM記憶體模型,(東方頭條)(9)JVM DVM ART的區別(360)
(10)描述GC機制,Class會不會回收?用不到的Class怎么回收?(東方頭條)
(11)StackOverFlow與OOM的區別?分別發生在什么時候,JVM堆疊中存盤的是什么,堆存盤的是什么?(美團)
(12)Java虛擬機和Dalvik虛擬機的區別?
(13)請描述new一個物件的流程,
(14)Java物件會不會分配到堆疊中?
(15)String, Stringbuffer, StringBuilder 的區別是什么?(東方頭條) a.String
StringBuffer StringBuilder在進行字串操作時的效率;這里主要考察String在記憶體中是如何創建的,(位元組跳動)(16)String為什么是不可變的?(位元組跳動) a.String為什么設計成final的?
(17)final 、finally、finalize 區別,
(18)抽象類和介面的區別,
(19)多載和重寫的區別 (京東)
(20)什么是值傳遞和參考傳遞,Java 是值傳遞還是參考傳遞?
(21)String s = new String(“”);創建了幾個物件?
(22)java里 equals和== 區別,
(23)try-catch-finally,try里有return,finally還執行么?
(24)Excption與Error區別,
(25)Static class 與non static class的區別,
(26)PathClassLoader與DexClassLoader的區別是什么?
(27)什么是雙親委托機制,為什么需要雙親委托機制?
(28)描述JVM類加載程序,
(29)動態代理是什么?如何實作?
(30)動態代理的方法怎么初始化的?(位元組跳動)
(31)CGLIB動態代理(位元組跳動)
(32)說說反射的應用場景,哪些框架,原理是什么?
(33)Java泛型的特點與優缺點,泛型擦除是怎么回事?
(34)List能否轉為List,
(35)泛型super和extends的區別, a.說法2:Java 的泛型,<? super T> 和 <? extends T>
的區別, (36)為什么IO是耗時操作?
并發編程
(1)假如只有一個cpu,單核,多執行緒還有用嗎 ?(美團)
(2)sychronied修飾普通方法和靜態方法的區別?什么是可見性?
(3)鎖分哪幾類?
(4)CAS無鎖編程的原理,(位元組跳動)
(5)ReentrantLock的實作原理,
(6)AQS原理 (小米 京東)
(7)Synchronized的原理以及與ReentrantLock的區別,(360)
(8)Synchronized在JDK1.8之后做了哪些優化 (京東)
(9)Synchronized static與非static鎖的區別和范圍(小米)
(10)volatile關鍵字干了什么?(什么叫指令重排) (位元組跳動)
(11)volatile 能否保證執行緒安全?在DCL上的作用是什么?
(12)volatile和synchronize有什么區別?(B站 小米 京東)
(13)兩個執行緒用不同的物件,怎么樣?(位元組跳動)
(14)什么是守護執行緒?你是如何退出一個執行緒的?
(15)sleep 、wait、yield 的區別,wait 的執行緒如何喚醒它?(東方頭條、位元組跳動)
(16)sleep是可中斷的么?(小米)
(17)實作非阻塞式生產者消費者(位元組跳動)
(18)如何開啟一個執行緒,開啟大量執行緒會有什么問題,如何優化?(美團)
(19)執行緒生命周期,
(20)ThreadLocal是什么?
(21)AyncTask的原理,
(22)AsyncTask中的任務是串行的還是并行的?
(23)執行緒池管理執行緒原理,
(24)執行緒池的相關引數,有哪些型別的執行緒池,執行緒池任務如何調度,任務佇列只是先進先出的佇列嗎,任務有優先級怎么辦,知道優先級反轉嗎?
(美團)(25)有三個執行緒T1,T2,T3,怎么確保它們按順序執行?
(26)Android中操作多執行緒的方式有哪些?
(27)怎樣獲取當前執行緒是否是主執行緒 (位元組跳動)
(28)HandlerThread是什么?
(29)執行緒間如何通信?
(30)RxJava執行緒切換原理,RxJava1和RxJava2的區別有哪些?
網路編程
(1)描述TCP三次握手與四次揮手的程序與意義,
a.TCP的三次握手程序?為什么會采用三次握手,若采用二次握手可以嗎?
b.三次握手為什么不是兩次一次 五次六次(美團)(2)TCP與UDP的區別是什么?(騰訊)
(3)Http與Https的關系是什么?
(4)SSL握手的程序,
(5)Http的post與get請求的區別是什么?
(6)輸入一個URL到瀏覽器發生了什么?(美團)
二、Android體系
(1)Acitvity的生命周期是什么樣的? a. Acitvity的生命周期,如何摧毀一個Activity? (美團)
(2)Activity的4大啟動模式,與開發中需要注意的問題,如onNewIntent() 的呼叫; a. Activity的啟動模式,區別
(美團) b. singleInstance如果不指定堆疊名,是怎么分配的?(位元組跳動)(3).Intent顯示跳轉與隱式跳轉,如何使用?(美團)
(4)Activity A跳轉B,B跳轉C,A不能直接跳轉到C,A如何傳遞訊息給C?(美團)
(5)Activity如何保存狀態的?
(6)請描訴Activity的啟動流程,從點擊圖示開始,(B站) a. APP是怎么啟動的? b. 啟動一個Activity的流程分析
(7)Service的生命周期是什么樣的? a. Service兩種生命周期以及區別
(8)你會在什么情況下使用Service?
(9)startServer和bindServier的區別?(美團)
(10)Service和Thread的區別?
(11) IntentService與Service的區別?
(12)ContentProvider如何自定義與使用場景是什么?
(13)BroadcastReciver的靜態注冊與動態注冊的區別?
(14)廣播的分類與作業原理
(15)可以再onReceive中開啟執行緒么,會有什么問題?
(16)什么是有序廣播?
(17)Application、Activity、Service中context的區別?能否啟動一個activity、dialog?
(18)Fragment的生命周期? (美團)
(19)Fragment的建構式為啥不讓傳參?(B站)
(20)Fragment add與replace的區別,分別對Fragment的生命周期影響(美團)
三、View System
(1)View繪制流程與自定義View注意點,(東方頭條、美團)
Android中的每一個UI控制元件都是集成自View,然后這些View都具有相同的繪制流程,必須經過measure,layout和draw.
view的繪制流程是在Window添加程序中,ViewRootImpl類的setView方法開始的(2)在onResume中可以測量寬高么
(3)事件分發機制是什么程序?(東方頭條) (***沖突怎么解決?(東方頭條)
(5)View分發反向制約的方法?(位元組跳動)
(6)自定義Behavior,NestScroll,NestChild,(東方頭條)
(7)View.inflater程序與異步inflater(東方頭條)
(8)inflater為什么比自定義View慢?(東方頭條)
(9)onTouchListener onTouchEvent onClick的執行順序,(58 京東)
(10)怎么攔截事件 onTouchEvent如果回傳false onClick還會執行么?(58 京東)
(11)事件的分發機制,責任鏈模式的優缺點 (美團)
(12)影片的分類以及區別(車和家)
(13)屬性影片與普通的影片有什么區別?(車和家) (14)插值器 估值器的區別(車和家)
(15)RecyclerView與ListView的對比,快取策略,優缺點,(美團)
(16)WebView如何做資源快取?(位元組跳動)
(17)WebView和JS互動的幾種方式與攔截方法,(位元組跳動)
(18)自定義view與viewgroup的區別
(19)View的繪制原理
(20)View中onTouch,onTouchEvent和onClick的執行順序
(21)View的滑動方式
(22)invalidate() 和 postInvalicate() 區別
(23)View的繪制流程是從Activity的哪個生命周期方法開始執行的
(24)Activity,Window,View三者的聯系和區別
(25)如何實作Activity視窗快速變暗
(26)ListView卡頓的原因以及優化策略
(27)ViewHolder為什么要被宣告成靜態內部類
(28)Android中的影片有哪些? 影片占用大量記憶體,如何優化
(29)自定義View執行invalidate()方法,為什么有時候不會回呼onDraw()
(30)DecorView,
ViewRootImpl,View之間的關系,ViewGroup.add()會多添加一個ViewrootImpl嗎(31)如何通過WindowManager添加Window(代碼實作)?
(32)為什么Dialog不能用Application的Context?
(33)WindowMangerService中token到底是什么?有什么區別
(34)RecyclerView是什么?如何使用?如何回傳不一樣的Item
(35)RecyclerView的回收復用機制
(36)如何給ListView & RecyclerView加上拉重繪 & 下拉加載更多機制
(37)如何對ListView & RecycleView進行區域重繪的?
(38)ScrollView下嵌套一個RecycleView通常會出現什么問題?
(39)一個ListView或者一個RecyclerView在顯示新聞資料的時候,出現圖片錯位,可能的原因有哪些 & 如何解決?
(40)Requestlayout,onlayout,onDraw,DrawChild區別與聯系
(41)如何優化自定義View
(42)Android屬性影片實作原理,補間影片實作原理
四、Android FrameWork
1.Android中多行程通信的方式有哪些?
a.行程通信你用過哪些?原理是什么?(位元組跳動、小米)
2.描述下Binder機制原理?(東方頭條)
3.Binder執行緒池的作業程序是什么樣?(東方頭條)
4.Handler怎么進行執行緒通信,原理是什么?(東方頭條)
5.Handler如果沒有訊息處理是阻塞的還是非阻塞的?(位元組跳動、小米)
6.handler.post(Runnable) runnable是如何執行的?(位元組跳動、小米)
7.handler的Callback和handlemessage都存在,但callback回傳true handleMessage還會執行么?(位元組跳動、小米)
8.Handler的sendMessage和postDelay的區別?(位元組跳動)
9.IdleHandler是什么?怎么使用,能解決什么問題?
10.為什么Looper.loop不阻塞主執行緒?
a.Looper無限回圈為啥沒有ANR(B站)
11.Looper如何在子執行緒中創建?(位元組跳動、小米)
12.Looper、handler、執行緒間的關系,例如一個執行緒可以有幾個Looper可以對應幾個Handler?(位元組跳動、小米)
13.如何更新UI,為什么子執行緒不能更新UI?(美團)
14.ThreadLocal的原理,以及在Looper是如何應用的?(位元組跳動、小米)
15.Android 有哪些存盤資料的方式?
16.SharedPreference原理,commit與apply的區別是什么?使用時需要有哪些注意?
17.如何判斷一個 APP 在前臺還是后臺?
18.如何做應用保活?
19.一張圖片100x100在記憶體中的大小?(位元組跳動)
20.Intent的原理,作用,可以傳遞哪些型別的引數?
21.如果需要在Activity間傳遞大量的資料怎么辦?
22.打開多個頁面,如何實作一鍵退出?
23.LiveData的生命周期如何監聽的?(B站)
五、性能優化專題
1.App穩定性優化
2.App啟動速度優化
3.App記憶體優化
4.App繪制優化
5.App瘦身
6.網路優化
7.App電量優化
8.安卓的安全優化
9.為什么WebView加載會慢呢?
10.如何優化自定義View
11.FC(Force Close)什么時候會出現?
12.Java多執行緒引發的性能問題,怎么解決?
13.TraceView的實作原理,分析資料誤差來源,
14.是否使用過SysTrace,原理的了解?
15.mmap + native 日志優化?
六、三方原始碼理解
1.Glide :加載、快取、LRU 演算法 (如何自己設計一個大圖加載框架) (LRUCache 原理)
2.EventBus
3.LeakCanary
4.ARouter
5.插件化(不同插件化機制原理與流派,優缺點,局限性)
6.熱修復
7.RXJava (RxJava 的執行緒切換原理)
8.Retrofit (Retrofit 在 OkHttp 上做了哪些封裝?動態代理和靜態代理的區別,是怎么實作的)
9.OkHttp
附上:我們之前因為秋招收集的二十套一二線互聯網公司Android面試真題(含BAT、小米、華為、美團、滴滴)和我自己整理Android復習筆記(包含Android基礎知識點、Android擴展知識點、Android原始碼決議、設計模式匯總、Gradle知識點、常見演算法題匯總,)

需要完整版《2022年Android中高級面試題匯總》的朋友可以掃描下方CSDN官方認證二維碼,免費領取!

總結
最后,對于我們程式員而言,面試就是將自己所學的技術與面試官表達出來,以前上學準備找作業的時候,發現最先找到作業的不是技術最好的而是善于溝通活躍度高的人,而我之后聽的最多的抱怨是 “為什么我明明知道這個東西,面試的時候卻不知從何說起”,其實從我自己待過的公司再到面試技巧的分享,我就是想談一談自己對于面試的看法想和大家多多溝通,希望自己這點經驗能夠讓你在面試中更進一步,那我就心滿意足了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/404174.html
標籤:其他
