Android| 小廠跳大廠,我是如何拿到騰訊頭條美團小米的offer的| 掘金技術徵文

1、今年的Android開發的招聘市場如何

  今年Android開發的總體招聘趨勢能夠歸納爲幾句話:賽道中的公司在矇眼狂奔,成熟業務藉機補強,更多公司在觀望。
  這裏面賽道的公司指的是在疫情中受益或者在疫情以前就已經在狂奔的業務,好比在線辦公、在線教育、在線生活服務、直播帶貨等,市場上不少HC來自這些賽道里面的公司,技術好,能幹活最受青睞。成熟的業務藉機補強:不少成熟的業務在招聘高級開發解決性能和提效的問題,雖然手上握有HC,可是在發offer時比較謹慎,優中擇優不斷地比較。更多公司在觀望:不少公司凍結HC,甚至出現「軟裁人」的狀況(筆者公司屬於其中之一)。git

2、Android開發面試的幾部分

一、基礎知識

  基礎知識包括幾個部分:Java(JDK、JVM)、Android、數據結構和算法、計算機基礎、設計模式。程序員

Java部分:不太推薦這部分只看博客,由於不少博客並不系統也不完整,推薦完整看一遍《深刻理解Java虛擬機》這本書,基本上這裏面涵蓋了JVM相關的全部面試問題,包括內存分區、GC機制、內存模型、鎖、字節碼、類加載等。JDK的部分會雜一些,基本上能夠歸類爲幾種:容器(必問HashMap、CurrentHashMap、ArrayList等)、線程池(必問)、註解、同步工具、動態代理、notify/wait/sleep。這部分能夠從一些JDK相關的文章中去整理一遍。面試

Android部分:建議看《Android開發藝術探索》,最重要的一點是要跟着源碼讀這本書,書中篇幅所限,不少源碼只有部分,只看書的話並不能理解不少機制是怎麼樣,只有讀源碼才能徹底理解吃透,可是讀源碼的時候最好是找到線索便可,切忌陷入到具體的邏輯裏面不能自拔。這部分必問的是Handler機制、觸摸事件傳遞、四大組件啓動流程、View繪製流程、Binder機制、生命週期。須要完全讀懂源碼,這樣才能解答不少靈活變通的問題。經典的問題好比:算法

  • 觸摸事件必定是先傳遞到Activity而後才傳遞給View的麼?
  • 若是要在Application的onCreate生命週期以前執行一些邏輯,能夠放在哪裏?
  • draw、onDraw、dispatchDraw執行的順序如何?
  • View真正顯示是在onResume以前仍是以後?
  • Activity中嵌套有一個Fragment,startActivity以後,Activity和Fragment的生命週期順序是如何的?

  這些問題可能在不一樣的面試官會有不一樣的變形,只有親自讀懂了源碼才能夠應付這些問題,切忌從一些博客上看到隻言片語就覺得準備萬全了,博客只能做爲參考。最重要是源碼,源碼,源碼!編程

數據結構與算法:這部分在客戶端開發中考察的比例會小一些,不過也有不少公司很是重視手寫代碼。常常碰到的問題有二叉樹遍歷、有序二維數組查找,排序等,基本上以《劍指offer》或者《編程之美》爲準就能夠了。設計模式

計算機基礎:這部分涵蓋的比較雜,好比計算機網絡(7層網絡模型、Http和Https)、git工做流和命令、計算機緩存策略、UML、信息安全等等。數組

設計模式:在本身的項目中必定要多總結和使用設計模式,面試官問你使用過什麼設計模式的時候,若是能回答出好比狀態模式、責任鏈、裝飾等等,確定會加分很多。若是隻是回答單例和建造者模式,那就會遜色多了。這部分推薦看《研磨設計模式》。緩存

開源項目:這個也是必問的環節之一,建議從本身項目使用的開源項目入手,跟着代碼,畫一遍流程圖和架構圖,仔細體會這裏面設計的優勢和缺點。好比OkHttp、LeakCanery等等,這些均可以。開源項目根據面試官的我的經驗不一樣,問的深刻程度也不同,這時候就須要你我的的一些引導技巧,好比面試官可能不是很熟悉這個框架,這時候你能主動表達出這裏面設計的一些細節,也能給面試官留下不錯的印象。切忌在簡歷上寫只是用過可是沒看過源碼的框架。
一些不錯的博客推薦:
基礎知識梳理:澤毛
開源框架鑑賞系列:蘇策
系統源碼介紹:袁輝輝大佬
一些面經面試題整理:www.jianshu.com/p/20754b1ad…安全

二、重點項目經歷

  小廠的項目每每追求業務快速迭代上線,相對比較能容忍一些技術難點,可是這些技術難點每每是能體現一我的技術能力的。因此你若是在小廠,就不能過度陷入到業務中,必須跳出來找一些有亮點的技術點,作好作精。這些技術點纔是一個程序員安身立命的本錢,不然公司業務陷入困境了,你的價值也就不復存在了。在如何準備面試中項目這部分,筆者有幾點心得:性能優化

  1. 分紅三部分:爲何要作這個點,考慮了什麼因素而且是如何作的,取得了什麼效果(好比啓動速度從1000ms降到200ms,這種具體的數據)

  2. 能夠把幾個小點串起來,這樣能夠顯得更系統和全面一些,好比代碼優化和性能優化結合在一塊兒講。

  3. 小廠的一些優化點每每只能作性價比最高的一部分,這時候還能夠講一下業界還有哪些更優的方案

  4. 最好再準備一下「若是你沒有離職項目中還有有什麼不足和能夠優化的地方?」(筆者面試中碰到過幾回這樣的問題)

  小廠跳大廠,技術基礎能夠準備得很充分,可是項目絕對是一個弱項。大廠一個App可能就有幾十上百人在作,小廠不少所謂的優化在大廠的面試官眼中可能都是他們很早就作過了,這時候項目自己作了哪些東西並非過重要,須要着重體現你解決問題的思路以及你是一個有追求的程序員,至少你要能作到業界的平均水平,這樣纔能有機會經過面試。對於不知道如何準備項目的同窗能夠參考一下個人另一篇文章懂球帝Android客戶端WebView優化之路,這是筆者在面試過程當中講的其中一個項目經歷,這裏面就包含了一些架構設計和性能優化。

