5面阿里,4面騰訊,卻進了字節(jié)盏求?Android程序狗開發(fā)三年9次大廠面試真實記錄

到今年7月抖锥,我已經(jīng)工作了整整3年!記得還是2017年的夏天碎罚,我脫下了屬于大學(xué)時代的學(xué)位服磅废,告別我的整個學(xué)生時代,當(dāng)我找到第一份正式的工作時荆烈,就已經(jīng)宣布我成為正式的上班族了拯勉!那個朝氣蓬勃的時代、也是一個屬于青春的年代憔购。現(xiàn)在回味宫峦、無比悠長。

原諒我矯情了一會兒玫鸟,現(xiàn)在進入正題导绷。想知道阿里面了5次,騰訊面了4次的我屎飘,為什么會入職字節(jié)跳動嗎妥曲?看官,請你們接著往下看钦购。

9面大廠的原因

我相信每一位軟件開發(fā)的畢業(yè)生都夢想著進入像BAT這樣一線大廠檐盟,你們都想著進入當(dāng)然我也不例外,誰叫我們都是“同道中人”呢肮雨!

先說說我吧遵堵,雖然我不喜歡別人夸但是你們夸我還是有一點小驕傲的。雙非一本畢業(yè),雖然談不上多么厲害但是也還行陌宿,別說讀研我是真的不喜歡讀書锡足,讀研天天要背英語單詞難道你們不覺得煩嗎?我比較喜歡有邏輯性的事物壳坪,因為這樣在之后的大廠面試中算法題基本都答對了蚀苛。

我吧,接觸編程接觸的比較早窄潭,在高一的時候因為我哥給我?guī)Я艘槐咀詫W(xué)C語言的書从铲,我便開始沉迷在編程的海洋里,一蹶不振蝎亚。到現(xiàn)在那本書我還沒有扔掉九孩,現(xiàn)在有時間的時候都會看一看,不過現(xiàn)在看來里面的知識點太少了发框,適合剛起步的新手學(xué)習(xí)躺彬。對了這本書叫《C primer plus》,安利一下梅惯。

因為高中三年都熱愛著編程宪拥,所以我高考完以后報考的志愿只能是計算機這一方向,別人說大學(xué)生活都是豐富多彩的铣减,我也信了高中老師的鬼話她君,說什么高中三年不要玩,好好學(xué)習(xí)等到上了大學(xué)隨便你玩葫哗,老師都不帶管你的缔刹。以至于到現(xiàn)在都還沒有女朋友,真氣死我了...

大學(xué)四年中魄梯,我自學(xué)過Java桨螺、Andorid、C++酿秸,到后來火熱的GO語言灭翔、AI,也有一定的了解辣苏,卻因為大學(xué)老師的一段話走上了APP的開發(fā)之路肝箱,因為當(dāng)年抖音的爆火,無數(shù)短視頻APP橫空出世稀蟋,他說:將來做Android的程序員肯定特別吃香煌张,聽了老頭這話一入坑便是三年。

雖然現(xiàn)在也挺好退客,在字節(jié)能到稅后34K骏融,但是我還是覺得链嘀,程序員需要的不是行情行業(yè),需要的是實力和技術(shù)档玻,只要你有硬實力怀泊,無論市場行情怎樣,走到哪都會公司企業(yè)接納你误趴。內(nèi)推不就是一個很好例子嗎霹琼?

5面阿里,4面騰訊的心路歷程

阿里和騰訊和字節(jié)一直是我追求目標凉当,其實畢業(yè)前枣申,我并沒有找到心儀的工作,只是找到了一家小型互聯(lián)網(wǎng)公司做Android開發(fā)(當(dāng)然看杭,是在面試完騰訊和阿里之后我才明白了我自身實力的不足)忠藤。

但是咱不能放棄,一次不行還有第二次楼雹,兩次不行還有無數(shù)次熄驼。起碼我得進他們的研發(fā)部看看他們的大牛到底有多厲害才能進得去那樣的大廠?

