這是一位網友和我分享的他的經歷:
由于他的學歷遠達不到BAT的要求,大專畢業的他在找作業的時候發現留給自己的機會并不多,最后去了一家不知名的小公司,
他告訴我入職后才發現這家公司其實是個外包公司,里面的業務部門和制度相當混亂,負責招聘的HR同時兼管著財務和員工薪資的發放,
老板憑人脈從外面接一些專案回來給他們做,吳瑞初出校門沒有經驗,只能硬著頭皮做下去,可他越做越窩心,
先是作業內容的問題,
當初他應聘的崗位是后端開發,可現實卻是他既要寫后端,也要寫客戶端,本著做的多做的廣可以學到更多的原則,他并不是非常在意這個問題,邊做邊學,漸漸地也上了手,
其次是作業量的問題,
有時候為了趕專案進度,技術主管給手下的員工下了死命令:必須在某個截止日期前完成任務,
為此,他同幾個和他一樣新來的同事加班加點地干活,甚至買了只折疊床放在辦公室,有幾次他通宵,敲代碼敲到睜不開眼睛,就展開折疊床湊合幾個小時,天亮后繼續開工,
技術主管看到他的賣力,在作業群中表揚了他,并許諾專案結束后會給他調休,
好不容易熬到了專案收尾,小A整個人瘦了一圈,他興沖沖地向主管提調休的事,主管跟他打起馬虎眼:“你看,新專案又來了,等這個專案結束給你一起休!”等下一個專案結束,他從主管那里得到了同樣的回答,他對調休的事死了心,
最令他不能忍的是工資的事,
他為公司如此賣力,為的不就是每個月底公司打到銀行卡上的那筆數字嗎?
我出力,你出錢,好買好賣,
可他出了力,輪到公司出錢的時候卻非常勉強,工資總是不能按時發放,月底拖到下個月初,月初再拖到月底,一拖再拖,
他和同事輪番去找HR兼財務,她也是一臉無奈加憂傷,“老板說專案資金還未結清,我的工資和你們一樣沒發呢!”
有次在一起吃午飯的時候,HR小姐姐偷偷告訴他說老板在市中心有兩套房,開著寶馬X6,這樣的人不缺錢,體會不到他們如果兩個月沒領到薪水就沒錢交房租甚至沒錢吃飯的苦痛,
現狀分析
如果你目前還年輕,但高不成低不就,只有外包offer,那請往下看,
多年的作業,接觸過不少有外包背景的同事,可以確定的是,但凡有點職業理想的程式員,都對外包行業敬而遠之,
不完全是因為它前途晦暗,更多是來自職業心理上的抗拒,程式員圈還是很看出身的,一般的外包人員,在有品牌獨立專案的內行人眼里,就是low人一等,堪比野雞,
但我們也不能因此把它貶得一無是處,凡事都有其兩面性,
外包對于非計機系、培訓轉行、自學編程的程式員,可謂是最不壞的跳板,
一、放得很低階的門檻,讓教育背景、專業背景不夠看的新人,有入行的機會,
二、豐富的業務場景,幫助新人快速地完成基礎開發經驗的積累,熟悉主流專案的全流程,
三、大廠鍍金,一些自我包裝精良的中小外包公司,常能接到諸如「微軟」「騰訊」「阿里」「華為」的大單,雖然是外包,但往后寫在簡歷上,至少是一流大廠的名號,比那些三四流的小公司專案經驗強不知強多少個量級,
而且頂級互聯網公司,就那么幾家,80%的程式員簡歷上都是些名不見經傳的公司,所以到頭來,跟大多數人比,程式員的核心競爭力還是看誰的專案經驗牛逼點,
再者,據做過微軟外包的朋友透露,大廠對外包專案的合同條款極其苛刻,階段性驗收出點問題,都要扣款的,所以他常常被其高標準整得焦頭爛額,通宵達旦,但每次完整交付專案后,都感覺自身技術水準有了質的飛躍,
之前我就提到過這個問題,在現在這個階段,公司之間的技術鴻溝已經非常明顯,開發者身在其中,也因為自身學習能力,環境,專案等等的差別,技術上的差距越拉越大,造成了作業幾年之后的兩級分化,并且這種差距的拉開不是靠自己的努力就能彌補的,在前段時間面試了一個在某一線手機廠商做App的同學,985出身,作業3年,目前也是公司的核心骨干,跟我說了他做的很多UI上的優化和重構作業,他們的App團隊大概是4,5個人,看的出來他已經在力所能及的范圍內努力做到最好,可惜,受限于團隊規模,支持力度和技術儲備,他的天花板來的太快,做的不夠深入,技術能力也不夠全面,
那面對這種情況,作為開發者,我們能做的是什么?最基本的,脫離舒適區,不停磨練自己的技術,舉我自己的例子,剛進公司的時候我主要做的是UI,平時搞一些頁面上的優化,解決一些小BUG和ANR,做的還算不錯;因為之前做的不錯,也因為方向變化,大半年之后我開始切換到做視頻下載,后來又開始做視頻播放,一年半多時間里跟我的導師把空間播放器和下載器推倒了重做,到現在各項指標都很不錯,剛開始切換的時候很痛苦,音視頻領域入門有一定門檻,專案壓力非常大,之前又完全沒有接觸過,那段時間不知道多少次15樓南區半夜和假日只剩我跟我導師兩個人在公司加班,可現在想想也確實是成長最快的時候,這塊做的差不多了,今年又開始做編解碼,繼續在音視頻這塊深挖下去,所以就是這樣,技術不行就深挖技術,覺得環境束縛了你就盡快跳槽,保持自己足夠的競爭力,或許一次跳槽還沒有辦法改變什么,但這是一個量變產生質變的程序,一份不斷向上的簡歷也能為你敲開很多公司的大門,
我在一線互聯網企業作業近十年,指導過不少同行后輩,幫助很多人得到了學習和成長,
我意識到有很多經驗和知識值得分享給大家,也可以通過我們的能力和經驗解答大家在IT學習中的很多困惑,所以在作業繁忙的情況下還是堅持各種整理和分享,但苦于知識傳播途徑有限,很多程式員朋友無法獲得正確的資料得到學習提升,故此將并將重要的Android性能優化、音視頻開發、NDK技術、組件化插件化熱修復、常見原始碼分析等學習路線分享出來,
希望我能夠用我的力量幫助更多迷茫、困惑的朋友們,幫助大家在Android開發道路上學習和發展~
應用層開發
Android原生開發,需要重點關注的依然主要是各種性能優化,啟動速度,耗電量,流暢度,網路優化再到大廠專案實戰,這些都是作為一名優秀Android開發具備的基本素養,
- 啟動速度
- 流暢度
- 抖音在APK包大小資源優化的實踐
- 優酷回應式布局技術全決議
- 網路優化
- 手機淘寶雙十一性能優化專案揭秘
- 高德APP全鏈路原始碼依賴分析
- 徹底干掉OOM的實戰經驗分享
- 微信Android終端記憶體優化實踐

