前言
本人大學讀的是一所非211、985一本,去年大四春招來到深圳的一個做智慧硬體的創業公司,剛進來就遇到App改版,所以幾乎是從零開發一個App。剛進來的時候其實我的專案經驗還不是很豐富,等級也比較低,Android端只有我和二個前輩,我剛開始的任務是負責做一些小的介面,幾乎是寫兩天,然後修一週的bug…
因為是創業公司,所以上班還是比較輕鬆的,沒什麼壓力,而且因為自己期望的成長方向和公司需要我的成長方向不一致,公司的專案挺小,2人左右就能完成日常的開發任務,整個產品的技術難度不在前端和後端,所以想要去加入一個更大、更注重網際網路本身的團隊中去。所以做了有6個月左右,我就有了跳槽的想法,於是我開始一邊上班一邊投簡歷,但是投了幾份簡歷都不是很理想,幸運的是我的簡歷被阿里撈到了,最後經過3輪面試成功拿下offer。
今天就分享一下面經和我學習的一些方法,希望對有需要的朋友提供一下幫助。
面試從9月初開始準備面試的東西,在9月底開始精投,投遞的公司有:
阿里被撈+面試中軟國際被撈後拒面試(因為不想去做外包)微信 、騰訊視訊、全民K歌沉QQ音樂被撈+面試華為沉位元組跳動抖音部沉美團被撈後拒面試(因為要去現場面試,我這邊請假有點麻煩)阿里是投的釘釘,因為比較崇拜馬雲,所以我本身就對阿里有好感而且流程很快效率很高,基本當天或第二天就會出結果。面試官很守時、而且很有禮貌,在不會的時候會適當給出提示,沒有啥架子,總的來說體驗比去年春招時好很多很多。
QQ音樂倒在二面,是因為自己的經驗還不夠足,不過HR表示我也很優秀,以後也有機會。(但是我已經去了阿里 嘻!嘻!)
阿里(釘釘)面經9.28投簡歷,9.29晚約視訊面試。
一面(1h15min)
自我介紹,專案介紹,專案的優缺點對比
對MVC和MVP的理解,還有Handler的記憶體洩漏問題具體是什麼,解決方案知道有什麼,空資料的時候Handler的阻塞問題。
為什麼使用MVP,它的優勢是什麼,記憶體洩漏是什麼樣的。
http的長連線和短連線這兩個概念,怎麼去理解。
http一整個流程,什麼Baidu.com輸入,經過了什麼。
RecyclerView的一個複用機制,和ListView的一個區別在哪裡
HashMap、ConcurrentHashMap、Hashtable的問題,資料結構,執行緒安全啊之類的問題了,當然還是考了version 1.7和1.8。
一個app的啟動流程,冷啟動和熱啟動。
一道演算法題三值之和求目標值。
二面(45min)
自我介紹MVC具有什麼樣的優勢,各個模組之間怎麼通訊,比如點選 Button 後 怎麼通知 Model?兩個無限長度連結串列(也就是可能有環) 判斷有沒有交點UITableView的相關優化KVO、Notification、delegate各自的優缺點,效率還有使用場景如何手動通知KVOObjective-C 中的copy方法runtime 中,SEL和IMP的區別autoreleasepool的使用場景和原理RunLoop的實現原理和資料結構,什麼時候會用到block為什麼會有迴圈引用使用GCD如何實現這個需求:A、B、C 三個任務併發,完成後執行任務 D。NSOperation和GCD的區別CoreData的使用,如何處理多執行緒問題如何設計圖片快取?有沒有自己設計過網路控制元件?三面(1h20min)
怎麼判斷某個cell是否顯示在螢幕上程序和執行緒的區別TCP與UDP區別TCP流量控制陣列和連結串列的區別UIView生命週期如果頁面 A 跳轉到 頁面 B,A 的viewDidDisappear方法和 B 的viewDidAppear方法哪個先呼叫?block迴圈引用問題ARC的本質RunLoop的基本概念,它是怎麼休眠的?Autoreleasepool什麼時候釋放,在什麼場景下使用?如何找到字串中第一個不重複的字元雜湊表如何處理衝突用一個數組實現一個迴圈佇列HR面 (45min)
自我介紹為什麼要離開當前的公司在上一個公司學到了什麼選擇公司因素,按優先順序排個序用三個關鍵詞描述自己代入使用者思維和不代入使用者思維做產品有什麼區別?家庭情況,有沒有女朋友?你覺得一個好勝心過強的人會有什麼樣的問題?你會想在團隊裡面承擔一個什麼樣的角色?平時的愛好是什麼有沒有給自己制定一些計劃?對自己的要求有多高?學習的渠道、方式,有GitHub嗎?看什麼樣的書?學習是基於公司專案學習,還是個人興趣學習?預計到崗時間,期望薪資反問環節QQ音樂面經一面 (35min)
自寫Log 有什麼可以優化的地方?有沒有參考業界的寫法?如果出現了一瞬間大量的Log寫入該怎麼做?如果使用者反饋一個Bug,有沒有什麼辦法可以收集這個使用者的資訊?佈局優化,舉一個具體的例子,給你一個介面很多的App,怎麼去優化其佈局記憶體優化,記憶體洩漏是如何產生的?GCRoot有哪些?在平時開發中我們怎樣去避免記憶體洩漏?LeakCanary是如何檢測洩漏的?它為什麼能夠在Activity的onDestroy()時呼叫?給一個具體的場景,去解決滑動衝突。RecyclerView是如何優化的?快取機制?看我Blog上寫了熱修復,開發中有沒有用過熱修復?怎麼去做一個資源的替換? Sophix是哪個公司開發的?程式設計題:兩個棧實現一個佇列介紹HashMap最近在學習哪些知識?二面 (35min)
專案中BFS、DFS是怎麼做的?資料處理的優化是怎麼做的?專案中聯網模組的過程?記憶體抖動的原因,如何避免記憶體抖動?Bitmap大量的申請如何去避免記憶體抖動?講下IntentService講一下註解處理器的用法,EventBus如何使用註解的?Java的元註解有哪些?講下自己搞開發的優勢和缺點有沒有了解過Android10、11的新特性去年有沒有在校招上投過騰訊?有沒有投別的廠?學習經驗因為第一公司生活作息,基本每個專案期都是996的狀態;其次的話因為深圳消費高沒錢玩,所以週日也會泡在公司,雙屏學習的話效率更高一點。
個人成長的話還是非常迅速的,主要是通過這麼幾個點:
一、做專案本身,提高了開發的經驗
二、刷面試題
可以幫助你了解大廠面試問的比較多的問題,增加你對面試對把握。
三、刷書
自己業餘時間研究Demo,帶著目的去學,藉助網課、Blog、GitHub學到了很多東西。
感覺看書對提升非常明顯,當然了還是要看書的內容乾貨多不多,這裡分享下我看過的書:
《Android自定義控制元件入門和實戰》是一本非常適合Android新手學習自定義View的書籍。
《大話設計模式》比較淺顯易懂的講設計模式,給的程式碼例子都很好理解且很好實現。但是書籍本身還是很老的(08年的書),所以舉出的例子和現在的開發相差甚遠,也不深入。
是一本適合作為設計模式入門學習的書。
《Andorid設計模式原始碼解析》針對Android7.0原始碼,找出其中的設計模式,並給以解析。我是作為輔助《大話設計模式》來學習的。
裡面講解了每種設計模式在Android原始碼中的實現, 以及一些實戰中會使用的設計模式,更加的深入,偏應用。
《深入理解JVM》寫的極其細緻,完全滿足日常開發及面試的需求。
《Android進階解密》必看,強推!!!!!!!
以應用層為角度學習去Android8.0的原始碼,這使得我的開發視野從應用層擴充套件到JNI層。
而且書的章節結構設計的很好,一環扣一環,不會很深點到即止。末尾還有幾章講解記憶體優化和繪製優化的,對實戰非常有幫助。
最後
本文到這就結束了,希望這篇文章對大家有幫助,因為網際網路本來就是日新月異的,所以我們只有不斷的學習,才不會讓自己被淘汰。