Android開發三年,被迫無奈歇業丟失坑位,重新出發找到對的“大廠進擊攻略”很重要!

南方吳彥祖_藍斯發表於2021-07-29

背景

近幾日看到有部分網友發帖曬自己的面試經歷,有成功拿到offer的,也有面試不順的。接下來我們看一份Android開發3年左右,面試求職時遇到的一些挫折和困惑。

1、Android開發,待了3年的小創公司突然沒了,上哪去找我的“坑位”?

首先介紹一下自己的情況。目前所在的是一家小的創業公司,待了 3 年多,薪資一般吧。由於這幾年公司也在轉型。工作經歷大概可以分為 3 個階段。

第一階段是從進公司開始做 android app 開發,無論是外包或者公司的主力產品都做過。

第二階段是做 ROM 開發,由於公司規模不大,除了硬體和底層的東西外,基本上是一個人負責了整個 ROM 的修改,編譯,釋出(基於 MTK 的某一個 rom,然後做一些 android framework 層面上“奇奇怪怪”的定製)。

第三階段,也就是當前。之前做的 ROM 所適配的手機銷量未達預期,公司也不再準備投入更多,基本上是做做簡單的維護。而我被分配的新任務是做機器學習的一些東西,比如 Tensorflow, OpenCV 做做圖片處理,訓練之類的。

我對於自己的評價:

Android app 開發能力一般,但是足以勝任一般 app 開發的任務(因為確實有段時間未做公司正式專案的 app 開發,但是也不是說已經荒廢了技能);

Android frameworks 方面比普通開發者瞭解更多;

解決問題,學習實踐新技術的能力不錯(無論是從第一次編譯 AOSP 到後來整個 ROM 的開發,釋出。還是從對機器學習完全陌生,到現在能夠描述常見機器學習的演算法,使用 Tensorflow 實現一些這方面的需求)。

說到昨天的面試,面試官幾乎是按照他所準備的 Android 面試題一一提問。如:View 自定義,handler 機制,記憶體洩漏等。我的表現則讓自己非常不滿意,他問的這些我大部分都能答上,但是我自己所組織的語言,描述的結果卻差強人意。大部分是因為我自己表達能力的問題,我覺得這些問題如果是作為筆試題目,我能夠更從容的回答。我更期待的是對於我自己專案經歷的說明。因為這是我和其他應聘者不一樣的地方。而面試官卻完全沒問我簡歷上的專案經歷。雖然最後我還是自己硬講了一下,但面試官也並未有興趣,我講的也很乾癟。最後面試就這樣結束了。

我自己的想法: 自己準備不充分,沒能幹淨利落地應對這些“ Android 標準面試問題”。至少這些基礎問題應該能夠一兩句話就講清楚。完全沒有體現出自己區別於其他應聘者的地方。我認為自己能夠又更快又穩的做好開發工作,能夠深入的研究框架,原始碼,解決一些疑難問題,而我要怎麼才能讓面試官也這樣認為?

2、做了三年Android,公司發不出工資了,怎麼辦?

座標重慶,做 Android 也三年多了。畢業後就來的這家公司,因為工資發不出了(最近開始把三個月前的工資分期發出來了),所以開始找後路。

但是發現簡歷真的沒有什麼寫的地方,之前群裡一個老哥天天說要招人,我好不容易懟了一個簡歷過去,對方表示這樣不行的。 然後我要了一份所謂的參考資料過來。

一看對方寫著給 aosp 貢獻過程式碼……帶領小組啥的……

作為一個搬磚工,哪裡來的這些經驗。

所以問一下各位大佬,你們是怎麼寫自己的簡歷的。

接下來談談我個人的看法

關於第一個網友最後這句“我認為自己能夠又更快又穩的做好開發工作,能夠深入的研究框架,原始碼,解決一些疑難問題,而我要怎麼才能讓面試官也這樣認為?”

他的困惑在於如何展示自己的亮點以彌補不足(準備面試題不充分)。這是個學問,我認為是遠超你背題的意義:

1、無論我們是做前端 /後端 /框架 /底層硬體 /演算法,我們所服務的最終是一個手機 app。所以我們務必要有一個成品 App 作為展示(非 demo )。這比一通把面試官唬懵比的胡謅更能打動他(對方水平越低,這個越有效)。最好同時有一個競品作對比,凸顯優勢(競品當然是你自己選擇了)。如果對方開始問我們是怎麼實現的。這就到我們的主場了。

