大廠競爭這麼激烈,為什麼還是擠破頭都要進,小廠不香嗎

mb61c1d80e4e114 2022-01-07 08:01:36 阅读数:619

激烈 都要

我之前一直覺得在這兩年當中,我應該什麼都沒有學到,所有的技能都是靠我自己業餘自學的。我也一度有些後悔,覺得當初自己是不是選錯了,不應該去阿裏。但我來了新加坡不久之後就完全顛覆了這個看法,因為我發現我並不是什麼都沒有學到,有點像是冰山理論,我看到的只有水面上的一點,大部分都藏在水下。

什麼意思呢,我就用擰螺絲舉個例子好了。比如你在一家造航母的大公司當中做一個螺絲工,今天擰擰這個螺絲,明天擰擰那個螺絲。有一天你受不了離職了,到了一家小船廠。你一進去就發現小船廠的廠房頂太低了,現在造小船還好,有朝一日要造大船的話就不够用了。過了兩天,你又發現現在擰螺絲的扳子不對,耐久度非常差,只能擰某一個型號的螺絲。又過了兩天,你發現建造的船設計也有問題,居然不是流線型……

你在來小船廠之前你以為你只是擰了兩年螺絲,什麼都沒學到,其實你已經看到了通關地圖。我現在有的時候也還是會後悔,但我後悔的不再是當初的選擇,而是後悔當時有機會的時候,沒有把通關地圖看個仔細,導致遺漏了不少。

大廠競爭這麼激烈,為什麼還是擠破頭都要進,小廠不香嗎_程序員

大佬雲集、資料豐富

當初我在阿裏認識一個非常非常資深的前輩,他在阿裏十來年了,但因為各種原因級別不是很高。我當時問他,既然你對現狀如此不滿,為什麼不想著離開尋找更好的機會呢?

他沉思了片刻跟我說,他說我現在在這裏雖然待著不順心,但是我接觸到的人都是非常優秀的。我遇到問題,還可以和你們討論討論。我如果出去了,我要是再遇到問題,可能連一個討論的人都沒有。

我當時聽聽只是覺得有道理,現在再回想起來,感受非常深刻。三觀、格局、能力,能够進入大公司的,這三個方面一般都不會太差。別的不說,就拿個人能力而言,我出國以後見識了許多各種海外名校的同事,和當初阿裏的同事相比說真的也不過如此。我也不知道是不是我的偏見,但就我感受下來,國外的工程師格局相對偏小。

除了優秀的同事之外,大公司裏往往還有豐富的內部文檔和資料。我當時在阿裏內部看到了很多優秀的文章,也有很多優秀的技術沙龍和分享。現在想起來兩年下來,也沒有去過幾次,文章和資料看得也不算多,現在想想頗為遺憾。別的不說,就拿推薦領域而言,近些年質量不錯的論文往往都來源於大公司尤其是國內的大公司,以阿裏、華為和頭條為主。除了公開的論文,公司內部還有很多技術相關的資料和文檔,這些真的可以說是有價無市,非常珍貴。

不斷學習提昇

都說三年是程序員的一個坎,能否晋昇或者提高自己的核心競爭力,這幾年就十分關鍵。

技術發展的這麼快,從哪些方面開始學習,才能達到高級工程師水平,最後進階到Android架構師/技術專家

Android相關的書籍包括《Android權威編程指南》、《Android開發藝術探索》等,進一步的還可以去閱讀Android相關源碼,配合《Android源碼設計模式解析與實戰》等書籍,對閱讀源碼大有裨益。

那麼如何構建完整的知識體系,深挖Android技術?

 Android架構視頻+BAT面試專題PDF+學習筆記

以下分享一下我6年來具體的學習路線及筆記文檔,希望能幫助到有心提昇技術的朋友!

目前Android APP開發主流語言就是Java語言,Java語言最大的特性就是提高了軟件的交互可能性,可以說安卓手機幾乎所有應用程序都是利用Java語言來進行編寫的。

知識要點:

1、Java序列化、泛型、反射

2、虛擬機底層原理

3、Android內存原理

4、Java高並發原理詳解

5、編譯時技術掌握與實戰

6、JDK高級動態代理

7、高級數據結構與算法

8、Java IO操作

大廠競爭這麼激烈,為什麼還是擠破頭都要進,小廠不香嗎_Android_02

 Android R Frame Work源碼與UI


在Android中,Framework泛指系統架構層。Framework的中文意思是“框架”,在軟件開發中通常指開發框架,在一個系統中處於內核層之上,為頂層應用提供接口,被設計用來幫助開發者快速開發頂層應用,而不必關心系統內核運行機制,通常Framework都會隱藏main函數等應用程序必須的組件,開發人員只需把精力放在功能代碼的實現上。說簡單點,Framework具體的工作也就是為android應用開發的開發人員提供了一系列的服務和API的接口。

UI其實並不是單純指用戶看到的效果。因為在Android開發中,每個控件背後都有一套深層次的體系在支撐,自然而然,會UI不單純指的是會自定義控件,我們還應該知道自定義控件背後的執行流程,包括從Activity的創建,XML的解析,到每個控件的測量、布局、繪制。當然在中間還夾雜著比如動畫、事件分發機制、嵌套滑動機制等知識點。還有穀歌提供的一些UI框架也使我們要掌握的對象,比如Jetpack組件庫、Material Design等。

知識要點:

1、FrameWork源碼解析

