從字節跳動離職後,拿到探探、趣頭條、愛奇藝、小紅書、15家公司的 offer

前言
博主目前從事Android開發3年,前兩年一直在抖音工作。我這篇文章並不是簡單的描述一些面試中的題,或者總結一些Android的知識,而是想記錄我整個的想法和準備的過程,以及一些心得體會,讓大家更加全面的去看待工作、跳槽和生活(從我的角度,當然肯定有不合理的地方,大家借鑑就好)

抖音兩年

在字節跳動的兩年時間中見證了抖音從百萬日活到2.5億、團隊從10人到100多人的過程,技術上不同時期的選型以及迭代、沉澱和更替。項目上經歷了一個工程到模塊化再到組件化最後插件化,深刻理解項目不同階段和不同體量的時候技術框架的選型。流程上不同階段不同的方案,一直在探索最大的效率的協同開發。產品上從不斷試錯到穩步發展的過程,也就是數據驅動業務的過程。

字節跳動是一個偉大的公司,優秀的同事真是數不勝數,我在其中只是一個菜鳥,仰望各種大佬,不管是從技術方面還是做人做事的方面都學到了很多、成長了很多。在抖音的兩年十分感謝我的同事、領導對我的幫助和提攜,尤其是亨惠、火火老師、馬老師、江老師、夏老師、將軍、若雷、樂華、龍博等等一羣大牛,還有漂亮的pm小姐姐佳鑫,和帥氣的設計師鼕鼕,只能說我是何其的幸運,能夠和一羣優秀的同事一起共事、見證一款偉大app的崛起。

這次面試了以下幾個公司(不是面試順序):

Airbnb、快陪練、探探、猿輔導、趣頭條、脈脈、動動、瓜子二手車、伴魚、最右、BIGO、音娛、快手、小紅書、美菜網、微軟、亞馬遜、Ihandy、餓了嗎、愛奇藝、右劃

其中面試沒通過的是:脈脈(一面掛),其他的公司都到了hr面談薪資,美菜網、音娛、動動、猿題庫等公司hr開誠佈公的跟我說給不了我要的價錢,雖然技術面評價不錯,我也明白,由於拿到一些offer後,我對不太想去的公司會要的比較高,我自己都覺得肯定不會給。微軟和亞馬遜有另外的情況,因爲當時已經基本確定拿到Airbnb的offer加上眼睛因爲上火長了針眼,特別疼,就直接拒絕了。可能有同學發現了,爲什麼這次我沒有去BAT去試試(百度、阿里、騰訊),百度的確沒有投遞,阿里和騰訊不是我不想去,實在是太慢了(可能是我沒有走內推,而是在boss投遞的原因),基本上是投遞後一個月後才告訴我簡歷通過去面試。

爲什麼要跳槽
爲什麼要跳槽,這個問題一定要思考清楚,因爲跳槽的成本其實是挺大的,在一家公司積累的不僅僅是人脈還有對當前行業以及業務的熟悉度,新進入一家公司,一切需要從頭再來,需要快速的證明自己,尤其是技術人員,還有就是對新環境和代碼的熟悉,這些都是成本,所以在跳槽前,一定要想好,爲什麼要跳槽。其實馬爸爸有一句經典的話“要麼錢沒給到位,要麼心委屈了”,說的很形象,我這裏再細說一下:

錢沒給到位,其實所有的人對自己的評價都是比自己真實的水平要高一些,這就導致,大部分人認爲自己現在貢獻很大,老闆應該加薪,尤其是看到一些同事做的不如自己(可能是自己認爲),工資拿的和自己一樣,甚至比自己高,那就更加有錢給的少了的感覺。

做的事情是否有價值或者說是否有持續盈利的趨勢,這個很重要,一個公司的產品不盈利沒前景,就算給你開不錯的工資,作爲一個不想混吃等死的人來說,都不想繼續再待下去。

機會,作爲一個已經有3年工作經驗的人來說,這個時候更加需要的是一個機會,能夠證明自己,給公司帶來更大的價值,完成進一步的突破,如果當前的公司並不能給你這個機會,那麼你就需要考慮跳槽了。

那麼跳槽的核心就是利益最大化,當然這裏說的利益,不僅僅是薪資福利,還有自己的職業規劃。

職業規劃

作爲技術人員,我大概總結了下面三個方向,其實哪個方向都是大有可爲,關鍵還是要看自己。

技術經理

架構師

專項領域的專家

薪資福利

作爲一個不再年輕的程序員來說,已經不能忽略薪資和福利,不再像剛畢業的同學,只要能成長、只要平臺好,薪資什麼的不重要。其實每個階段都有自己的側重點,我大概對薪資、平臺、成長排了個序(自己的觀點)

1~3年,平臺>=成長>薪資

3~5年,平臺>=薪資>=成長

5~10年,平臺=薪資>成長(這個階段也可叫做規劃)

