三年開發經驗,抖音離職後,拿到Airbnb、快手、小紅書、猿輔導等15家公司的offer

前言

我這篇文章並不是簡單的描述一些面試中的題,或者總結一些Android的知識,而是想記錄我整個的想法和準備的過程,以及一些心得體會,讓大家更加全面的去看待工作、跳槽和生活(從我的角度,當然肯定有不合理的地方,大家借鑑就好),之前17年跳槽寫過的一篇文章 一年Android工作經驗,今日頭條 阿里 百度 網易 美團 小米 快手面經

在字節跳動的兩年時間中見證了抖音從百萬日活到2.5億、團隊從10人到100多人的過程,技術上不同時期的選型以及迭代、沉澱和更替。項目上經歷了一個工程到模塊化再到組件化最後插件化,深刻理解項目不同階段和不同體量的時候技術框架的選型。流程上不同階段不同的方案,一直在探索最大的效率的協同開發。產品上從不斷試錯到穩步發展的過程,也就是數據驅動業務的過程。
字節跳動是一個偉大的公司,優秀的同事真是數不勝數,我在其中只是一個菜鳥,仰望各種大佬,不管是從技術方面還是做人做事的方面都學到了很多、成長了很多。在抖音的兩年十分感謝我的同事、領導對我的幫助和提攜,尤其是亨惠、火火老師、馬老師、江老師、夏老師、將軍、若雷、樂華、龍博等等一羣大牛,還有漂亮的pm小姐姐佳鑫,和帥氣的設計師鼕鼕,只能說我是何其的幸運,能夠和一羣優秀的同事一起共事、見證一款偉大app的崛起。

這次面試了以下幾個公司(不是面試順序):
Airbnb快陪練探探猿輔導趣頭條、脈脈、動動、瓜子二手車伴魚最右BIGO音娛快手小紅書美菜網、微軟、亞馬遜、Ihandy、餓了嗎愛奇藝右劃

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

爲什麼要跳槽

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

  1. 錢沒給到位,其實所有的人對自己的評價都是比自己真實的水平要高一些,這就導致,大部分人認爲自己現在貢獻很大,老闆應該加薪,尤其是看到一些同事做的不如自己(可能是自己認爲),工資拿的和自己一樣,甚至比自己高,那就更加有錢給的少了的感覺。
  2. 做的事情是否有價值或者說是否有持續盈利的趨勢,這個很重要,一個公司的產品不盈利沒前景,就算給你開不錯的工資,作爲一個不想混吃等死的人來說,都不想繼續再待下去。
  3. 機會,作爲一個已經有3年工作經驗的人來說,這個時候更加需要的是一個機會,能夠證明自己,給公司帶來更大的價值,完成進一步的突破,如果當前的公司並不能給你這個機會,那麼你就需要考慮跳槽了。

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

職業規劃

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

  1. 技術經理
  2. 架構師
  3. 專項領域的專家

薪資福利

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

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

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

準備

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

刷題

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

  • LeetCode,刷了300+的題,這裏的刷並不是指僅僅只刷一遍,我來回刷了四遍,手寫了一遍(寫了200多道),保證我看到題目或者類似的題目,我能第一時間想出最優的解題思路。
  • 《劍指offer》,這本書真的很棒,總結的很到位,以及每個階段的思路寫的都很詳細,我是百看不厭,大概50+題,多看幾遍,這能做到舉一反三。

基礎知識

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

這個是我的知識體系的總綱,下面放出全部的思維導圖

由於整張圖片太大,只能壓縮,需要的同學,可以到我的博客中留言,我會發高清圖片到你們的郵箱
CSDN: https://blog.csdn.net/a296777513
簡書:https://www.jianshu.com/u/68aad070850c

簡歷

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

  1. 個人信息:姓名、出生日期、教育背景、博客地址、github地址、聯繫方式(手機、郵箱和微信號)
  2. 工作經歷:畢業後待過哪些公司,一般是倒序,項目儘量精簡明瞭,可以參考SMART原則
  3. 專業技能:自己熟悉的一些技能,這個爲什麼我寫到最後,因爲對於工作三年的同學來說,面試官更加註重的是你的項目經歷,大部分面試都是看你的項目經歷來提問。

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

