天天看點

推薦一個寫的不錯的Java學習路線zhifou.net

一.如何選擇職業方向

​ 我見過很多之前都不是計算機專業出身的,現在從事Java開發或者大資料等職業,而且現在做的都還不錯。我想這些人應該都是經過深思熟慮的做出選擇的,或者是人雲亦雲,不過都已經走出來了。我是從事JAVA這塊十多年,從初級開發到現在架構師,确實一路經曆很多。

​ 就目前主流網際網路公司,JAVA的應用場景還是最多的,比如大型的分布式系統、微服務架構,基本上服務端開發用的多數是JAVA。這就決定了市場需求,如果技術還可以,找工作不是問題。當然,做IT這塊有很多選擇,大緻有幾個方向:

1.前端工程師

​ 大型網際網路公司都是前後端分離的,前端負責前端開發,比如H5、APP等工作,後端服務服務端開發。前端現在也很複雜,需要掌握HTML、css、javaScript這些基本技術外,還需要一些流行架構,比如Node、angular2、vue.js、react等,這些更新都很快。

​ 優勢:前端的起薪比較高,我覺得前端現在很緊缺的,薪資普遍比後端高點。

​ 劣勢:對于職業規劃上,前端以後可以做前端架構師、前端的Team Leader。但是很少見到技術總監、CTO這些M級職位是前端出身的,當然,也不是絕對。

2.大資料工程師

​ 大資料之前還是很搶手的,但是目前市場應該趨于飽和,也是不錯的職業方向。如果你現在是DBA,我想你轉大資料應該很快。比如你做數倉Hive上寫sql,估計一天就可以轉型成功。是以現在很多DBA轉大資料,而且感覺很簡單,so easy,但是估計隻會寫SQL。如果你是數倉Hive上寫SQL的,我的建議是寫個半年就可以了,多了基本上就廢了。技術棧如下:

​ Java語言、Linux 、Hadoop(HDFS+MapReduce+Yarn )、 HBase、Hive(Hql基本操作和原理了解)、 Kafka、Storm/JStorm、Scala、Python、Spark (sparkCore+sparksql+Spark streaming ,或者加上MLLIB) 、還有(Sqoop/Flume/Oozie/Hue等)。

​ Spark可以用scala或者java,用scala操作RDD比較友善,前提是有學習成本。scala一行代碼搞定的,用JAVA有可能幾十行,但是一些其他中間件基本上都支援JAVA,用scala就少些,內建個友善比較麻煩。

​ 流式計算,Flink未來應該是趨勢,Spark streaming嚴格來講是批處理。

3.JAVA工程師

​ JAVA已經流行了很多年了,不過現在GO語言慢慢的也在興起。大型網際網路公司分布式架構,服務端語言大多數是Java語言,周邊生态也是最全的。

​ 做後端的以後職業規劃可以有技術型,比如技術專家、架構師。管理可以往Team Leader、技術總監、CTO。

​ 其他還有很多選擇,比如資料工程師、機器學習、量化工程師,也是不錯的選擇。

二. JAVA需要學習的技能

​ 如果你堅定的選擇Java,那就開始吧。

1. JAVA基礎

​ 這個是基礎,是以後發展的根本。

​ 你可以選擇從看書開始,比如JAVA程式設計思想、JAVA核心技術卷,不過我不建議先從這裡開始,翻譯過來有很多語言比較晦澀,而且書也比較厚,堅持學完估計會花不少精力,也會有挫折感。

​ 你可以選擇網上一些免費的教程,

https://www.zhifou.net

,也有面向零基礎的JAVA教程。

​ 學習過程中,重要的事情說三遍,動手!動手!動手!了解的再好,都沒有動手來的徹底,還有一點就是做筆記。

​ 需要學習,面向對象、注解、泛型、多線程、IO、JVM、集合、反射、網絡程式設計、設計模式、JDBC等技能。學習過程中,随時做些小的項目。

2. JAVA WEB

​ 語言類,html、javaScript、css(了解)、Servlet、XML、AJAX、JQuery、http協定。

​ 架構類,Spring MVC這個就可以了,像Struts、Hibernate、Webwork這些你可以忽略了,即使遺留項目,現學也來得及。

3. 資料庫

​ 項目都是動态的,肯定離不了資料庫,也是以後工作中經常用的。如果時間有限,基本上MySQL要掌握。

  • DDL、DML
  • 事務隔離級别
  • 資料庫索引,比如索引原理(B+Tree)、聚集索引、非聚集索引、不同引擎的索引實作差別。
  • binlog,MVVC等。這個有點麻煩,可以以後學。
4. 緩存

