快手,字節跳動,百度,美團Offer之旅(Android面經分享)

前言

19年6月份從網易雲音樂離開,放棄了留學機會,開始了人生的第一次創業,先後嘗試了兩個項目,由於我的能力與時機因素都失敗了,雖然沒能享受到創業所可以帶來高槓杆物質上的回報,可是對我的軟技能和自我邊界認知上都有了很大的提高,對於這段經歷有如下四點想送給準備創業和走在創業路上的朋友們。java

  1. 創業本質是一個不斷下降商業模式風險的過程。(創業前最好去北京798的智能硬件展廳看一看)
  2. 當你對於本身的將來感到模糊,對當下感到厭倦的時候,跳出溫馨圈,快速嘗試是最好的解決方案。
  3. 打開本身,多結識各路「牛鬼蛇神」,你當下的困惑大多都有人比你提早經歷過,且均可以給予你具體可操的解決方案。
  4. 忌紙上談兵,實際去作的質感是書本上永遠學習不到的,去幹而不是去看。

通過這一次創業和以前的工做經歷,對於下一份的工做在選擇上因此也有了更多的想法,對於工做的成長性和平臺背景是當下比較看重的,固然錢也是考覈的一個重要指標(一切以成長和主人翁精神來鼓勵加班不給錢的公司都是PUA)。結合自身的職業發展訴求,快手和字節跳動是本次找工做的目標公司。這兩家公司的offer也是首先拿到的,由於offer的流程有些時間,所以也面試了一些其它的公司,感覺到了各家公司的工做流程,面試過程當中面試官也給予了不少技術成長上的建議,對於一些技術和設計問題也展開了一些探討。一些面試官分享了他們在作的業務,商業模式等,總之在職業素養,技術視野,商業模式上都在潛移默化中獲得一些提高。面試

找工做之旅

在開始以前首先要感謝一下以前在網易的同事和網易雲音樂平臺提供的成長機會,遇到的leader和同事都很給力,給了足夠的成長空間,同時在平時工做中遇到的問題也都給予了很大的幫助,特別是在雲音樂的這段時間,做爲剛畢業的新人,可以有機會獨立負責到核心的模塊參與技術優化工做,非常感激。同時千萬級日活App也是很是加分的,簡歷基本都是秒過的。因此對於雙非本科的孩子們,校招仍是要儘量的擠破頭進個大廠,後面的路會愈來愈好走。算法

大概在三月份初離開了公司,開始全力準備面試,因爲以前在網易的時候,開啓了一個每週一輪子的專欄,每週都會閱讀一個第三方開源框架的源碼,同時經過博客對外輸出,這個過程創建了本身的的技術積累,同時培養了本身閱讀源代碼的能力,在準備找工做的時候,也能夠很好的進行翻閱,同時在研究第三方開源框架的時候也圍繞着三方框架相關的技術作了更深層次的研究,所以經過對於這部分博客的回顧,在面試中起到了很大的幫助,這裏就很推薦你們在平時工做過程當中要多作一些記錄,最好經過博客的形式進行持續性的輸出,本人博客同步在SegmentFault,掘金和簡書上,用戶ID爲Jensen95,下面是在各個平臺上的一些記錄。歡迎關注交流。數據庫

簡書地址

投遞公司與拿到Offer

出於對工做的穩定性和後面自身的發展,主要考慮三個方向,短視頻,陌生人社交和在線教育。雖說短視頻致使了人類深空探測遲緩,但並不影響內卷下想着被有尊嚴飼養的幻想。面試公司中除了微信都已經經過了面試,給到offer的有字節跳動,快手,百度,美團。最終選擇了字節跳動直播中臺業務。編程

在線教育

  • 猿輔導旗下印度K12
  • 跟誰學

經過與兩家公司的溝通,極大的改變了我對於在線教育的認知,以前一直認爲教育做爲一個服務行業,線上是玩不轉的,可是如今的大班雙師制加結果導向,過程由輔助老師與父母共同參與把控,並且藉助於線上不受地域限制的便利性,能夠迅速將名師課堂成本攤平,成本的下降也能夠更好的彌補如今線下教育資源缺少而致使的沒法真正的去因材施教,線上的能夠提供培優,提升,基礎等不一樣層級的課程,更好的幫助處於不一樣層級學生成績的提高,同時如今國家教師編制的緊縮,讓三四線更低的城市優質教育資源變的更加匱乏,輸送一二線優質教育資源,分層輸出到下沉市場,存在巨大的潛力,不過這巨大的商機在不禁讓人可惜,終將走向極度的內卷。經濟形式下行,更是利好教育行業。小程序

  • 面試難度與風格

