最新大廠程序員進階寶典,最終入職阿裏

mb612ed7a890c2b 2021-09-19 07:49:46 阅读数:851

最新 程序

關於Android的近况

大家都知道,今年移動開發不那麼火熱了,完全沒有了前兩年Android開發那種火熱的勢頭,如此同時,AI熱火朝天,很多言論都說Android不行了。其實不光是Android,iOS也有類似的言論。

那麼到底如何看待這一現象呢?

我的答案是:Android還行,只是回歸平淡了,沒有了前些年的火熱。

為什麼Android還行?

如何看待一個行業行不行?有兩點:
這個行業有沒有死亡?
有沒有很多公司提供這個行業的崗比特?

拿塞班來舉例,塞班完全死亡了,因為塞班完全被Android和iOS給替代了,並且沒有公司來提供塞班的開發崗比特。
對於Android,目前Android正如日中天,其在移動設備上的全球占有率不用我多說了吧,各種車載設備、電視等都是Android系統。若幹年內,不存在一個新的平臺來替代Android,所以Android不會死亡。

在國內,不管是騰訊還是支付寶,其移動端產品對整個公司影響都非常巨大,騰訊的微信、阿裏的手機淘寶、支付寶都占有至關重要的作用,各大公司都有Android端產品,所以這個崗比特需求也是沒有問題的。

從上述兩方面來說,Android沒有衰落,只是它發展到頂峰了,很難再繼續地保持快速發展的勢頭了。

為什麼Android程序員難找工作了?

Android程序員失業的事情大家不用擔心,若幹年內都不會出現。

但是近期的確不是那麼好找工作了,原因有如下幾點:
由於APP創業風口已過,大批創業公司死亡,導致了Android崗比特减少;
一些公司並不需要一個Native的APP,他們只需要在APP中嵌入一個網頁;
RN、Weex對Native概念的沖擊

在這個時候,你需要提高自己的技術,Android高級工程師還是缺的。

最新大廠程序員進階寶典,最終入職阿裏_移動開發

本人也是眾多Android開發道路上行走的一員,聽了不少大神的知乎live,自己也看了不少書,也和不少前輩交流過,所以在這裏分享一下Android開發應該學習的書籍以及知識,當然,也包括一些方法,希望對更多想進入這個行業的人有所幫助。
眾所周知,現在移動開發早就不是最熱門的程序員職業了,如果你沒一點真功夫,僅僅靠兩三個月的集訓已經很難在這個行業中占有一席之地了。因此,想擁有真正的“真本事”是要花相當長時間的,我的這篇學習計劃主要面向的人群是敢於花時間,切能堅持下來的同學,比如說:想從事Android開發的在校大學生,想進階的在職開發人員,以及因為個人原因想從其它方向轉向Android開發的程序員。

入門階段:快速上手,增加自信

怎樣做可以讓初學者覺得編程是容易學的,是有趣的?那自然就是得到一些能快速看到結果的反饋,自己寫的程序能立刻運轉起來並實現一些效果,是非常鼓舞人心的,因此這個階段的第一目的是通過學習能真正動手寫兩個程序,並能得到快速反饋,因此推薦一些相對簡單的書籍。

1.Java初級入門:

推薦書籍:《Head First Java》,《Java從入門到精通》
《Head First Java》不用多說,業界公認的Java入門佳作,如果你的編程底子非常薄,可以通過這本書快速學習Java。而對於這本《Java從入門到精通》,也許很多人嗤之以鼻,覺得是只教錶面,不深挖原理的淺薄書籍,沒必要看,但是這本書的好處在於,當你完全沒接觸過編程,沒接觸過計算機知識的時候,這本書是可以帶你快速上道的,它不僅僅只教如何使用Java語言,它連如何搭建開發環境這種對於出入門的人來說非常頭痛的事都有詳細教程,因此,它對於剛剛入門的人來說,是非常友好的,如果,你沒有任何編程經驗,但想從Java入門編程,這本書是非常好的。理論上來說,這兩本書選一本閱讀即可。

2.Android初級入門:

