面試大廠屢屢被拒,感覺五年青春打了水漂!現在Android開發到底需要會些什麼……

5年工作經驗跳槽大廠爲何屢屢被拒?

工作遊刃有餘,爲何面試0分?
你這是遇到了職場瓶頸!

一位求職了一個月的老朋友發牢騷:“明明那麼多年的工作經驗,自己也做了幾個項目,但是面試總是不順利。新技術覺得學不動,原技術雖然能熟練使用,但是都一知半解。工作中游刃有餘,一遇面試就坑坑巴巴,HR問什麼都說不明白,哎!”

這就是【瓶頸期】的典型表現。

大部分程序員可能在工作3-5年左右會感覺到自己的瓶頸,在技術上難有突破,薪資也不符合自己的期望;有的人選擇繼續深挖技術,但面臨長時間內收效甚微的窘境,還有些選擇嘗試轉型其他方向或者晉升管理。

還有一種瓶頸出現在轉型後,在新領域突然感覺自己沒有職業規劃,不能確定自己的核心競爭力,而且學習到的知識不夠完善,很難派上用場,短時間內也一直在做着「數據清洗」和「數據支持」的工作,甚至都不知道自己的瓶頸在哪裏

我在做技術面試官的時候,面試對象大多數是初級開發和高級開發,偶爾也會面試架構師。我發現,IT人的工資固然和相關技術的使用年限有關,但如果候選人的技能無法跨越到更高層次的話,他們的收入也就會停留在當前級別,哪怕工資年限再多,也無法提升工資水平。

比如,我就面試過不少工作了5、6年的程序員,他們的技能也就停留在增刪改查階段,那麼只能領到初級程序員的工資。更可悲的時,在面試過程中我發現他們甚至不知道上升的途徑和方式,這樣的話,可能當他們有10年經驗時,或許還只是初級程序員。

身爲一個Android程序員,如何才能儘快的突破自身的瓶頸,得到快速的提升呢?通過多年的開發工作和開發管理工作,對於這些瓶頸從硬技能和軟技能兩個方面給出了以下若干突破瓶頸的建議:

硬技能:專業的技術知識

1、Java / Kotlin開發語言

Java

常用數據結構:

  • ArrayList、Vector、
  • CopyOnWriteArrayList、
  • HaspMap、ConcurrentHashMap、
  • HashTable 等使用場景。

JVM 虛擬機包括 Java 內存管理,GC 垃圾回收機制,類加載機制。推薦書籍:《深入理解 Java 虛擬機 JVM 高級特性與最佳實踐》。

多線程編程,包括線程池,鎖機制,線程同步 。推薦書籍:《Java 併發編程實戰》和《Java 多線程編程核心技術》。

AOP 編程實現,包括 JDK 動態代理實現,ASM 直接操作字節碼、CGLIB 實現,其原理封裝了 ASM,使用更方便。

Javassist:在字節碼加載前直接修改需要切入的方法,以及註解處理器 APT,這在 Android 中開源的庫應用較多,比如 DataBinding , ButterKnife, EventBus3 等等。

異常處理 Exception,包括檢查性異常、運行時異常處理。

IO 流相關,包括堵塞型 IO 和非堵塞型 IO。

Java 的一些高性特級,比如反射、代理、泛型、枚舉、正則表達式等等;同時瞭解一下 jdk1.8,1.9,1.10 等新特性。相關書籍比較多,推薦《Thinking in Java》《Effective Java》

Kotlin

Kotlin 是一個基於 JVM 的新編程語言,在 Google IO 2017 中被 Google 宣佈成爲 Android 官方開發語言。

Kotlin 有哪些優點?

①簡潔性:提供了很多標準函數,大大減少樣板代碼的數量。
②安全性:避免空指針異常等錯誤。
③互操作性:充分利用 JVM、Android 和瀏覽器的現有庫。
④工具友好:可用任何 Java IDE 或者使用命令行構建。

在 Kotlin 中要樹立函數式編程思想。把函數理解爲一個值到另一個值的映射關係,以函數作爲單元來處理各個業務邏輯,函數既可以做參數,也可以作爲返回值。多使用 Kotlin 提供的標準函數,比如 let、run、with、apply、also、 Lambda 表達式。儘量使用閉包和高階函數。

Kotlin 的另一個突出特點是協程,爲設計異步、非阻塞的程序提供了強大的範式。協程是一種輕量級的線程,它提供避免阻塞且更廉價可控的操作: 協程掛起。將複雜異步操作放入底層庫中,程序邏輯可順序表達,以此簡化異步編程。

2、Android 進階技術點

進程相關,包括 App 進程原理以及 AIDL 原理。