于是烘豹,我開始我的三年面試大廠之路;

三年诺祸,我卡死在無數(shù)面試題之下携悯,挫敗了我也成就了我

我這個人最好的好處就是會在失敗中總結(jié),面試遇到不會的題目我會在心中記下筷笨,面試結(jié)束以后再網(wǎng)上找答案憔鬼,在記錄在我自己的學(xué)習(xí)筆記中。

比如像Android的音視頻胃夏,UI線程轴或、view分發(fā)反向制約的方法、Future和microtask執(zhí)行順序仰禀,Java的對象鎖和類鎖照雁、生產(chǎn)者消費者(非阻塞式)我都會記下來。這也為我之后成功入職字節(jié)跳動做好了鋪墊答恶。

一面(2018年10月秋招)

  1. 簡單介紹項目

  2. 了解哪些數(shù)據(jù)結(jié)構(gòu)

  3. 了解哪些排序算法

  4. 堆排序

  5. LinkedList與ArrayList饺蚊;HashMap擴容 ConcurrentHashMap

  6. TCP與UDP,區(qū)別及運用場景

  7. http是用的TCP還是UDP

  8. http與https的區(qū)別

  9. JVM內(nèi)存模型(Static方法在哪個區(qū))

  10. Activity生命周期悬嗓,Activity啟動模式污呼,Handler源碼

  11. 旋轉(zhuǎn)數(shù)組

二面(2019年3月春招)

  1. final、finally包竹、finalize的區(qū)別

  2. 抽象類的成員變量與成員方法的繼承

  3. union與union all的區(qū)別

  4. MySQL的索引的實現(xiàn)

  5. B+樹查找的時間復(fù)雜度燕酷,數(shù)據(jù)結(jié)構(gòu)

  6. 在瀏覽器輸入網(wǎng)址敲回車后經(jīng)歷了什么

  7. 三次握手

  8. https的加密流程

  9. 對稱加密與非對稱加密原理(RSA籍凝、AES)

  10. 手撕DCL單例

  11. 還了解什么設(shè)計模式

三面(2019年四月春招)

  1. 動態(tài)代理的方法怎么初始化的

  2. cglib動態(tài)代理

  3. 三個線程wait,喚醒情況是什么樣的

  4. 最終是誰持有的activity苗缩,handler內(nèi)存泄露(內(nèi)存泄漏這點真的是無比幸運饵蒂,剛好找到的視頻里面講過)

  5. handler的sendmessage和postdelay的區(qū)別

  6. arraylist和hashmap的區(qū)別,為什么取數(shù)快

  7. 差不多重復(fù)的和模糊的

四面(2019年9月秋招)

  1. stringbuilder 和stringbuffer區(qū)別

  2. lock和syncrognized原理區(qū)別挤渐,適合什么場景苹享。

  3. 實現(xiàn)生產(chǎn)者,消費者

  4. handler原理浴麻,是如何實現(xiàn)延時的得问。

  5. 一個activity啟動另外一個activity的生命周期。

  6. 反轉(zhuǎn)鏈表

  7. 歸并排序

  8. 快速排序

五面(2020年5月春招)

  1. 抽象類和接口解釋一下软免。

  2. 講講類的加載機制宫纬。

  3. jvm的內(nèi)存回收機制,那你了解哪些內(nèi)存回收算法膏萧。主要用的那個算法漓骚。

  4. 抽象類和接口的區(qū)別。

  5. Activity有哪些啟動模式

  6. Fragment的生命周期和Activity有哪些不同榛泛,執(zhí)行順序解釋一下蝌蹂。(這個回答的有點迷,只能說大體是那么一回事)

  7. 線程和服務(wù)的區(qū)別,解釋一下曹锨。

  8. 事件分發(fā)機制講解一下孤个,view中有個onFilterTouchEventForSecurity還是啥,小哥哥說是view中獨有的一個方法沛简,你了解嗎齐鲤?(英語水平不過關(guān),沒聽清是啥方法椒楣,表示不清楚给郊。)

  9. 充值模塊如何進行的封裝

  10. handler的機制講解一下。

  11. 模板方法講解一下(腦袋抽了捧灰,記不起來)

  12. 如何保證應(yīng)用的安全性淆九,做了哪些處理。

  13. 加固的原理了解嘛凤壁。