1.猿輔導旗下由於是創業公司,面向印度的K12,處於很是早期,面試難度相對較低,由於當時對於Android與Java基本是沒有作太多準備,徹底靠以前的腦子裏殘存的印象,回答的通常的,大概的Android問題問了一些,而後手寫了一道算法題,最優解下完成,經過了一面。二面就CTO面了,問了一些職業規劃的問題,可能由於要價過高,對創業公司來講並不划算,入職意願表現的也並不強烈,就沒有了後續。segmentfault

2.跟誰學,面試內容相對比較簡單,就這簡歷上寫的幾個框架問了一些,面試官也很是坦誠,由於要價比較高,二面移動組leader明確說了給不到這個薪資,而後評定爲工做不穩定性風險較高沒有了後續。設計模式

短視頻直播

  • 快手直播
  • 字節跳動直播中臺

快手直播目前來看是一枝獨秀遙遙領先其它的,聽說技術儲備上也是業界領先的。直播營收也是快手的一大核心營收來源,字節跳動來講的話是去年才成立這個中臺部門,今年準備去核心發力的,發展和想象空間不管對業務仍是技術可能都更大一些,而後中臺又分爲了業務和技術,恰好分到了技術部門,所以在選擇上更傾向去字節這邊。數組

  • 面試難度與風格

兩家技術面試都是有三輪,前兩輪主要是對於Android,Java,計算機基礎知識的考察,第三輪面試則是leader面,面試內容偏系統設計,算法與溝通能力,前兩輪面試中,難度上來講快手難度要高一些,印象比較深的是快手的三面還有字節的二面和三面,快手三面是個Facebook回來的大佬,提問的問題還有面試中的引導作的很棒,聊的很舒服。字節這邊二面是真技術大佬,頓感本身簡歷上作的東西太low了,三面是個帥帥的小哥,人很熱情溝通也很好,除了面試以外,在技術發展和職業上也給了一些建議。瀏覽器

其它

  • 美團主App
  • 手機百度
  • 微信客戶端
  1. 美團問的問題比較多的結合項目來展開,並且開放性問題居多,不是能夠在網上隨便搞一個題庫能夠搜索到答案的,這點我以爲挺好的,能夠有效防止各種經過短時間培訓班背題拿到offer的問題。美團三面面試官風格很獨特,偏計算機基礎,考察基本功,幾乎是回答的每一句話都要跟進深挖到底,你能夠選擇沉默,但說的每一句話都將成爲下一個面試題。同時跟面試官就如今的跨平臺和如今各大超級App中小程序容器研發作了探討,也講了其對於這一技術趨勢的見解。
  2. 手機百度,面完了兩輪技術以後,開始了經理面,技術面試偏計算機基礎一些,經理面主要是在講本身創業相關的事情,經理面聊完以後,又加了一輪技術面試,搞了道動態規劃算法題目,而後講了下我的規劃和職業選擇還有對百度的見解。
  3. 微信。微信自己人手應該不是很缺,加上微信如此剋制的產品迭代,對於招聘要求很是高,知識的考察偏少,主要是在對於項目的考察,強調系統化,你的技術需求上游是什麼?你作的技術優化線上帶來了什麼反饋,如何持續跟進的,如何去作優化的,然而。。。要求上傾向資深有比較系統化項目經驗的人。

面試題目

對於面試的準備,算法建議對着牛客網刷下《劍指Offer》和《算法》,而後以前項目中用到的第三方框架,瞭解其核心實現流程和框架特點與一些實現比較巧妙的細節。對於Java基礎,推薦《深刻理解Java虛擬機》《Effective Java》《Java併發編程之美》,Android推薦閱讀《Android開發藝術探索》和《Android 源碼設計模式解析與實戰》,Android這兩本都是點到爲止,沒有特別的深刻,能夠做爲一個目錄綱領,引子,藉此作更深刻的學習。除此以外對於以前所作過的項目,寫在簡歷上的項目都要作深度的挖掘和探索,發掘抽離其中的知識點和亮點。