三、開放式設計思路

  開放式的設計問題須要融會貫通數據結構、設計模式和架構設計等方面的知識,這部分沒有固定的答案,筆者總結了一下這些問題能夠套用的幾個解決問題的思路:

  1. 分治法
    分治法是現代程序設計中很是重要的一個原則,主要是把大問題化解成小問題,再在小問題中去解決各自的問題。
  2. 分層法
    把一個大的系統進行分層,好比View層-Controller層-Model層。把一個大的問題,劃分紅幾個層次,每一個層次的職責和層次之間之間數據流定義清楚,而後再在各個層次中去實現。
  3. 套用常見的模型
    好比生產者消費者模型,「池」的模型(例如線程池、對象池)、緩存模型(LRU)等。

  比較常見的開放式設計思路問題有如何設計一個網絡圖片加載框架、如何設計一個文件下載系統、如何設計一個IM組件等等。這些問題都是很是大的問題,好比圖片加載框架就能夠套用分層法去化解,參考fresco的設計,劃分紅View-Controler-DataSource這樣的層次。大量文件的下載系統能夠套用線程池的模型去設計,這裏就再也不展開講了。

四、技術之外的東西

  大廠面試中技術之外的部分也是很是重要的一部分,這部分大可能是一些軟技能:

  1. 自我驅動和追求
    這部分主要是在平時工做中的一些自我驅動學習和自主追求一些技術能力,而不只僅是完成需求就能夠了,這樣才能體現出你我的的成長性和潛力。
  2. 溝通和協做
    這部分會評估你將來在團隊的融入程度以及跟團隊跨團隊協做和溝通的能力。好比你在工做中是否能正確看待和解決一些跨部門溝通的問題。

下面是我我的整理的整個面試的一些知識圖譜,這上面的知識點基本上都是面試過程當中問到的,屬於必知必會的知識點,若有須要能夠留下郵箱,我發一下xmind格式的文件

3、與面試官聊天的收穫

  雖然不少面試都是在問問題和答問題中度過的,可是仍是有一些面試官在面試完成後會對個人面試結果作一些總結和評價,這裏面也收穫頗多,跟你們分享一下。

一、大廠和小廠的選擇

  不少剛進入職場以及學生會有這方面的困惑,不過我仍是簡單粗暴地回答一下這個問題吧,建議去大廠。由於這幾個方面的緣由:

  1. 大廠周圍的小夥伴大機率更優秀。
  2. 幾年後小廠和大廠的程序員市場溢價不一樣。一樣工做年限的程序員,大廠自然要比小廠的溢價高不少。
  3. 小廠更強調業務的快跑,忽視人的成長。不少小廠會在不一樣的業務方向上投幾我的作出一個App出來試試市場反應,不少人就不得不重複作以前已經會的一些功能,並且不少小廠用戶量很小,並不關心所謂的性能架構,由於優化了一個性能,能受益的用戶也很是少,還要佔用開發業務的時間,你的老闆和業務部門也是很是不樂意的,這對於一個程序員的成長是很是不利的。若是一個小廠宣稱本身的團隊主要成員主要來自百度、新浪、網易等大廠的時候,你須要格外注意一下,這並不表明你進入這個團隊後能成長成百度的標準。

二、5年左右的開發的標準

  這裏說一個標準,5年左右開發經驗的工程師,應該在某個或者某幾個方向上是整個公司的專家和標杆。好比設計能力、網絡優化、性能優化、音視頻等等,5年左右的開發不該該僅僅知足於實現一些業務需求,應該更深刻了解底層的原理和技術,這樣在將來的跳槽中才能有更高的溢價,好比從抖音出來的音視頻工程師就能在市場上享受很是高的溢價。

三、關於成長和職級

  主動去承擔高一個職級的事情,天然而然你的職級也會跟着提高。不少同窗包括我以前也是認爲把我本身的事情作好了,找一些項目的亮點再去PK晉升職級。然而阿里的面試官跟我聊這個問題的時候給了一個新的思路:不少P6的同窗升級到P7是由於他們已經在作而且能作好P7的事情了,因此他們升了P7你們都以爲瓜熟蒂落。從這個角度看職級和晉升,是否是角度不同了呢?

寫在最後

在不斷的糾結比較後,筆者最終選擇字節跳動的飛書團隊做爲職業生涯的下一站,團隊正處在擴張期,特別是客戶端,歡迎最近在找工做的小夥伴投遞簡歷,能夠直推部門的相關職位,也能夠幫忙內推其餘職位,目前咱們在作AI相關的一些業務,仍是挺有意思的,歡迎來撩。
職位大全
郵箱:txlbupt@gmail.com

相關文章
相關標籤/搜索