博主目前從事Android開發3年,前兩年一直在抖音工做。我這篇文章並非簡單的描述一些面試中的題,或者總結一些Android的知識,而是想記錄我整個的想法和準備的過程,以及一些心得體會,讓你們更加全面的去看待工做、跳槽和生活(從個人角度,固然確定有不合理的地方,你們借鑑就好)前端
在字節跳動的兩年時間中見證了抖音從百萬日活到2.5億、團隊從10人到100多人的過程,技術上不一樣時期的選型以及迭代、沉澱和更替。項目上經歷了一個工程到模塊化再到組件化最後插件化,深入理解項目不一樣階段和不一樣體量的時候技術框架的選型。流程上不一樣階段不一樣的方案,一直在探索最大的效率的協同開發。產品上從不斷試錯到穩步發展的過程,也就是數據驅動業務的過程。java
字節跳動是一個偉大的公司,優秀的同事真是數不勝數,我在其中只是一個菜鳥,仰望各類大佬,無論是從技術方面仍是作人作事的方面都學到了不少、成長了不少。在抖音的兩年十分感謝個人同事、領導對個人幫助和提攜,尤爲是亨惠、火火老師、馬老師、江老師、夏老師、將軍、若雷、樂華、龍博等等一羣大牛,還有漂亮的pm小姐姐佳鑫,和帥氣的設計師鼕鼕,只能說我是何其的幸運,可以和一羣優秀的同事一塊兒共事、見證一款偉大app的崛起。android
此次面試瞭如下幾個公司(不是面試順序):
Airbnb、快陪練、探探、猿輔導、趣頭條、脈脈、動動、瓜子二手車、伴魚、最右、BIGO、音娛、快手、小紅書、美菜網、微軟、亞馬遜、Ihandy、餓了嗎、愛奇藝、右劃c++
其中面試沒經過的是:脈脈(一面掛),其餘的公司都到了hr面談薪資,美菜網、音娛、動動、猿題庫等公司hr開誠佈公的跟我說給不了我要的價錢,雖然技術面評價不錯,我也明白,因爲拿到一些offer後,我對不太想去的公司會要的比較高,我本身都以爲確定不會給。微軟和亞馬遜有另外的狀況,由於當時已經基本肯定拿到Airbnb的offer加上眼睛由於上火長了針眼,特別疼,就直接拒絕了。可能有同窗發現了,爲何此次我沒有去BAT去試試(百度、阿里、騰訊),百度的確沒有投遞,阿里和騰訊不是我不想去,實在是太慢了(多是我沒有走內推,而是在boss投遞的緣由),基本上是投遞後一個月後才告訴我簡歷經過去面試。git
爲何要跳槽,這個問題必定要思考清楚,由於跳槽的成本實際上是挺大的,在一家公司積累的不只僅是人脈還有對當前行業以及業務的熟悉度,新進入一家公司,一切須要從頭再來,須要快速的證實本身,尤爲是技術人員,還有就是對新環境和代碼的熟悉,這些都是成本,因此在跳槽前,必定要想好,爲何要跳槽。其實馬爸爸有一句經典的話「要麼錢沒給到位,要麼心委屈了」,說的很形象,我這裏再細說一下:程序員
錢沒給到位,其實全部的人對本身的評價都是比本身真實的水平要高一些,這就致使,大部分人認爲本身如今貢獻很大,老闆應該加薪,尤爲是看到一些同事作的不如本身(多是本身認爲),工資拿的和本身同樣,甚至比本身高,那就更加有錢給的少了的感受。github
作的事情是否有價值或者說是否有持續盈利的趨勢,這個很重要,一個公司的產品不盈利沒前景,就算給你開不錯的工資,做爲一個不想混吃等死的人來講,都不想繼續再待下去。web
機會,做爲一個已經有3年工做經驗的人來講,這個時候更加須要的是一個機會,可以證實本身,給公司帶來更大的價值,完成進一步的突破,若是當前的公司並不能給你這個機會,那麼你就須要考慮跳槽了。面試
那麼跳槽的核心就是利益最大化,固然這裏說的利益,不只僅是薪資福利,還有本身的職業規劃。算法
做爲技術人員,我大概總結了下面三個方向,其實哪一個方向都是大有可爲,關鍵仍是要看本身。
技術經理
架構師
專項領域的專家
做爲一個再也不年輕的程序員來講,已經不能忽略薪資和福利,再也不像剛畢業的同窗,只要能成長、只要平臺好,薪資什麼的不重要。其實每一個階段都有本身的側重點,我大概對薪資、平臺、成長排了個序(本身的觀點)
1~3年,平臺>=成長>薪資
3~5年,平臺>=薪資>=成長
5~10年,平臺=薪資>成長(這個階段也可叫作規劃)
上面是本身不成熟的見解,從自身的一些經驗出發的,僅供參考。
這是最辛苦的階段,你不只要把平常的工做作好,還要開始着手準備刷題、基礎知識準備以及高階知識的準備,除此以外我還對英語進行了一些準備,因爲無論是想去外企、出國以及看英文的文檔,英語都是必不可少的,英語在咱們的平常生活中也愈來愈重要,咱們要,整個階段大概持續了4個多月。其實每一次跳槽,都是對這幾年工做的一個梳理和總結,雖然你們都明白「面試造火箭、進去擰螺絲」的道理,對於公司而言,這是篩選人才的一個方式,畢竟人是第一輩子產力,只要有優秀的人才,那麼造出的火箭纔可能「一飛沖天」。對於我的而言,若是公司裏同事優秀的人,那麼你確定也不會差,咱們確定更但願和優秀的人一塊兒共事。
個人方式仍是以前的老套路 LeetCode +《劍指offer》,雖然老,可是效果很是不錯。這個過程不只是個腦力活仍是體力活,因爲不能再公司刷題,我通常的選擇方式是在晚上回到家後,因爲公司常常加班,我一般到家是10:00-11:00期間,先鍛鍊半個小時(一會再聊這個事情),而後刷題半個小時到一個小時。固然也能夠在上下班的路上抽時間看看題。
LeetCode,刷了300+的題,這裏的刷並非指僅僅只刷一遍,我來回刷了四遍,手寫了一遍(寫了200多道),保證我看到題目或者相似的題目,我能第一時間想出最優的解題思路。
《劍指offer》,這本書真的很棒,總結的很到位,以及每一個階段的思路寫的都很詳細,我是百看不厭,大概50+題,多看幾遍,這能作到觸類旁通。
因爲面的Android崗位,須要準備一些Java和Android方面的知識,有不少的文章都會去介紹怎麼去複習基礎的知識或者進階知識,或者是閱讀一些經典的面試數據,例如任玉剛的《Android開發藝術探索》,都是很是不錯的。你們能夠根據網上的文章和一些數據梳理一個本身的知識體系,將一個一個知識點造成點再到面,這樣能更加深入的理解,並且有本身的側重點,我就列舉一下個人準備的方向:
簡歷的重要性就不言而喻了,怎麼樣寫好簡歷是個技術活,固然若是你有很好的背景(學校或者公司),那麼無論你怎麼寫,基本上都不刷掉你,咱們做爲通常的人仍是須要下一番功夫的。拿個人簡歷做爲例子,大概有如下幾個部分:
我的信息:姓名、出生日期、教育背景、博客地址、github地址、聯繫方式(手機、郵箱和微信號)
工做經歷:畢業後待過哪些公司,通常是倒序,項目儘可能精簡明瞭,能夠參考SMART原則
專業技能:本身熟悉的一些技能,這個爲何我寫到最後,由於對於工做三年的同窗來講,面試官更加註重的是你的項目經歷,大部分面試都是看你的項目經從來提問。
怎樣寫簡歷,這個開源網站不錯,教你怎麼寫簡歷,並且有一個在線markdown在線網站,能夠導出pdf。
因爲時間的緣由,有一些面試題記錄的不是很是的詳細,可是大體是這些,可能會漏掉一些題。這篇總結與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中沒有的問題。
此次主要是聊一下我將要作的工做,以及讓其餘面試官再次瞭解一下我,由於評級比較高,因此須要謹慎點。
總體來講探探發展仍是不錯,尤爲近兩年要上市,環境也不錯,管三餐,加班不嚴重,雙休,工資也給力,可是也是因爲近兩年要上市,因此要作的東西仍是比較多和急,須要你有必定的能力。
我是在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個方面瞭解的很透徹,獲得面試官的承認就行。
在抖音上顯示本身作的功能,框架的搭建,實現原理,所作的優化點等。
組件化的實現,爲何作組件化,不一樣實現的優缺點。
hashmap的實現原理
view的優化,減小層級,異步加載,x2c框架引入,優缺點,textview的優化。
mp4播放alpha視頻實現的原理
一面面試官大概聊了1個小時左右,沒讓我寫算法,細究原理和細節,很是仔細。
冷啓優化的一些方案。
數據驅動業務的理解,怎麼作,和pm產生分歧怎麼解決。
我全部作的優化的收益是什麼,有什麼數據支撐。
事件分發機制,舉了一個具體的例子來解決。
http的一些問題,1.1和2.0區別,心跳機制,http怎麼創建連接,怎麼進行數據加密等。
爲何離開抖音,職業發展,訴求等。
聊了大概一個小時,面試官的思路相對獨特,不是爲作技術而作技術,技術始終要服務於業務,我很是承認。
趣頭條北京位於海淀,位置不靠近地鐵,須要步行一段時間,不過效率挺高的,在面試完的次日就給我發offer了,面試流程也相對較少。對趣頭條的營收模式看的不是很清楚,相似發錢看新聞,可是如今頭條也再作這個,趣頭條可以搞得過頭條是個問題,若是沒有增加點,那後期的轉型是什麼(我瞎操心啥)?整體來講體驗仍是不錯的,hr也很真誠,屢次溝通,雖然最後我沒有去,感興趣的同窗能夠去看看。
瓜子二手車真的是太遠了,從海淀到工做地方將近花費了2個小時,並且還不在地鐵附近,還須要坐公交。
聊了一下項目中作過的東西,字節碼注入相關知識,transform優化,mp4禮物實現等
從桌面點擊icon圖標開始,整個啓動activity的啓動過程
Binder的實現原理
插件化的原理,以及hook點,大概有兩個,能夠網上搜索一下
hashmap的實現原理
單例的實現,sychrnized的實現原理,以及雙鎖不加violate,會不會有線程安全問題
二叉樹,讀取每一層最右邊的節點
聊聊大概履歷,以及在華爲、字節跳動都作了什麼,爲何要離開。
職業規劃,怎麼帶領團隊
代碼設計的基礎原則,以及用UML畫出工廠模式
將兩個有序的鏈表合併成一個有序的鏈表,遞歸和循環兩中方式
時間分發機制,而且須要從Android的sensor開始到應用層,我只知道從Activity開始的流程。
聊操做系統Unix,汗顏,我知之甚少。
對新技術的見解(flutter),瓜子二手車也已經開始在項目中使用fultter相關技術
自我介紹,爲何要離開抖音
線程安全的問題,sychronized和viloated的使用
實現一個CAS(樂觀鎖)的方法
HashMap的實現原理,怎麼優化內存佔用,優化resize的過程,這個是開放的問題
自我介紹,在抖音作了什麼
在抖音作的比較好的兩件事情
設計一個美團的框架,組件化
瓜子二手車是衆多二手車中作的還算比較好的公司,如今像優信、人人二手車好像都不是很好了,就是太遠了,公司附近也沒有地鐵站,就算是公交站還須要走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),看法也僅僅是須要對新技術保持必定的敏感度,後面hr讓我去跟cto再談一輪,由於考慮到各個方面的因素,就直接拒絕了。
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小姐姐是廣東人,說話的聲音很好聽,也很真誠。
主要作的日本的直播產品,公司並不大,創始人好像也是頭條出來的,各類福利制度和頭條進本相似。
activity生命週期 以及各個函數的含義
activity task的四種類型
fragment的生命週期
啓動server的兩種方式
intent傳輸數據的大小限制
binder的原理
activity的啓動流程
hashmap實現原理,1.8的改動,紅黑樹概念
合併兩個有序的鏈表
爲何離開抖音
組件化實現方案 spi的缺點,怎麼使用字節碼注入
Dex的組成,爲何每一個dex會有65536的限制
還有好多,時間太長記不太清楚了
面試技術應該是經過了,最終卡在薪資,可能我要的過高,公司可能以爲依照我如今背景,性價比不高,就沒談下去,後面跟其餘公司聊的時候,又瞭解了一些這個公司的狀況,聽說年終獎特別少,不少人在年後都跳槽了。
Activity的生命週期、fragment的生命週期,onRestart()何時調用
service的兩種啓動方式,service的生命週期
binder機制
進程保活:1.防止進程被殺 2.殺死後再拉起,詳細的答案網上搜一下,這裏就不列舉出來了
app的包體積優化,lint、proguard、andresguard原理,字節碼注入,刪除R.java的變量,刪除access$001方法,壓縮圖片資源和使用redex等。
自我介紹
對JNI和C++瞭解嗎?基本不瞭解,就略過了
Activity的
launchMode
,每一個Mode的含義,Activity的啓動流程怎麼樣實現MP4播放alpha的視頻,編解碼的一些流程,NV20、YUV、RGB一些概念,SurfaceView和TextureSurfaceView的區別
組件化的實現,都有什麼技術方案,優缺點
使用數組實現一個隊列,有
void add(int val)
和void pop()
兩個函數,並且須要考慮擴容
介紹本身,介紹在抖音作過的事情
哪兩件事情作得最有成就感
怎樣重構代碼,基本的6大原則,詳細討論每一個原則的含義,使用過的設計模式
假定場景,接口定義的有缺陷,第二版須要修改,是增長仍是直接修改,以及還有沒有其餘的方案,怎麼去作,爲何,這個是開放的題,結合設計原則,以及真實的狀況和本身的一些例子說明便可
介紹本身,爲何離開抖音
mp4播放alpha視頻的實現方案,詳細解說
跨部門合做,具體的一個例子,怎麼去溝通,假設一個例子,用最恰當的方式去溝通。
怎麼向上管理以及向下管理
對技術選型的見解,flutter、c++、java、kotlin,核心是解決問題
是否會使用kotlin,優點,以及在項目中真正帶來的收益
組件化,依賴版本號不一樣的解決辦法
插件化,一些實際問題的,具體是什麼記不太清楚了
小紅書的裝修真是豪,辦公環境特別棒,可是面試流程有點多,足足面了5輪,不過整體來講技術仍是很不錯的,不管是廣度仍是深度,尤爲最後一面,專門從上海飛來面試,十分榮幸,從這點就能看出公司對人才的重視程度,是一個值得加入的公司,hr小姐姐人美也真誠。
包體積優化,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優化和冷起優化兩個部分,擴展開來,討論了不少相關的知識點
手寫消費者生產者模型的代碼
此次面試的是奇異果,並非愛奇藝app,由於我仍是想作app,二面以後,我就跟面試官說了個人想法,就不必聊下去了,就直接走了。
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年的成績仍是很好的,尤爲是直播的營收仍是至關的不錯。
因爲Airbnb面試了七輪,並且不少同窗都想看,那我就單獨寫一篇關於Airbnb的面經,正在整理中,整理好後會把鏈接發出來,歡迎關注
時間真的是有點長,記不太清楚了,只能記個大概,一共三面,就不分開寫了。
抖音作了什麼
Activity的啓動流程
手寫LruChache
怎麼播放一個alpha的mp4視頻
進程間的通信方式,Binder的機制,爲何不使用Socket
Activity的啓動模式,進程間啓動是否不一樣
右劃真的是一家很是不錯的公司,有一件事情就體現了整個公司的價值觀:因爲我當天去公司接待的人比較多,二面和三面中間大概有兩個小時的空檔,我其實挺不滿意的,跟hr反饋了這個事情,hr立馬就跟我解釋了事情的緣由,而且立馬跟我道歉了,後面cto還專門爲這個事情跟我說了緣由。雖而後面沒有去這個公司,可是我仍是很欣賞的,從公司層面,公司的定位很明確,並且有本身的核心技術。從我的來看,公司也是很是人性化,管三餐有房補並且有問題及時改正,我以爲你們能夠來看看。
在大多數互聯網公司內(除了外企),到了HR面,基本上已經定下來,正常的聊聊就能發offer了,只要別太「個性」,或者三觀異於常人就能收到offer,大致就是一個積極樂觀的態度。有幾點須要注意下:
不要說前公司和前leader的壞話
對於爲何離開原公司,標準答案是目前公司不適合現有的自身發展,尋求更好的機會,(固然大部分都是由於錢 心知肚明就行,不用說出來)
展示本身積極樂觀和樂於助人的一面
注意以上幾點大致就沒問題了。ps:Airbnb的文化面很是重要,聽說20%的面試者在這個環節中被刷掉。
我會討論幾個話題,固然都是從我認知出發,並不必定對,歡迎你們一塊兒探討。
面試過程其實大部分時候是,面試官或者公司是主導方,大部分的節奏是跟着面試官走,可是我以爲面試其實就是一個相互探討的過程,不只是公司在選擇你,你也在選擇公司、之後工做的同事和leader。因此我此次面試中,更多的是和麪試官探討,也會反問面試官一些問題,不只僅是最後面試官說能夠問他幾個問題,在面試過程當中就會詢問一些,優秀的面試官會跟你探討,而且討論出一個合理的方案或者正確的答案,整個過程很是愉悅,相互都學習到了,可是有一些面試,則不太友好,問道的問題老是說本身回去百度一下,這個很讓我無語。
此次最大的收穫就是跟60多位面試官的交流,更加讓我認清我本身,認清本身的長處、短板和之後的規劃,和對作人作事的見解,在這裏真誠的感謝60多位面試官。
對於這個話題,從我自身的角度而言有一些感觸,從2018年開始互聯網就一直有寒冬的說法,各大互聯網開始裁人、縮減HC甚至對碼農的年終獎下手(辛辛苦苦一年,就期望年終獎~),固然最近確實環境有一些波動,可是遠沒有網上傳的寒冬已至那麼嚴重。從個人面試結果來看就知道,互聯網並非寒冬,只不過是更加理智,對全部的面試者來講要求的更高,因此咱們更加要注重自身能力的培養,這並非說咱們要全身心的投入到刷算法,背理論知識等,咱們更加註重本身的理論知識怎樣可以爲公司、產品帶來更大的價值,從軟實力方面來講,不只要把事情作好,更要作好向上管理和向下管理。我的建議:想好爲何要跳槽,無腦跳是最很差的狀況,若是必定要跳槽,最好的狀況是騎驢找馬,不要裸辭,跳槽需謹慎!!跳槽需謹慎!!跳槽需謹慎!!
個人答案是重要,我就是學歷的受益者,只要投遞出的簡歷都會邀請面試(除了一些對工做年限限制很是嚴格的企業,hulu)。固然,在互聯網的圈子中,核心是你自己的技術,可是有多少人的技術能達到逆天或者很是牛逼的地步,若是你是這樣的人,啥都不用說了,可是我以爲絕大部分的程序員都是普通人、日常人,不要說什麼3年之後公司就不看學歷了,學歷是一生的事情,那些高考可以碾壓你的人,出了社會只要他們願意,照樣能碾壓你,你努力,你拼命,別人也不會睡大覺等你,因此,能提高本身的學歷,仍是要儘可能提高的。
「大公司擰螺絲、小公司獨當一面,進步更快」,我不太認同這句話,固然具體狀況具體分析,每一個人的狀況不一樣,可是我仍是以爲你們能去大公司仍是儘可能去大公司,緣由我總結了如下幾點:
鍍金,這一點我相信大部分同窗都是贊同的,我就不贅言了。
知識的深度和積累,在大公司你能學到的東西更深和更加系統,並且能夠有時間本身去思考和學習,尤爲對於工做時間不長的同窗。
和優秀的人一塊兒工做,大公司碰到優秀同事的機率更大,像我這樣的普通人其實都是在模仿和學習,正是因爲身邊有了優秀太多的人,纔會有危機感,纔有機會跟着他們去學習,學習他們怎樣學習、怎樣思考問題甚至怎樣爲人處世。在華爲中有到鑫和李橋,在抖音中,有夏老師、江老師還有樂華大佬等等,太多人,我從他們身上學到太多的東西,有一些能讓我受益終身。
選擇一樣是很是重要的,選擇的首要前提是你要有不少機會,否則你都沒機會怎麼選擇,在不少機會擺在你面的時候,必定要認真思考,不要衝動,想好本身須要的,多聽別人的意見,最後本身決定。咱們不能保證每一次選擇都是正確的,可是能保證咱們是不後悔的,遇事要冷靜,多思考。
這裏說的選擇不只僅是選擇去哪一個公司,從事什麼方向,還有與什麼樣的同事工做,選擇什麼樣的leader,甚至是生活中的事情,網上說一我的要有一些成就,須要具有下面幾點,我以爲很是的對:
你本身要行
有人以爲你行
以爲你行的人也行
其實這個話題對我來講有一些困惑,「工做是爲了更好的生活」,這句話是很是正確的,可是做爲一個沒有背景、父母幫你付不起首付的普通人來講哪裏來的享受生活,惟有不斷努力、不斷的進步纔有更好的物質回報,北京是全中國的人才彙集地,在工做的三年中,我不敢有一絲的懈怠,由於身邊比我條件好,能力比我強,年齡比我小的人太多了,不論在哪裏資源的分配都是二八原則。有不少身邊人說我是苦行僧,不懂得享受生活,太無趣,的確我不否定,可是我知道惟有這樣,我才能爲個人父母、愛人以及之後的孩子撐起一片天,反過來說,這些又是個人動力。感慨有點多了,這個話題全看本身,我滿意目前的一個狀態。我的拙見,你們看看就行。
感謝你們能耐着性子,看完我囉哩囉嗦的面經,以上僅是我的的觀點。感受兩年稍縱即逝,在這兩年中成長了不少,感謝全部幫助過個人人。