上面是自己不成熟的看法,從自身的一些經驗出發的,僅供參考。

準備
這是最辛苦的階段,你不僅要把日常的工作做好,還要開始着手準備刷題、基礎知識準備以及高階知識的準備,除此之外我還對英語進行了一些準備,由於不管是想去外企、出國以及看英文的文檔,英語都是必不可少的,英語在我們的日常生活中也越來越重要,我們要,整個階段大概持續了4個多月。其實每一次跳槽,都是對這幾年工作的一個梳理和總結,雖然大家都明白“面試造火箭、進去擰螺絲”的道理,對於公司而言,這是篩選人才的一個方式,畢竟人是第一生產力,只要有優秀的人才,那麼造出的火箭纔可能“一飛沖天”。對於個人而言,如果公司裏同事優秀的人,那麼你肯定也不會差,我們肯定更希望和優秀的人一起共事。

刷題
我的方式還是之前的老套路LeetCode +《劍指offer》,雖然老,但是效果非常不錯。這個過程不僅是個腦力活還是體力活,由於不能再公司刷題,我一般的選擇方式是在晚上回到家後,由於公司經常加班,我通常到家是10:00-11:00期間,先鍛鍊半個小時(一會再聊這個事情),然後刷題半個小時到一個小時。當然也可以在上下班的路上抽時間看看題。

LeetCode,刷了300+的題,這裏的刷並不是指僅僅只刷一遍,我來回刷了四遍,手寫了一遍(寫了200多道),保證我看到題目或者類似的題目,我能第一時間想出最優的解題思路。

《劍指offer》,這本書真的很棒,總結的很到位,以及每個階段的思路寫的都很詳細,我是百看不厭,大概50+題,多看幾遍,這能做到舉一反三。

基礎知識
由於面的Android崗位,需要準備一些Java和Android方面的知識,有很多的文章都會去介紹怎麼去複習基礎的知識或者進階知識,或者是閱讀一些經典的面試數據,例如任玉剛的《Android開發藝術探索》,都是非常不錯的。大家可以根據網上的文章和一些數據梳理一個自己的知識體系,將一個一個知識點形成點再到面,這樣能更加深刻的理解,而且有自己的側重點,我就列舉一下我的準備的方向:

簡歷
簡歷的重要性就不言而喻了,怎麼樣寫好簡歷是個技術活,當然如果你有很好的背景(學校或者公司),那麼不管你怎麼寫,基本上都不刷掉你,我們作爲一般的人還是需要下一番功夫的。拿我的簡歷作爲例子,大概有以下幾個部分:

怎樣寫簡歷,這個開源網站不錯,教你怎麼寫簡歷,而且有一個在線markdown在線網站,可以導出pdf。

面試
由於時間的原因,有一些面試題記錄的不是非常的詳細,但是大致是這些,可能會漏掉一些題。這篇總結與2017年面試總結一樣,我並不會給出答案,一個是因爲,面試太多,細節實在記不住,而且有些題也有可能記錯,有時候一天最多面試了4家,從早上10點到晚上9點一直在面試,我連續面試一週後,直接上火了,眼睛長了個針眼,腫的老大了。二是因爲,我這篇文章主要目的並不是帶你複習Android的相應知識點,而且每個人都有自己的側重點。

“求其上者得其中 求其中者得其下”,按照這個原則這次面試我就大膽的面試架構師或者能夠帶人的職位,所以很多問題都是架構的考慮和知識的廣度以及自己的思考,這些回答很大程度上是開放題,相信大家都有自己的想法和見解,我就不班門弄斧了,真的是因爲抖音發展的太快,見識了太多的問題和優秀解決方案,所以只要自己用點心,可以學的地方還是很多的。

總結部分僅是個人的觀點,如果有錯誤或者影響到公司的地方,希望大家能提出,我會修改不恰當的言辭。

  1. 快陪練
    還是先填個人信息表格,其實我不太喜歡這種方式,一上來就是個人的詳細信息,你又沒有給我發offer,我也沒決定要來,而且還沒技術面。不過既然來了就要尊重公司的辦事方式,我只簡單寫了一下我覺得可以告訴公司的個人信息。然後做了一份筆試題,一道算法和一些網絡方面的知識,不難。

快陪練整體的環境並不是很好,環境很嘈雜,而且我是在門口面試的,很亂。

一面
MVC、MVP和MVVM的原理和區別

設計的六大基礎原則

使用UML畫一下訪問者設計模式

二面
先聊了聊爲什麼離開現在公司,畢竟現在這麼火

我做的項目中的一些解決方案,組件化、字節碼注入、包體積的極致優化

直播的架構設計

三面
設計一個上傳日誌的大小,涉及到,性能、文件大小、怎樣壓縮、時機、TopK問題等

聊了聊在字節跳動做的事情

總結