​ 系統中很多資料是要放入緩存,緩存速度很快。Memcached由于隻放記憶體,斷電會丢資料,Redis現在是主流,需要掌握如下:

  • 五種資料結構,string(字元串),hash(哈希),list(清單),set(集合)及zset(sorted set:有序集合)。
  • 叢集方式,初級可以先了解。單節點執行個體、主從模式、sentinel模式、cluster模式。
  • 常用指令
  • 持久化機制,rdb、AOF。
  • 原理,比如單線程、惰性删除等。
5. 工具類
  • Java開發工具,Eclipse(免費),IntelliJ IDEA(社群版是免費的)。
  • 版本控制工具,SVN、git(網際網路公司大部分用這個)。
  • JAR包管理工具,Maven(大多數), gradle(少部分)。
6.架構類或中間件
  • spring是必須的,IOC和AOP是必須掌握的。EJB現在就不要提了。
  • 消息,ActiveMQ、RabbitMQ、RocketMQ、Kafka(大資料場景用的較多)。分布式事務很多都是用消息解決的。
  • MyBatis,簡單易用,大部分都是用這個。Hibernate這個重量級ORMapping架構用的很少了。
  • RPC通信,Dubbo(常用)、Motan(新浪)、Spring Cloud(現在很火,微服務的一種常用架構)、gRPC(Google的用的也蠻多)。
  • 分布式一緻性協調架構,Zookeeper,本是主要用于大資料場景,不過現在很多分布式也是用這個,了解下基本原理,原子消息廣播等。
7. 資料結構與算法

​ 線性表(數組、連結清單)、棧與隊列、樹與二叉樹(樹、二叉樹基本概念、二叉查找樹、平衡二叉樹、紅黑樹),這些還是要會的。

​ 關于LeeCode,如果你校招進大廠,這個你要好好刷刷了,你即使是神童,不刷你也搞不定。現在很多社招也會面這個的。

8. 作業系統

​ Linux作業系統的常用指令會用一些,工作中大機率會用到的。至于select、epoll、Zero以後可以慢慢學習。

三.怎麼學習

1. 善于借助搜尋工具

​ 遇到問題,恭喜你,有問題才能進步。先想着自己解決,不行解決搜尋引擎,比如百度、google。搜尋也是有技巧的,不妨先學習下搜尋的技巧。如果能閱讀源碼肯定是極好的。

​ 切記,不要很随便的問身邊的同僚技術問題,除非你覺得是合理的,工作中要樹立自己的品牌,千萬不要被别人打上不好的标簽。

2. 官方文檔是不錯的學習途徑

​ 想學一門技術,最先去找官方文檔,基本上文檔都是可以接受的,當然,你的英文要好點,不好也沒關系,借助有道,慢慢的就可以了。實在不行就找一些網上的視訊教程,但是最新的有可能沒有,或者是别人總結過的,有可能被帶歪了。

3. 善于做筆記或者寫部落格

​ 無論學什麼,能用自己的語言總結出來,都會有新的收獲。即使過了很久,翻開筆記或者部落格,很快就會把隻是串起來。還有一點,寫部落格可以拓寬自己的知名度。

​ 我其實很少寫部落格,但是筆記會每天都做的,不斷修改。若幹時間後,翻開之前的筆記,媽呀,這太low了吧,有這種感覺說明進步了。

4. 動手做項目是成長最快的方式

​ 重要的不需要解釋了。

四.怎麼寫履歷

1. 履歷要中肯

​ 履歷寫的中肯合理,比如初學者寫精通分布式架構,面試官肯定覺得這是神童,會問你分布式常用架構是什麼、調用鍊監控怎麼解決的、熔斷、限流。或者簡單點問分布式事務,兩階段送出、三階段送出、CAP理論、Base理論,你怎麼解決分布式事務問題的?

​ 你可以這麼寫,了解分布式架構,面試官問你,最起碼可以答出來12來。

​ 切記,履歷不可以造假,寫的内容自己心裡有數即可。

2. 履歷中要有亮點

​ 多寫項目經驗,不要通篇都是會哪些技能。如果我是面試官,我提問會很迷茫。項目經驗多寫自己參與的部分,遇到哪些難題,解決方案是什麼,這個看起來比較nice。

​ 我其實比較讨厭,上來就寫做過OA、CRM啥的企業管理軟體,因為寫的人太多了,有點普通,問你工作流引擎還不一定答出來。

​ 如果你做過電商項目,寫個訂單狀态機設計還是不錯的,最起碼每個訂單不是寫死,可以自由配置。還有庫存超扣怎麼解決的,這些都可以的。

​ 以上就我的個人經驗,如有不妥,請指正,願你在未來的職業中星辰大海。

轉自:

https://www.zhifou.net/blogdetail/1