推薦書籍:《第一行代碼》
如果要開始這一階段,請務必把Java初級階段入門完成後再嘗試。那怎樣算是完成呢?起碼用書中的知識自己寫過Demo,並且測試成功,例如,最基本的Java知識,包括:繼承,接口,字符串,內部類,匿名類,集合,簡單的多線程,Socket網絡通訊等等都有過親自的實踐,第一階段就算是完成了,你說反射,範型,枚舉,多線程,注解等知識你沒辦法理解?沒有關系,這些都是第二階段攻克的主要目標之一。
至於第一行代碼這本書,已經無需我廢話,這在中國基本已經成了Android入門的標准教材,書中涵蓋了Android開發知識的方方面面,例如如何搭建Android開發環境,Android四大組件的使用,Android網絡通信的基礎,如何使用開源庫,如何使用Git,如何進行本地存儲等等。只要跟著這本書,把書中的每一個Demo都自己手動實現一遍,並在學習完本書後,自己試著綜合所有已學的知識開發一個能自己玩的小app,第一個大階段——入門,就算徹底結束了。
進階:持續攀登技術之峰
如果你已經完成了第一階段,並且已經小有自信來到了這裏,那我要說,進階階段可能會讓你掃興,因為進階階段的學習量可能是入門階段的數倍,甚至上10倍,但是,既然已經走到這裏來了,自然不能放弃。

3.Java進階,顛覆初學的認識

推薦書籍:《Java編程思想》,《Effective Java》
如果你已經讀完了Java的入門書籍,也許會覺得:“Java不就那麼回事嗎,用起來也挺簡單啊,別跟我講什麼理論,我只要會用就行了!”但實際上,這個階段也許會顛覆你之前對Java的大部分認知,我們將從Java的高級特性以及底層原理來給我們的Java知識樹添枝加葉。
《Java編程思想》這本書近乎等於Java的權威教材,它詳細講解了Java的大部分細節,翻開目錄,也許你會覺得許多知識你都學過,但是請相信我,這本書值得一字一句的從頭讀到尾,讀完將讓你的Java內功功力大進,上昇幾個級別。當然,讀完這本書是考驗人毅力的一大挑戰,因為這本書的確有些晦澀難懂,經常看一遍看不明白,需要多看幾遍,並且這本書近乎800頁的篇幅(實際上這本書的頁數更多,只不過最後一張圖形用戶界面和Android開發關系不大,可以不看)實在是相當挑戰讀者的耐力。
《Effective Java》是Java使用者必看的書籍(無論你是哪個方向),它以幾十條實戰經驗總結作為索引,讓讀者從各處細節上掌握Java的使用技巧,從而編寫出高效可用的Java代碼,當把這些經驗了然於胸時,帶著這些經驗寫代碼,將會節省你大量的時間和代碼量來獲取到足够多的編程經驗。

最新大廠程序員進階寶典,最終入職阿裏_Android_02

4.Android開發進階,以及設計模式的學習

推薦書籍:《Android開發藝術探索》,《Android源碼設計模式解析與實戰》
學習完《第一行代碼》後,你可能會使用Android SDK中提供的許多類庫來開發Android應用了,但是,只會使用是遠遠不够的,我們必須掌握它們的運行機制和原理,以及我們還應該學習自定義一些類似與系統提供的組件的工具(例如自定義View),學習這些知識,以上兩本書再好不過了。它們對於這部分知識的講解可以說是相輔相成的,這兩本書同樣是需要花大力氣去閱讀的,當這兩本書被你徹底吃透以後,1到3年經驗的Android面試中,你基本已經可以拿下全部和Android有關的問題了。
如果你已經吃透了《Java編程思想》想必你已經和23種設計模式的其中幾種見過面了,但也許還不是特別有感覺,這時候就需要系統的學習了,《Android源碼設計模式解析與實戰》不僅講了Android源碼,更精講了各種設計模式,學完這本書可以說是一舉兩得,又能學習源碼,又能系統的學習設計模式。

5.實戰環節

當你第3階段完成以後,實際上就可以將這第5階段和第4階段並行執行了,這部分的知識絕大部分是書籍中所沒有的,因此需要結合網上的博客文章和自己的大量動手實踐來學習。首先,你已經在《第一行代碼》中見過幾種開源庫了,現在,為了高效開發Android應用,我們應該學習以下幾類主流Android開源庫的用法和原理,如下所示:

1.網絡請求(Retrofit2)
2.圖片加載(Glide/Fresco)
3.事件總線(EventBus/Otto)
4.异步操作(RxJava2)
5.依賴注入(ButterKnife/Dagger2)