騰訊5面面經(jīng)

一面

  • mmap + native 日志優(yōu)化吩屹?

講了傳統(tǒng)日志打印的兩個性能問題,一個是反復(fù)操作文件描述符表拧抖,一個是反復(fù)進入內(nèi)核態(tài)煤搜,然后講了 mmap 的原理機制。

  • 廣播和 EventBus 的區(qū)別唧席?

說 EventBus 的實現(xiàn)原理是基于反射擦盾,里面管理了兩張表嘲驾,且代碼之間關(guān)聯(lián)性不大不易于維護,EventBus 不支持跨進程通信迹卢,被面試官反問你確定不支持跨進程辽故?我說我的看的源碼是不支持,面試官說那好吧腐碱。

  • 常用設(shè)計模式你了解哪些誊垢?

我開始巴拉巴拉說了一大堆,其中說到了裝飾設(shè)計模式症见,被面試官打斷了喂走,請你具體說說裝飾設(shè)計模式。

  • 跨進程通信有哪些谋作?

管道芋肠,信號,信號量遵蚜,文件帖池,本地套接字,共享內(nèi)存吭净,binder 驅(qū)動

  • 簡單講講 binder 驅(qū)動吧睡汹?

從 Java 層來看就像訪問本地接口一樣,客戶端基于 BinderProxy 服務(wù)端基于 IBinder 對象寂殉,從 native 層來看來看客戶端基于 BpBinder 到 ICPThreadState 到 binder 驅(qū)動帮孔,服務(wù)端由 binder 驅(qū)動喚醒 IPCThreadSate 到 BbBinder 。然后又講了虛擬內(nèi)存不撑、物理內(nèi)存和內(nèi)存映射,跨進程通信的原理是要基于內(nèi)核的晤斩, 當(dāng)我講到 binder_open 焕檬、binder_mmap 和 binder_ioctl 是被面試官打斷了,估計是怕我講太久了澳泵。

  • 跨進程傳遞大內(nèi)存數(shù)據(jù)如何做实愚?

我說 binder 肯定是不行的,因為映射的最大內(nèi)存只有 1M-8K兔辅,可以采用 binder + 匿名共享內(nèi)存的形式腊敲,像跨進程傳遞大的 bitmap 需要打開系統(tǒng)底層的 ashmem 機制。

  • 說說 ConcurrentHashMap 的實現(xiàn)原理說下维苔,初始化大小是多少碰辅?

是線程安全的,實現(xiàn)原理采用的是分段鎖介时,初始化大小是 16 没宾,必須是 2 的冪次凌彬。

  • 啟動優(yōu)化怎么優(yōu)化?

我說了關(guān)鍵優(yōu)化 Application 循衰,被面試官打斷了铲敛,說大家都能想到的東西你不要說了,我想聽的是你能不能站在系統(tǒng)的角度去做一些優(yōu)化会钝,我提到了優(yōu)化包體積大小能優(yōu)化啟動速度伐蒋,優(yōu)化 dex 分包能優(yōu)化啟動速度,可以參考最新的華為方舟編譯器等等迁酸。

  • 你寫的 rxpay 和 rxlogin 具體怎么實現(xiàn)的先鱼?

一般我們集成第三方登錄和第三方支付 SDK 都需要監(jiān)聽 onActivityResult 方法,我是參考了 RxPermission 的實現(xiàn)方案添加了透明 Activity 胁出。

  • kotlin + fullter 方面的

二面

  1. 單例設(shè)計模式都寫寫型型,靜態(tài)內(nèi)部類是怎么保證線程安全的?

  2. synchronized 底層實現(xiàn)原理全蝶,ReentrantLock 公平鎖與非公平鎖闹蒜。

  3. 主線程等待所有線程執(zhí)行完畢,再執(zhí)行某個特定任務(wù)怎么實現(xiàn)抑淫?原理和源碼看過沒绷落?

  4. 自定義 view 的一般流程,要注意些什么如何優(yōu)化始苇,點擊事件和長按時間分別是怎么實現(xiàn)的砌烁?

  5. 四種啟動模式,在源碼分析中的原理是怎樣的催式?

  6. 講講 bindService 的過程函喉,你當(dāng)初是怎么優(yōu)化后臺服務(wù)進程的?

  7. 開發(fā)中你都用到了哪些設(shè)計模式荣月?說說當(dāng)時具體的場景管呵。為什么你要用方法工廠,另外兩種呢哺窄?

  8. RxJava 在使用過程中碰到了某些不友好的錯誤一般怎么解決捐下?發(fā)現(xiàn)了內(nèi)存泄露一般怎么解決分析,有沒有碰到過系統(tǒng)服務(wù)內(nèi)存泄露的問題萌业?

  9. 你們用的 okhttp 坷襟?那你有沒有做過一些網(wǎng)絡(luò)優(yōu)化呢?比如弱網(wǎng)環(huán)境生年。

  10. 給你個數(shù) 1 吧婴程,比如 1000011 里面有幾個 1 ?

  11. 快排了解不抱婉?最壞的情況是怎樣排抬?如果有大量重復(fù)數(shù)據(jù)怎么優(yōu)化懂从?

三面

  1. 講講 handler 的底層實現(xiàn)原理? 這么簡單蹲蒲?問到碗里來了番甩,后面漸漸說到延遲消息是 nativePollOnce 來處理的,在 6.0 以上用的是 epoll 方式來監(jiān)聽文件描述符届搁。接著問道了為什么要用這種方案缘薛?它跟 poll 和 select 比起來有哪些優(yōu)勢?它是怎么監(jiān)聽的你看過它的內(nèi)部實現(xiàn)原理沒卡睦?反正感覺很難受了宴胧。

  2. 說說你做的日志記錄優(yōu)化? 把第一輪面試的又講了一通表锻,你在每個文件的最后寫入了當(dāng)前內(nèi)容的大小恕齐,你有沒有想過如果文件被破壞的情況?這種異常情況怎么處理瞬逊?后面還問到了加密和壓縮显歧。

  3. 你看過 binder 驅(qū)動的源碼,說說他的內(nèi)存映射過程确镊,說說客戶端等待服務(wù)端處理返回的流程士骤,如果要跨進程傳遞大內(nèi)存數(shù)據(jù)你具體會怎么做?簡單寫一寫吧蕾域。

  4. 在公司做過哪些優(yōu)化拷肌? 內(nèi)存優(yōu)化,啟動優(yōu)化旨巷,網(wǎng)絡(luò)優(yōu)化巨缘,包體積優(yōu)化,具體說說包體積優(yōu)化采呐。我提到了包體積優(yōu)化不僅僅是優(yōu)化了包的大小带猴,包體積太大從安裝的那一刻開始,我們的應(yīng)用就可能比較慢了懈万,因為 pms 會去拷貝解壓解析我們的 apk 安裝文件,會去優(yōu)化我們的 dex 等等靶病,包體積太大還會影響我們的啟動速度会通。然后就巴拉巴拉說具體怎么做,問到了為啥混淆資源能減少包體積大新χ堋涕侈?你當(dāng)時優(yōu)化的時候效果是怎樣的減少了多少?

  5. 開發(fā)過程中遇到的一些最難解決的問題煤辨? 提到了動態(tài)修復(fù)替換加載 so 裳涛,那你知道怎么修復(fù) class 嗎木张?怎么修復(fù)資源呢?后面又聊到了插件化端三,提到了 360 用的是借尸還魂舷礼,那如果我們在插件的 Androidmanifest.xml 中注冊了其它屬性該怎么解決,資源方面怎么處理郊闯?

四面

  1. 先談?wù)勛约旱捻椖?/li>

遠程數(shù)據(jù)庫傳輸圖片到app端妻献,我們當(dāng)時將圖片轉(zhuǎn)換成base64存在數(shù)據(jù)庫中,然后傳到app端团赁,app解析base64獲得bitmap育拨,直接顯示然后面試官瘋狂diss 為什么要將圖片轉(zhuǎn)成base64再傳(二面也diss這個,問是否可以直接傳圖片地址)

  1. 講一下http連接的框架

  2. retrofit原理

  3. 什么是動態(tài)代理

  4. 自定義view

  5. 繼承viewGroup的情況

  6. activity的生命周期

  7. 對handler機制的了解

字節(jié)跳動面試題

一面

  1. Jvm虛擬機

  2. messageQueue會不會阻塞ui線程

  3. 對象鎖和類鎖

  4. 之字形打印樹

  5. 還有其他的記不清了欢摄,主要是我對二面印象太深刻了

二面

  1. dart是值傳遞還是引用傳遞熬丧、

  2. Widget和element和RenderObject之間的關(guān)系

  3. widget的root節(jié)點

  4. mixin extends implement之間的關(guān)系

  5. jvm內(nèi)存模型

  6. Future和microtask執(zhí)行順序

  7. dart中…的用法

  8. await for

三面

  1. linux網(wǎng)絡(luò)模型

  2. b+樹

  3. 阻塞隊列

  4. redis和MongoDB的區(qū)別。幾個概念對比怀挠,還有底層實現(xiàn)析蝴。

  5. 算法題: mergeksortedlist,時間復(fù)雜度如何唆香?

  6. HashMap 如果一直 put 元素會怎么樣嫌变?hashcode 全都相同如何?equals方法都相同 如何躬它?

所以的面試題和答案都被我整理成PDF腾啥,這也為我入職字節(jié)跳動提供的保證,近期需要面試的冯吓,需要面試題參考的小伙伴(Github領(lǐng)忍却)PDF資料

文末

最后希望小伙伴們都能有個好的歸宿,找到高薪的工作组贺,拿到自己滿意的offer凸舵。一起朝著大廠努力前進,共勉失尖!喜歡的小伙伴可以拿出自己的小手指點個贊喲(#.#)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啊奄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子掀潮,更是在濱河造成了極大的恐慌菇夸,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仪吧,死亡現(xiàn)場離奇詭異庄新,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進店門择诈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來械蹋,“玉大人,你說我怎么就攤上這事羞芍』└辏” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵涩金,是天一觀的道長谱醇。 經(jīng)常有香客問我,道長步做,這世上最難降的妖魔是什么副渴? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮全度,結(jié)果婚禮上煮剧,老公的妹妹穿的比我還像新娘。我一直安慰自己将鸵,他們只是感情好勉盅,可當(dāng)我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著顶掉,像睡著了一般草娜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痒筒,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天宰闰,我揣著相機與錄音,去河邊找鬼簿透。 笑死移袍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的老充。 我是一名探鬼主播葡盗,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼啡浊!你這毒婦竟也來了觅够?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤巷嚣,失蹤者是張志新(化名)和其女友劉穎喘先,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涂籽,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年砸抛,在試婚紗的時候發(fā)現(xiàn)自己被綠了评雌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片树枫。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖景东,靈堂內(nèi)的尸體忽然破棺而出砂轻,到底是詐尸還是另有隱情,我是刑警寧澤斤吐,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布搔涝,位于F島的核電站,受9級特大地震影響和措,放射性物質(zhì)發(fā)生泄漏庄呈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一派阱、第九天 我趴在偏房一處隱蔽的房頂上張望诬留。 院中可真熱鬧,春花似錦贫母、人聲如沸文兑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绿贞。三九已至,卻和暖如春橘原,著一層夾襖步出監(jiān)牢的瞬間籍铁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工靠柑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寨辩,地道東北人。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓歼冰,卻偏偏與公主長得像靡狞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子隔嫡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,566評論 2 349