我三年Android開發經驗,從字節跳動抖音組離職後,一口氣拿到15家公司Offer,薪資再一次直線

(文章很長,不想看面經的朋友可以直接到最後看總結)

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

image

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

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

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

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

爲什麼要跳槽

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

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

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

職業規劃

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

  • 技術經理
  • 架構師
  • 專項領域的專家
  • 薪資福利

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

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

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

準備

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

刷題

image

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

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

Android學習PDF+架構視頻+面試文檔+源碼筆記

基礎知識

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

簡歷

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

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

英語

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

  • 薄荷閱讀,到寫這篇文章爲止已經堅持了259天,每天10分鐘,薄荷閱讀一般在下班的路上聽讀,這個確實不錯,而且可以選擇適合自己水平的小說,每天就當看小說,這個過程還是很愉悅和放鬆的(感覺又回到我大學,看玄幻和武俠小說的時候,誅仙、慶餘年、雪中悍刀行、將夜以及金庸的小說,鹿鼎記我就看了3遍),目前看了黑駿馬、小王子、納尼亞傳奇、傲慢與偏見、真愛至上(遇見你之前)和真實人類(正在讀)
  • 百斬詞,堅持了214天,每天10-20分鐘,在午休的時間。
  • 流利說,堅持了188天,每天30-40分鐘,在午休時間(頭條是12:00-14:00),由於需要跟讀一些文章,一般會找一個小的會議室。
  • 整個過程真的很枯燥,由於目標很模糊,只是學好英文,可以簡單對話,但是這個目標太寬泛和不明確,中途好幾次想要放棄,但是想了想還是堅持了下來,得出的結論是,做一件事情前要設定一個明確的目標。
  • 收穫:單詞量增加了很多,閱讀的水平也提高了,可以無障礙的閱讀大部分的英語文檔和英文小說。聽力增長的也比較快,一般的文章,不看文字,大致能挺動,但是口語就是一般了,由於流利說只是跟讀或者背誦,提高的並不多,但是糾正了一些讀音。

image

鍛鍊

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

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

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

image

面試

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

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

公司:快陪練

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

一面

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

二面

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

三面

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

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

總結

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

公司:探探

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

一面

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

二面

  • 二面面試官,比較注重思維,我理解爲聰不聰明的意思,有點腦筋急轉彎的意思,要求的最簡單有效的方法。
  • RecyclerView防止內存OOM的一道題,充分利用自身的緩存機制,可能我始終沒理解問題所在,雖然給出解決方案,但是面試官不滿意,太繁瑣
  • 討論LRUcache的實現和時間複雜度

三面

cto面試

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

四面

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

總結

整體來說探探發展還是不錯,尤其近兩年要上市(和陌陌簽了對賭協議),環境也不錯,管三餐,加班不嚴重,雙休,工資也給力,但是也是由於近兩年要上市,所以要做的東西還是比較多和急,需要你有一定的能力。很尷尬的是在給我offer的第二週,探探就被Android市場下架了。

公司:猿題庫

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

一面

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

二面

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

三面

  • 三面就比較輕鬆了,面試官一直樂呵呵的,又問了一下alpha視頻的解決方案,然後聊了聊爲什麼要離開這麼火的項目,問了問我的經歷之類的,最後寫了兩道算法題
  • 二叉樹的深度和廣度,要求一次遍歷
  • 給定一個二叉樹和一個目標數,在二叉樹中是否存在一條路徑的所有節點的和與目標數是相同的case,並且打印。

總結

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

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

Android學習PDF+架構視頻+面試文檔+源碼筆記

公司:趣頭條

一面

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

二面

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

總結

趣頭條北京位於海淀,位置不靠近地鐵,需要步行一段時間,整體的環境也一般,不過效率挺高的,在面試完的第二天就給我發offer了,面試流程也相對較少。對趣頭條的營收模式看的不是很清楚,類似發錢看新聞,但是現在頭條也再做這個,趣頭條能夠搞得過頭條是個問題,如果沒有增長點,那後期的轉型是什麼?