是一家創業公司,給的薪資還是挺不錯的,但是由於是996,沒有加班工資,多出來的錢可能就是加班工資吧,後面聽hr說公司正在打算取消996

  1. 探探
    是通過脈脈上網紅馬映怡推薦的,馬映怡之前在字節跳動,今年4月份到了探探,在脈脈找到了我,正好我有出去看看的意向,就約了時間去面試,探探的辦公環境還是比較好的。

一面
OpenGL一些知識,頂點着色器、片元着色器的工作原理,什麼是VBO(這個沒想起來),以及shader的一些簡單問題

View的事件傳遞機制

包體積優化

JVM相關知識,Dalvik和ART的區別

組件化的實現方案

算法題,ViewGroup的層級深度,轉換爲二叉樹的層級深度

二面
二面面試官,比較注重思維,我理解爲聰不聰明的意思,有點腦筋急轉彎的意思,要求的最簡單有效的方法。

RecyclerView防止內存OOM的一道題,充分利用自身的緩存機制,可能我始終沒理解問題所在,雖然給出解決方案,但是面試官不滿意,太繁瑣

討論LRUcache的實現和時間複雜度

三面
cto面試

聊了一下抖音發展的過程中我的角色,做過什麼事情,有什麼收益

在華爲的一些經歷,爲什麼離開華爲

聊了一到算法題,查找兩個字符串的交集和字符串1中有字符串2中沒有的問題。

四面(不是一天)
這次主要是聊一下我將要做的工作,以及讓其他面試官再次瞭解一下我,因爲評級比較高,所以需要謹慎點。

總結
整體來說探探發展還是不錯,尤其近兩年要上市,環境也不錯,管三餐,加班不嚴重,雙休,工資也給力,但是也是由於近兩年要上市,所以要做的東西還是比較多和急,需要你有一定的能力。

  1. 猿題庫
    我是在boss投遞的猿題庫的Android開發崗位,結果hr小姐姐把我當成了server開發,先進來一位server的童鞋,讓我寫了一到算法題(二叉樹的鏡像),然後看看我的簡歷問我,是不是面試android的,我說是,她尷尬的說我是server面試官,然後趕緊與hr溝通,調整成爲Android。

猿題庫面試應該是有硬性的時間指標,應該是每一輪面試都要差不多1個小時,並且會出1~2道算法題。

一面
主要聊了下面幾個方面

熱修復,主要說了ClassLoader的方式和Rubost的插裝方式,重點介紹了Rubost的原理。

實現直播禮物的一些技術選型,和播放帶有alpha通道MP4的解決方案

怎麼實現字節碼注入

抖音組件的探索,SPI到字節碼注入,優缺點。

接下來就是兩道算法題

String字符串的數字相加

使用三個線程順序打印有序的數組

提問環節

二面
包體積優化:靜態Lint,Proguard,AndResGuard和刪除R.java中的所有字段,刪除access$方法,在gradle的transform階段將壓縮png和jpeg,使用google開源的redex方案,每種方案的原理以及優缺點

MVVM-livedata的實現原理

屬性動畫的原理,這裏沒看過,不太清楚

Kotlin寫一個let的擴展函數,大體寫了一下代碼。

算法,可能是我寫的太慢了,所以就只有一道

給定一個有序的數組和目標數,找出與目標數最近接的index,要求複雜度是log(n)的時間複雜度

三面
三面就比較輕鬆了,面試官一直樂呵呵的,又問了一下alpha視頻的解決方案,然後聊了聊爲什麼要離開這麼火的項目,問了問我的經歷之類的,最後寫了兩道算法題

二叉樹的深度和廣度,要求一次遍歷

給定一個二叉樹和一個目標數,在二叉樹中是否存在一條路徑的所有節點的和與目標數是相同的case,並且打印。

總結
效率並不是很高,而且並不主動,可能是跟我要的薪水太高有關係,後面通過詢問才知道,技術面試是通過了,可能字節跳動本來薪水就很高,我再跳過來,猿輔導考慮到我的工作年限和年齡,會倒掛一大批人,所以只能平薪過來,而且這樣知道我肯定不會來,就沒主動跟我說。

整個面試環節總體來說還可以,但是就是效率不高,也可能是我運氣不好,我是4:10到猿題庫的,然後在前臺等了20所分鐘,hr纔來,說了剛纔在電話會議耽誤了,這個理解,然後等待面試又等了10多分鐘,來了server的面試童鞋,寫了道算法題,重新調整到Android面試,又等了15分鐘,真正Android面試開始在5:10左右,面試完成後基本到了8:30了。

對自己的表現基本滿意,就是好久不手寫代碼,有點生疏,寫的比較慢,大多數問題和答案都得到了面試的認可,對一些知識點沒有複習到,其實我是這樣認爲的,並不是所有的問題或者知識都需要知道,你只需要有1~2個方面瞭解的很透徹,得到面試官的認可就行。

  1. 趣頭條
    一面
    在抖音上顯示自己做的功能,框架的搭建,實現原理,所做的優化點等。