2、我們要有除了 App 開發以外的特長。上述網友提到了 TF,正好可以用上

3、我們同時需要面試預演。沒有人的話自問自答,有人配合我們的話更好。目的就是,把話說清楚。說起來簡單,但是很多初次面試的人連話都說不好。這直接影響人第一印象。對於技術面試來說,更需要注重用詞。配合 1 使用效果更佳

要不要去刷題 /背面試題,我認為是要的。(上面說的是一個準備不充分的情況)

1、面試更加踏實,還可以作為自己臨時的應答儲備 2、彰顯態度。“花很多時間去背題”本身就是對面試的重視,至於效果如何另說。 3、對自己有的知識查漏補缺,鞏固深化。 怎麼看都是好事情。如果面試官看出你刷題並認為刷題是一個不好的點,那是他境界還太狹窄。

Android 技術的發展。在人才市場來看真的是頭重(前端)腳輕(後端),會有這種窘況也是正常。而上述網友三年技術經驗,我覺得視野應該不僅侷限於 Android。

關於簡歷

基礎資訊部分:

1、 簡歷頭部可寫姓名、聯絡電話和郵箱。(醒目,讓別人想聯絡你的時候一眼看到)。 2、 目標職位:明確,不要含糊其辭,最好針對公司所發的招聘職位填寫(海投一般效果不好) 3、職業意向:如:業務功能模組開發、還是架構設計。 4、 目標薪資:可以寫面議,也可以寫目標月薪(最好以範圍為主)。

工作經歷、教育經歷:

如果是985、211院校可寫在基礎介紹之後,工作經驗之前。如果是一般本科或者專科,可在後面一帶而過。

工作經歷:根據工作經驗寫,內容儘量多。把具體負責或者參與的事情寫出來。通常一個專案包含如下幾個模組:

1、 參與系統分析設計 2、 功能模組的開發(這裡可以具體到什麼功能); 3、 功能缺陷的修改 4、 系統維護(系統問題處理,系統升級)(所有的專案都會用到)

專業技能:

如果你是工作一兩年經驗的(或編寫一兩年工作經驗),基礎技能大概介紹一下就可以了。

最好根據公司所招聘崗位的要求,針對性強調突出技能,也可把自己擅長的技術強調一下。忌寫一大堆技術名字,讓別人一看就是培訓班出來的。

專案部分:

1、先介紹環境:如使用 Jetpack + glide + OKHTTP等) 2、專案描述部分:簡單為主,控制在兩到三行。面試官基本上看專案名稱就知道是什麼,一般不會細看。 3、重點:責任描述,越詳細越好。

技術描述:

表示所用到的技術亮點。如果你對自己的技術不自信,請慎用。一般面試官會直接就該部分提問。但是如果你確實有工作經驗,可總結一下工作中使用的一些新技術、難技術。這是道加分題。

Android開發發展方向

很多人會覺得Android技術深度不深,技術棧不龐大,Android職業發展有限,這個真是大大的誤解。

先說技術上,Android的技術棧隨著時間的推移變得越來越龐大,細分領域也越來越多,主要有Android應用開發、逆向安全、音影片、車聯網、物聯網、手機開發和SDK開發等等,每個細分領域都有很多技術棧組成,深度都足夠精深,就拿所有細分領域通用的Android系統底層原始碼來說,就會叫你學起來生不如死。

再說職業上,確實Android應用開發很難升任CTO,一般的CTO主要是後端,這主要是兩個原因:

1、後端的技術棧很早就成熟了,我8年前轉做Android開發時,那幫30多歲的Java開發就已經很厲害了,隨著時間的推移,後端技術大牛遠比Android大牛的人數要多,也更厲害,他們做技術經理時,我們都還在搬磚。 2、後端確實可以統籌全域性,在公司業務上屬於重要地位。

不過我們忽略了最重要的一點,如果我們是做後端的,一定能做到CTO嗎?我想也是很難的,所以不要眼睛只盯著高處,先想想自己能達到什麼程度,站在半山腰就說山下面的風景不開闊本身也不合理啊。