以上資源均免費分享給大家,內容均放在了開源專案:【Github】,大家可以自行獲取,
音視頻開發
幸運的是我們生活在一個好時代,科技在這幾十年得到了迅猛的發展,在疫情肆虐的當下,我們可以通過音視頻會議進行遠程辦公;我們還有在線教育系統,對于大多數學生來說,完全可以在家進行在線學習,
從某個角度看,這次疫情雖然導致很多行業處于崩潰邊緣,但也催生了新的行業發展,其中音視頻會議和在線教育就是因疫而起的行業,在疫情短時間內難以結束的情況下,音視頻會議和在線教育的重要性馬上體現了出來,新的溝通方式和教育方式被越來越多的人所認知,所接納,
甚至我們可以判定,在線教育行業和音視頻會議行業會在今年崛起,并在未來十年得到迅猛發展,
如何學習音視頻開發
一,初級入門篇:
一 繪制圖片
1. ImageView 繪制圖片
2. SurfaceView 繪制圖片
3. 自定義 View 繪制圖片
二、AudioRecord API詳解
三、使用 AudioRecord 實作錄音,并生成wav
- 創建一個AudioRecord物件
- 初始化一個buffer
- 開始錄音
- 創建一個資料流,一邊從AudioRecord中讀取聲音資料到初始化的buffer,一邊將buffer中資料匯入資料流,
- 關閉資料流
- 停止錄音
四、用 AudioTrack 播放PCM音頻
1.AudioTrack 基本使用
- MODE_STATIC模式
- MODE_STREAM模式
2.AudioTrack 詳解
- 音頻流的型別
- Buffer分配和Frame的概念
- AudioTrack構造程序
3. AudioTrack 與 MediaPlayer 的對比
- 區別
- 聯系
- SoundPool
五、使用 Camera API 采集視頻資料
1.預覽 Camera 資料
2.取到 NV21 的資料回呼
六、使用 MediaExtractor 和 MediaMuxer API 決議和封裝 mp4 檔案
1.MediaExtractor API介紹
2.MediaMuxer API介紹
3.使用情境
七. MediaCodec API 詳解
1.MediaCodec 介紹
2.MediaCodec API 說明
3.MediaCodec 流控
- 流控基本概念
- Android 硬編碼流控
- Android 流控策略選擇
由于文章篇幅受限,剩余內容過多,文中插圖有限,下文只能截圖目錄展示:
二,中級進階篇:
- Android OpenGL ES 開發(一): OpenGL ES 介紹
- Android OpenGL ES 開發(二): OpenGL ES 環境搭建
- Android OpenGL ES 開發(三): OpenGL ES 定義形狀
- Android OpenGL ES 開發(四): OpenGL ES 繪制形狀
- Android OpenGL ES 開發(五): OpenGL ES 使用投影和相機視圖
- Android OpenGL ES 開發(六): OpenGL ES 添加運動效果
- Android OpenGL ES 開發(七): OpenGL ES 回應觸摸事件
- Android OpenGL ES 開發(八): OpenGL ES 著色器語言GLSL
- Android OpenGL ES 開發(九): OpenGL ES 紋理貼圖
- Android OpenGL ES 開發(十): 通過GLES20與著色器互動
- 使用 OpenGL 顯示一張圖片
- GLSurfaceviw 繪制 Camera 預覽畫面及實作拍照
- 使用OpenGL ES 完成視頻的錄制,并實作視頻水印效果
高級探究篇:
- 深入學習音視頻編碼,如H.264,AAC,研究使用開源編解碼庫,如x.264,JM 等
- 深入研究音視頻相關的網路協議,如 rtmp,hls,以及封包格式,如:flv,mp4
- 深入學習一些音視頻領域的開源專案,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
- 將 ffmpeg 庫移植到 Android 平臺,結合上面積累的經驗,撰寫一款簡易的音視頻播放器
- 將 x264 庫移植到 Android 平臺,結合上面積累的經驗,完成視頻資料 H264 軟編功能
- 將 librtmp 庫移植到 Android 平臺,結合上面積累的經驗,完成 Android RTMP 推流功能
音視頻編解碼技術
- 音視頻編解碼技術(一):MPEG-4/H.264 AVC 編解碼標準
- 音視頻編解碼技術(二):AAC 音頻編碼技術
流媒體協議
- 流媒體協議(一):HLS 協議
- 流媒體協議(二):RTMP協議
多媒體檔案格式
- 多媒體檔案格式(一):MP4 格式
- 多媒體檔案格式(二):FLV 格式
- 多媒體檔案格式(三):M3U8 格式
- 多媒體檔案格式(四):TS 格式
- 多媒體檔案格式(五):PCM / WAV 格式
以上資源均免費分享給大家,內容均放在了開源專案:【Github】,大家可以自行獲取,
插件化、組件化、熱修復開發
組件化作為Android客戶端技術的一個重要分支,近年來一直是業界積極探索和實踐的方向,每個大廠內部的各個Android開發團隊也在嘗試和實踐不同的組件化方案,并且在組件化通信框架上也有很多高質量的產出,
怎樣實作組件化
要實作組件化需要考慮的問題主要包括下面幾個:
- 代碼解耦,將一個龐大的工程拆分解耦,這是非常耗時耗力的作業,但這也是最基礎最重要的一步
- 資料傳遞,每個組件都有可能提供給其他組件使用,主專案與組件、組件與組件之間的資料傳遞
UI跳轉, - 組件的生命周期,組件加載、卸載和降維的生命周期
- 集成除錯,在開發階段如何做到按需的編譯組件?一次除錯中可能只有一兩個組件參與集成,這樣編譯的時間就會大大降低,提高開發效率,
- 代碼隔離,如何杜絕耦合的產生,
下面給大家介紹的是全網最全的高級Android組件化強化實戰手冊,覆寫了整個互聯網公司,受篇幅限制不會展示所有內容,只能截圖展示部分,完整內容已整理成PDF檔案,