括號中列出的是該類開源庫中的代錶作,有些種類我列出了兩個,但是初學的時候只需要挑一個學習就可以了。當然,開源庫的種類遠不如這些,還有例如數據庫操作,圖片選擇器,大圖查看器等許多種類,但是這些庫用到的頻率並不及以上五種,以上五種開源庫幾乎可以說是在任何app中都要使用到的,學會它們無論是對你開發應用的效率還是應付公司面試都頗為有用。
學習開源庫的方法主要是先在網上找到一篇靠譜的文章簡單讀讀,如果你英文好的話也可以直接去它們的項目主頁去讀英文文檔;然後把它們的簡單示例寫個demo或者直接用在你正在開發的個人項目中,用上去以後再根據代碼,仔細研讀解析的文章或文檔,然後修改這些代碼,嘗試些高級用法。等你閉著眼睛都能在腦中默念出這些庫的使用流程的時候,就可以再找一些深入分析的文章或者親自去看它們的源碼來學習它們的原理;學習原理是非常重要的,特別是在大公司的面試中,考察你是否理解你使用的庫的原理也是相當重要的一個環節。到這裏Android開發相關的基礎理論知識就已經大致學習完了,這一節既然叫實戰環節,那麼你大量的編碼量是少不了的,作為一個初涉編程的學習者,每天都保證一定的代碼量或技術書籍的閱讀量是少不了的,只有持之以恒的大量練習,解决實際開發中的大量問題,技術才能真正的快速提高。

6.計算機基礎知識補缺

開頭已經說過,Android開發已經不是隨便一個外行靠幾個月的突擊就能進入的低門檻行業了,市場上真正缺少的是更專業的開發者,或者說是中高級工程師。作為一個非計算機專業的非科班生來說,制約人發展的往往就是計算機基礎知識,基礎是個很奇妙的東西,很多人覺得基礎枯燥難學又感覺不知道該怎麼用,於是就放弃了基礎的學習,但實際上基礎這東西就像練體能,你在踢足球的時候射門鏟球,頭球倒鉤,看起來固然很帥,但是在一場90分鐘的球賽裏,如果沒有體能,會在比賽結束前就先累趴下,而計算機基礎就類似於體能的作用,它供給你一個更專業的視角來看待編程和寫代碼,讓你在不知不覺中寫出高效的程序。
如果你一個還未畢業的大學生,那你無需做更多的計劃,只需要把學校的專業課每一科都學好就足够了,如果你能在大學期間參加一些這些方面的比賽,例如ACM,無論對你的編程能力還是簡曆都大有益處。
但是如果你已經踏入工作崗比特,那肯定是沒時間把大學所有的專業課都學一遍且學的很深了,那可以參照我以下的計劃,抓住基礎中的重點來學習。
在我看來,和Android開發關系最密切的三門基礎課:計算機網絡,數據結構與算法,操作系統,下面會為每個種類推薦相關學習書籍。
網絡:《圖解HTTP》,《圖解TCP/IP》
這兩本書都很薄,講的網絡知識也不會特別深,因此學習起來是非常快的,其它一些講解網絡的書籍,例如《HTTP權威指南》非常厚,也很晦澀難懂,雖然把HTTP講的非常透徹,但是閱讀起來耗費的時間太長,也非常費精力,因此在職的初級程序員就不推薦這樣的書了。而這兩本書幾乎涵蓋了Android開發的所用到的大部分網絡知識,例如HTTPS,HTTP,TCP/IP的原理,以及一些基礎網絡知識例如七層協議等等,應付面試中網絡部分的問題也是足够的了。
數據結構與算法:《算法4th》,《劍指offer》
《算法》是一本數據結構與算法的入門書,並且是用Java語言作為示例,因此如果你沒有任何算法方面的經驗,這本書是再適合不過了,即容易入門,又因為熟悉相關語言而不會感到陌生。
而《劍指向Offer》則是面試前准備的必備書籍,在大公司的面試中,無數算法題都出自本書,如果你沒有跳槽的意願,本書可以提昇你的思維並為你未來的跳槽早做准備,如果你即將找新工作,那本書更是必備的武功秘籍。
我目前也處在這個階段,剛剛准備開始閱讀這兩本算法書籍。
操作系統:
由於這個階段自己還沒達到,所以還不知道有哪些比較合適的書籍。聽群裏的朋友說《30天構建操作系統》是一本不錯的書,但我自己還沒有去了解過,這一部分等我學到這部分的時候再去詳細了解和補充。
高級:拓展知識面和大量實戰

最新大廠程序員進階寶典,最終入職阿裏_Android_03

7.知識拓展

推薦書籍:《深入理解Java虛擬機》,《數據結構與算法—Java語言描述》,Android/Linux底層書籍
在大公司的面試中,無論校招還是社招,都免不了問兩道到三道Java虛擬機的題,例如Java內存模型,gc算法等等,因此《深入理解Java虛擬機》這本書主要就是為了學習上述問題而存在的,當然,不僅僅是應付面試,讀完了這本書,也算是徹底理解了Java底層的運作機制。

在第六階段學完算法的同學也許會發現,《算法4th》並沒有包含動態規劃等算法知識,而《數據結構與算法—Java語言描述》正是補足這類知識點的好書,當然,這本書也不是必須要看的,如果你對自己的算法功底有更高要求,想深入學習,或者以後幹脆想向這方面轉行,並且在自己學有餘力的情况下就可以向這方面多下功夫,這本書看完後,如果你還不滿足,可以嘗試著挑戰一下傳說中的無字天書——《算法導論》。

作為一個基於Linux內核的操作系統,Android的許多運行機制都和Linux有關,如果你想更深入了解Android底層的內容,例如Native層的運行機制,Linux內核的原理等等,就可以選擇一些Android和Linux底層的書籍看看,至於具體是哪些書,我還沒有了解過,如果以後我向這方面深入擴展(當然也可能不會),我再回來補充。

除了以上這些推薦的書籍,我們還有另外一些知識值得關注,例如Kotlin。Kotlin今年正式被Google正名,成為在Android上開發應用的首選語言,當然,市場上的應用從Java向Kotlin全面轉型是需要相當長的時間的,因此Kotlin的學習順序被我放在了稍微靠後的比特置,但是,如果你已經完成了上述的所有階段,不知道接下來該學習什麼的時候,你就應該立刻開始學習Kotlin了。

除了新語言以外。一個好的開發者和其它開發者的一個很重要的區別就在於代碼是否低耦合,高複用,這就涉及到了架構模式,架構模式在Android中最常用也是最流行的就是MVP,因此學習MVP也是一件頗為重要的事情。

這裏雖然列在了下面,但是我認為Kotlin和MVP的學習順序應該在深入學習算法和Android/Linux底層之前,畢竟深入的算法知識和過於底層的系統知識和應用開發實際上已經相距甚遠了,雖然學習它們可以提昇思想,但是在某些方面來說,這些方向的具體知識已經和Android開發無關了,因此這兩塊是選學內容。
以上我列出的書籍,除了《Head First Java》我都是親自購買並閱讀過的(第六階段及以後的書還沒有讀完),但在這裏我還想推薦一下很多網友都推薦的好書,它們我雖然沒有看過,但是都口碑不俗,在這裏我把它們列出來。

《Java核心技術卷:卷1》,《Java核心技術卷:卷2》
這兩本也是Java方面的經典書籍,其中卷1是可以作為入門書使用的,而卷2則是高級知識的進階書籍。除了《Effective Java》不能被這兩本書替代以外,如果你讀了這兩本書,我推薦的其它基本Java書籍就不是必讀的了。
《Android群英傳》,《Android群英傳——神兵利器》
這兩本書是國內Android大神徐宜生所著,第一本可以看做和《Android開發藝術探索》具有同樣作用的書,但是內容上比《藝術探索》略微簡單,且並不能完全代替《藝術探索》,因此這本書可以作為互補書籍買來看看。而至於第二本《神兵利器》則是一本不可替代的書籍,你如果想找一本學習開發工具的書籍,這本書絕對合你的胃口,畢竟在Android開發的學習上,gradle,Android Studio,Git等工具的使用也是不容忽略的一大塊。

結尾

我還總結出了互聯網公司Android程序員面試涉及到的絕大部分面試題及答案,並整理做成了文檔,以及系統的進階學習視頻資料分享給大家。
(包括Java在Android開發中應用、APP框架知識體系、高級UI、全方比特性能調優,NDK開發,音視頻技術,人工智能技術,跨平臺技術等技術資料),希望能幫助到你面試前的複習,且找到一個好的工作,也節省大家在網上搜索資料的時間來學習。

 CodeChina開源項目:《Android學習筆記總結+移動架構視頻+大廠面試真題+項目實戰源碼》

最新大廠程序員進階寶典,最終入職阿裏_程序員_04

版权声明:本文为[mb612ed7a890c2b]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210919074945576z.html