英語

其實這個過程對於大部分同學來說是不用準備的,由於我這次想去外企試試,而且,英語在我們的日常生活中也越來越重要,不論是看英文文檔、電影、外出旅遊,都成爲了必不可少的一種技能,所以我在2018年中旬就開始準備學習英語了,我學習英語的方式有下面三種

  1. 薄荷閱讀,到寫這篇文章爲止已經堅持了259天,每天10分鐘,薄荷閱讀一般在下班的路上聽讀,這個確實不錯,而且可以選擇適合自己水平的小說,每天就當看小說,這個過程還是很愉悅和放鬆的(感覺又回到我大學,看玄幻和武俠小說的時候,誅仙、慶餘年、雪中悍刀行、將夜以及金庸的小說,鹿鼎記我就看了3遍),目前看了黑駿馬、小王子、納尼亞傳奇、傲慢與偏見、真愛至上(遇見你之前)和真實人類(正在讀)
  2. 百斬詞,堅持了214天,每天10-20分鐘,在午休的時間。
  3. 流利說,堅持了188天,每天30-40分鐘,在午休時間(頭條是12:00-14:00),由於需要跟讀一些文章,一般會找一個小的會議室。

整個過程真的很枯燥,由於目標很模糊,只是學好英文,可以簡單對話,但是這個目標太寬泛和不明確,中途好幾次想要放棄,但是想了想還是堅持了下來,得出的結論是,做一件事情前要設定一個明確的目標。

收穫:單詞量增加了很多,閱讀的水平也提高了,可以無障礙的閱讀大部分的英語文檔和英文小說。聽力增長的也比較快,一般的文章,不看文字,大致能挺動,但是口語就是一般了,由於流利說只是跟讀或者背誦,提高的並不多,但是糾正了一些讀音。

鍛鍊

“身體是革命的本錢”,這句話我本人十分認可,就算你技術世界第一,如果身體不好,那麼也是空談,我一直堅持着健身,基本上每天早上半個小時和晚上回到家半個小時,跟着Keep來做運動。

  1. 每天早上半個小時和晚上回到家半個小時,跟着Keep來做運動
  2. 週六日,如果沒事,游泳2個小時,將近4公里。

前一段時間體檢,我的尿酸過高,這是是由於肉類、豆製品以及海鮮吃的過多(字節跳動的伙食真是太好了,每天各種肉類,每次都忍不住要多夾一些),而且不運動,我這個就納悶了,我每天都在堅持運動呀,醫生告訴我,我做的是無氧運動,會產生肌酸,和尿酸還會產生競爭關係,由於都是通過腎來分解,中間也有大概半年停止了游泳,所以我就剋制吃肉了,而且又恢復了游泳,過了1個月檢查,就減下來了。

大家一定要擠出時間來鍛鍊,身體好才能工作有精神,而且身體是自己,一定要珍惜。

面試

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

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

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

1. 快陪練

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

一面

  1. MVC、MVP和MVVM的原理和區別
  2. 設計的六大基礎原則
  3. 使用UML畫一下訪問者設計模式

二面

  1. 先聊了聊爲什麼離開現在公司,畢竟現在這麼火
  2. 我做的項目中的一些解決方案,組件化、字節碼注入、包體積的極致優化
  3. 直播的架構設計

三面

  1. 設計一個上傳日誌的大小,涉及到,性能、文件大小、怎樣壓縮、時機、TopK問題等
  2. 聊了聊在字節跳動做的事情

總結

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


2. 探探

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

一面

  1. OpenGL一些知識,頂點着色器、片元着色器的工作原理,什麼是VBO(這個沒想起來),以及shader的一些簡單問題
  2. View的事件傳遞機制
  3. 包體積優化
  4. JVM相關知識,Dalvik和ART的區別
  5. 組件化的實現方案
  6. 算法題,ViewGroup的層級深度,轉換爲二叉樹的層級深度