組件化的實現,爲什麼做組件化,不同實現的優缺點。

hashmap的實現原理

view的優化,減少層級,異步加載,x2c框架引入,優缺點,textview的優化。

mp4播放alpha視頻實現的原理

一面面試官大概聊了1個小時左右,沒讓我寫算法,細究原理和細節,非常仔細。

二面
冷啓優化的一些方案。

數據驅動業務的理解,怎麼做,和pm產生分歧怎麼解決。

我所有做的優化的收益是什麼,有什麼數據支撐。

事件分發機制,舉了一個具體的例子來解決。

http的一些問題,1.1和2.0區別,心跳機制,https怎麼建立鏈接,怎麼進行數據加密等。

爲什麼離開抖音,職業發展,訴求等。

聊了大概一個小時,面試官的思路相對獨特,不是爲做技術而做技術,技術始終要服務於業務,我非常認可。

總結
趣頭條北京位於海淀,位置不靠近地鐵,需要步行一段時間,不過效率挺高的,在面試完的第二天就給我發offer了,面試流程也相對較少。對趣頭條的營收模式看的不是很清楚,類似發錢看新聞,但是現在頭條也再做這個,趣頭條能夠搞得過頭條是個問題,如果沒有增長點,那後期的轉型是什麼(我瞎操心啥)?總體來說體驗還是不錯的,hr也很真誠,多次溝通,雖然最後我沒有去,感興趣的同學可以去看看。

  1. 瓜子二手車
    瓜子二手車真的是太遠了,從海淀到工作地方將近花費了2個小時,而且還不在地鐵附近,還需要坐公交。

一面
聊了一下項目中做過的東西,字節碼注入相關知識,transform優化,mp4禮物實現等

從桌面點擊icon圖標開始,整個啓動activity的啓動過程

Binder的實現原理

插件化的原理,以及hook點,大概有兩個,可以網上搜索一下

hashmap的實現原理

單例的實現,sychrnized的實現原理,以及雙鎖不加violate,會不會有線程安全問題

二叉樹,讀取每一層最右邊的節點

二面
聊聊大概履歷,以及在華爲、字節跳動都做了什麼,爲什麼要離開。

職業規劃,怎麼帶領團隊

代碼設計的基礎原則,以及用UML畫出工廠模式

將兩個有序的鏈表合併成一個有序的鏈表,遞歸和循環兩中方式

時間分發機制,並且需要從Android的sensor開始到應用層,我只知道從Activity開始的流程。

聊操作系統Unix,汗顏,我知之甚少。

對新技術的看法(flutter),瓜子二手車也已經開始在項目中使用fultter相關技術

三面(總監)
自我介紹,爲什麼要離開抖音

線程安全的問題,sychronized和viloated的使用

實現一個CAS(樂觀鎖)的方法

HashMap的實現原理,怎麼優化內存佔用,優化resize的過程,這個是開放的問題

四面(VP?)
自我介紹,在抖音做了什麼

在抖音做的比較好的兩件事情

設計一個美團的框架,組件化

總結
瓜子二手車是衆多二手車中做的還算比較好的公司,現在像優信、人人二手車好像都不是很好了,就是太遠了,公司附近也沒有地鐵站,就算是公交站還需要走2公里,但是面試官感覺還是比較有水平的,後期的hr跟我談也是誠意滿滿,整個團隊在我來看,還是一個想做事情的態度。總體來說hr還是非常真誠的,想去的朋友可以考慮考慮。

  1. 伴魚
    筆試
    雙鎖單例,爲什麼要價violate

內部類訪問外部類

函數值傳遞的一些題

子類繼承父類,個字都有靜態變量、靜態代碼塊、構造函數,執行的順序

int數組,除了一個數字外,其他數字都出現兩次,找出這個只出現一次的數字

一面
圖片壓縮原理,以及在transform階段進行的必要性,討論的還挺激烈

內部類引用外部函數的參數,爲什麼要final定義,值傳遞

判斷一個應用是否切到後臺

組件化的探討,假設場景,怎麼處理

插件化的實現方式,以及對相應的場景進行討論

二面
伴魚的架構師

一個疑難雜症,也是自定義插件,討論是否有更好的方式,最後結果是,他想了一個比較巧妙的方式,沒有實踐過,但是告訴我可以,保留自己的意見。

字節碼相關知識,ASM以及MD5的實現原理,png的壓縮原理,這裏比較亂,就是說到哪問道哪,比較發散。

對成爲架構師的幾點看法

三面
mp4實現alpha通道的原理,優缺點,收益是什麼

m*n的二維數組,做(0,0)出發,可以上下左右走,0爲暢通,1爲阻塞,目標位置(k,j),問是否能到達這個位置,類似迷宮的算法