2、Android常用組件深入解析

3、UI的深度剖析與自定義

4、Jetpack全家桶

5、Android R

6、RXJava響應式編程框架設計

大廠競爭這麼激烈,為什麼還是擠破頭都要進,小廠不香嗎_Android_03

 360°全方比特性能調優


性能優化是針對整個app開發而言的。一個好的項目被開發出來,不單是產品要好,開發者也需要知道,為什麼我開發的這個app能够在絕大多數的手機運行,為什麼用戶在使用的時候絕大部分的手機不會出現bug。我們的apk文件可以優化到很小的,比如你做一個項目,打包之後可能是10m,但是經過優化之後可能就只有8m,甚至更小。另外,我們做的項目安全性如何?我們憑什麼斷定我們做出來的app安全性好。這都是性能優化中會涉及的。

1、設計思想與代碼質量優化

一個app的性能好不好我們需要從兩個層面努力。第一個層面:從寫代碼的時候就需要注意,讓自己的代碼是高性能高可用的代碼,這個過程是書寫高性能代碼;第二個層面:對已經成型的代碼通過工具檢查代碼的問題,通過檢查到的問題來指導我們進行代碼的删改,這個過程被稱為調優。

如何寫出高性能的代碼呢?那就需要我們具備深厚的代碼功底,這就是代碼的基礎,如:數據結構達到可以根據應用場景寫出符合當前場景的特殊結構,比如google針對Android平臺特征研發了sparseArray替代HashMap。另外,對常用的算法有自己獨到的見解,leetcode上有刷個上百道題,這樣差不多可以達到精通最常用的排序查找動態規劃等算法的能力。再者,高效的算法以及節省內存的數據結構如果配合優秀的符合應用場景的設計模式,那麼,這些就為高性能的代碼提供了實現依據。

另外一個就是對寫好的代碼進行調優,那麼調優的方向就是使用Profiler工具進行測試和檢查,看哪裏有性能消耗大的操作,然後分析對於代碼的問題。調優的方向就變成了如何對內存調優,對耗電調優,對網絡流量調優,當然,還有對啟動速度,頁面切換效果與速度,開機白屏體驗,閃屏方面的原因等進行分析和調優。最後再加上一個屏幕適配相機適配。

2、程序性能優化

啟動速度與執行效率優

化布局檢測與優化

內存優化

耗電優化

網絡傳輸與數據儲存優化

APK大小優化

3、開發效率優化

分布式版本控制系統Git

自動化構建系統Gradle

4、項目實戰

啟動速度流暢度抖音在APK包大小資源優化的實踐優酷響應式布局技術全解析網絡優化手機淘寶雙十一性能優化項目揭秘高德APP全鏈路源碼依賴分析徹底幹掉OOM的實戰經驗分享微信Android終端內存優化實踐

大廠競爭這麼激烈,為什麼還是擠破頭都要進,小廠不香嗎_Android_04

  • 對標騰訊T3.3架構師必備技術

Android框架體系架構(高級UI+FrameWork源碼) 這塊知識是現今使用者最多的,我們稱之Android2013~2016年的技術。

最後

都說三年是程序員的一個坎,能否晋昇或者提高自己的核心競爭力,這幾年就十分關鍵。

技術發展的這麼快,從哪些方面開始學習,才能達到高級工程師水平,最後進階到Android架構師/技術專家?我總結了這 5大塊;

我搜集整理過這幾年阿裏,以及騰訊,字節跳動,華為,小米等公司的面試題,把面試的要求和技術點梳理成一份大而全的“ Android架構師”面試 PDF(實際上比預期多花了不少精力),包含知識脈絡 + 分支細節。

大廠競爭這麼激烈,為什麼還是擠破頭都要進,小廠不香嗎_Android_05

Java語言與原理;
大廠,小廠。Android面試先看你熟不熟悉Java語言

大廠競爭這麼激烈,為什麼還是擠破頭都要進,小廠不香嗎_移動開發_06

高級UI與自定義view;
自定義view,Android開發的基本功。

大廠競爭這麼激烈,為什麼還是擠破頭都要進,小廠不香嗎_移動開發_07

性能調優;
數據結構算法,設計模式。都是這裏面的關鍵基礎和重點需要熟練的。

大廠競爭這麼激烈,為什麼還是擠破頭都要進,小廠不香嗎_移動開發_08

NDK開發;
未來的方向,高薪必會。

大廠競爭這麼激烈,為什麼還是擠破頭都要進,小廠不香嗎_Android_09

前沿技術;
組件化,熱昇級,熱修複,框架設計

大廠競爭這麼激烈,為什麼還是擠破頭都要進,小廠不香嗎_Android_10

網上學習 Android的資料一大堆,但如果學到的知識不成體系,遇到問題時只是淺嘗輒止,不再深入研究,那麼很難做到真正的技術提昇。希望這份系統化的技術體系對大家有一個方向參考。

我在搭建這些技術框架的時候,還整理了系統的高級進階教程,會比自己碎片化學習效果强太多,GitHub可見; 《Android架構視頻+學習筆記》

當然,想要深入學習並掌握這些能力,並不簡單。關於如何學習,做程序員這一行什麼工作强度大家都懂,但是不管工作多忙,每周也要雷打不動的抽出 2 小時用來學習。

不出半年,你就能看出變化!

版权声明:本文为[mb61c1d80e4e114]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201070801359785.html