二面

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

  1. RecyclerView防止內存OOM的一道題,充分利用自身的緩存機制,可能我始終沒理解問題所在,雖然給出解決方案,但是面試官不滿意,太繁瑣
  2. 討論LRUcache的實現和時間複雜度

三面

cto面試

  1. 聊了一下抖音發展的過程中我的角色,做過什麼事情,有什麼收益
  2. 在華爲的一些經歷,爲什麼離開華爲
  3. 聊了一到算法題,查找兩個字符串的交集和字符串1中有字符串2中沒有的問題。

四面(不是一天)

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

總結

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


3. 猿題庫

我是在boss投遞的猿題庫的Android開發崗位,結果hr小姐姐把我當成了server開發,先進來一位server的童鞋,讓我寫了一到算法題(二叉樹的鏡像),然後看看我的簡歷問我,是不是面試android的,我說是,她尷尬的說我是server面試官,然後趕緊與hr溝通,調整成爲Android。
猿題庫面試應該是有硬性的時間指標,應該是每一輪面試都要差不多1個小時,並且會出1~2道算法題。

一面

主要聊了下面幾個方面

  1. 熱修復,主要說了ClassLoader的方式和Rubost的插裝方式,重點介紹了Rubost的原理。
  2. 實現直播禮物的一些技術選型,和播放帶有alpha通道MP4的解決方案
  3. 怎麼實現字節碼注入
  4. 抖音組件的探索,SPI到字節碼注入,優缺點。
  5. 接下來就是兩道算法題
    1. String字符串的數字相加
    2. 使用三個線程順序打印有序的數組
  6. 提問環節

二面

  1. 包體積優化:靜態Lint,Proguard,AndResGuard和刪除R.java中的所有字段,刪除access$方法,在gradle的transform階段將壓縮png和jpeg,使用google開源的redex方案,每種方案的原理以及優缺點
  2. MVVM-livedata的實現原理
  3. 屬性動畫的原理,這裏沒看過,不太清楚
  4. Kotlin寫一個let的擴展函數,大體寫了一下代碼。
  5. 算法,可能是我寫的太慢了,所以就只有一道
    1. 給定一個有序的數組和目標數,找出與目標數最近接的index,要求複雜度是log(n)的時間複雜度

三面

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

  1. 二叉樹的深度和廣度,要求一次遍歷
  2. 給定一個二叉樹和一個目標數,在二叉樹中是否存在一條路徑的所有節點的和與目標數是相同的case,並且打印。

總結

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

整個面試環節總體來說還可以,但是就是效率不高,也可能是我運氣不好,我是4:10到猿題庫的,然後在前臺等了20所分鐘,hr纔來,說了剛纔在電話會議耽誤了,這個理解,然後等待面試又等了10多分鐘,來了server的面試童鞋,寫了道算法題,重新調整到Android面試,又等了15分鐘,真正Android面試開始在5:10左右,面試完成後基本到了8:30了。
對自己的表現基本滿意,就是好久不手寫代碼,有點生疏,寫的比較慢,大多數問題和答案都得到了面試的認可,對一些知識點沒有複習到,其實我是這樣認爲的,並不是所有的問題或者知識都需要知道,你只需要有1~2個方面瞭解的很透徹,得到面試官的認可就行。


4. 趣頭條

一面

  1. 在抖音上顯示自己做的功能,框架的搭建,實現原理,所做的優化點等。
  2. 組件化的實現,爲什麼做組件化,不同實現的優缺點。
  3. hashmap的實現原理
  4. view的優化,減少層級,異步加載,x2c框架引入,優缺點,textview的優化。
  5. mp4播放alpha視頻實現的原理
    一面面試官大概聊了1個小時左右,沒讓我寫算法,細究原理和細節,非常仔細。

二面

  1. 冷啓優化的一些方案。
  2. 數據驅動業務的理解,怎麼做,和pm產生分歧怎麼解決。
  3. 我所有做的優化的收益是什麼,有什麼數據支撐。
  4. 事件分發機制,舉了一個具體的例子來解決。
  5. http的一些問題,1.1和2.0區別,心跳機制,https怎麼建立鏈接,怎麼進行數據加密等。
  6. 爲什麼離開抖音,職業發展,訴求等。
    聊了大概一個小時,面試官的思路相對獨特,不是爲做技術而做技術,技術始終要服務於業務,我非常認可。

總結

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


5. 瓜子二手車

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

一面

  1. 聊了一下項目中做過的東西,字節碼注入相關知識,transform優化,mp4禮物實現等
  2. 從桌面點擊icon圖標開始,整個啓動activity的啓動過程
  3. Binder的實現原理
  4. 插件化的原理,以及hook點,大概有兩個,可以網上搜索一下
  5. hashmap的實現原理
  6. 單例的實現,sychrnized的實現原理,以及雙鎖不加volatile,會不會有線程安全問題
  7. 二叉樹,讀取每一層最右邊的節點

二面

  1. 聊聊大概履歷,以及在華爲、字節跳動都做了什麼,爲什麼要離開。
  2. 職業規劃,怎麼帶領團隊
  3. 代碼設計的基礎原則,以及用UML畫出工廠模式
  4. 將兩個有序的鏈表合併成一個有序的鏈表,遞歸和循環兩中方式
  5. 時間分發機制,並且需要從Android的sensor開始到應用層,我只知道從Activity開始的流程。
  6. 聊操作系統Unix,汗顏,我知之甚少。
  7. 對新技術的看法(flutter),瓜子二手車也已經開始在項目中使用fultter相關技術

三面(總監)

  1. 自我介紹,爲什麼要離開抖音
  2. 線程安全的問題,sychronized和viloated的使用
  3. 實現一個CAS(樂觀鎖)的方法
  4. HashMap的實現原理,怎麼優化內存佔用,優化resize的過程,這個是開放的問題

四面(VP?)

  1. 自我介紹,在抖音做了什麼
  2. 在抖音做的比較好的兩件事情
  3. 設計一個美團的框架,組件化

總結

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


6. 伴魚

筆試

  1. 雙鎖單例,爲什麼要價volatile
  2. 內部類訪問外部類
  3. 函數值傳遞的一些題
  4. 子類繼承父類,個字都有靜態變量、靜態代碼塊、構造函數,執行的順序
  5. int數組,除了一個數字外,其他數字都出現兩次,找出這個只出現一次的數字

一面

  1. 圖片壓縮原理,以及在transform階段進行的必要性,討論的還挺激烈
  2. 內部類引用外部函數的參數,爲什麼要final定義,值傳遞
  3. 判斷一個應用是否切到後臺
  4. 組件化的探討,假設場景,怎麼處理
  5. 插件化的實現方式,以及對相應的場景進行討論

二面

伴魚的架構師

  1. 一個疑難雜症,也是自定義插件,討論是否有更好的方式,最後結果是,他想了一個比較巧妙的方式,沒有實踐過,但是告訴我可以,保留自己的意見。
  2. 字節碼相關知識,ASM以及MD5的實現原理,png的壓縮原理,這裏比較亂,就是說到哪問道哪,比較發散。
  3. 對成爲架構師的幾點看法

三面

  1. mp4實現alpha通道的原理,優缺點,收益是什麼
  2. m*n的二維數組,做(0,0)出發,可以上下左右走,0爲暢通,1爲阻塞,目標位置(k,j),問是否能到達這個位置,類似迷宮的算法

總結

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


7. 最右

筆試題

Android中的引用關係
自定義view步驟
activity生命週期

一面

  1. 介紹最右的現狀
  2. 常用的播放器,以及優缺點
  3. opengl的繪製流程
  4. 音視頻編解碼的流程