如何提升自身競爭力

選擇一個細分領域

Android現在細分的領域非常多,前面說到的有應用開發、逆向安全、音影片、車聯網、物聯網、手機開發、SDK開發和智慧電視盒子開發等等,在這些領域中選擇一個並不斷深入。比如音影片,在8年前我剛入門Android時,音影片就是悶聲發大財了(PC端),工資高的令人乍舌,現在在移動端,音影片更是青出於藍,是一個非常好的選擇,如果想要入門可以看看何俊林《Android音影片開發》。

儘量學習半衰期長的知識

知識半衰期指的是:隨著知識更新週期變短,知識裂變速度加快,一個知識落伍的週期。知識半衰期長的職業都是越老越值錢的,比如英語老師和外科醫生,知識更新慢並且幾乎不會落伍。這一點我們程式設計師是絕對比不了的,我們的大部分知識半衰期是比較短的,一個框架短短几年可能就會被淘汰,這也導致程式設計師需要不斷的學習新知識,而我們每個人的時間和精力是有限的,那麼根據知識半衰期,有策略的進行學習就變得尤為重要。

上面的半衰期圖不完全準確,但是卻值得參考,如果你是其他的技術領域也可以參考這個半衰期圖。這個圖不是告訴我們不要去學RN和小程式,而是結合自身工作儘量學習半衰期長的知識。

做減法,儘量專精一門技術

現在的社會,技術分工越來越細,越細就意味著大部分企業(小作坊除外)需要專精的人才(最好是精通一門通多門)。你會發現身邊脫穎而出的技術人大多都是靠一門技術,卻很少看到會一堆技術卻都不精通的冒出來。好比在武俠的世界,高手對決都在同一個時間段拿出看家武學,如果看家武學都不精,分分鐘被虐,剩下的武學也無需拿出來獻醜了。聯想到現實版本就是去大公司面試Android,結果Android技術瞭解不深,被各種虐,剩下的前端技術、後端技術、python什麼的,面試官也沒興趣瞭解了。 所以並不是你會的技術越多越好,一定要做好減法,先專精一門,然後再去學別的技術。

說說最近Android火熱的技術

Android相關的火熱技術最近幾年也是頻出,沒事就在刷屏,我來說說對這些火熱技術的看法。

  • Kotlin,從知識的半衰期來看,這門語言非常值得學習,不過想要普及還是非常難,因為Kotlin還沒有表現出非用它不可的競爭力,另外很多企業使用的成本比較高,大多數領導都是不求有功但求無過,不會下力氣推廣。
  • Flutter,從知識的半衰期來看,這個框架存在的時間相對不會長,目前也就一些有技術儲備的公司去試驗去嘗試,如果自己公司技術儲備不夠,就貿然當小白鼠顯然不是很明智。

這兩個技術都建議大家來學習,但不要指望它們會給你增加什麼太大競爭力,李四1周能學會,張三同樣也能。

Android進擊大廠常見問題彙總

1、網路

  • 網路協議模型
  • TCP 和 UDP 區別
  • TCP 三次握手
  • TCP 四次揮手
  • POST 和 GET 區別
  • HTTPS

2、Java 基礎&容器&同步&設計模式

  • StringBuilder、StringBuffer、+、String.concat 連結字串:
  • Java 泛型擦除
  • ArrayList、LinkedList
  • HashMap 、HashTable
  • ArrayMap、SparseArray
  • volatile 關鍵字
  • wait 和 sleep
  • lock 和 synchronized
  • 可重入鎖
  • 公平鎖
  • 樂觀鎖和悲觀鎖
  • 死鎖 4 個必要條件
  • synchronized 原理

3、Java 虛擬機器&記憶體結構&GC&類載入&四種引用&動態代理

  • JVM
  • JVM 記憶體模型
  • JVM 記憶體結構
  • GC
  • 回收型別
  • 判斷一個物件是否可被回收
  • GC ROOT
  • 四種引用
  • ClassLoader
  • 雙親委託模型
  • 動態代理原理及實現

