
2020屆研究生,Android開發崗,
準備了四個月終于拿到了大廠的幾個offer,一共面了位元組跳動、騰訊、美團、快手、百度、阿里釘釘部門,offer都拿到了,最后決定了去美團~
位元組今日頭條
位元組面試比較注重基礎,包括在線寫題,資料結構,Java基礎,JVM基礎,作業系統等;以下包括實習3面;位元組實習面試是一天內走完所有技術面試流程,每一面結束后如果通過則15min左右就開始下一輪面試,
今日頭條一面
1、有三個函式 fun A(b) fun B():b fun C():c,其中 A 需要在主執行緒執行,BC 需要在子執行緒,且 A 需要等待 B 操作完成的回傳值,如果用協程實作這個依賴關系并盡可能快速執行完畢, 開始我用的withContext,面試官又讓用async寫一下,協程框架的底層是怎么實作的有看過嗎?怎么理解suspend關鍵字?掛起函式一定會被掛起嗎?
2、寫一個java單例模式(DCL),kotlin中如何實作單例?(object)object的原理是什么?執行緒安全嗎?
3、http協議相關:http和https的區別是什么,加密程序?Get能否修改服務器中資料?
4、點擊事件的分發程序?有一個業務需求:想要監聽當前界面中的所有事件,該怎么實作?Activity能否攔截事件?
5、Java如何實作泛型的?java和別的語言的泛型有什么區別?解釋一下泛型的逆變和協變?kotlin的in和out關鍵字作用?
6、內部類有哪幾種?靜態非靜態內部類區別是什么?匿名內部類中訪問外部類成員變數為什么要用final?不用會怎樣?
演算法題:給定一個二叉樹和一個目標值target,寫一個函式判斷樹中能否有一條路徑(根節點到葉子節點)的節點的和為
target
今日頭條二面
1、解釋一下記憶體泄漏、handler記憶體泄漏原因?參考鏈是什么?虛擬機是如何判斷物件是否可被回收的?
2、kotlin相比于Java好處是什么?kotlin對空指標例外是如何處理的?let、with、apply的適用場景?
3、Java例外機制、Error能捕獲到嗎?
4、我專案中賬號密碼是保存在本地的,怎么去保證安全?
演算法1:給一個陣列,找出陣列中第k大的元素
思路一:排序
思路二:優先級佇列
思路三:使用資料結構堆
演算法2:手寫快速排序
今日頭條三面
- 自我介紹,你的專案中用了kotlin,能說一下kotlin相比于Java好處是什么嗎?
- 你的專案中用了LiveData,能說一下它的原理嗎?(原始碼沒看過,簡單說了一下觀察者模式)
- http協議請求頭都包括哪些內容?
- 計算機網路、作業系統、資料結構有系統學習過嗎?
- 后端、web前端、iOS方面有接觸過嗎?(學過MySQL和一點點Spring)
- 你看過哪些Android原始碼?剛剛你提到了Handler,它是用來干嘛的?為什么要有Handler,自己寫一個
執行緒間通信的代碼不行嗎?你提到了訊息佇列,它的作用是什么?訊息佇列和Handler一定要一起使用嗎? - 演算法題
(1)用二分法在排序陣列中找到絕對值最小的元素
(2)螺旋輸出二維矩陣中的元素(不一定是方陣) - 能實習多久?什么時候畢業?什么時候能開始實習?
- 反問
(1)大廠對于新技術的看法?敏不敏感?(大廠會第一時間學習新技術,但是真正用在專案中需要時間)
(2)鴻蒙的出現會不會搶了Android開發者的飯碗?(不會,移動端之間轉行很容易)
騰訊-騰訊游戲
騰訊面試涉及到的范圍也很廣,甚至問到了C++,也具有一定挑戰性的,騰訊面試程序中的感覺就是很多我不太熟悉的知識點都被問到了,甚至是不知道的知識點,但整體面試官給人的體驗還不錯,一般會提前打電話溝通面試時間,
騰訊一面
50分鐘(騰訊會議視頻面試)
- 自我介紹,順便展示了自己的專案,展示中出現了一個bug(尷尬),面試官問為什么會出現這個bug,
出現bug你會采用什么方式解決(查看log)?如果是企業級應用修復bug,你會怎么做?專案是你自己寫的嗎?
寫了多久? - 有用過Java集合類嗎(說了ArrayList、LinkedList、HashMap)?說一下它們各自特點和內部的原理?
- Java中加鎖的方式(sychronize和lock)?它們有什么不同?如果是高并發的場景,選哪個比較好,為什么?
- http協議和tcp協議相關
- 你專案中用了kotlin,能說一下kotlin相比于Java的優勢嗎?
- 你的專案中用了kotlin協程,能說一下協程的概念嗎?協程底層實作原理有看過嗎?
- 說一下Android事件分發的程序?
- View的測量、布局和繪制流程?自定義View需要重寫哪些方法?自定義ViewGroup需要重寫哪些方法?
區別是什么?為什么有區別? - 你有寫過自定義控制元件嗎(說了一個樹木生長的影片)?怎么實作的?
- 你專案中用的是okhttp+retrofit,為什么要用okhttp不用官方的httpUrlConnection?okhttp的好處是什么?
retrofit是干什么的?retrofit和rxjava一起用的好處是什么?
提問環節:
(1)您對Google推出的jetpack compose怎么看?(面試官沒了解過)
(2)部門用Java還是kotlin?(新業務用kotlin,老的代碼用Java維護,并不沖突)
(3)部門加班情況怎樣?(早10點→晚8點,挺輕松)
(4)作業情況怎樣,會不會天天開會?(一周開一次技識訓)面試官又問了我天天幾點去實驗室,幾點走
(5)能轉正嗎?(面試官也不清楚)
騰訊二面
電話面,20分鐘
- 自我介紹
- mvvm架構相比于mvp架構的優點是什么
- 你比較熟悉jetpack的什么組件,它用了什么設計模式?
- 你對電子競技的前景怎么看?
- 你專案中用了kotlin,kotlin相比于Java優勢有哪些?
提問
騰訊三面
騰訊會議視頻面試(20min)
- 用騰訊會議的共享螢屏功能,花了10分鐘給面試官介紹專案(模擬器現場演示app的一些業務功能)
- 你并不是計算機科班出身的,你對本專業就業方向怎么看?你打算把Android開發作為以后的就業方向嗎?
- 你做專案時候感覺對自己最大的提升是什么?
- 后續在Android方面你打算學習哪些東西?(說了NDK和flutter)
- 你覺得kotlin相比于Java的優勢有哪些?
- 專案是你自己寫的嗎?用戶量有多少?有沒有考慮過版本兼容性相關的問題?專案出現問題你該如何解決?
- 專案準備用到實際生活中嗎?開發完之后你是怎么測驗的?
- 之前有沒有過實習經歷?
總結:面試官說我的專案經歷挺豐富的,但是缺乏深度,需要去公司中體驗一下企業級別的專案來提升自己的技術,
美團
美團面試是現場一天面完,技術面試一共兩輪,最后有一輪HR面試,回憶起來似乎問的問題不是特別多,但都比較開放,聊的比較深入,技術一面直接打開美團APP聊相關頁面設計實作,這種方式還是比較新穎的,二面則是聊專案比較多,問很多專案中具體實作細節,
美團一面
50分鐘
- 你專案中用了MVVM架構,解釋一下MVVM架構的思想?
- 你專案中用了kotlin協程,能說一下協程的概念嗎?
- View層和Model層如何通信(LiveData)?DataBinding有用過嗎?原理說一下?
- https如何保證安全的?加密、證書相關
- 執行緒和行程之間的區別?
- Android行程通信的方式?(共享記憶體、socket、Binder)它們各自有什么特點?
- 說一下Java虛擬機垃圾回收演算法?
- 有用過flutter嗎,還是只學過原生Android開發?
- 專案是自己寫的嗎?
演算法題:
(1)leetcode1:兩數之和
(2)反轉字串中的單詞:給一個字串"www.meituan.com",將其變成"com.meituan.www"
美團二面
50分鐘,牛客網
- 演算法題:給一個double型別的數num,求它的平方根,要求精度為1e-8,(二分法)
- 家是哪里的?期望作業的城市有哪些?
- Java虛擬機垃圾回識訓制
- 學過哪些設計模式?說一下Android哪些地方用到了配接器模式?
- 看過哪些Android方面的原始碼?
- 行程之間通信的方式有哪些?說一下Binder的原理?
- 對Reactive native感興趣嗎?
- kotlin相比于Java有哪些優勢?
- 你專案中的app是如何獲取到停車場車位資訊的?
- 解釋一下kotlin協程?協程和執行緒之間什么關系?
反問:
(1)團隊用Java還是kotlin?(kotlin)
(2)Reactive native和原生Android開發區別?
快手
快手一面
牛客網視頻面試,40分鐘
- 自我介紹,開了螢屏共享展示專案
- 你專案中用了mvvm架構,能說說這個架構的思想嗎?你專案中的進度條ProgressBar屬于哪一層?處理點擊事件的邏輯
應該放在哪一層?進行一次網路請求應該放在哪一層? - 你專案用了kotlin,說一下kotlin相比于Java的優勢有哪些嗎?Java有lambda運算式嗎?
- Java中==和equals的區別?kotlin如何判斷兩個物件內容相等?判斷地址是否相等使用什么關鍵字?
- 在Java中重寫equals時通常需要連帶著一起重寫什么方法(hashCode)?為什么?
- 行程和執行緒的區別?行程之間資源可以共享嗎?執行緒呢?
- tcp和udp的區別?什么情況使用tcp,什么情況使用udp?
- http協議常見狀態碼有哪些?401是什么意思?405?
- http和https協議的區別?https中ssl握手的程序?
- tcp協議3次握手、4次揮手的流程說一下?
- 陣列和鏈表各自特點是什么?描述一下哈希表的作業原理?
編程題:3個執行緒,交替列印1到100,即a執行緒列印1,b執行緒列印2,c執行緒列印3,a列印4……