二面

  1. 在抖音做的工作
  2. 性能優化,包體積優化,冷啓優化,卡頓優化的一些實現方案
  3. mvc mvp mvvm的區別,以及自己實現的輕量級mvvm的原理
  4. 編解碼的相關知識
  5. ijkplayer的優缺點,以及是否看過相關源碼
  6. flutter的探討

總結

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


8. BIGO

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

一面

  1. 多線程怎麼保證線程安全,volatile、sychronized、reenterLock,這三個鎖的原理以及區別,JVM是怎樣實現sychronized線程安全的。
  2. HashMap的實現原理,put()原理。hash衝突,resize,1.8的改動,什麼是紅黑樹,優點。
  3. ui優化,主要從檢測和優化兩個部分說明,優化又分爲通用的優化,和改變繪製流程的優化。
  4. jvm的介紹,內存介紹,gc等
  5. binder機制

二面

  1. hashmap是否線程安全,concurenthashmap實現原理,1.8之後有什麼改變
  2. 播放透明的mp4的原理
  3. 冷啓優化和ui卡頓的監測和優化
  4. thinker實現插件化的原理,我們使用什麼什麼實現熱更新,熱更新的通用方案,以及優缺點

三面

  1. 介紹自己之前的工作經歷,在華爲做了什麼,爲什麼離開華爲,在抖音都做了什麼工作
  2. 實現mp4播放alpha視頻的原理
  3. 是否使用過kotlin,kotlin的一些特性
  4. 內存泄漏和oom怎麼產生的,內存泄漏的監控,leakcanery的實現原理
  5. 看過哪些第三方框架的源碼,具體的實現原理。retrofit、okhttp和eventbus等

總結

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


9. 音娛科技

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

一面

  1. activity生命週期 以及各個函數的含義
  2. activity task的四種類型
  3. fragment的生命週期
  4. 啓動server的兩種方式
  5. intent傳輸數據的大小限制
  6. binder的原理
  7. activity的啓動流程
  8. hashmap實現原理,1.8的改動,紅黑樹概念
  9. 合併兩個有序的鏈表

二面

  1. 爲什麼離開抖音
  2. 組件化實現方案 spi的缺點,怎麼使用字節碼注入
  3. Dex的組成,爲什麼每個dex會有65536的限制
  4. 還有好多,時間太長記不太清楚了

總結

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


10. 小紅書

一面

  1. Activity的生命週期、fragment的生命週期,onRestart()什麼時候調用
  2. service的兩種啓動方式,service的生命週期
  3. binder機制
  4. 進程保活:1.防止進程被殺 2.殺死後再拉起,詳細的答案網上搜一下,這裏就不列舉出來了
  5. app的包體積優化,lint、proguard、andresguard原理,字節碼注入,刪除R.java的變量,刪除access$001方法,壓縮圖片資源和使用redex等。

二面

  1. 自我介紹
  2. 對JNI和C++瞭解嗎?基本不瞭解,就略過了
  3. Activity的launchMode,每個Mode的含義,Activity的啓動流程
  4. 怎麼樣實現MP4播放alpha的視頻,編解碼的一些流程,NV20、YUV、RGB一些概念,SurfaceView和TextureSurfaceView的區別
  5. 組件化的實現,都有什麼技術方案,優缺點
  6. 使用數組實現一個隊列,有void add(int val)void pop()兩個函數,而且需要考慮擴容

三面(業務線負責人)

  1. 介紹自己,介紹在抖音做過的事情
  2. 哪兩件事情做得最有成就感
  3. 怎樣重構代碼,基本的6大原則,詳細討論每個原則的含義,使用過的設計模式
  4. 假定場景,接口定義的有缺陷,第二版需要修改,是增加還是直接修改,以及還有沒有其他的方案,怎麼去做,爲什麼,這個是開放的題,結合設計原則,以及真實的情況和自己的一些例子說明即可

四面(Android負責人)

  1. 介紹自己,爲什麼離開抖音
  2. mp4播放alpha視頻的實現方案,詳細解說
  3. 跨部門合作,具體的一個例子,怎麼去溝通,假設一個例子,用最恰當的方式去溝通。
  4. 怎麼向上管理以及向下管理