Android篇

  • Handler實現機制,同步屏障,IdleHandler
  • Looper能夠在子線程建立嗎
  • Handler如何實現對於消息的定時發送
  • HandlerThread的實現原理
  • 事件傳遞機制,結合滑動衝突具體場景解決問題
  • View繪製流程,從Vsync信號到ViewRootImpl到最終View的draw
  • Apk打包流程(點擊 Android Studio 的 build 按鈕後發生了什麼

  • Apk安裝過程
  • 內存泄漏,Handler如何致使Activity內存泄漏,如何作檢測,引用的鏈路到GCRoot
  • Fragment生命週期
  • Activity各種啓動模式下的切換狀態後顯示狀態
  • 屏幕反轉Activity的生命週期變化
  • Dialog彈起背後的Activity生命週期發生何種變化?
  • 一個應用啓動過程,如何與AMS,PMS交互
  • EventBus的實現原理,粘性事件是如何實現的?爲何要用EventBus,其優點在哪裏?
  • Retrofit的實現原理結合動態代理來問
  • Picasso與Glide的區別(緩存的差別性)
  • Volley與Okhttp的差別性,Okhttp的實現與其優點
  • 多進程的數據庫與文件操做該如何實現?
  • Android簽名,V1,V2
  • Glide中生命週期如何實現的
  • Glide如何加載一個Gif圖
  • 對於Android中內存使用中注意的點(圍繞內存泄露與內存優化講)
  • MVP,MVVM,MVC的差別性已經適用場景
  • Android APK爲何不能夠在IOS上運行,如何設計可讓其運行?
  • Android系統設計爲何要用虛擬機不直接執行機器碼?
  • 經過虛擬機運行和直接執行機器碼的差別性其各自的優點在哪裏?
  • Dalvik和ART的區別
  • Native生命週期如何通知到Web?
  • 瞭解Android中的ANR嗎?
  • 瞭解Android中的OOM嗎?
  • RecyclerView中的緩存實現原理
  • RecyclerView中ItemDecoration的實現原理
  • Activity,Window,WindowManager,ViewRootImpl如何看這幾個的關係
  • 廣播動態註冊和靜態註冊的差別是什麼?
  • Android中進程通訊的方式,Binder的優點是什麼?
  • SparyArray和ArrayMap的實現原理?
  • 使用過Koltin嗎?
  • 使用過RxJava和Retrofit嗎?
  • Web與Native的通信方式
  • SurfaceView和TextureView的區別
  • Surface爲何要用雙緩衝機制?
  • Bitmap大圖加載的優化策略?
  • SharePreference的commit和apply的區別

Java相關

  • HashMap和HashTable,ConcurrentHashMap的差異
  • ConcurrentHashMap的1.7和1.8版本差別
  • LinkedHashMap實現原理
  • ArrayDeque實現原理
  • Java Object中有哪些方法?equals和hashCode方法何時會被重寫?
  • Java中悲觀鎖與樂觀鎖,舉例並說明其相關實現?
  • CAS實現原理
  • synchronized和ReentrantLock的實現差別
  • synchronized對不一樣方法的修飾,持有的鎖對象的差別
  • ThreadLocal實現原理
  • volatile用法
  • 說一下對於泛型的理解
  • 泛型擦除
  • 什麼狀況下不會出現泛型擦除
  • 說一下對於線程安全的理解,Java中線程安全與不安全的集合類有那些?
  • Java的垃圾回收機制
  • JVM中內存分配機制
  • Java類加載機制
  • 平時項目中對於鎖的應用
  • Java線程池默認提供了哪些類型?分別適合什麼場景?
  • Java線程中interrupt()、interrupted()和isInterrupted()分別表明什麼意思?
  • 動態代理與靜態代理

算法與數據結構篇

對於客戶端來講,各大廠基本不會有難度太大的題,難度基本在《劍指Offer》和LeetCode中等難度水平,基本仍是均可以作到手寫bug free的,對於實現複雜的,面試官也會給予提示或者只是讓你講一些思路就行了,除了百度以外,其它都是須要手寫的。由於百度無需手寫,考察思路,因此難度上會偏難一些。

  • 二維座標系中有一些點,找出一點直線覆蓋儘量多的點
  • 鏈表表示一個數字,求兩個數字相加之和,返回一個鏈表
  • 鏈表反轉
  • 二叉樹的最低深度路徑打印
  • 無序數組中查找兩個和爲某一個值的數字,返回索引值
  • 二叉樹的後續遍歷,非遞歸實現
  • 字符串中最長不重複子串
  • 揹包問題(最大容量與最大價值)
  • 動態規劃與遞歸的差別性,什麼問題能夠用動態規劃,什麼問題不能夠
  • 排序算法類型與複雜度,有沒有更優的優化空間
  • 排序算法複雜度中nlgn中的lgn是怎麼來的
  • 堆排序相關,堆排序中的堆與堆棧中堆的差別性
  • 兩個字符串,求其最長子串?例如abc1234,123bc(暴力方法的複雜度,動態規劃的複雜度)
  • 什麼是徹底二叉樹?

對於算法問題,須要找到最優解,手寫達到Bug free的水平,同時對於各類解決方式都可以給出時間複雜度,同時給出時間複雜度的計算過程。

計算機基礎

  • TCP三次握手,四次揮手
  • DNS解析過程
  • Http和Https的區別
  • Https的創建鏈接過程
  • 什麼是死鎖?如何產生?如何消除?
  • TCP擁塞控制與流量控制實現?
  • 弱網下網絡請求的處理策略,結合直播場景
  • 瞭解那些設計模式?
  • 工廠設計模式的優勢在於什麼?
  • 外觀設計模式和策略模式的是如何在項目中應用的?
  • 有使用過那些加密算法?
  • 怎麼理解原子性和可見性?
  • 如何保證原子性?
  • Https中數據傳輸是對稱加密仍是非對稱加密?
  • 補碼錶示方式,int最大值加2後等於多少

其它手寫設計

  • LruCache實現
  • 生產者,消費者模型
  • 微信錄音模塊設計
  • 設計一個日誌系統
  • 設計一個圖片加載框架,你會如何實現?
  • 手寫一個單例實現
  • 設計一個小程序容器,有哪些點須要注意的?
  • 如何設計Web與Native通訊的鑑權

HR面與Leader面

  • HR面

對於HR面基本主要是聊一些過往經歷,看一下求職意願,我覺業務部門決定要人了,HR掛人的機率應該是很小的,而後是聊一下薪資期待,說白了就是圍繞其本身的KPI來跟你周旋,價格壓低同時保證你有足夠的入職意願。吐槽一下,某公司的HR素質是真的爆炸,問我創業虧了多少錢?女友在北京嗎?(特碼的是準備要包養我?)

  • Leader面

你指望的工做內容是什麼?你以爲你能夠給公司帶來什麼?固然這個不一樣公司的面試風格差別性仍是挺大的,上述面試的公司感受素質都仍是挺高的,給予面試者充分的尊重。這個環節除非是以爲你的工做內容和薪水指望跟他們能夠提供的差距較大,通常都是能夠經過的。

面試知識點總結

經過上述問題能夠看出,對於面試過程除了原有項目的考察,對於知識點的考察上,主要是Android基礎知識,Java基礎知識,計算機網絡,系統設計,算法,結合上述面試題目和本身準備過程當中的一些學習記錄,下面經過一個腦圖的方式進行一個梳理。

如下是本身結合本身的面試整理出來的,固然並無徹底覆蓋到全部的Android知識點,你們能夠結合本身的平常項目和一些書籍本身在整理彙總。

Android知識

對於Android這塊,從打包到安裝,再到一個App的啓動,到一個頁面顯示出來內容,再到咱們的手指去觸摸屏幕對屏幕帶來了改變,對這個流程能夠跟進相應的源碼,順着這個流程來本身捋一遍,即便不是爲了準備面試,做爲Android知識的儲備對開發工做也是有很好的提速做用的。當把上述流程梳理完成,再考慮對於其中每個環節的各個擊破,對流程的把控對於咱們對應用進行系統性的優化也是很是有價值的。

Java知識

Java這塊除了對一些基礎知識的考察以外,主要是對於Java虛擬機,和多線程場景下對於鎖的控制,還有對於其中集合類的一些相關實現和優化的點。流程上是對於一個.java文件如何被編譯成.class文件,而後JVM如何去加載這個二進制流並進行執行,內存如何作分配,分配以後,如何爲對象分配空間,執行字節碼。

算法與數據結構篇

算法這一塊建議把《算法》查找與排序讀如下,同時跟着《算法導論》學習一下時間,空間複雜度的計算,常見的題目類型爲圖上這些,在我以前的博客中有寫動態規劃一期,包教包會。

系統設計題目

對於系統設計這塊,由於以前作太小程序容器和雲遊戲,因此會被問到,其它應該不會被抓住問的,其它的部分應該是在三輪面試中比較高頻會被問到的。

計算機網絡

計算機網絡中常問的方式是從瀏覽器中輸入百度到頁面返回的流程,順着這個流程拓展出來DNS解析,TCP鏈接,Http,Https。

總結

面試之旅終於告一段落了,接下來準備入職前的相關工做,對於上述提到的知識點,後續本身將會結合項目實踐在掘金,簡書,SegmentFault中持續輸出,分享給你們,但願你們均可以如願拿到本身的心儀的offer。

對互聯網創業,跨平臺,直播,Android相關技術感興趣的,能夠加我vx來一塊兒交流:1753969686。

碼字不易,打賞支持一下吧。

<center>😊碼字不易,打賞支持一下吧😊</center>

相關文章
相關標籤/搜索