性能優化,包括:內存,cpu,耗電量、網絡請求、UI 佈局、線程、數據庫等優化方法以及優化工具的使用。

Android 源碼相關,包括:Binder 機制,Activity 啓動流程,Handler 原理,AMS ,PMS,WMS 原理,View 的繪製流程,Touch 事件傳遞機制等等。

編譯打包流程,從 java/kotlin 源碼到最終形成 APK 的過程。

熱修復的實現原理,目前熱修復框架的種類繁多,常見的包括底層替換、類加載和 Instant Run 方案。

逆向工程原理,主要是爲了防止 apk 被反編譯破解,以及瞭解 apk 加固方案。

插件化,目前方案同樣很多,主流的技術實現是 Hook 方式,註冊 Activity 進行佔坑,使用佔坑 Activity 通過 AMS 驗證,還原插件 Activity,其他組件的原理也大致類似。

NDK 開發,調用 JNI 以及回調 Java 的方式。

自定義控件,需要注意 onMeasure,onLayout,onDraw 的調用時機,以及 Touch 事件分發機制。

動畫 View Animation,視圖動畫在很早的 Android 版本系統中就已經提供了,只能被用來設置 View 的動畫。

屬性動畫 Property Animation,只對 3.0 以上版本,可以設置給任何 Object,包括還沒有渲染到屏幕上的對象。這種動畫是可擴展的,可自定義任何類型和屬性的動畫。

Webview 中 Native JS 交互,常用的 JSBridge 等。

Gradle 的特性以及 DSL 語法,比如 Gradle Transform API 的使用,它允許第三方插件在 class 文件轉爲 dex 文件前操作編譯好的 class 文件。利用這一特性,我們可以在代碼編譯階段實現代碼注入或者代碼修改,這也是很多埋點技術和熱修復技術的基礎。

安全性:HTTPS 通信原理,數據加密方式,包括 MD5,RSA 等,webview 安全性,代碼混淆,數據驗籤,組件通信安全,服務器通信。

CI 持續集成:Jenkins ,Gitlab CI 等搭建持續集成開發工具。

Sersor 傳感器:包括陀螺儀,加速傳感器,方向傳感器,重力傳感器,光線傳感器等。

Android 開發國際化

ART 和 Dalvik 虛擬機的區別,主要是 AOT,Ahead-Of-Time 預編譯。

熟悉 DEX 文件結構。

單元測試

JUnit4,AndroidJUnitRunner,

Mockito 框架的使用。

自動化測試:Monkey / Monkey Runner ,Espresso ,UI Automator 等。

掌握模塊化開發方式:主要注意分好層、模塊間跳轉通信。

代碼重構能力,推薦書籍:《重構改善既有代碼的設計》、《重構與模式》

Google 動態化框架 App Bundles

Jetpack,Google 推出的新一代組件、工具和架構指導,旨在加快 Android 應用開發速度。Jetpack 主要分爲 4 部分:

Android開發常用的第三方庫:

  • 響應式編程:RxJava、RxAndroid,Google 的Agera
  • 網絡庫:包括Retrofit,OkHttp,Volley
  • 圖片:Fresco,Gilde,Picasso
  • 依賴注入:Dagger2
  • 數據庫:Realm,ORMLite,GreenDAO,ObjectBox
  • 數據總線:EventBus,otto

內存泄漏檢測工具 LeakCanary 等

各個技能點如果詳細拓展開,會形成相當龐雜的一張知識圖譜,建議大家自行梳理總結消化。

3、OOAD 和設計模式

在架構設計方面,首先要掌握的就是面向對象的開發和設計。具體知識點包括:

面向對象三大特性:封裝,繼承,多態。

五大基本原則(SOLID 原則),單一職責原則,開放封閉原則,里氏替換原則,依賴倒置原則,接口分離原則

23 種設計模式:常用的有工廠、單例、適配器、橋接、組合、代理、命令、觀察者、策略、狀態模式等等。

4、APP架構設計

包括 MVC、MVP、MVVM、MVI、VIPER、Clean Architecture、Flux。目前除了 MVC 外 MVP 和MVVM 用得比較多,具體的架構設計還要結合業務去考慮。

軟技能

人在職場,行走江湖,想進階高級程序員光有技術深度是不夠的,還需要掌握衆多軟技能,注意綜合職業素養的磨練。有很多人一開始重視程度不足,在職場後半段的上升過程中,容易遇到瓶頸。

下面是我個人總結出的高級程序員必備軟技能,供大家參考。

1、快速學習能力

包括技術深度和廣度,能夠不斷探究新技術,不斷學習。

2、溝通能力

加強表達、閱讀、編寫能力,即使在技術發達的今天也絕不會過時。因爲任何方式的溝通在企業內部都是非常有必要的。