五面(類似VP級別)

  1. 對技術選型的看法,flutter、c++、java、kotlin,核心是解決問題
  2. 是否會使用kotlin,優勢,以及在項目中真正帶來的收益
  3. 組件化,依賴版本號不同的解決辦法
  4. 插件化,一些實際問題的,具體是什麼記不太清楚了

總結

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


11. 餓了嗎

一面

  1. 包體積優化,Lint、proguard、andResGuard的原理,以及抖音做的一些包體積優化的方案
  2. 線程和線程池的討論,爲什麼要用線程池,線程池各個參數的含義,如果隊列滿了會發生什麼,爲什麼線程池的數量是cpu核數+1
  3. 好吧,記不起來了

二面

  1. 自我介紹
  2. 線程安全的方式,sychronized和volatile的區別
  3. 怎麼自定義Transform、自定義Task,Task之間怎麼依賴,大致順序是什麼,增量編譯的概念,異步加快文件的讀取,ASM接口的使用
  4. cookie、session、token的含義和區別,這裏我確實不熟悉,就直接說我不太清楚了。

三面

  1. 自我介紹
  2. 在抖音都做過什麼事情,相關的幾個方向深入討論一下
  3. 對於架構的思考,怎樣設計一個好的架構,6大設計原則,分別說明一下
  4. 用過什麼設計模式,爲什麼要用設計模式,對於設計模式的思考
  5. 怎樣提高開發效率,較少溝通成本,實例說明下
  6. 爲什麼要引入kotlin,優缺點
  7. 以後的規劃

四面(交叉面)

  1. 介紹自己,爲什麼離開抖音
  2. 音視頻的相關知識,NV20,YUV,RGB的關係,爲什麼mp4的壓縮率比webp的動畫要高,編解碼的流程,通用的編碼格式,軟硬解的區別。
  3. View的繪製流程,硬件加速的原理和軟件繪製的區別,以及相關的view的優化

總結

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


12. 美菜網

一面

  1. 動畫實現的方式,幀動畫和屬性動畫的實現原理
  2. 一張圖片加載到手機內存中真正的大小是怎麼計算的
  3. OOM產生的原理,內存泄漏是由於什麼引起的,GCRoot有哪幾種類型,JVM等
  4. 一個二分查找的變形題,具體的題目記不清楚了
  5. 爲什麼要做組件化,組件化的實現方案都有什麼,優缺點
  6. Activity的啓動流程
  7. View的繪製流程,從VSYNC信號開始

二面

  1. 性能優化,包體積優化,R.java優化,access$xx方法優化,資源優化原理
  2. MVVM是什麼,我自己做的輕量級的MVVM的實現方式,優點是什麼
  3. 看過什麼第三方的源碼,retrofit原理,動態代理和靜態代理的區別,是否使用反射,okhttp的原理,Http和Https的區別,Https的socket security layer的握手,EventBus的原理,3.0的區別,APT的使用以及怎樣處理字節碼(ASM、javaassit、BECEL等)

總結

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


13. 愛奇藝

一面

  1. 從Activity A跳到Activity B的生命週期的調用過程,如果是異步進程呢
  2. 冷起優化,systrace怎麼使用,實現原理
  3. ANR是什麼,怎麼上報ANR,有些手機拿不出,有些手機拿不出anr/traces.txt,怎麼查找ANR問題
  4. 插件化的原理,Activity的啓動流程,hook點
  5. 一個類,內部有一個鏈表的數據結構,實現void add(Node n)void remove(int index)的函數

二面

  1. 介紹工作經驗,爲什麼離開抖音
  2. HashMap的實現原理
  3. 在抖音做的工作,主要說了ui優化和冷起優化兩個部分,擴展開來,討論了很多相關的知識點
  4. 手寫消費者生產者模型的代碼

總結

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


14. 快手