現今插件技術的使用非常普遍,比如微信、QQ、淘寶、天貓、空間、攜程、大眾點評、手機管家等等這些大家在熟悉不過的應用都在使用,
插件技術可以給專案開發帶來巨大的好處,比如:并行高效開發、模塊解耦、解除單個dex函式不能超過65535的限制、動態更新升級、按需加載等等,
掌握好插件技術,需要如下的安卓基礎和相關知識,例如:
-
Android應用程式安裝,加載程序
-
Android應用運行機制,生命周期呼叫原理
-
Android應用資源編譯打包原理
-
Android應用讀取資源原理
-
Android系統AMS、PMS、NMS等系統服務的運作原理
-
增量更新
-
HOOK等技術
下面將從基礎的插件化原理到Android插件化初探再到大廠架構演化實戰應用,總結出了較為全面與完整的安卓插件技術與插件化對 Android開發的重要性,受篇幅限制不會展示所有內容,只能截圖展示部分,完整內容已整理成PDF檔案,

以上資源均免費分享給大家,內容均放在了開源專案:【Github】,大家可以自行獲取,
小程式是基于微信這個億級流量入口所衍生出來的產品,而快應用,快應用是九大手機廠商基于硬體平臺共同推出的新型應用生態,用戶無需下載安裝,即點即用,享受原生應用的性能體驗,不過個人覺得,他已經涼涼了,小程式倒是挺看好的,騰訊這座大山,微信這座涼亭,你想不涼快都難,不過看你是否剛需,比如你公司有需求,那你可以去學習,
推薦學習的新技術,Flutter和Kotlin,這兩個都是Google推薦的,
Flutter
Flutter是Google在2018年2月27日,在2018世界移動大會上發布的用以幫助開發者在ios和Android兩個平臺開發高質量原生應用的全新移動UI框架
由于是是Google發布的,就前景來看,還是值得肯定的,
Kotlin
Kotlin 是Google推薦的官方開發語言,與Java互通,可相互轉換,簡潔安全等,是一種在 Java 虛擬機上運行的靜態型別編程語言,被稱之為 Android 世界的Swift,由JetBrains 設計開發并開源,
Kotlin 可以編譯成Java位元組碼,也可以編譯成 JavaScript,方便在沒有 JVM 的設備上運行,
最后
如果你的水平接近達到高級水平,有信心快速達到高級水平,那就按照高級水平的技能點和市場對靈活用工的高級要求對照靠近,一步步達到這個水平,如果你的水平還是初級入門水平,或者興趣度不是很高,想早點轉換,你可以快速轉變,因為在正確方向上努力太重要了,這里也建議不要跨度太大,這里我推薦往大前端或者產品方向轉變,當然前提是你有這方面的興趣,
當然上面講的都是技術方向上的靈活用工要求,當然對一些技術堆疊水平和技識訓累到一定程度后你也可以往技術管理和產品方向發展,當然你也可以選擇創業,如果你有足夠好的idea和心理準備,
當然大部分人停留在中高級水平,然后一直停滯不前,加上外部各種環境,產生了各種焦慮,所以很矛盾,這時候你最好的狀態是快速往高級水平發展,當然這里是比較難的,這個坎也是比較難邁過去的,因為Android知識體系比較龐大和復雜的,涉及到計算機知識領域的方方面面,
本文在開源專案:https://github.com/Android-Alvin/Android-LearningNotes 中已收錄,里面包含不同方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275887.html
標籤:其他