3、團隊協作能力

開發人員很容易陷入孤立的人際交往狀態,但開發工作永遠都不可能是一個人完成,只有成員真正能融入團隊內,順利與其他同事溝通合作,才能體現出其真正的價值,被列爲未來職位晉升候選人的機率也更大。

4、時間管理能力

可以參考時間管理「四象限法則」,有重點地把精力和時間集中用於處理重要但不緊急的工作,這樣可以做到未雨綢繆。

5、影響力

一方面是業務影響力,另一方面是技術影響力。其中,提高技術影響力的方式包括:多參與技術分享,把積累的知識進行總結和傳播;參加技術方案評審,把技術經驗分享出去;幫助新同學解決技術問題;在博客、Github、StackOverflow 等平臺上對外分享。

6、文檔編寫能力

代碼註釋。很多程序員很少寫註釋,或者註釋過多,都是不合適的。多參考開源項目的註釋規範。

編寫技術設計文檔。包括流程圖,類圖,功能時序圖等等。

此外推薦一本書:《軟技能——代碼之外的生存指南》

在任何時候,態度都是限制發展的瓶頸

不管是面試初級程序員還是高級開發或者是架構師,我發現一些表現好的,都是比較積極向上的。

比如回答問題時聲音洪亮,溝通時也有儘量向表達清楚的願望,哪怕某個方面回答不正確,但也能看出平時在不斷積累知識,當被追問比較深時,也能比較耐心地一一解答,總之通過交流,給人的印象是比較踏實靠譜。有些人甚至平時會寫博客,或者出過書,或者想盡一切辦法來積累和提升自己。這類人大多能過,哪怕個別過不了,但努力的大方向沒問題,完成進級也僅僅是時間問題,未來潛力也是非常可觀的。

但相反,有些回答不好的候選人,總會給人些得過且過敷衍的感覺,比如回答問題比較簡單,或者總是想套面試官的話,或者總想用些模棱兩可的回答來矇混過關。

所以說,要升級,首先態度要端正,人要上進,這話說起來太容易,但能做到的並且能堅持下來的人數並不多,所以態度也是升級的瓶頸,這話雖然通俗,但不無道理。

技術可以暫時落後,但任何時候都要有上進的信念。

Android系統面試複習路線參考

成年人想要改變生活、逆轉狀態時,會不約而同做一件事,那就是再次學習。

接下來分享的系統學習資源以詳解各大互聯網公司的 Android 常見面試題爲主線,從面試的角度帶你介紹必備知識點,以及該知識點在項目中的實際應用

幫你在現在的基礎上,重新梳理和建立 Android 開發的知識體系。無論是你短期內想提升 Android 內功實力,突破自己工作中的能力瓶頸,還是準備參加 Android 面試,都會在這份資料中有所一些收穫。

從架構基礎開始,分了8個模塊來逐步從基礎進階到架構師的環節:

多餘的話就不講了,接下來將分享面試的一個複習路線,如果你也在準備面試但是不知道怎麼高效複習,可以參考一下我的複習路線,有任何問題也歡迎一起互相交流,加油吧!

首先是超級詳細得不能再詳細的Android開發學習思維導圖,因爲圖片實在是太大了,所以我就只把二級目錄的內容放出來,更加詳細的你們可以點擊這裏

接下來就需要梳理知識,提升儲備了!(Android移動架構師七大專題學習資源)

  • 架構師築基必備技能:深入Java泛型+註解深入淺出+併發編程+數據傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO

  • Android高級UI與FrameWork源碼:高級UI晉升+Framework內核解析+Android組件內核+數據持久化

  • 360°全方面性能調優:設計思想與代碼質量優化+程序性能優化+開發效率優化

  • 解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網絡訪問框架設計+RXJava響應式編程框架設計+IOC架構設計+Android架構組件Jetpack

  • NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發

  • 微信小程序:小程序介紹+UI開發+API操作+微信對接

  • Hybrid 開發與Flutter:Html5項目實戰+Flutter進階

知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。

然後再是通過源碼來系統性地學習

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

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

刷大廠面試題備戰,增加大廠通過率

歷時半年,整理了這份市面上最全面的安卓面試題解析大全。

1.可以通過目錄索引直接翻看需要的知識點,查漏補缺。
2.五角星數表示面試問到的頻率,代表重要推薦指數

以上這些內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者點擊 【這裏】 查看獲取方式。

最後還有耗時一年多整理的一系列Android學習資源:Android源碼解析、Android第三方庫源碼筆記、Android進階架構師七大專題學習、歷年BAT面試題解析包、Android大佬學習筆記等等,這些內容均免費分享給大家。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章