百度
百度是現場面試,一共三面沒有HR面,第三面是總監面,兼顧技術面與非技術面試,百度的面試官都比較友好,一面技術問的比較細,二面重專案,三面是聊天居多,
- HashMap中put一個節點的流程?
- ThreadLocal作用是什么,用在什么場景?
- TCP的擁堵機制和流量控制描述一下?
- http協議三次握手流程說一下?
- Android事件分發機制描述一下流程?
- Acticity有哪些啟動模式?singleTask詳細說一下?
- Activity生命周期相關的有哪些回呼方法?在一個Activity中打開一個新的Activity,原有Activity哪些生命周期
- 方法會回呼?如果打開一個對話框呢?如果對話框是透明的呢?
- Activity由于螢屏旋轉、系統配置發生改變之后如何保證其中內容不丟失?可不可以讓Activity不重新創建?
- 你專案中在二級頁面中點贊文章,后退到文章串列中怎么讓點贊數加一?
- 你的醫療物流機器人專案中app如何獲取到機器人的速度資料?
- 靜態內部類和非靜態內部類的區別?當需要內部類時你更愿意使用靜態內部類還是非靜態內部類?
- 你專案中用的網路框架是什么?你還知道有哪些網路框架?為什么要使用okhttp?它的好處是什么?
- 解釋一下動態代理模式?你剛剛提到了retrofit中用了動態代理,能詳細說一下嗎?
- 執行緒同步有哪些方式?
- 解釋一下雙親委托機制?
- 描述一下View的繪制流程?
- Handler機制說一下?如何解決Handler記憶體泄漏問題?
- 現在有一個UI需求:實作一個柱狀圖的自定義控制元件,其中的柱有影片效果,說一下實作的思路?
- Java垃圾回識訓制說一下?新生代老年代都有什么回收演算法?
- Java虛擬機如何判斷一個物件是否可以被回收?參考計數法和可達性分析說一下?你剛才提到了gc roots,
- 有哪些物件可以作為gc roots?
- 你專案中用了kotlin,談一談你使用kotlin之后的感受?
- 你對自己的評價?優點和缺點是什么?
- 有沒有想過要轉別的方向,為什么?
- 平時都有什么愛好?
- 在學校期間參加過什么社團?對你有什么幫助?跟社團成員有意見沖突時你會怎么做?
- 對未來有什么規劃?說一下你在畢業之前的學習計劃?
- 在學校遇到最大的挑戰是什么?
演算法題:
(1)給一個升序鏈表,舉例:1→2→3→3→4→5→6,洗掉鏈表中的重復元素(例子中為3)
(2)手寫二叉樹的層次遍歷
(3)手寫二分查找演算法
(4)找到兩個鏈表的第一個重復節點(說思路)
阿里釘釘
阿里面試很喜歡問原始碼,優化,原理,涉及到的范圍很廣,還是具有一定挑戰性的,阿里可以去找找內推(筆者實習投遞時筆試做的差,本來以為掛了,但可能因為找的內推所以還是給我面試了,后續又加了一輪筆試,校招時也是找的內推直接面試了沒有筆試),
阿里一面
一個小時(電話)
先問了本科、研究生學過什么跟計算機相關的課(c、微機原理、其他自學)
- 瀏覽器輸入網址后整個流程
- tcp、http協議相關;http1.1和2.0區別
- 堆排序的程序
- Java單例有幾種方式
- 靜態方法同步和普通方法同步的區別
- 執行緒池7大引數、作業原理
- 點擊手機桌面應用圖示后發生了什么(應用程式啟動流程、Activity啟動流程,沒看過原始碼,沒答上來)
- View三大流程說了一下,流式布局FlowLayout怎么實作的
- retrofit原理(沒看過,只說了動態代理+注解),看過okhttp原始碼,講了一下okhttp的作業原理(分發器、攔截器,講了細節)
- 聊了專案(講了好久),幾個方面如下:
(1)專案中用了kotlin協程,于是問了協程的相關理念,面試官可能覺得說的不太全,就給補充了一下,
然后說協程這樣的新技術國外有人用,國內用的很少(因為使用協程會改變老專案原有網路架構,對于新專案
可以使用,想要取代老專案比較困難),
(2)如果用戶反應app有問題,該怎么解決?回答網路抓包,面試官說大型專案不可能通過抓包來找問題,后來
經過暗示,正確做法應該是生成日志檔案并提交到服務器,
(3)聊了專案中登錄相關的業務怎么實作的(將服務器回應的token持久化并添加到請求頭),
11、提問環節,問了面試官kotlin在企業應用中是否有用到,面試官說由于Java和kotlin并不沖突,因此在專案中是共存的,
阿里二面
一個小時(電話)
- 聊了研究生、本科階段得過哪些獎,做過哪些專案或者參加過哪些比賽,具體問了本科參加過的一個水中
機器人的比賽(stm32單片機做的),怎么識別水中的路線之類的一些細節;又問了簡歷中的一個醫療機器人的專案(遇到了
哪些問題、只是實驗室做著玩還是準備用在現實生活中);又問了參加過的數學競賽,這個競賽考察了什么能力等等, - 問設計模式,Android原始碼或者第三方開源框架應用設計模式舉例?(說了okhttp攔截器責任鏈模式)
自己的專案有沒有用設計模式?(retrofit單例,用的kotlin的object關鍵字實作) - Android原始碼中你認為有哪些方面設計的很優秀的地方?(說了Android view體系)
- 聊kotlin,kotlin相比于Java有哪些優勢、具體有哪些特性、語法糖之類的
- 談談對mvvm、mvc架構的理解,為什么你要在專案中使用mvvm?(當然是Google推薦使用mvvm)
- 聊對作業、學習方面的態度,應該具備什么能力等等
- 三道演算法題(說思路):
(1)二叉樹的最近公共祖先(只想出來一種比較笨的方法)
(2)遍歷二叉樹的第k層節點(遞回迭代都講了)
(3)給一個中文字串“一萬兩千八百一十一”(只是個例子),輸出這個字串對應的數值(沒想出來) - 提問環節
問了部門的氛圍如何之類的
阿里三面
40分鐘
- 自我介紹
- 聊專案,mvc、mvp和mvvm架構各自的特點;在專案中最具有挑戰的是什么?專案識訓到了什么?
- 演算法題:給兩個字符陣列,舉例:{h,e,l,l,o, ,w,o,r,l,d}和{e,o},如果第一個陣列中存在第二個陣列中的元
素則去掉,后面的元素往前順移,結果為:{h,l,l, ,w, r,l,d},要求時間復雜度為O(n),空間復雜度為O(1), - 你認為什么樣的人可以稱之為技術大佬?如果只有30分鐘,你會依據什么來判斷一個人是不是大佬?
你認為自己身邊最厲害的技術大佬是誰?他為什么會成為大佬?如果讓你在半年之內達到他的水平,你的
學習規劃是什么?你會不會向他請教學習方法? - 反問:
(1)大廠對新技術的態度是怎樣的?
(2)鴻蒙會不會取代Android?Android的前景怎樣?面試官先問了我的觀點,后來說了自己的觀點:不會,
為什么不會?這個要自己查找最近幾年出現的智能手機系統,它們為什么沒有Android和iOS成功,從中找答案,
系統的面試復習路線
人生困難重重,在漫長而艱辛的前行路上,堅持不懈、腳踏實地的“低頭拉車”固然重要,但認清形勢、找準目標的“抬頭看路”也很關鍵,甚至決定著你能否達到成功彼岸,只尋求遠方的夢想,而不付出當下的努力,那是迷夢;只知道埋頭苦干,而不認清方向,那是徒勞,
接下來分享的系統學習資源以詳解各大互聯網公司的 Android 常見面試題為主線,從面試的角度帶你介紹必備知識點,以及該知識點在專案中的實際應用,
幫你在現在的基礎上,重新梳理和建立 Android 開發的知識體系,無論是你短期內想提升 Android 內功實力,突破自己作業中的能力瓶頸,還是準備參加 Android 面試,都會在這份資料中有所一些識訓,
從架構基礎開始,分了8個模塊來逐步從基礎進階到架構師的環節,
如果你從事Android開發,具備1年以上作業經驗;如果你希望深入淺出了解UI/NDK開發 · 性能優化 · 架構設計 · Flutter開發等技術要點,并渴望實作技術和職業成長上的雙重突破,那么以下福利就很適合你:
多余的話就不講了,接下來將分享面試的一個復習路線,如果你也在準備面試但是不知道怎么高效復習,可以參考一下我的復習路線,有任何問題也歡迎一起互相交流,加油吧!
首先是超級詳細得不能再詳細的Android開發學習思維導圖,因為圖片實在是太大了,所以我就只把二級目錄的內容放出來,更加詳細的你們可以點擊這里,

接下來就需要梳理知識,提升儲備了!(Android移動架構師七大專題學習資源)
-
架構師筑基必備技能:深入Java泛型+注解深入淺出+并發編程+資料傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO
-
Android高級UI與FrameWork原始碼:高級UI晉升+Framework內核決議+Android組件內核+資料持久化
-
360°全方面性能調優:設計思想與代碼質量優化+程式性能優化+開發效率優化
-
解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網路訪問框架設計+RXJava回應式編程框架設計+IOC架構設計+Android架構組件Jetpack
-
NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發
-
微信小程式:小程式介紹+UI開發+API操作+微信對接
-
Hybrid 開發與Flutter:Html5專案實戰+Flutter進階
知識梳理完之后,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結,

然后再是通過原始碼來系統性地學習
只要是程式員,不管是Java還是Android,如果不去閱讀原始碼,只看API檔案,那就只是停留于皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的,
真正最能鍛煉能力的便是直接去閱讀原始碼,不僅限于閱讀各大系統原始碼,還包括各種優秀的開源庫,

《486頁超全面Android開發相關原始碼精編決議》
刷大廠面試題備戰,增加大廠通過率
歷時半年,整理了這份市面上最全面的安卓面試題決議大全,
1.可以通過目錄索引直接翻看需要的知識點,查漏補缺,
2.五角星數表示面試問到的頻率,代表重要推薦指數

《379頁Android開發面試寶典》
以上這些內容均免費分享給大家,需要完整版的朋友,點這里可以看到全部內容,或者點擊 【這里】 查看獲取方式,
最后還有耗時一年多整理的一系列Android學習資源:Android原始碼決議、Android第三方庫原始碼筆記、Android進階架構師七大專題學習、歷年BAT面試題決議包、Android大佬學習筆記等等,這些內容均免費分享給大家,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/276233.html
標籤:其他
上一篇:超硬核!我統計了BAT筆試面試出現頻率最高的五道題,學會了總能碰到一道
下一篇:弄懂LeetCode三道題
