系列文章:
基本情況
- 2020屆碩士生,Android開發(fā)崗
- 此文主要是2019年年初春招實習的面試和正式校招面試經驗匯總,最終校招拿到了騰訊,百度,美團,網易等offer
- 主要包括阿里4面,騰訊8面,字節(jié)3面,百度3面,美團3面,網易3面,愛奇藝3面
阿里
阿里面試很喜歡問源碼,優(yōu)化,原理,涉及到的范圍很廣,還是具有一定挑戰(zhàn)性的,以下包括阿里實習二面和校招二面,筆者都止步于二面,阿里可以去找找內推(筆者實習投遞時筆試做的差,本來以為掛了,但可能因為找的內推所以還是給我面試了,后續(xù)又加了一輪筆試,校招時也是找的內推直接面試了沒有筆試)。
阿里實習一面
- 源碼:Handler消息機制(具體涉及到的類 & 細節(jié));HashMap(數(shù)據(jù)結構 & put操作具體過程,擴容時間復雜度);ArrayMap原理
- JVM:Java內存區(qū)域劃分,堆棧的區(qū)別,哪些區(qū)域線程私有,哪些共享;棧幀,Java方法調用時的入棧出棧操作
- 并發(fā)訪問:volatile原理及作用,是否具有原子性;synchronized:修飾代碼塊/方法/對象的區(qū)別? (單例模式DCL會不會失效?);Lock的原理
- Android:Activity生命周期(具體執(zhí)行過程,涉及到哪些類?);ANR(什么是ANR?怎么監(jiān)測:運行前,運行后,線上監(jiān)測?)
阿里實習二面
- 項目:項目使用人數(shù),有無上架商店;有無IM通訊模塊;登錄模塊是怎么解決的;如何讓千萬級別用戶的APP用戶實時知道自己狀態(tài)(APP端 & 服務器端)
- Java:synchronized修飾方法和類有什么區(qū)別;volatile關鍵字作用
- JVM:內存分配;垃圾回收算法
- Android:事件分發(fā)機制;消息機制(為什么Looper死循環(huán)沒事?怎么實現(xiàn)線程間通訊?);操作系統(tǒng)層面死循環(huán)是怎么回事;死循環(huán)一定會導致ANR麼?;View繪制流程(具體原理,包括不限于繪制三大流程)
- 網絡:HTTP緩存
阿里校招一面
- Android:有沒有遇到OOM問題,有沒有遇到內存泄漏問題,怎么解決;Handler機制原理;ThreadLocal作用及原理;Activity啟動到加載View過程;View繪制過程;OKHttp框架(1. 為什么選擇它 2. 性能 3. 內部有哪些設計模式);EventBus框架
- 設計模式:用過哪些設計模式
- 實習:實習項目中遇到的難點
- 網絡:HTTP & HTTPS區(qū)別
- 其他:為什么選擇xx部門;參加的競賽情況
阿里校招二面
- 項目:為什么選擇OKHTTP框架;圖片框架?(Glide);JSON解析框架?(Gson);怎么確定技術選型;項目APP頁面?zhèn)€數(shù);阿里云對象存儲OSS上傳憑證怎么設計緩存,怎么加密(加密算法有哪些?)
-
Android:Activity生命周期,啟動透明Activity生命周期,按Home鍵后生命周期流程;后臺殺死APP后怎么恢復數(shù)據(jù);一個APP可以多進程嗎;ListView和RecyclerView區(qū)別;RecyclerView卡頓怎么排查,RecyclerView怎么實現(xiàn)多Type,RecyclerView的ItemView層級過深怎么優(yōu)化;Android多進程;怎么設計Android線程間通信;Handler機制,子線程可以用Handler嗎?
ANR原理? -
Java:private protected public 關鍵字的用法區(qū)別;
接口,抽象類區(qū)別,抽象類要不要實現(xiàn)接口的方法;
Map的線程安全,讀多寫少選哪個集合; - 網絡:HTTP/HTTPS區(qū)別;TCP是什么,握手與揮手過程;長連接;服務器推送怎么實現(xiàn)
騰訊
騰訊面試涉及到的范圍也很廣,甚至問到了C++,也具有一定挑戰(zhàn)性的,以下包括騰訊實習四面和校招四面,最終拿到了測開崗位offer,騰訊面試過程中的感覺就是很多我不太熟悉的知識點都被問到了,甚至是不知道的知識點,但整體面試官給人的體驗還不錯,一般會提前打電話溝通面試時間。
騰訊實習提前批一面
- Android:四大組件是什么,輪番介紹;Fragment是什么,與Activity區(qū)別;SurfaceView與View區(qū)別,SurfaceView原理;前臺服務與后臺服務區(qū)別;AIDL了解么;IPC方式有哪些,哪種方式最快;Protocol Buffer了解么;APP中多進程有什么用;方法數(shù)65536怎么解決;View顯示過程
- Java:線程同步方式;死鎖是什么
- JVM:內存分配方式;堆和棧的區(qū)別;GC算法,垃圾回收;class文件生成過程
- 計算機網絡:什么是HTTP,HTTP/HTTPS區(qū)別;TCP三次握手 四次揮手過程;TCP/UDP區(qū)別;HTTP是長連接還是短連接;HTTP狀態(tài)碼;抓包工具,怎么抓包HTTPS
- 設計模式:生產者,消費者是什么;命令模式
- 數(shù)據(jù)結構:快排及時間復雜度多少;七大排序;二叉樹原理;紅黑樹
騰訊實習提前批二面
- C++:class與struct區(qū)別
- 項目:介紹項目,有什么難點;競賽用了單片機,指令級是什么
- Java:HashMap;ArrayList,LinkedList用法有什么要注意的;注解介紹下;泛型中類型擦除是什么
- 數(shù)據(jù)結構:線段樹;B+樹
- Android:OkHttp,OkHttp使用需要注意什么;RxJava介紹下;Activity四種啟動模式;一個APP怎么退出所有Activity,如果有第三方SDK Activity,又怎么退出
騰訊實習正式批一面
- 算法題:字符串中出現(xiàn)頻率中位數(shù);最長公共子串問題LCS
- 項目:OKHTTP框架
- 計算機網絡:TCP UDP HTTP區(qū)別;TCP滑動窗口;用UDP實現(xiàn)TCP
- 數(shù)據(jù)庫:三大范式;索引,怎么知道命中索引
- 操作系統(tǒng):進程間通訊方式;共享內存原理
騰訊實習正式批二面
- 項目:項目介紹;內存泄漏
- Android:OKHTTP 對HTTP與HTTPs之間的區(qū)別;HTTPs加密原理;BlueboothAdapter;Activity在AndroidManifest.xml文件中有哪些標志位,CLEAR_TOP模式,singleTop和singleTask分別的使用場景;Android存儲(文件,SP,數(shù)據(jù)庫[具體介紹下SQLite]);Android虛擬機與Java虛擬機之間區(qū)別
- Java:深拷貝 淺拷貝(內存溢出or垃圾回收時有什么區(qū)別?);多線程模型
- 數(shù)據(jù)結構:二叉樹;B樹(插入/刪除過程)
騰訊校招提前批一面
- 項目:項目介紹;項目實現(xiàn)的功能
- 網絡:介紹下HTTP協(xié)議;HTTPS公鑰暴露怎么辦;HTTP分段上傳文件怎么保證正確;HTTP緩存
- Java:進程 線程區(qū)別;子線程間通訊;解決死鎖的辦法,怎么判斷發(fā)生死鎖
- 算法題:數(shù)組重新排序保證奇數(shù)偶數(shù)順序不變,最終使所有奇數(shù)在前,偶數(shù)在后;2數(shù)/3數(shù)之和
騰訊校招提前批二面
-
項目:項目梳理;圖片壓縮算法;Bitmap JPG區(qū)別;斷點重傳,怎么動態(tài)確定范圍;
斷點下載;CRC原理 - 設計模式:MVC優(yōu)點缺點;MVP中的MVC的C實現(xiàn)在哪;單例模式的餓漢與懶漢的選擇,使用場景
- 網絡:HTTPS加密方式
騰訊校招正式批測開一面
- Android:Crash,ANR怎么解決
- 數(shù)據(jù)結構:設計世界杯32強對戰(zhàn)數(shù)據(jù)結構
- 益智題:2個球,一共100樓找到哪一層扔下來球剛好會壞
- 其余:介紹測開具體工作
騰訊校招正式批測開二面
- 項目:聊細節(jié)
- Android:圖片,語音大內存數(shù)據(jù)的性能排查,定位;Handler內存泄漏問題;ART Dalvik區(qū)別;GC機制;CountDownLatch原理
- 算法題:不使用循環(huán),大于號,小于號等查找數(shù)組中最大值
- 閑聊:自我優(yōu)勢
字節(jié)
字節(jié)面試比較注重基礎,包括在線寫題,數(shù)據(jù)結構,Java基礎,JVM基礎,操作系統(tǒng)等;以下包括實習3面;字節(jié)實習面試是一天內走完所有技術面試流程,每一面結束后如果通過則15min左右就開始下一輪面試,全部為視頻面試。
字節(jié)實習一面
- 項目:介紹項目
- Java:深拷貝/淺拷貝,怎么實現(xiàn)深-淺拷貝,CopyonWrite;Java內存(分配->回收的詳細過程)
- 網絡:TCP揮手,第三次不揮手會怎么樣;HTTPs加密的解釋,對稱/非對稱加密
- 算法:數(shù)組A,數(shù)組B,計算A-B;0-n之間所有質數(shù)(可以先求所有合數(shù))
字節(jié)實習二面
- Java:線程同步問題(為什么需要同步&怎么實現(xiàn)同步)
- 設計模式:單例模式(靜態(tài)內部類);其他設計模式簡介
-
數(shù)據(jù)結構:排序算法,歸并/快排(實現(xiàn)原理/平均復雜度/能否提前結束/誰性能更優(yōu)),
堆排(怎么實現(xiàn)調整堆結構/k個最大的數(shù)); - 算法題:給定兩個有序整數(shù)數(shù)組 nums1 和 nums2,將 nums2 合并到 nums1 中,使得 num1 成為一個有序數(shù)組
字節(jié)實習三面
- 自我介紹:學過的專業(yè)課程;看過哪些計算機專業(yè)書
- 操作系統(tǒng):內存分配區(qū)域(Java層面回答,對象引用在堆和棧都有么?函數(shù)內部new的對象存放在哪?);用戶態(tài)/內核態(tài);中斷是什么
- 網絡:計算機網絡有哪幾層,分別對應什么協(xié)議;IP/TCP傳輸?shù)亩际鞘裁磾?shù)據(jù);DNS是什么,有什么作用
百度
百度是現(xiàn)場面試,一共三面沒有HR面,第三面是總監(jiān)面,兼顧技術面與非技術面試,百度的面試官都比較友好,一面技術問的比較細,二面重項目,三面是聊天居多。
百度校招一面
- 項目:項目介紹;項目中的編碼規(guī)范
-
Android:Android四大組件安全性;Activity啟動模式;IntentFilter匹配規(guī)則,action和category區(qū)別;Handler阻塞為什么不卡死;事件分發(fā)機制,onTouchEvent返回false處理流程, dispatchTouchEvent返回false處理流程;Looper是什么;對象池,手寫對象池實現(xiàn);ContentProvider原理;sp支持跨進程么,怎么解決跨進程,怎么實現(xiàn)進程同步;
幀動畫實現(xiàn): 100張圖,200ms顯示一張,讀取一張圖要400ms,怎么解決避免卡頓;Bitmap內存復用限制條件 - 操作系統(tǒng):線程時間片分配原理
百度校招二面
- 項目:梳理項目;項目難點;項目中技術框架
- 算法題:手寫二分法;電梯狀態(tài)機設計
- 其他:優(yōu)缺點;專業(yè)
百度校招三面
- 算法題:最長公共子串
- Android:ART虛擬機類加載機制;okhttp原理;熱修復原理
- 其余閑聊:優(yōu)點缺點;大學遺憾;作為班長組織了哪些活動;長期堅持的事情;專業(yè)去向
美團
美團面試是現(xiàn)場一天面完,技術面試一共兩輪,最后有一輪HR面試,回憶起來似乎問的問題不是特別多,但都比較開放,聊的比較深入,技術一面直接打開美團APP聊相關頁面設計實現(xiàn),這種方式還是比較新穎的,二面則是聊項目比較多,問很多項目中具體實現(xiàn)細節(jié)。
- 項目:實習項目;項目最難點;項目中技術選擇;阿里云對象存儲OSS的STS憑證設計
-
Android:Lint工具是編譯期的嗎,原理;美團首頁設計具體實現(xiàn);
RecyclerView多Item的難點; - 設計模式:MVP MVVM使用場景
- HR:現(xiàn)在有什么offer;選擇offer依據(jù);聊一聊怎么解決公司內溝通問題
網易
網易技術面試一共四輪,三輪技術,一輪HR,前兩輪視頻面試,后兩輪現(xiàn)場面試。網易技術一面二面以基礎居多,聊的都是寫代碼會遇到的問題,比較細,三面是比較深入的,聊了很多情景題,比如日志系統(tǒng)的設計的全方面,包括效率,安全等等。
網易校招一面
- 項目:介紹實習期間解bug映像最深的
- Android:事件分發(fā)傳遞過程,onTouchEvent返回flase怎么辦;怎么設計緩存;Android數(shù)據(jù)持久化,數(shù)據(jù)庫怎么批處理(原理);SP支不支持多線程,SP怎么實現(xiàn)多線程;View繪制過程;Handler消息機制
- Java:B線程怎么實現(xiàn)等待A線程完成工作;線程怎么結束工作,Java結束線程的三種方法;Java線程哪些方法支持中斷;設計一個有限資源的請求;怎么設計對象池(對象的存與放回);線程池的線程什么時候創(chuàng)建;Java中的鎖,可重入鎖性能
- 算法題:兩個數(shù)組交換一個值,讓和相等,找到這兩個值
網易校招二面
- 項目:實習期間工作內容;參與的項目;實習期間解的bug;參與的編程規(guī)范說一下;Lint工具了解嗎
- 設計模式:單例模式
- Android:進程間通信方式(與linux進程間通信區(qū)別);Socket怎么驗證安全性;廣播(全局 本地區(qū)別);怎么實現(xiàn)文件的多進程通訊(A進程改了文件怎么通知B進程讀取);二級緩存怎么設計(網絡 數(shù)據(jù)庫 view間關系);volatile關鍵字具有原子性嗎
- View:Activity生命周期,onSaveInstanceState onRestoreInstanceState區(qū)別,調用時機,廣播注冊應該在Activity哪個生命周期里,怎么統(tǒng)計Activity onCreate的次數(shù);Fragment與Activity區(qū)別,F(xiàn)ragment生命周期管理,F(xiàn)ragment與ViewPager怎么解決重復加載;View繪制過程,MeasureSpec的三種模式;Framelayout LinearLayout ReativeLayout中分別設置Button在右下角;margin padding區(qū)別,gone invisible的區(qū)別;requestLayout、invalidate與postInvalidate區(qū)別;Android動畫怎么取消循環(huán)動畫,repeat模式;drawable與view區(qū)別,有哪些drawable
網易校招三面
- 項目介紹
-
Android:圖片傳輸過程中URL加上大小以節(jié)省流量,如果忘記加怎么辦,如果ImageView是wrap_content怎么設定大小;圖片相關緩存,編碼,內存復用,格式(svg等);
drawable mutate是什么;okhttp 橋接攔截器和緩存攔截器;設計自定義DNS解析器 - 設計題:有沒有看過開源打點框架;打點系統(tǒng)設計,寫日志文件過程中會有buffer,此時進程被殺怎么辦,打點日志被用戶篡改怎么辦,怎么保證日志安全性,怎么保證日志沒有被重復傳
- 其余:磁盤內存映射原理;平時開發(fā)有沒有遇到過復用問題;最近了解了什么Android新動向;自己學習計劃
愛奇藝
愛奇藝一面二面還是以基礎為多,三面是總監(jiān)面會深入聊一下原理問題,而且也比較細節(jié)。
愛奇藝實習一面
- 項目:介紹實習項目;分析內存泄漏,線程同步的問題
- 計算機網絡:HTTP/HTTPS區(qū)別
- Android:OkHttp框架(里面有那些設計模式);如何終止一個線程
愛奇藝實習二面
- 項目:介紹項目;內存泄漏的來源,有沒有做過優(yōu)化
- Android:Service的兩種啟動方式,區(qū)別在哪;性能優(yōu)化有沒有做過
- Java:手寫單例模式
- 算法:刪除鏈表中一個節(jié)點
愛奇藝實習三面
- 項目
-
Java:public關鍵字作用;.java文件名怎么確定;外部類最多有幾個,內部類最多有幾個,內部類支持嵌套么;線程池怎么給新建的線程設置名字,線程池種類;
注解的使用 -
Android:Activity的啟動模式,生命周期,Activity A->B的生命周期;Handler中怎么實現(xiàn)Looper和線程綁定,一個線程最多有幾個Looper,
多個Looper報的異常,消息阻塞再次喚醒是什么機制;ThreadLocal是什么
最后
高頻面試題總結
- Android四大組件,Activity生命周期,F(xiàn)ragment
- Handler,Looper,ThreadLocal,事件分發(fā)機制,View繪制過程,Activity啟動過程
- 內存泄漏,OOM,圖片加載,ANR,ART與Dalvik虛擬機
- 多線程,多進程,死鎖
- HTTP、HTTPS、TCP、UDP
- HashMap及其余Java集合
- 內存分配,回收算法,GC,堆棧區(qū)別,類加載機制
- volatile,synchronized,Lock
- MVC,MVP,MVVM,單例模式,觀察者模式
面試心得
- 面試首先一般都會有個自我介紹,可以事先準備下1-2min的自我介紹
- Android崗位面試內容較廣,需要做到各方面知識都要了解,在了解的基礎上不斷深耕
- 現(xiàn)場面試的體驗一般優(yōu)于電話or視頻面試,因為面對面交流更有效清晰
- 至少做一個拿的出手的項目,一是面試時可以聊起來,二是簡歷有干貨,三是通過做項目可以熟悉那些開源工具
- Android崗位一般算法題要求不高,刷完《劍指offer》大部分就能應對了
建議
- 主要針對非科班同學:最好系統(tǒng)的看下操作系統(tǒng)和計算機組成原理,推薦清華大學陳渝的操作系統(tǒng)公開課,因為看完操作系統(tǒng)后才能系統(tǒng)的認識計算機的原理,能更好的從底層去認識上層
- 多看源碼,包括Java層的代碼在JVM中的實現(xiàn)源碼(如synchronized的實現(xiàn)源碼),Android Framework的源碼(更好認識Android層的實現(xiàn)),Android開源庫源碼(OKHttp,Retrofit,RxJava,EventBus,Glide,Gson等等,更好的學習優(yōu)秀開源庫源碼,做到用的熟,懂原理)
- 多問自己為什么,比如兩個技術點優(yōu)缺點分別在哪,各自的使用場景(如單例模式下餓漢與懶漢的優(yōu)缺點,使用場景),這樣才能更契合實際應用開發(fā),針對不同場景使用不同技術點
- 及時復盤總結面試中遇到的問題,分為兩方面,一是知道但不能深入的,這種需要繼續(xù)多看多總結,另一種是沒接觸過的,這種可以先了解下,萬一面試又遇到了,可以回答下了解到的,之后再去深入總結(畢竟時間有限,不可能面面俱到,只能不斷學習總結)
資源
Java書單
- 《Java核心技術》:Java基礎知識
- 《Java并發(fā)編程的藝術》:并發(fā)知識集合 《Java并發(fā)編程的藝術》讀書摘抄
- 《深入理解Java虛擬機》:虛擬機知識集合
Android書單
- 《Android開發(fā)藝術探索》:Android四大組件原理,部分Framework源碼,圖片高性能加載,多進程Binder原理等等
- 《Android源碼設計模式》:設計模式,Android源碼中采用的設計模式;MVC,MVP,MVVM
- 《Android進階之光》:各種Android開源框架源碼解析
- 《Android進階解密》:Android系統(tǒng)啟動流程,Activity啟動流程,JNI,ART虛擬機,熱修復,插件化等原理
- 《Android Gradle權威指南》:了解Gradle原理
算法書單
- 《大話數(shù)據(jù)結構》:基本講了常見數(shù)據(jù)結構,且圖文豐富,清晰易懂
- 《劍指offer》:刷題
操作系統(tǒng)書單
- 《操作系統(tǒng)概念》:操作系統(tǒng)基礎概念
計算機網絡
- 《圖解HTTP》:圖文豐富,簡單易懂介紹HTTP協(xié)議