總結
感覺伴魚的面試目的是問倒你,很多次討論問題,我說你有什麼看法或者正確答案的時候,面試官就讓我回去自己上網搜一下,或者給出的方案,經不起我的推敲,我問上兩三個問題,面試官反而有點語塞,感覺很奇怪。不過公司有自己的考量,最後給的薪資不是很滿意,就沒有去,二面面試官給我的體驗還是非常不錯的,考慮全面,而且也有深度。

  1. 最右
    筆試題
    Android中的引用關係

自定義view步驟

activity生命週期

一面
介紹最右的現狀

常用的播放器,以及優缺點

opengl的繪製流程

音視頻編解碼的流程

二面
在抖音做的工作

性能優化,包體積優化,冷啓優化,卡頓優化的一些實現方案

mvc mvp mvvm的區別,以及自己實現的輕量級mvvm的原理

編解碼的相關知識

ijkplayer的優缺點,以及是否看過相關源碼

flutter的探討

總結
總體來說面試流程中規中矩,但是面試官的問題並不是很全面,更加關心的是自己的關心的領域,對於我提出的問題(大前端和flutter),見解也僅僅是需要對新技術保持一定的敏感度,後面hr讓我去跟cto再談一輪,因爲考慮到各個方面的因素,就直接拒絕了。

  1. BIGO
    BIGO是YY旗下的一個公司,目前剛剛收購了一個海外的直播產品,而且將來會把業務放到北京,還是想做一些事情,員工福利也是不錯的。由於現在主要的人員還是在廣東,前兩面都是電話面試

一面
多線程怎麼保證線程安全,violated、sychronized、reenterLock,這三個鎖的原理以及區別,JVM是怎樣實現sychronized線程安全的。

HashMap的實現原理,put()原理。hash衝突,resize,1.8的改動,什麼是紅黑樹,優點。

ui優化,主要從檢測和優化兩個部分說明,優化又分爲通用的優化,和改變繪製流程的優化。

jvm的介紹,內存介紹,gc等

binder機制

二面
hashmap是否線程安全,concurenthashmap實現原理,1.8之後有什麼改變

播放透明的mp4的原理

冷啓優化和ui卡頓的監測和優化

thinker實現插件化的原理,我們使用什麼什麼實現熱更新,熱更新的通用方案,以及優缺點

三面
介紹自己之前的工作經歷,在華爲做了什麼,爲什麼離開華爲,在抖音都做了什麼工作

實現mp4播放alpha視頻的原理

是否使用過kotlin,kotlin的一些特性

內存泄漏和oom怎麼產生的,內存泄漏的監控,leakcanery的實現原理

看過哪些第三方框架的源碼,具體的實現原理。retrofit、okhttp和eventbus等

總結
BIGO一二面還是偏基礎的知識,並沒有很深或者很偏的問題,三面面試官是之前騰訊的大佬,面試更多的我做過的項目討論和架構的問題,以及其他方面的一些問題,整體感覺還是比較好的,hr小姐姐是廣東人,說話的聲音很好聽,也很真誠。

  1. 音娛科技
    主要做的日本的直播產品,公司並不大,創始人好像也是頭條出來的,各種福利制度和頭條進本類似。

一面
activity生命週期 以及各個函數的含義

activity task的四種類型

fragment的生命週期

啓動server的兩種方式

intent傳輸數據的大小限制

binder的原理

activity的啓動流程

hashmap實現原理,1.8的改動,紅黑樹概念

合併兩個有序的鏈表

二面
爲什麼離開抖音

組件化實現方案 spi的缺點,怎麼使用字節碼注入

Dex的組成,爲什麼每個dex會有65536的限制

還有好多,時間太長記不太清楚了

總結
面試技術應該是通過了,最終卡在薪資,可能我要的太高,公司可能覺得依照我現在背景,性價比不高,就沒談下去,後面跟其他公司聊的時候,又瞭解了一些這個公司的情況,據說年終獎特別少,很多人在年後都跳槽了。

  1. 小紅書
    一面
    Activity的生命週期、fragment的生命週期,onRestart()什麼時候調用

service的兩種啓動方式,service的生命週期

binder機制

進程保活:1.防止進程被殺 2.殺死後再拉起,詳細的答案網上搜一下,這裏就不列舉出來了

app的包體積優化,lint、proguard、andresguard原理,字節碼注入,刪除R.java的變量,刪除access$001方法,壓縮圖片資源和使用redex等。

二面
自我介紹

對JNI和C++瞭解嗎?基本不瞭解,就略過了

Activity的,每個Mode的含義,Activity的啓動流程

怎麼樣實現MP4播放alpha的視頻,編解碼的一些流程,NV20、YUV、RGB一些概念,SurfaceView和TextureSurfaceView的區別

組件化的實現,都有什麼技術方案,優缺點

使用數組實現一個隊列,有和兩個函數,而且需要考慮擴容

三面(業務線負責人)
介紹自己,介紹在抖音做過的事情

哪兩件事情做得最有成就感

怎樣重構代碼,基本的6大原則,詳細討論每個原則的含義,使用過的設計模式

