最近又有朋友問我:“安卓開發是不是沒人要了,除了畫 UI 別的都不會怎麼辦?”
考慮到這可能是很多人共同的疑問,決定簡單寫一下。
不是Android開發沒人要了,是初級Android沒人要了。現在還在大量招聘移動端開發的,基本是大廠的明星應用或者是創新業務。大廠校招生那麼多,畫介面的工作基本上校招生都能勝任,那社招當然要求會更高些。
Android開發,甚至包括 iOS 開發,除了 iveg(if visible else gone),還有很多點值得學習的點。
這裡我結合一些移動端金字塔頂端職位(技術經理、架構師、負責人)的要求,整理出值得我們重點學習的十點。
移動端職位要求高階Android開發:
了解常見的APP效能優化解決方案,對至少一個維度的效能優化有過較深入的挖掘熟悉 JNI 以及 NDK 相關的技能,熟悉 C/C++對業務開發的痛點有深度理解,了解常見開發框架的優缺點和適用場景動態化相關技術框架的探索和完善,熟悉Flutter、Reactive Native、以及其它客戶端動態化開發框架者優先;熟練使用Kotlin、Flutter開發者優先Android架構師:
負責客戶端架構設計及元件化構建;參與研發流程優化和基礎平臺搭建。優化 Android 團隊的開發方式和流程、規範,提高團隊效率主導過至少一個知名 Android APP 的架構計算機基礎紮實,熟悉常見資料結構、演算法和設計模式,熟悉資料庫開發有IM架構經驗者優先Android技術經理:
對穩定性和效能有超乎尋常的關注,能夠編寫自動化測試程式碼有iOS、Web前端或Web後端經驗優先有知名開源作品優先,熟悉flutter/reactnative/js/bash/python/ruby等語言和相關框架優秀的溝通及表達能力,規劃組織能力,能帶領團隊規劃和實現產品、技術需求移動端負責人:
理解業務,將業務目標轉化為團隊的工作成果5年以上移動端開發經驗,3年以上團隊管理經驗;負責過百萬日活以上使用者規模或者較高複雜度App的 完整開發 過程善於帶領團隊,能夠充分調動成員的積極性,能培養成員的能力優秀的跨團隊溝通能力,善於專案管理,能夠將技術的價值最大化有C++、JNI等基礎技術能力加分,有web前端技術能力加分要求很多,有一些是日常工作就能涉及到的,其餘的就需要自己額外多投入精力了。
基礎部分:
紮實的JAVA基礎,熟練掌握面向物件(OOP)思想,熟悉java序列化機制實現Android下IPC的機制。好的開發習慣,一心追求流暢順滑的UI體驗,對程式碼有潔癖。熟練掌握Android四大元件(Activity,Service與intentService,LocalBroadcastManager的BroadcastReceiver,ContentProvider)。熟練使用集合、IO流及多執行緒斷點上傳下載,和執行緒池的使用。熟悉掌握RecyclerView,ListView等重要控制元件的使用和優化及(AsyncTask)非同步任務載入網路資料。熟練掌握Android中的多點觸控(手勢識別器)、熟悉Android下View的事件分發機制與並能處理滑動事件衝突處理。熟練處理Activity和Fragment和ViewPage的配合使用,並能熟練處理Activity和Fragment,Fragment和Fragment之間的通訊。熟悉掌握Android系統下的廣播(耳機的插拔,網路狀態變化等)的相關功能開發。熟悉Android下資料的加解密base64,DES,MD5加密和9patch圖製作來完成UI,熟悉Android影象處理之Bitmap類。介面UI:
熟練使用Android下常用的佈局設計,新版本Material Design佈局和設計,熟練自定義控制元件和一些主流的第三方控制元件的使用等。熟悉Android中的動畫,選擇器,樣式和主題的使用,能夠實現市面上大多數動畫效果。熟練並能獨立解決市面上各種Android機型螢幕的適配(圖片適配,Dimens適配和AutoLayout適配等等)。網路與通訊:
熟悉Android下的Handler訊息機制(Handler,Message,MessageQueen,Looper,HandlerThread),並能熟練使用Handler和熟悉使用EventBus 3.0和RXandroid機制。熟悉XML/JSON資料解析和生成JSON/XML,以及Android下SQLiter資料庫儲存方式(greendao,ormlite)。熟練使用ContentProvider來獲取和更改手機系統中通訊錄、簡訊的資料。熟悉Android下混合開發,原生App和HTML5的使用,和js互動,資料通訊。熟練使用Android開發中重要模組的開發如:網路請求(AsyncHttpClient,Volley,OkHtttp,NoHttp,Xutils3.0裡的網路請求API等)。熟悉基於Xmpp通訊協議的IM(即時通訊)開發,和第三方IM的開發SDK(融雲SDK等)。熟悉介面間的資料傳遞(intent和EventBus3.0等等),程序間通訊(AIDL,檔案共享等等)。熟悉Android下網路通訊技術,對Socket通訊、TCP/IP、Http有一定的了解和熟練使用。資料持久化:
熟悉Android開發的資料(圖片,文字,檔案等)的快取技術,並且能夠對圖片的優化進行相應的處理,熟悉ASimpleCache,LruCache快取和DiskLruCache快取使用。框架模式:
熟悉掌握MVC模式,單例、工廠,觀察者,模板等設計模式。熟練使用市面上主流技術的Android開發常用框架(greedao,ormlite,EventBus3.0,PullToRefresh,Xutils3.0等等)。異常與除錯:
掌握OOM、ANR異常和各類友盟統計上的BUG的處理和熟練處理App全域性Crash異常處理,並可以對應用進行相應的優化。熟練使用程式碼品質檢測工具FindBugs和記憶體洩漏檢測工具 LeakCanary,更好的修正程式碼品質。第三方及功擴充套件:
熟悉android 的JNI/NDK開發,通過JNI實現JAVA與C程式間的呼叫及回撥資料通訊。熟悉使用支付寶,微信支付的SDK和銀行的卡SDK的接入,為App增加支付模組。熟練使用Android下的GPS定位和(接入百度地圖定位SDK實現定位,標記,搜尋等功能)。熟悉主流常用的第三方SDK(友盟統計,極光送,QQ和微信的三方登陸和分享SDK,基於訊飛語音的文字和語音的相互轉化開發)。熟悉Android環境下的各類手機感測器開發(光感測器,方向感測器等等)。熟悉Android的二維碼開發,生成碼和解析碼,掃描碼的開發。熟練掌握Android手機中的3G/藍芽/wifi的網路通訊機制。熟悉安卓技術中的視訊播放開發技術(videoview,MediaPlayer ,Vitamo,VLC)。熟練使用Android開發中圖片處理(imageloarder,fresco,picasso,Xutils3.0裡的圖片載入API等)。其他:
熟練掌握SVN版本控制工具及Eclipse、尤其是Android Studio和Studio下的DEBUG除錯工具的使用。熟悉android各版本SDK的差異及特性。熟悉Android5.0和6.0以及7.0新特性(RecyclerView,MD設計,ART模式等)。熟悉安卓App的線上App的熱修復技術(Andfix和Hotfix),熟練使用的Hotfix熱修復功能。熟悉Android程式碼的混淆機制和多渠道打包,和後期的市場釋出上線App的BUG修復維護和優化。熟悉App(需求,評審,開發,測試,打包,釋出市場,後期維護和迭代等一系列流程)和獨立開發經驗。接著看下,從這些繁雜的要求裡提煉出的 10 個關鍵點:
關鍵點:
穩定性和效能優化,至少深入一個點可移植開發(JNI NDK C++)框架優缺點、場景動態化,RN Flutter,其他方案客戶端架構設計元件化構建研發流程優化基礎平臺搭建其他端經驗跨團隊溝通能力、規劃組織能力、團隊管理經驗、調動成員的積極性、培養成員最後本文梳理了Android 開發者進階過程學習的一些知識點和一些我個人的建議。關於Java基礎、Android 基礎、Android 進階 ,只是作了知識點梳理,沒有解答,點到為止。要詳細學習這些知識點還需自己去看書、看部落格、查資料等。當然了,本文所列出的知識點還不完全,要比較系統的學習,可以買一本書進行學習。
最後為了幫助大家深刻理解Android相關知識點的原理以及面試相關知識,這裡放上我搜集整理的2019-2020BAT 面試真題解析,我把大廠面試中常被問到的技術點整理成了【PDF】,包知識脈絡 + 諸多細節。
節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習。
《960全網最全Android開發筆記》
《379頁Android開發面試寶典》
《507頁Android開發相關原始碼解析》
騰訊、位元組跳動、阿里、百度等BAT大廠 2019-2020面試真題解析
直接私信我【資料】領取【Android超硬核面試資料+Android開發相關原始碼解析+知識筆記】
看五年想三年,認真做好一兩年。與其臨淵羨魚,不如退而結網,努力掌握這些點吧,奧利給!