Android開發三年,被迫無奈歇業丟失坑位,重新出發找到對的“大廠進擊攻略”很重要!
背景
近幾日看到有部分網友發帖曬自己的面試經歷,有成功拿到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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android開發要達到阿里P7水平,很難嗎?憑什麼人家能進大廠?Android阿里
- 標準的開發框架,對企業開發有多重要?框架
- 路由問題很無奈!路由
- 劍指大廠:小白入職大廠完全攻略,很肝~
- android開發板USB連線PC後adb口丟失 解決Android
- Wavemaker:2020年重新出發
- Android Flutter 混合開發高仿大廠AppAndroidFlutterAPP
- 2020重新出發,NOSQL,Redis的事務SQLRedis
- 為什麼說它對 Android 未來的發展十分重要?Android
- 實屬無奈!Redis 作者被迫修改 master-slave 架構的描述RedisAST架構
- 電視行業激變:傳統廠商們被迫進入大逃殺模式行業模式
- Web快速開發:一套標準開發框架對企業有多重要Web框架
- 三年啦,跳槽成功的Android開發面經總結!Android
- 蘋果手機恢復出廠設定如何資料不丟失(蘋果企業開發者賬號)蘋果
- 伊朗:美國很努力地發動網路攻擊,但是失敗了
- Android 開發的出路和精進之路Android
- Android應用開發進階Android
- 學Python開發,學歷到底重不重要?Python
- 高併發下丟失更新的解決方案
- 2020重新出發,NOSQL,Redis主從複製SQLRedis
- 2020重新出發,MySql基礎,效能優化MySql優化
- Android SDK 開發——釋出使用踩坑之路Android
- 無程式碼開發讓程式設計師面臨失業?程式設計師
- 2020重新出發,NOSQL,redis高併發系統的分析和設計SQLRedis
- 論統一開發平臺對企業資訊化的重要性
- 為什麼GOPROXY對Golang開發如此重要Golang
- 因疫情失業後,一對夫妻是怎麼開發遊戲的開發遊戲
- 三年經驗老開發一路跌跌撞撞面進大廠,該說不說這份Android面試題筆記挺牛逼!Android面試題筆記
- php公眾號開發,訊息丟失的原因和解決辦法PHP
- 應對網路攻擊減少資料丟失的3種關鍵方法
- Kotlin對決Java:Android開發的選擇?KotlinJavaAndroid
- 企業開發app具有重要意義APP
- 2020重新出發,JAVA語言,什麼是JAVA?Java
- 2020重新出發,MySql基礎,MySql字符集MySql
- 公鏈開發中最重要的三大環節
- 重組raid會丟失資料嗎AI
- Nginx轉發導致請求頭丟失Nginx
- 企業“重要時刻”,如何保障安全萬無一失?