假定場景,接口定義的有缺陷,第二版需要修改,是增加還是直接修改,以及還有沒有其他的方案,怎麼去做,爲什麼,這個是開放的題,結合設計原則,以及真實的情況和自己的一些例子說明即可

四面(Android負責人)
介紹自己,爲什麼離開抖音

mp4播放alpha視頻的實現方案,詳細解說

跨部門合作,具體的一個例子,怎麼去溝通,假設一個例子,用最恰當的方式去溝通。

怎麼向上管理以及向下管理

五面(類似VP級別)
對技術選型的看法,flutter、c++、java、kotlin,核心是解決問題

是否會使用kotlin,優勢,以及在項目中真正帶來的收益

組件化,依賴版本號不同的解決辦法

插件化,一些實際問題的,具體是什麼記不太清楚了

總結
小紅書的裝修真是豪,辦公環境特別棒,但是面試流程有點多,足足面了5輪,不過總體來說技術還是很不錯的,不論是廣度還是深度,尤其最後一面,專門從上海飛來面試,十分榮幸,從這點就能看出公司對人才的重視程度,是一個值得加入的公司,hr小姐姐人美也真誠。

  1. 餓了嗎
    一面
    包體積優化,Lint、proguard、andResGuard的原理,以及抖音做的一些包體積優化的方案

線程和線程池的討論,爲什麼要用線程池,線程池各個參數的含義,如果隊列滿了會發生什麼,爲什麼線程池的數量是cpu核數+1

好吧,記不起來了

二面
自我介紹

線程安全的方式,sychronized和violated的區別

怎麼自定義Transform、自定義Task,Task之間怎麼依賴,大致順序是什麼,增量編譯的概念,異步加快文件的讀取,ASM接口的使用

cookie、session、token的含義和區別,這裏我確實不熟悉,就直接說我不太清楚了。

三面
自我介紹

在抖音都做過什麼事情,相關的幾個方向深入討論一下

對於架構的思考,怎樣設計一個好的架構,6大設計原則,分別說明一下

用過什麼設計模式,爲什麼要用設計模式,對於設計模式的思考

怎樣提高開發效率,較少溝通成本,實例說明下

爲什麼要引入kotlin,優缺點

以後的規劃

四面(交叉面)
介紹自己,爲什麼離開抖音

音視頻的相關知識,NV20,YUV,RGB的關係,爲什麼mp4的壓縮率比webp的動畫要高,編解碼的流程,通用的編碼格式,軟硬解的區別。

View的繪製流程,硬件加速的原理和軟件繪製的區別,以及相關的view的優化

總結
總體來說面試體驗還是不錯的,三面面試官對於職業發展和新技術的見解都是非常深刻,也給與了我很多建議。

  1. 美菜網
    一面
    動畫實現的方式,幀動畫和屬性動畫的實現原理

一張圖片加載到手機內存中真正的大小是怎麼計算的

OOM產生的原理,內存泄漏是由於什麼引起的,GCRoot有哪幾種類型,JVM等

一個二分查找的變形題,具體的題目記不清楚了

爲什麼要做組件化,組件化的實現方案都有什麼,優缺點

Activity的啓動流程

View的繪製流程,從VSYNC信號開始

二面
性能優化,包體積優化,R.java優化,access$xx方法優化,資源優化原理

MVVM是什麼,我自己做的輕量級的MVVM的實現方式,優點是什麼

看過什麼第三方的源碼,retrofit原理,動態代理和靜態代理的區別,是否使用反射,okhttp的原理,Http和Https的區別,Https的socket security layer的握手,EventBus的原理,3.0的區別,APT的使用以及怎樣處理字節碼(ASM、javaassit、BECEL等)

總結
美菜網真的是好亂呀,面試人感覺有幾十個,現在美菜網擴張這麼厲害嗎?我面試的時候我旁邊的哥們也在面試,真的是很嘈雜,不過面試官的基礎還不錯,看過一些源碼,但是並沒有問到什麼特別好的點,對整個新技術的見解和對我的建議(一般會問面試官一些對於新技術例如flutter看法,和對我的一些建議)感覺不是很深,跟hr談完後就離開了。

  1. 愛奇藝
    一面
    從Activity A跳到Activity B的生命週期的調用過程,如果是異步進程呢

冷起優化,systrace怎麼使用,實現原理

ANR是什麼,怎麼上報ANR,有些手機拿不出,有些手機拿不出anr/traces.txt,怎麼查找ANR問題

插件化的原理,Activity的啓動流程,hook點

一個類,內部有一個鏈表的數據結構,實現和的函數

二面
介紹工作經驗,爲什麼離開抖音

HashMap的實現原理

在抖音做的工作,主要說了ui優化和冷起優化兩個部分,擴展開來,討論了很多相關的知識點

手寫消費者生產者模型的代碼

總結
這次面試的是奇異果,並不是愛奇藝app,因爲我還是想做app,二面之後,我就跟面試官說了我的想法,就沒必要聊下去了,就直接走了。

  1. 快手
    一面
    handler介紹,爲什麼阻塞不會造成anr,屏障消息,產生內存泄露原因,handler內存泄露的引用鏈

事件攔截機制,view的繪製流程

android的系統渲染原理,renderthread的解釋,三緩衝機制播放透明mp4的原理,surfaceview和textureview的區別

opengl的繪製流程,texturesurface是什麼,頂點着色器和片元着色器各自作用,VOB是什麼

一個無序的int數組,給一個target數字,找出數組中兩個數字相加爲target,並輸出座標

二面
二面面試官是facebook回來的,面試風格的確和之前的面試官討論不一樣

hashmap的實現原理,怎樣找到index,size爲什麼是2的倍數,怎樣resize,resize過後,之前的hash衝突還存在嗎?currenthashmap的實現原理

怎樣保證多線程的安全,什麼是樂觀鎖,怎麼使用

設計一個發送語音模塊的架構,需要寫出所有接口函數,並且需要詳細說明,可能面試官更加在意設計能力,這裏討論的時間非常長。

view的繪製流程,onMeasure、onLayout、onDraw,各個參數是什麼含義,尤其是widthMeasureSpec、heightMeasureSpec以及對應的AT_MOST、EXACTLY和UNSPECIFIED

數組中存有1-3的三種數字,例如[1,2,3,1,2,2,1,3,3],將其排序爲[1,1,1,2,2,2,3,3,3],要求時間複雜度,後續將內容變爲一個對象,繼續排序

三面
工作經歷介紹,爲什麼離開抖音

mp4播放alpha視頻的原理,與其他方案的對比,收益點是什麼

"之"字形打印二叉樹

1~100盞燈,都是亮的,第一次將能被1整除的數的燈按下,變暗,第二次將能被2整除的數的等按下,變亮,第三次將能被3整除的數的等按下,變暗…第100次將能被100整除的數的燈按下,問,最後有多少盞燈是亮的。

總結
總體來說面試官的技術還是很厲害的,二面面試官的背景很好,思路也獨特,有點外企風格。三面面試官比較注重算法,和解決問題的思路。整個面試流程真的是不太友好,三次面試去了三次,而且前兩次都是在茶水間,一直說會議室訂不到,環境特別嘈雜,而且前兩次都是臨近飯點,茶水間送飯更是雜亂,感覺快手效率和環境有一些混亂(個人面試感覺),但是不能否認快手在2018年的成績還是很好的,尤其是直播的營收還是相當的不錯。

  1. Airbnb
    由於Airbnb面試了七輪,而且很多同學都想看,那我就單獨寫一篇關於Airbnb的面經,正在整理中,整理好後會把連接發出來,歡迎關注

  2. 右劃
    時間真的是有點長,記不太清楚了,只能記個大概,一共三面,就不分開寫了。

抖音做了什麼

Activity的啓動流程

手寫LruChache

怎麼播放一個alpha的mp4視頻

進程間的通訊方式,Binder的機制,爲什麼不使用Socket

Activity的啓動模式,進程間啓動是否不同

總結
右劃真的是一家非常不錯的公司,有一件事情就體現了整個公司的價值觀:由於我當天去公司接待的人比較多,二面和三面中間大概有兩個小時的空檔,我其實挺不滿意的,跟hr反饋了這個事情,hr立馬就跟我解釋了事情的原因,並且立馬跟我道歉了,後面cto還專門爲這個事情跟我說了原因。雖然後面沒有去這個公司,但是我還是很欣賞的,從公司層面,公司的定位很明確,而且有自己的核心技術。從個人來看,公司也是非常人性化,管三餐有房補而且有問題及時改正,我覺得大家可以來看看。

HR面總結
在大多數互聯網公司內(除了外企),到了HR面,基本上已經定下來,正常的聊聊就能發offer了,只要別太“個性”,或者三觀異於常人就能收到offer,大體就是一個積極樂觀的態度。有幾點需要注意下:

不要說前公司和前leader的壞話

對於爲什麼離開原公司,標準答案是目前公司不適合現有的自身發展,尋求更好的機會,(當然大部分都是因爲錢 心知肚明就行,不用說出來)

展現自己積極樂觀和樂於助人的一面

注意以上幾點大體就沒問題了。ps:Airbnb的文化面非常重要,據說20%的面試者在這個環節中被刷掉。

討論
我會討論幾個話題,當然都是從我認知出發,並不一定對,歡迎大家一起探討。

面試
面試過程其實大部分時候是,面試官或者公司是主導方,大部分的節奏是跟着面試官走,但是我覺得面試其實就是一個相互探討的過程,不僅是公司在選擇你,你也在選擇公司、以後工作的同事和leader。所以我這次面試中,更多的是和面試官探討,也會反問面試官一些問題,不僅僅是最後面試官說可以問他幾個問題,在面試過程中就會詢問一些,優秀的面試官會跟你探討,並且討論出一個合理的方案或者正確的答案,整個過程非常愉悅,相互都學習到了,但是有一些面試,則不太友好,問道的問題總是說自己回去百度一下,這個很讓我無語。

