前言
前段時間,一位計算機專業大四即將畢業的同學關注了我的公衆號,然後問了我一系列的問題,表達出他對未來的迷茫:
我是一個二本科班的應屆生,今年畢業,想知道需要掌握什麼樣的安卓技能才能參加工作?
我在b站上看了很多安卓的教學視頻,很多是16年左右的,內容很舊,想知道我學完這些,距離參加工作,還有哪些要去補充的?非常迷茫!
我仔細看了一下他提出的問題,歸納總結無非就是:計算機專業的應屆生,需要掌握哪些技能才能找到Android方面的工作?
我相信有這種疑惑的同學一定也不在少數,那麼今天我就結合我的實際經驗,來簡單介紹一下,作爲一名即將畢業的計算機專業的應屆生,我們需要做哪些功課才能幫助我們更快地找到Android相關的工作。
自我介紹
在開講之前,我先簡單地做一下自我介紹:
我是一個再普通不過的二流地方院校。14年畢業,13年10月找到的實習單位參加工作,中間跳槽了幾家公司,一直從事Android相關的開發工作,目前已有8年有餘。
平時喜歡逛逛github,看看掘金,有空就維護一下github上的開源項目,沒空就寫寫文章,發發牢騷,是個再普通不過的屌絲程序猿。
說了我的這些經歷,無非就是想告訴大家:我一個普通二流本科生能做到的,大家也一定能做到。所以大家不必擔心,只要你能夠按照我的指導去做的話,你一定可以比我更加優秀!
掌握紮實的基本功
俗話說:基礎不牢,地動山搖。
作爲應屆生,由於沒有什麼實際的項目經驗,所以在面試過程中,用人單位會更看重應屆生的基礎知識掌握程度以及發展潛質。
所以,作爲一名應屆生,我們一定要把基本功的提升放在首位。那麼要想成爲一名Android開發者,我們需要着重掌握哪些內容呢?
基礎學科知識。如計算機組成原理、數據結構、計算機網絡、操作系統、數據庫設計、數字電路等。這些科目向我們介紹了計算機的工作原理,掌握了這些就可以幫助我們更好地理解程序的本質。
Java基礎知識。包括語言的特性、語法、規範等。例如:Java數據類型、運算符、面向對象、集合類、泛型、註解、反射、多線程併發、Java虛擬機、設計模式等內容。
Android基礎知識。例如:Android四大組件、Activity的生命週期以及啓動模式、動畫、自定義View、Android不同版本的特性、SQLite、內存泄漏、ANR、Context、Handler機制、View繪製渲染機制、事件分發機制等內容。
如果我們能夠牢牢地掌握上面列舉的內容,那麼外面的公司絕對是搶着要你的。
認清學校與社會的差距
不要天真地認爲把學校裏學到的東西都學會了就可以順利找到工作了,當然也不要認爲學校裏學的都是些沒有用的東西。
作爲一名應屆生,我們非常有必要認清學校與社會存在的差距。
學校裏教的都是些非常重要且基礎的東西,我稱之爲專業素養。這些東西非常重要,它直接決定了我們日後發展的天花板在哪裏。
社會上教的都是些具體工作領域方面的知識,我稱之爲職業技能。這些內容可以幫助我們更好地完成工作。
所以,我們除了要把學校裏學的內容打紮實,還需要儘早地接觸社會,找到對口的實習工作,掌握必要的職業技能。
我們在找實習單位的時候,可以參考以下幾點:
- 無論是大廠還是小廠,進去都會有所收穫。進大廠我們可以收穫不錯的履歷和人脈(這非常有用),學習到優秀的管理制度和流程控制,提高技術的深度。而在小廠可以磨練你的意志、獲得更多主導的機會、更大的自由度,拓展技術的廣度等。
- 第一家實習單位可能極大影響個人的職場觀和價值觀,選擇時需慎重。切忌去小微企業或者創業型公司,因爲這類公司每天都可能徘徊在倒閉的邊緣上,所以並不會重視人才的培養。
- 在選擇實習單位的時候,要多瞭解和掌握企業的信息,走正規渠道。不正規不可靠的千萬別去;入職前,以任何藉口讓你交錢的公司不要去。
提高自己的動手能力
做技術搞開發的,動手能力永遠是需要作爲首要能力進行培養的。除非你是業內公認的技術大佬,否則秀出你的代碼纔是證明你實力的最佳方式。
很多小白在入門某一項語言或者技術的時候,通常都是購買網課或者買一本入門書籍翻看,抄一抄視頻或者書中的源碼,就天真地以爲自己已經徹底掌握了。他們殊不知,這些只是一些皮毛而已,當條件稍微發生一點變化的時候,他們就徹底懵逼,手足無措了。
那麼怎樣才能擺脫這樣的困境呢?其實非常簡單,多敲代碼,多練習,多思考,熟能生巧嘛。
下面我簡單舉幾個例子,給大家一點啓發:
- 假如你今天學了Android如何自定義View控件,那麼你就可以按照自己的想法寫一個Android尚未提供給我們的控件或者是仿xxx的控件等。
- 假如你今天學了Android的事件分發機制,那麼你就可以嘗試着解決幾個層級較爲複雜的事件衝突問題。
- 假如你今天學了Google提供給我們進行應用開發的Jetpack框架組件,那麼你就可以嘗試用這個Jetpack組件去寫個屬於自己的app。
如何提高自己的動手能力
正如Linux之父的那句"Talk is cheap. Show me the code.",嘴上說千遍,也不如直接上代碼擼一遍更加令人印象深刻。
說到這兒,可能又有朋友想問了:對於一個從來就沒有具體項目經驗的人來說,該從何做起呢?
這裏我還是推薦大家多到github或者gitee這種開源代碼託管平臺去找一些優秀的開源項目,這些項目很多都是歷經了各種複雜業務考驗的高價值項目,臨摹他們的代碼,可以極大地提升我們的技術水平和編碼水平。
那麼當初我是怎麼鍛鍊我的編碼能力的呢?下面我就簡單介紹一下供大家參考:
1.首先到開源代碼託管平臺尋找到適合自己的目標項目。
2.閱讀項目的代碼,初步瞭解項目的實現原理以及架構。
3.自己新建一個項目,然後按照自己的理解去自己實現一個類似的項目,不懂的時候可以借鑑或者copy目標項目的代碼(目標項目就類似於參考答案)。
4.最低的要求是能夠正常運行並且實現目標項目的主要功能,要求高一點的就是能夠有一些屬於自己的優化點或者特性等。
5.最後對自己做的這個項目進行歸納總結,優秀一點的可以寫一篇README介紹或者原理分析。
如果你能夠按照我上面所說的,來回寫個4~5個項目之後,相信你的動手能力一定會有質的飛躍。
關於學習和麪試的感悟
技術積累要從日常做起,要做到隨時出去面試都能有地方去,未必厲害到那種去大廠的地步,但是起碼保證自己不會長時間失業。
學習
無論工作多忙該讀的源碼,該刷的題都不能落下。要明白,私企都是說翻臉就翻臉的,整不好哪天你就會被裁(疫情開始後一起進公司的應屆生都被裁員了好一些)
必須把自己的命運握在自己的手裏,技術積累要從日常做起,要做到隨時出去面試都能有地方去,未必厲害到那種去大廠的地步,但是起碼保證自己不會長時間失業。
因此在公司的時候沒事少玩手機,多看看書和博客,或者clone開源項目源碼下來讀,這些都是未來跳槽的資本。
我個人其實也比較懶,但是積少成多在沒需求做的時候還是學了些東西,主要方式如下:
1、idea裝LeetCode插件,有空刷算法(謹慎)
2、博客園看文章。可以利用搜索功能看一些系列文章
3、看書
4、把開源項目fork到自己帳號上然後clone下來看,直接把註釋寫上去方便以後回看
5、b站也有些很有價值的視頻,不過需要自行篩選來看
面試
有內推一定找內推,而且一定要找練手公司面試。面試不僅關係到知識儲備,還有語言組織表達能力,這個也是要練習的,另外還可以對知識體系查缺補漏。
大廠每次面試,面評都會記錄到招聘系統,如果留下不好的評價會影響以後投遞(我就是沒有從小公司開始,因此吃了虧)
社招面試一般都會有項目面試,包括對技術選型和業務的提問,這些都要提前準備好說辭,另外就是面試官問的問題可以不斷深入挖掘,來展現你的技術深度。
一般如果這一面的面試官對你滿意,讓你過到下一面,他會在面試結束時主動的向你介紹部門的情況,如果面試官對你說了很多他們的業務,那麼這一面基本就是過了。
最後就是,第一家公司真的要慎重選擇,能去大廠一定去大廠,呆夠2年再跳,能選擇的崗位會多很多,兩年以下年限找工作是真的有些尷尬。
最後
在這裏,我想給新手朋友們一點建議:很多時候,很多事情,並不像你想象中的那麼簡單,千萬不要自認爲簡單而不願意去做,很多東西只有你親手去做了之後,纔會發現事情並不像你最初想的那麼簡單。
Android系統學習路線參考
面試:如果不準備充分的面試,完全是浪費時間,更是對自己的不負責!
接下來分享的系統學習資源以詳解各大互聯網公司的 Android 常見面試題爲主線,從面試的角度帶你介紹必備知識點,以及該知識點在項目中的實際應用。
幫你在現在的基礎上,重新梳理和建立 Android 開發的知識體系。無論是你短期內想提升 Android 內功實力,突破自己工作中的能力瓶頸,還是準備參加 Android 面試,都會在這份資料中有所一些收穫。
1、看視頻進行系統學習
前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因爲Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以通過視頻來學習,效果更好,也更全面。關於視頻學習,個人可以推薦去B站進行學習,B站上有很多學習視頻,唯一的缺點就是免費的容易過時。
另外,我自己也珍藏了好幾套視頻,有需要的我也可以分享給你。
2、進行系統梳理知識,提升儲備
客戶端開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。
- 架構師築基必備技能:深入Java泛型+註解深入淺出+併發編程+數據傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO
- Android高級UI與FrameWork源碼:高級UI晉升+Framework內核解析+Android組件內核+數據持久化
- 360°全方面性能調優:設計思想與代碼質量優化+程序性能優化+開發效率優化
- 解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網絡訪問框架設計+RXJava響應式編程框架設計+IOC架構設計+Android架構組件Jetpack
- NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發
- 微信小程序:小程序介紹+UI開發+API操作+微信對接
- Hybrid 開發與Flutter:Html5項目實戰+Flutter進階
知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。
主要內容:
Java 基礎(★★)
- 面向對象思想
- 多態
- 異常處理
- 數據類型
- Java 的 IO
- 集合
- Java 多線程
Java 高級(★★)
- Java 中的反射
- Java 中的動態代理
- Java 中的設計模式&回收機制
- Java 的類加載器
Android 基礎(★★★)
- Android 基本常識
- Activity
- Service
- BroadCastReceiver
- ContentProvider&數據庫
- Android 中的佈局
- ListView
- JNI & NDK
- Android 中的網絡訪問
- Intent
- Fragment
Android 高級(★★★)
- Android 性能優化
- Android 屏幕適配
- AIDL
- 自定義控件
- Android 中的事件處理
- Android 簽名
- Android 中的動畫
- 網絡協議
- 其他
3、讀源碼,看實戰筆記,學習大神思路
“編程語言是程序員的表達的方式,而架構是程序員對世界的認知”。所以,程序員要想快速認知並學習架構,讀源碼是必不可少的。閱讀源碼,是解決問題 + 理解事物,更重要的:看到源碼背後的想法;程序員說:讀萬行源碼,行萬種實踐。
主要內含微信 MMKV 源碼、AsyncTask 源碼、Volley 源碼、Retrofit源碼、OkHttp 源碼等等。
4、面試前夕,刷題衝刺
面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。
關於面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三: