## 正文 面試
最近加入了 ByteDance 某「Awesome」部門(具體保密,想猜的話就看這單詞猜吧,下文簡稱Awe),遂一羣周遭好友來討要面經;其實本身過去在前東家也負責不少面試工做,對於這種內容猛一想仍是保密相對好些,然鵝仔細想一想涉及的東西不少是比較針對我所擅長的方向,未必和大多數人都能重合,而那些公共的基礎部分也是目前市場上一個合格的Android工程師所該必備的,因此整個面經分享我仍是決定寫出來,只是換個沒那麼直接的方式,更多當成是一篇指導性的文章吧,畢竟面試仍是靠硬實力,一篇面經若是真對你的實力有所提高那也算是我爲招人企業作了點實在的貢獻,何樂而不爲呢?先來個指導性總綱吧:ByteDance的Android面試總體是對計算機本源思想、實戰應用和我的思惟、潛力的綜合性考察~打個比方就是:這裏比的更可能是內力、是能打出真實傷害的武功奠定,而非某種視聽上彷佛很厲害的招式(這也是不少工程師不經意間欺騙本身的點)~
這確乎是我經歷過的最艱難的面試,引言我也曾提到,我自己就負責過不少面試,並且從我畢業半年後的16年末開始負責面試,實習、校招、社招大大小小近百次面試,也算是曾和一些高手過招,另外因爲前公司的高要求面試難度確乎是高於BAT的,我深諳其中難度定級和目標定位,但此次面完「Awe」仍是讓我感受:以前面試難度是定低了呀~固然這感受很大程度上也是基於其中二面的面試官,他自己的實力、面試風格等確乎讓我鴨梨山大~好了迴歸正題,下面是面經分享(→後爲本身的指導性意見):算法
由於截至面試時,我只有1年實習+2.58年工做經驗,因此這一面側重考察基本的計算及原理和Android基礎機制,以及對作過項目的我的探索和理解深度;具體涉及的方面以下(有些我感受隨口就能答上的忘記了- -)吧:數據庫
我具體怎麼答的略過,總之注意幾個點:說簡歷上沒有的、有亮點的、跳槽緣由等,從各個點上盡力彰顯本身優點、技術特長api
計算View樹上全部view的數量,參數ViewGroup,補全空方法返回view數量→本質就是數據結構多叉樹遞歸層序遍歷+Android View基本api調用緩存
主線程Looper一直循環查消息爲什麼沒卡主線程?RecyclerView相對ListView區別?好像還有Bitmap resize相關,就是設置option,而後decode→這裏還有些我基本都是隨口答對的,已然忘了😂反正都是中級(或稍偏高級)Android工程師必掌握原理機制~微信
用MultiDex解決何事?其根本緣由在於?Dex如何優化?主Dex放哪些東西?主Dex和其餘Dex調用、關聯?Odex優化點在於啥?Dalvik和Art虛擬機區別?多渠道打包如何實現(Flavor、Dimension應用)?從母包生出渠道包實現方法?渠道標識替換原理?網絡
→上面這坨都是從我作過的項目或用過的開源庫引伸出的問題,並且挑的都是不太偏業務且技術性強一些的,這其實要求平常在把事兒作成的基礎上還得再多看下原理順帶本身動手探索下,明晰人家每一步是怎麼互相關聯推進直至最終搞定的,而不是加個dependency或copy下別人代碼就完事兒嘞~數據結構
思惟、架構:模塊化怎麼作的?怎麼設計的?接口發現暴露怎麼作?基於什麼思想?MVC、MVP、MVVM應用和彼此本質區別?架構
→由於這不是那種肯定性答案的問題,只能多實戰+戰後總結並深刻思考才能出真知啦,。ide
真是要了我半條命,耗時近2小時……
這面上來大概介紹了下本身,而後問了點我用過的東西好比Glide緩存特色?隨後:你擅長Android中哪一個方向呢?這問題我實際上是按Android UI動畫方面和移動端後臺交互方案制定來預想過的,然鵝說完他挑了Android UI,噩夢就開始嘞- -直接他出效果我來想方案作。
第一個問題前他說,這個問題我問過不少人沒幾個能答出來的,你試試?
我:呵呵🙄
他:你看我這手機上這個launcher裏應用抽屜(就是不少ROM都有的把不少APP管理歸類的二級菜單功能)他在這ROM前一版是有個毛玻璃效果背景的,從系統ROM角度說下怎麼作吧?
→這100%是我一點沒作過的,面試官八成也知道,也是不少人在面試裏會遇到的狀況,這時候別慌,咱們能夠從知道的東西里去推,哪怕只把把思路展現出來也OK;好比這個確定是FrameWork作系通通一渲染那裏要作些事,那系統渲染是誰管呢,SurfaceFlinger呀,它怎麼工做的呢?它哪一步改動一下是否是可能就達到這效果了呢?這種思考過程是一個高工所要必備的,也是須要平常在面對不少問題時要培養本身去練就的思考方法~事實證實,雖然有些細節我確實沒涉及過,但至少思路策略以及知識遷移解決問題能力都獲得了面試官的承認~
後面還有的UI相關的依舊是相似這種的兩個大問題:實時的水面倒影效果怎麼作?這裏面實時更新的UI性能如何保證?→我所處情形和思路同上
再到後面是偏UI基礎的考察:Measure、Layout、draw大流程、繪製順序,基於這些說下TagLayout(FlowLayout)怎麼寫?
接着是算法題:倆線程分別持續打印奇數和偶數,實現倆線程的交替打印(從小到大)→計算機操做系統線程相關基本題目,你要以爲難只能說明基礎瘸腿,趕忙補吧;操做系統+編譯原理也是我面試別人過程當中發現的大多數人的弱項
最後也是模塊化、工程架構思想相關更細緻的盤問,確實有些我以前沒意識的問題被問及不過仍是老方案:能想出來的就給方案,不能的就給思考過程。
整個Android端負責人面,多是二面太太要命了,這面相比之下感受在休息…..
上來仍是互相介紹,而後有個算法題解決個實際問題,由於我很快用知識遷移的思想把生產者消費者問題的解法用過來,講的也很透徹,手寫代碼就省了,隨後仍是問問偏思想性的東西工程架構、以前提到的接口暴露又老生常談,不過以前答的不太好我忽然仍是用知識遷移想了個好辦法解決,對方也聽後看似比較滿意;
再而後仍是擅長方向,由於二面真是被虐慘了,另外考慮到三面負責人的身份更關注一我的思想性、系統性的東西,因此絕不猶豫說了定移動端架構解決方案、先後臺接口涉及那套,這個應該是不多有面試者會說的一點,我發現我說完面試官眼前放光😜
隨即問題就是設計個IM客戶端以及數據庫架構吧,相似微信,偏上層業務部分的會話、聯繫人、通知、公衆號如何存、分幾張表,架構每一層都是啥,互相怎麼交互工做?
還有是提個公司旗下產品作的很差的點,吐槽一下(有理由根聽說服對方便可,最好是人難以意識到的點)。最終基本就是了解公司狀況嘞,全聊完他都沒商量就直接告知hr來跟我談了,到這裏基本能夠知道就是穩了,國內公司hr不多有掛掉人的,尤爲對於ByteDance這種缺人的地方,移動端又是稀缺中的稀缺~
這面就是偏閒聊了,問問跳槽緣由、我的愛好、我的職業規劃、目前薪酬、跳槽薪酬要求,福利同步一下;這面稍微注意一個點吧,就是你首先要真誠,而後基於此儘可能展現給對方的是你有活力、有上進心、對本身有想法也有期待、對於你來面試的地方也有興趣;你給她的好感會幫助你在定薪過程當中讓她爲你多多美言,固然主要還得看技術面,但這些小技巧也是有助力的,最終驗證也是符合這點的,總的算起來個人薪資漲幅超過60%,二期要求最高直到40%,另外我還被賦予了選組的權力和期權,我感受這裏面或多或少都和我展現給hr以及前幾輪面試官的個人精神面貌有關,有些承認是在面試過程當中不少小細節(身體姿式、不經意的點頭、微笑、手勢、話語聲調突變等)能看出來的~
!!!備註下,由於隔得時間略久,有些面試內容和考察點已然忘記的也就沒往上寫,總體的面試題量仍是大過上述這些的!!!
最後的最後,再獻上我我的面試別人經驗以及此次被面試經歷的一點要領總結吧:
對於社招,面試技術方向的,除了人工智能、算法那些其餘真的不太看重學歷,不少時候你們所認爲的學歷敲門磚本質上是企業爲了節省面試成本所額外加入的坎,社招更多仍是看工做經歷和你的成長,這行業有句老話叫:從不看你起點在哪兒,而是看你能跑多塊,那些還在爲這點擔憂的更可能是你本身還跑得不夠快或跑錯了方向,這是前提;
而後是方法,技術開發不管哪一個方向都避不開的是計算機本源原理,有些很簡單的情形就是本源原理的縮影,網絡的分層,計算機體系結構上的分功用部件,你可能想過其中的聯繫?
ByteDance相對於BAT是更多高手的彙集地,他們對於這一點和從這點上發散出來的能力的考察只會比BAT有多無少,因此不管是何方向,內力的修煉永遠排在第一位,具體的方向指示以一種具體招式將內力轉化爲傷害輸出出來,不少人認爲基礎即是內力,其實也不全是,基礎不少時候是那些死的知識,這些只是修煉內力的原料,要練成得把他們活用起來轉化本身認識其餘內容的基礎、造成適用於本身修煉、探尋、思考的方法論,以一種獨有的方式把這套知識體系灌輸於自身,才能算是真正的內力,待你練成這點,哪怕真的碰見功力更深厚的高手依舊能應對自如,正如我二面遇到的面試官,HR和我介紹說他在Android領域的深度和廣度在北京能排上前幾名,如今他是個人leader😝