一位網友在職場論壇上發了一個帖子,他說本身今年三十七歲了,是一名Android老兵,由於和上家公司的領導鬧矛盾有了嫌隙,一氣之下就裸辭了,現在已經辭職四個月了,也失業了四個月。前端
天天都在努力投簡歷,共投出去了五百封簡歷,但只有三家通知本身過去面試,其餘的都石沉大海。本身很納悶,就找了一個作獵頭的朋友詢問,朋友說本身已經超齡了,沒有什麼崗位能夠給本身這個年齡的人了,只有少數的能放寬到四十歲,但也不太適合本身作。因此本身沒辦法只好考事業單位了,沒想到事業單位居然也要求35歲,這可怎麼辦,本身還須要養家呢。java
這位網友表示爲何互聯網行業要這麼歧視年齡,本身經驗豐富,技術過關,怎麼就找不上工做了呢?網友們看到這個帖子後紛紛發表了本身的見解。git
有網友表示三十五歲這個坎設置的意義就是如此,若是有能力的員工在這個年齡通常都能成爲高管了,那麼徹底不須要經過投簡從來找工做,因此一看到三十五以上的簡歷,HR都默認是沒有能力的人。程序員
在職場確實廣泛存在着「35歲定律」,若是到了35歲,你還沒法脫穎而出、還作着基層工做,那極可能你就是要被「優化」的對象 —— 畢竟比你年輕、好用又便宜的年輕人,太多了。github
今天又看到有人提了這麼一個問題:web
若是你很肯定,本身在35歲(或40歲)時,必定會離開如今的公司,不管被動或是主動,你會怎麼想、怎麼作?面試
不得不說,這是一個很不討喜的問題。可是,卻也是一個值得你我去深思的問題。正則表達式
前幾年,國內經濟的飛速發展,帶動了許多行業,也使許多人找到了機遇。數據庫
在這樣的大背景下,咱們很容易過於樂觀,失去對將來的警戒。咱們總會默認,將來的每一天會像昨天同樣,風平浪靜,不會有什麼大的變化。編程
但變化每每就在不知不覺之間席捲而來。
因此必定要早作準備,未雨綢繆。
那麼在市場緊縮以及大前端的趨勢下,咱們移動端程序員如何突破職業瓶頸,保持我的的核心競爭力呢?
ArrayList、Vector、
CopyOnWriteArrayList、
HaspMap、ConcurrentHashMap、
HashTable 等使用場景。
Kotlin 是一個基於 JVM 的新編程語言,在 Google IO 2017 中被 Google 宣佈成爲 Android 官方開發語言。
Kotlin 有哪些優勢?
①簡潔性: 提供了不少標準函數,大大減小樣板代碼的數量。
②安全性:避免空指針異常等錯誤。
③互操做性:充分利用 JVM、Android 和瀏覽器的現有庫。
④工具友好: 可用任何 Java IDE 或者使用命令行構建。
在 Kotlin 中要樹立函數式編程思想。把函數理解爲一個值到另外一個值的映射關係,以函數做爲單元來處理各個業務邏輯,函數既能夠作參數,也能夠做爲返回值。多使用 Kotlin 提供的標準函數,好比 let、run、with、apply、also、 Lambda 表達式。儘可能使用閉包和高階函數。
Kotlin 的另外一個突出特色是協程,爲設計異步、非阻塞的程序提供了強大的範式。協程是一種輕量級的線程,它提供避免阻塞且更廉價可控的操做: 協程掛起。將複雜異步操做放入底層庫中,程序邏輯可順序表達,以此簡化異步編程。
最後簡單說下 Kotlin/Native,它的設計初衷是支持在非 JVM 虛擬機平臺環境的編程,如 iOS、嵌入式平臺等,同時支持與 C 互操做。推薦書籍:《Kotlin 實戰》。
進程相關,包括 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 等
各個技能點若是詳細拓展開,會造成至關龐雜的一張知識圖譜,建議你們自行梳理總結消化。
在架構設計方面,首先要掌握的就是面向對象的開發和設計。具體知識點包括:
面向對象三大特性:封裝,繼承,多態。
五大基本原則(SOLID 原則),單一職責原則,開放封閉原則,里氏替換原則,依賴倒置原則,接口分離原則
23 種設計模式:經常使用的有工廠、單例、適配器、橋接、組合、代理、命令、觀察者、策略、狀態模式等等。
包括 MVC、MVP、MVVM、MVI、VIPER、Clean Architecture、Flux。目前除了 MVC 外 MVP 和MVVM 用得比較多,具體的架構設計還要結合業務去考慮。
人在職場,行走江湖,想進階高管光有技術深度是不夠的,還須要掌握衆多軟技能,注意綜合職業素養的磨練。有不少人一開始重視程度不足,在職場後半段的上升過程當中,容易遇到瓶頸。
下面是我我的總結出的高級程序員必備軟技能,供你們參考。
包括技術深度和廣度,可以不斷探究新技術,不斷學習。
增強表達、閱讀、編寫能力,即便在技術發達的今天也毫不會過期。由於任何方式的溝通在企業內部都是很是有必要的。
開發人員很容易陷入孤立的人際交往狀態,但開發工做永遠都不多是一我的完成,只有成員真正能融入團隊內,順利與其餘同事溝通合做,才能體現出其真正的價值,被列爲將來職位晉升候選人的概率也更大。
能夠參考時間管理「四象限法則」,有重點地把精力和時間集中用於處理重要但不緊急的工做,這樣能夠作到未雨綢繆。
一方面是業務影響力,另外一方面是技術影響力。其中,提升技術影響力的方式包括:多參與技術分享,把積累的知識進行總結和傳播;參加技術方案評審,把技術經驗分享出去;幫助新同窗解決技術問題;在博客、Github、StackOverflow 等平臺上對外分享。
代碼註釋。不少程序員不多寫註釋,或者註釋過多,都是不合適的。多參考開源項目的註釋規範。
編寫技術設計文檔。包括流程圖,類圖,功能時序圖等等。
此外推薦一本書:《軟技能——代碼以外的生存指南》
我一直以來都有整理練習大廠面試題的習慣,有隨時跳出舒服圈的準備,也許求職者已經很滿意如今的工做,薪酬,以爲習慣並且安逸。
不過若是公司忽然倒閉,或者部門被裁減,還能找到這樣或者更好的工做嗎?
我建議各位,多刷刷面試題,知道最新的技術,每三個月能夠去面試一兩家公司,由於你已經有不錯的工做了,因此能夠帶着輕鬆的心態去面試,同時也能夠增長面試的經驗。
我能夠將最近整理的一線互聯網公司面試真題+解析分享給你們,大概花了三個月的時間整理,2246頁,免費分享給你們,幫助你們學習進步。
因爲篇幅限制,文檔的詳解資料太全面,細節內容太多,因此只把部分知識點截圖出來粗略的介紹,每一個小節點裏面都有更細化的內容!如下是部份內容截圖: