阿里面試很喜歡問原始碼,優化,原理,涉及到的範圍很廣,還是具有一定挑戰性的,以下包括阿里實習二面和校招二面,筆者都止步於二面,阿里可以去找找內推(筆者實習投遞時筆試做的差,本來以為掛了,但可能因為找的內推所以還是給我面試了,後續又加了一輪筆試,校招時也是找的內推直接面試了沒有筆試)。
阿里實習一面
原始碼:Handler訊息機制(具體涉及到的類 & 細節);HashMap(資料結構 & put操作具體過程,擴容時間複雜度);ArrayMap原理JVM:Java記憶體區域劃分,堆疊的區別,哪些區域執行緒私有,哪些共享;棧幀,Java方法呼叫時的入棧出棧操作併發訪問:volatile原理及作用,是否具有原子性;synchronized:修飾程式碼塊/方法/物件的區別? (單例模式DCL會不會失效?);Lock的原理Android:Activity生命週期(具體執行過程,涉及到哪些類?);ANR(什麼是ANR?怎麼監測:執行前,執行後,線上監測?)阿里實習二面
專案:專案使用人數,有無上架商店;有無IM通訊模組;登入模組是怎麼解決的;如何讓千萬級別使用者的APP使用者實時知道自己狀態(APP端 & 伺服器端)Java:synchronized修飾方法和類有什麼區別;volatile關鍵字作用JVM:記憶體分配;垃圾回收演算法Android:事件分發機制;訊息機制(為什麼Looper死迴圈沒事?怎麼實現執行緒間通訊?);作業系統層面死迴圈是怎麼回事;死迴圈一定會導致ANR麼?;View繪製流程(具體原理,包括不限於繪製三大流程)網路:HTTP快取阿里校招一面
Android:有沒有遇到OOM問題,有沒有遇到記憶體洩漏問題,怎麼解決;Handler機制原理;ThreadLocal作用及原理;Activity啟動到載入View過程;View繪製過程;OKHttp框架(1. 為什麼選擇它 2. 效能 3. 內部有哪些設計模式);EventBus框架設計模式:用過哪些設計模式實習:實習專案中遇到的難點網路:HTTP & HTTPS區別其他:為什麼選擇xx部門;參加的競賽情況阿里校招二面
專案:為什麼選擇OKHTTP框架;圖片框架?(Glide);JSON解析框架?(Gson);怎麼確定技術選型;專案APP頁面個數;阿里雲物件儲存OSS上傳憑證怎麼設計快取,怎麼加密(加密演算法有哪些?)Android:Activity生命週期,啟動透明Activity生命週期,按Home鍵後生命週期流程;後臺殺死APP後怎麼恢復資料;一個APP可以多程序嗎;ListView和RecyclerView區別;RecyclerView卡頓怎麼排查,RecyclerView怎麼實現多Type,RecyclerView的ItemView層級過深怎麼優化;Android多程序;怎麼設計Android執行緒間通訊;Handler機制,子執行緒可以用Handler嗎?ANR原理?Java:private protected public 關鍵字的用法區別;介面,抽象類區別,抽象類要不要實現介面的方法;Map的執行緒安全,讀多寫少選哪個集合;網路:HTTP/HTTPS區別;TCP是什麼,握手與揮手過程;長連線;伺服器推送怎麼實現騰訊
騰訊面試涉及到的範圍也很廣,甚至問到了C++,也具有一定挑戰性的,以下包括騰訊實習四面和校招四面,最終拿到了測開崗位offer,騰訊面試過程中的感覺就是很多我不太熟悉的知識點都被問到了,甚至是不知道的知識點,但整體面試官給人的體驗還不錯,一般會提前打電話溝通面試時間。
騰訊實習提前批一面
Android:四大元件是什麼,輪番介紹;Fragment是什麼,與Activity區別;SurfaceView與View區別,SurfaceView原理;前臺服務與後臺服務區別;AIDL了解麼;IPC方式有哪些,哪種方式最快;Protocol Buffer了解麼;APP中多程序有什麼用;方法數65536怎麼解決;View顯示過程Java:執行緒同步方式;死鎖是什麼JVM:記憶體分配方式;堆和棧的區別;GC演算法,垃圾回收;class檔案生成過程計算機網路:什麼是HTTP,HTTP/HTTPS區別;TCP三次握手 四次揮手過程;TCP/UDP區別;HTTP是長連線還是短連線;HTTP狀態碼;抓包工具,怎麼抓包HTTPS設計模式:生產者,消費者是什麼;命令模式資料結構:快排及時間複雜度多少;七大排序;二叉樹原理;紅黑樹騰訊實習提前批二面
C++:class與struct區別專案:介紹專案,有什麼難點;競賽用了微控制器,指令級是什麼Java:HashMap;ArrayList,LinkedList用法有什麼要注意的;註解介紹下;泛型中型別擦除是什麼資料結構:線段樹;B+樹Android:OkHttp,OkHttp使用需要注意什麼;RxJava介紹下;Activity四種啟動模式;一個APP怎麼退出所有Activity,如果有第三方SDK Activity,又怎麼退出騰訊實習正式批一面
演算法題:字串中出現頻率中位數;最長公共子串問題LCS專案:OKHTTP框架計算機網路:TCP UDP HTTP區別;TCP滑動視窗;用UDP實現TCP資料庫:三大正規化;索引,怎麼知道命中索引作業系統:程序間通訊方式;共享記憶體原理騰訊實習正式批二面
專案:專案介紹;記憶體洩漏Android:OKHTTP 對HTTP與HTTPs之間的區別;HTTPs加密原理;BlueboothAdapter;Activity在AndroidManifest.xml檔案中有哪些標誌位,CLEAR_TOP模式,singleTop和singleTask分別的使用場景;Android儲存(檔案,SP,資料庫[具體介紹下SQLite]);Android虛擬機器與Java虛擬機器之間區別Java:深拷貝 淺拷貝(記憶體溢位or垃圾回收時有什麼區別?);多執行緒模型資料結構:二叉樹;B樹(插入/刪除過程)騰訊校招提前批一面
專案:專案介紹;專案實現的功能網路:介紹下HTTP協議;HTTPS公鑰暴露怎麼辦;HTTP分段上傳檔案怎麼保證正確;HTTP快取Java:程序 執行緒區別;子執行緒間通訊;解決死鎖的辦法,怎麼判斷髮生死鎖演算法題:陣列重新排序保證奇數偶數順序不變,最終使所有奇數在前,偶數在後;2數/3數之和騰訊校招提前批二面
專案:專案梳理;圖片壓縮演算法;Bitmap JPG區別;斷點重傳,怎麼動態確定範圍;斷點下載;CRC原理設計模式:MVC優點缺點;MVP中的MVC的C實現在哪;單例模式的餓漢與懶漢的選擇,使用場景網路:HTTPS加密方式騰訊校招正式批測開一面
Android:Crash,ANR怎麼解決資料結構:設計世界盃32強對戰資料結構益智題:2個球,一共100樓找到哪一層扔下來球剛好會壞其餘:介紹測開具體工作騰訊校招正式批測開二面
位元組面試比較注重基礎,包括線上寫題,資料結構,Java基礎,JVM基礎,作業系統等;以下包括實習3面;位元組實習面試是一天內走完所有技術面試流程,每一面結束後如果通過則15min左右就開始下一輪面試,全部為視訊面試。
位元組實習一面
專案:介紹專案Java:深拷貝/淺拷貝,怎麼實現深-淺拷貝,CopyonWrite;Java記憶體(分配->回收的詳細過程)網路:TCP揮手,第三次不揮手會怎麼樣;HTTPs加密的解釋,對稱/非對稱加密演算法:陣列A,陣列B,計算A-B;0-n之間所有質數(可以先求所有合數)位元組實習二面
Java:執行緒同步問題(為什麼需要同步&怎麼實現同步)設計模式:單例模式(靜態內部類);其他設計模式簡介資料結構:排序演算法,歸併/快排(實現原理/平均複雜度/能否提前結束/誰效能更優),堆排(怎麼實現調整堆結構/k個最大的數);演算法題:給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列位元組實習三面
自我介紹:學過的專業課程;看過哪些計算機專業書作業系統:記憶體分配區域(Java層面回答,物件引用在堆和棧都有麼?函式內部new的物件存放在哪?);使用者態/核心態;中斷是什麼網路:計算機網路有哪幾層,分別對應什麼協議;IP/TCP傳輸的都是什麼資料;DNS是什麼,有什麼作用百度百度是現場面試,一共三面沒有HR面,第三面是總監面,兼顧技術面與非技術面試,百度的面試官都比較友好,一面技術問的比較細,二面重專案,三面是聊天居多。
百度校招一面
專案:專案介紹;專案中的編碼規範Android:Android四大元件安全性;Activity啟動模式;IntentFilter匹配規則,action和category區別;Handler阻塞為什麼不卡死;事件分發機制,onTouchEvent返回false處理流程, dispatchTouchEvent返回false處理流程;Looper是什麼;物件池,手寫物件池實現;ContentProvider原理;sp支援跨程序麼,怎麼解決跨程序,怎麼實現程序同步;幀動畫實現: 100張圖,200ms顯示一張,讀取一張圖要400ms,怎麼解決避免卡頓;Bitmap記憶體複用限制條件作業系統:執行緒時間片分配原理百度校招二面
專案:梳理專案;專案難點;專案中技術框架演算法題:手寫二分法;電梯狀態機設計其他:優缺點;專業百度校招三面
美團面試是現場一天面完,技術面試一共兩輪,最後有一輪HR面試,回憶起來似乎問的問題不是特別多,但都比較開放,聊的比較深入,技術一面直接開啟美團APP聊相關頁面設計實現,這種方式還是比較新穎的,二面則是聊專案比較多,問很多專案中具體實現細節。
網易技術面試一共四輪,三輪技術,一輪HR,前兩輪視訊面試,後兩輪現場面試。網易技術一面二面以基礎居多,聊的都是寫程式碼會遇到的問題,比較細,三面是比較深入的,聊了很多情景題,比如日誌系統的設計的全方面,包括效率,安全等等。
網易校招一面
專案:介紹實習期間解bug映像最深的Android:事件分發傳遞過程,onTouchEvent返回flase怎麼辦;怎麼設計快取;Android資料持久化,資料庫怎麼批處理(原理);SP支不支援多執行緒,SP怎麼實現多執行緒;View繪製過程;Handler訊息機制Java:B執行緒怎麼實現等待A執行緒完成工作;執行緒怎麼結束工作,Java結束執行緒的三種方法;Java執行緒哪些方法支援中斷;設計一個有限資源的請求;怎麼設計物件池(物件的存與放回);執行緒池的執行緒什麼時候建立;Java中的鎖,可重入鎖效能演算法題:兩個陣列交換一個值,讓和相等,找到這兩個值網易校招二面
專案:實習期間工作內容;參與的專案;實習期間解的bug;參與的程式設計規範說一下;Lint工具了解嗎設計模式:單例模式Android:程序間通訊方式(與linux程序間通訊區別);Socket怎麼驗證安全性;廣播(全域性 本地區別);怎麼實現檔案的多程序通訊(A程序改了檔案怎麼通知B程序讀取);二級快取怎麼設計(網路 資料庫 view間關係);volatile關鍵字具有原子性嗎View:Activity生命週期,onSaveInstanceState onRestoreInstanceState區別,呼叫時機,廣播註冊應該在Activity哪個生命週期裡,怎麼統計Activity onCreate的次數;Fragment與Activity區別,Fragment生命週期管理,Fragment與ViewPager怎麼解決重複載入;View繪製過程,MeasureSpec的三種模式;Framelayout LinearLayout ReativeLayout中分別設定Button在右下角;margin padding區別,gone invisible的區別;requestLayout、invalidate與postInvalidate區別;Android動畫怎麼取消迴圈動畫,repeat模式;drawable與view區別,有哪些drawable網易校招三面
愛奇藝一面二面還是以基礎為多,三面是總監面會深入聊一下原理問題,而且也比較細節。
愛奇藝實習一面
專案:介紹實習專案;分析記憶體洩漏,執行緒同步的問題計算機網路:HTTP/HTTPS區別Android:OkHttp框架(裡面有那些設計模式);如何終止一個執行緒愛奇藝實習二面
專案:介紹專案;記憶體洩漏的來源,有沒有做過優化Android:Service的兩種啟動方式,區別在哪;效能優化有沒有做過Java:手寫單例模式演算法:刪除連結串列中一個節點愛奇藝實習三面
專案Java:public關鍵字作用;.java檔名怎麼確定;外部類最多有幾個,內部類最多有幾個,內部類支援巢狀麼;執行緒池怎麼給新建的執行緒設定名字,執行緒池種類;註解的使用Android:Activity的啟動模式,生命週期,Activity A->B的生命週期;Handler中怎麼實現Looper和執行緒繫結,一個執行緒最多有幾個Looper,多個Looper報的異常,訊息阻塞再次喚醒是什麼機制;ThreadLocal是什麼最後高頻面試題總結
Android四大元件,Activity生命週期,FragmentHandler,Looper,ThreadLocal,事件分發機制,View繪製過程,Activity啟動過程記憶體洩漏,OOM,圖片載入,ANR,ART與Dalvik虛擬機器多執行緒,多程序,死鎖HTTP、HTTPS、TCP、UDPHashMap及其餘Java集合記憶體分配,回收演算法,GC,堆疊區別,類載入機制volatile,synchronized,LockMVC,MVP,MVVM,單例模式,觀察者模式面試心得
面試首先一般都會有個自我介紹,可以事先準備下1-2min的自我介紹Android崗位面試內容較廣,需要做到各方面知識都要了解,在了解的基礎上不斷深耕現場面試的體驗一般優於電話or視訊面試,因為面對面交流更有效清晰至少做一個拿的出手的專案,一是面試時可以聊起來,二是簡歷有乾貨,三是通過做專案可以熟悉那些開源工具Android崗位一般演算法題要求不高,刷完《劍指offer》大部分就能應對了建議
主要針對非科班同學:最好系統的看下作業系統和計算機組成原理,推薦清華大學陳渝的作業系統公開課,因為看完作業系統後才能系統的認識計算機的原理,能更好的從底層去認識上層多看原始碼,包括Java層的程式碼在JVM中的實現原始碼(如synchronized的實現原始碼),Android Framework的原始碼(更好認識Android層的實現),Android開源庫原始碼(OKHttp,Retrofit,RxJava,EventBus,Glide,Gson等等,更好的學習優秀開源庫原始碼,做到用的熟,懂原理)多問自己為什麼,比如兩個技術點優缺點分別在哪,各自的使用場景(如單例模式下餓漢與懶漢的優缺點,使用場景),這樣才能更契合實際應用開發,針對不同場景使用不同技術點及時覆盤總結面試中遇到的問題,分為兩方面,一是知道但不能深入的,這種需要繼續多看多總結,另一種是沒接觸過的,這種可以先了解下,萬一面試又遇到了,可以回答下了解到的,之後再去深入總結(畢竟時間有限,不可能面面俱到,只能不斷學習總結)資源
1.Java書單
《Java核心技術》:Java基礎知識《Java併發程式設計的藝術》:併發知識集合 《Java併發程式設計的藝術》讀書摘抄《深入理解Java虛擬機器》:虛擬機器知識集合2.Android書單
《Android開發藝術探索》:Android四大元件原理,部分Framework原始碼,圖片高效能載入,多程序Binder原理等等《Android原始碼設計模式》:設計模式,Android原始碼中採用的設計模式;MVC,MVP,MVVM《Android進階之光》:各種Android開源框架原始碼解析《Android進階解密》:Android系統啟動流程,Activity啟動流程,JNI,ART虛擬機器,熱修復,外掛化等原理《Android Gradle權威指南》:了解Gradle原理3.演算法書單
《大話資料結構》:基本講了常見資料結構,且圖文豐富,清晰易懂《劍指offer》:刷題4.作業系統書單
《作業系統概念》:作業系統基礎概念5.計算機網路
在這裡我也分享一份私貨,一位大佬收錄整理的Android學習PDF+架構視訊+面試文件+原始碼筆記,還有高階架構技術進階腦圖、Android開發面試專題資料,高階進階架構資料幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習
如果你有需要的話,可以點贊+評論+轉發,關注我,然後私信我【進階】我發給你