ps:從我拿到offer到現在已經一個多月了,股價從10美金跌倒了5美金,也就是說,我如果來趣頭條,我的期權已經退水了一半,瑟瑟發抖,看來期權什麼的還是很虛呀。

公司:瓜子二手車

瓜子二手車真的是太遠了,從海淀到工作地方將近花費了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還是非常真誠的,想去的朋友可以考慮考慮。

公司:伴魚

筆試

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

一面

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

二面(伴魚的架構師)

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

三面

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

感覺伴魚的面試目的是問倒你,很多次討論問題,我說你有什麼看法或者正確答案的時候,面試官就讓我回去自己上網搜一下,或者給出的方案,經不起我的推敲,我問上兩三個問題,面試官反而有點語塞,感覺很奇怪。

公司:最右

筆試題

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

一面

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

二面

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

總結

總體來說面試流程中規中矩,但是面試官的問題並不是很全面,更加關心的是自己的關心的領域,對於我提出的問題(大前端和flutter),見解也僅僅是需要對新技術保持一定的敏感度,從公司產品來看,尤其是4月份出過一些事故,dau跌的非常厲害,好像只有100w+的日活,辦公環境也一般,後面hr讓我去跟cto再談一輪,因爲考慮到各個方面的因素,就直接拒絕了。

Android學習PDF+架構視頻+面試文檔+源碼筆記

公司: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是廣東人,說話的聲音很好聽,也很真誠。

公司:音娛科技

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

一面

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

二面

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

總結

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

公司:小紅書

一面

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

二面

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

三面(業務線負責人)

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

四面(Android負責人)

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

五面(類似VP級別)

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

總結

小紅書的裝修真是豪,辦公環境特別棒,但是面試流程有點多,足足面了5輪,不過總體來說技術還是很不錯的,不論是廣度還是深度,是一個值得加入的公司。

公司:餓了麼

一面

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

二面

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

三面

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

四面(交叉面)

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

總結

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

公司:美菜網

一面

  • 動畫實現的方式,幀動畫和屬性動畫的實現原理
  • 一張圖片加載到手機內存中真正的大小是怎麼計算的
  • 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談完後就離開了。

公司:愛奇藝

一面

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

二面

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

總結

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

Android學習PDF+架構視頻+面試文檔+源碼筆記

公司:快手

一面

  • 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年的成績還是很好的,尤其是直播的營收甩抖音直播幾條街。

HR面總結

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

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

討論

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

面試

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

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

互聯網寒冬

對於這個話題,從我自身的角度而言有一些感觸,從2018年開始互聯網就一直有寒冬的說法,各大互聯網開始裁員、縮減HC甚至對碼農的年終獎下手(辛辛苦苦一年,就指望年終獎~),當然最近確實環境有一些波動,但是遠沒有網上傳的寒冬已至那麼嚴重。

從我的面試結果來看就知道,互聯網並不是寒冬,只不過是更加理智,對所有的面試者來說要求的更高,所以我們更加要注重自身能力的培養,這並不是說我們要全身心的投入到刷算法,背理論知識等,我們更加註重自己的理論知識怎樣能夠爲公司、產品帶來更大的價值,從軟實力方面來說,不僅要把事情做好,更要做好向上管理和向下管理。

個人建議:想好爲什麼要跳槽,無腦跳是最不好的情況,如果一定要跳槽,最好的情況是騎驢找馬,不要裸辭,跳槽需謹慎!!跳槽需謹慎!!跳槽需謹慎!!

學歷是否重要

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

大公司VS小公司

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

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

選擇

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

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

  • 你自己要行
  • 有人覺得你行
  • 覺得你行的人也行

生活與工作

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

最後

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

Android學習PDF+架構視頻+面試文檔+源碼筆記

在這裏我也分享一份自己收錄整理的Android學習PDF+架構視頻+面試文檔+源碼筆記,還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習

如果你有需要的話,可以點贊+轉發關注我,然後加入Android開發交流羣(820198451)免費領取

image

image

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