一面

  1. handler介紹,爲什麼阻塞不會造成anr,屏障消息,產生內存泄露原因,handler內存泄露的引用鏈
  2. 事件攔截機制,view的繪製流程
  3. android的系統渲染原理,renderthread的解釋,三緩衝機制播放透明mp4的原理,surfaceview和textureview的區別
  4. opengl的繪製流程,texturesurface是什麼,頂點着色器和片元着色器各自作用,VOB是什麼
  5. 一個無序的int數組,給一個target數字,找出數組中兩個數字相加爲target,並輸出座標

二面

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

  1. hashmap的實現原理,怎樣找到index,size爲什麼是2的倍數,怎樣resize,resize過後,之前的hash衝突還存在嗎?currenthashmap的實現原理
  2. 怎樣保證多線程的安全,什麼是樂觀鎖,怎麼使用
  3. 設計一個發送語音模塊的架構,需要寫出所有接口函數,並且需要詳細說明,可能面試官更加在意設計能力,這裏討論的時間非常長。
  4. view的繪製流程,onMeasure、onLayout、onDraw,各個參數是什麼含義,尤其是widthMeasureSpec、heightMeasureSpec以及對應的AT_MOST、EXACTLY和UNSPECIFIED
  5. 數組中存有1-3的三種數字,例如[1,2,3,1,2,2,1,3,3],將其排序爲[1,1,1,2,2,2,3,3,3],要求時間複雜度,後續將內容變爲一個對象,繼續排序

三面

  1. 工作經歷介紹,爲什麼離開抖音
  2. mp4播放alpha視頻的原理,與其他方案的對比,收益點是什麼
  3. "之"字形打印二叉樹
  4. 1~100盞燈,都是亮的,第一次將能被1整除的數的燈按下,變暗,第二次將能被2整除的數的等按下,變亮,第三次將能被3整除的數的等按下,變暗…第100次將能被100整除的數的燈按下,問,最後有多少盞燈是亮的。

總結

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


15. Airbnb

由於Airbnb面試了七輪,而且很多同學都想看,那我就單獨寫一篇關於Airbnb的面經,正在整理中,整理好後會把連接發出來,由於這篇文章可能會被轉載,可以到我的博客中看文章的更新。敬請期待,關注我的博客
CSDN: https://blog.csdn.net/a296777513
簡書:https://www.jianshu.com/u/68aad070850c


16. 右劃

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

  1. 抖音做了什麼
  2. Activity的啓動流程
  3. 手寫LruChache
  4. 怎麼播放一個alpha的mp4視頻
  5. 進程間的通訊方式,Binder的機制,爲什麼不使用Socket
  6. Activity的啓動模式,進程間啓動是否不同

總結

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

HR面總結

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

  1. 不要說前公司和前leader的壞話
  2. 對於爲什麼離開原公司,標準答案是目前公司不適合現有的自身發展,尋求更好的機會,(當然大部分都是因爲錢 心知肚明就行,不用說出來)
  3. 展現自己積極樂觀和樂於助人的一面

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

討論

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

面試

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

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

互聯網寒冬

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

學歷是否重要

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

大公司VS小公司

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

  1. 鍍金,這一點我相信大部分同學都是贊同的,我就不贅言了。
  2. 知識的深度和積累,在大公司你能學到的東西更深和更加系統,而且可以有時間自己去思考和學習,尤其對於工作時間不長的同學。
  3. 和優秀的人一起工作,大公司碰到優秀同事的概率更大,像我這樣的普通人其實都是在模仿和學習,正是由於身邊有了優秀太多的人,纔會有危機感,纔有機會跟着他們去學習,學習他們怎樣學習、怎樣思考問題甚至怎樣爲人處世。在華爲中有到鑫和李橋,在抖音中,有夏老師、江老師還有樂華大佬等等,太多人,我從他們身上學到太多的東西,有一些能讓我受益終身。

選擇

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

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

  1. 你自己要行
  2. 有人覺得你行
  3. 覺得你行的人也行

生活與工作

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

最後

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

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