4、Android 基礎&效能最佳化&Framwork

  • Activity 啟動模式
  • View 工作原理
  • 事件分發機制
  • Window 、 WindowManager、WMS、SurfaceFlinger
  • View 動畫、幀動畫及屬性動畫
  • Handler、MessageQueue、Looper
  • MVC、MVP、MVVM
  • Serializable、Parcelable
  • Binder
  • IPC 方式
  • Android 系統啟動流程
  • App 啟動流程
  • 程式保活
  • 網路最佳化及檢測
  • UI卡頓最佳化
  • 記憶體洩漏場景及規避
  • LeakCanary 原理
  • OOM 場景及規避

5、Android 模組化&熱修復&熱更新&打包&混淆&壓縮

  • Dalvik 和 ART
  • APK 打包流程
  • App 安裝過程
  • 元件化路由實現

想要達到大廠標準到底要深入學什麼?

根據知識的半衰期,作為Android應用開發最應該學習的就是Java、App開發相關技術、Android系統底層原始碼、資料結構、設計模式、網路相關等等。

但是大部分實際開發中,演算法是最不常用的,經常是為了面試去學的,那麼剩下的內容都是需要深入學習的。

如果你覺得自己學習效率低,缺乏正確的指導,可以參考下我下面分享的學習路線:

學習一線大廠的各項技術:

大廠是我們的技術先驅,不僅僅是各種技術,還有很多令你大開眼界的使用方法,學習這些有利於自己競爭力的提高,深入理解後也可以提升你的學習效率。

現在競爭這麼激烈,只有透過不斷學習,提高自己,才能保持競爭力。

1.2020大廠面試高頻知識點

  • 圖片
  • 網路和安全機制
  • 資料庫
  • 外掛化、模組化、元件化、熱修復、增量更新、Gradle
  • 架構設計和設計模式
  • 效能最佳化
  • Android Framework
  • Android優秀三方庫原始碼

2.Jetpack架構元件從入門到精通

  • Android Jetpack - Navigation
  • Android Jetpack - Data Binding
  • Android Jetpack - ViewModel & LiveData
  • Android Jetpack - Room
  • Android Jetpack - Paging
  • Android Jetpack - WorkManger
  • Android Jetpack架構元件之Lifecycle
  • Android Jetpack Compose 最全上手指南

3.Framework精編核心解析

主要內容包含:

  • 深入解析Binder
  • 深入解析Handler
  • Dalvik VM 程式系統
  • 深入解析 WMS
  • PackagerManagerService

4.Kotlin強化實戰(附Demo)

  • 第一章 Kotlin入門教程
  • 第二章 Kotlin 實戰避坑指南
  • 第三章 專案實戰《Kotlin Jetpack 實戰》
    • 從一個膜拜大神的 Demo 開始
    • Kotlin 寫 Gradle 指令碼是一種什麼體驗?
    • Kotlin 程式設計的三重境界
    • Kotlin 高階函式
    • Kotlin 泛型
    • Kotlin 擴充套件
    • Kotlin 委託
    • 協程“不為人知”的除錯技巧
    • 圖解協程:suspend

5.Android設計思想解讀開源框架

  • 熱修復
  • 外掛化
  • 元件化框架設計
  • 圖片載入框架
  • 網路請求框架
  • RXJava 響應式程式設計框架設計
  • IOC 架構設計
  • Android架構元件Jetpack

6.NDK模組開發

  • NDK 模組開發
  • JNI 模組
  • Native 開發工具
  • Linux 程式設計
  • 底層圖片處理
  • 音影片開發
  • 機器學習

定期面試:

光學習了大廠的技術還不夠,如何瞭解當下Android市場需要哪些技術呢?

定期的面試足以讓你瞭解當下市場需要哪些技術,也更加容易確定自身的短板在哪,同時,也可以督促自己學習提升(小夥子,你瞭解的技術有點落伍了呀…)

萬一拿到了高薪Offer,豈不是更賺?

多看大佬的學習筆記,學習大佬的設計思想:

只要是程式設計師,不管是Java還是Android,如果不去閱讀原始碼,只看API文件,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。

真正最能鍛鍊能力的便是直接去閱讀原始碼,不僅限於閱讀各大系統原始碼,還包括各種優秀的開源庫。

以上這些內容均免費分享給大家,需要完整版的朋友, 。或者點選 【 】 檢視獲取方式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2784193/,如需轉載,請註明出處,否則將追究法律責任。

相關文章