這次最大的收穫就是跟60多位面試官的交流,更加讓我認清我自己,認清自己的長處、短板和以後的規劃,和對做人做事的看法,在這裏真誠的感謝60多位面試官。

互聯網寒冬
對於這個話題,從我自身的角度而言有一些感觸,從2018年開始互聯網就一直有寒冬的說法,各大互聯網開始裁員、縮減HC甚至對碼農的年終獎下手(辛辛苦苦一年,就指望年終獎~),當然最近確實環境有一些波動,但是遠沒有網上傳的寒冬已至那麼嚴重。從我的面試結果來看就知道,互聯網並不是寒冬,只不過是更加理智,對所有的面試者來說要求的更高,所以我們更加要注重自身能力的培養,這並不是說我們要全身心的投入到刷算法,背理論知識等,我們更加註重自己的理論知識怎樣能夠爲公司、產品帶來更大的價值,從軟實力方面來說,不僅要把事情做好,更要做好向上管理和向下管理。個人建議:想好爲什麼要跳槽,無腦跳是最不好的情況,如果一定要跳槽,最好的情況是騎驢找馬,不要裸辭,跳槽需謹慎!!跳槽需謹慎!!跳槽需謹慎!!

學歷是否重要
我的答案是重要,我就是學歷的受益者,只要投遞出的簡歷都會邀請面試(除了一些對工作年限限制非常嚴格的企業,hulu)。當然,在互聯網的圈子中,核心是你本身的技術,但是有多少人的技術能達到逆天或者非常牛逼的地步,如果你是這樣的人,啥都不用說了,但是我覺得絕大部分的程序員都是普通人、平常人,不要說什麼3年以後公司就不看學歷了,學歷是一輩子的事情,那些高考能夠碾壓你的人,出了社會只要他們願意,照樣能碾壓你,你努力,你拼命,別人也不會睡大覺等你,所以,能提升自己的學歷,還是要儘量提升的。

大公司 VS 小公司
“大公司擰螺絲、小公司獨當一面,進步更快”,我不太認同這句話,當然具體情況具體分析,每個人的情況不同,但是我還是覺得大家能去大公司還是儘量去大公司,原因我總結了以下幾點:

鍍金,這一點我相信大部分同學都是贊同的,我就不贅言了。

知識的深度和積累,在大公司你能學到的東西更深和更加系統,而且可以有時間自己去思考和學習,尤其對於工作時間不長的同學。

和優秀的人一起工作,大公司碰到優秀同事的概率更大,像我這樣的普通人其實都是在模仿和學習,正是由於身邊有了優秀太多的人,纔會有危機感,纔有機會跟着他們去學習,學習他們怎樣學習、怎樣思考問題甚至怎樣爲人處世。在華爲中有到鑫和李橋,在抖音中,有夏老師、江老師還有樂華大佬等等,太多人,我從他們身上學到太多的東西,有一些能讓我受益終身。

選擇
選擇同樣是非常重要的,選擇的首要前提是你要有很多機會,不然你都沒機會怎麼選擇,在很多機會擺在你面的時候,一定要認真思考,不要衝動,想好自己需要的,多聽別人的意見,最後自己決定。我們不能保證每一次選擇都是正確的,但是能保證我們是不後悔的,遇事要冷靜,多思考。

這裏說的選擇不僅僅是選擇去哪個公司,從事什麼方向,還有與什麼樣的同事工作,選擇什麼樣的leader,甚至是生活中的事情,網上說一個人要有一些成就,需要具備下面幾點,我覺得非常的對:

你自己要行

有人覺得你行

覺得你行的人也行

生活與工作
其實這個話題對我來說有一些困惑,“工作是爲了更好的生活”,這句話是非常正確的,但是作爲一個沒有背景、父母幫你付不起首付的普通人來說哪裏來的享受生活,唯有不斷努力、不斷的進步纔有更好的物質回報,北京是全中國的人才聚集地,在工作的三年中,我不敢有一絲的懈怠,因爲身邊比我條件好,能力比我強,年齡比我小的人太多了,不論在哪裏資源的分配都是二八原則。有很多身邊人說我是苦行僧,不懂得享受生活,太無趣,的確我不否認,但是我知道唯有這樣,我才能爲我的父母、愛人以及以後的孩子撐起一片天,反過來講,這些又是我的動力。感慨有點多了,這個話題全看自己,我滿意目前的一個狀態。個人拙見,大家看看就行。

最後
感謝大家能耐着性子,看完我囉哩囉嗦的面經,以上僅是個人的觀點。感覺兩年稍縱即逝,在這兩年中成長了很多,感謝所有幫助過我的人。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章