Java難學嗎?

NL沒良心


興趣是最好的老師,如果你對編程感興趣的話,那麼學什麼東西都會比較快,也很容易學會。拿我自己來說吧,我是女生,因為大學時期接觸過C語言,感覺挺有趣的,所以畢業後就走上了Java工程師這個崗位。按理說,編程可能男生更容易些,因為邏輯思維比女生強,但是也不意味著女生不適合,我身邊還是有很多女工程師的。不知不覺已經走過4,5個年頭了,感覺在這個行業還是能夠混得走的。所以,任何東西,只要你自己下定決心想學會,就沒有學不會的,關鍵在於看自己的行動力。


sandyLI


  轉眼間已經千鋒Java面授學習一個月了,在這一個月中好像認識了一個新的自己,以前從來沒有想過我會選擇成為一名程序員,也從來沒有想過我會在晚上十一點還在敲代碼並且樂此不疲。在這裡說出一些自己的心裡話,來面授學習java真的是一個起到轉折作用的決定。

  這一個月的時間我們從頭開始學起,老師的講課方式讓我開始對編程發生了改觀,之前一直覺得編程是很枯燥的,但是在老師的教導下我逐漸能夠自己寫出一段代碼,不斷調試直到出結果是一件很有成就感的事情,我在享受這個過程。也許很多人都沒有看清自己,只要你想真的沒有什麼不可能的事情。

  Java培訓的第一階段我們是在學習基礎,在這個過程中我開始明白Java編程真的沒有我們想象的那麼難,入門之後能夠主動學習就會發現Java編程很有意思,何況老師每天也在為我們整理各種筆記,梳理知識點。儘管我們白天上課一直在學習,但我覺得課下的練習複習還是很重要的,晚上可以選擇在教室多留一會兒,做做練習複習下之前學習的知識點,我個人是這樣的。

  如果老師當天佈置的作業完成了,我會在回家後敲兩三道之前不太熟練的代碼,每天重複這個過程,如果你每天被代碼包圍著,那你很難不去投入到Java的世界中。有時候碰到糾結的學的模糊的,感覺自己晚上睡覺做夢都是在一直調試代碼,每次這個時候我都想,沒事的可能是要超神了,然後繼續努力!

  這段時間的Java面授學習我們每天都會覺得很累,這個時候自我調節真的很重要,換個角度想想在這一個月的時間裡自己成長了太多,待到畢業的時候定會成為一個優秀的Java工程師。我們每天都是在提高自己,何樂而不為呢,既然我們選擇了這條道路,那就為了自己的選擇去努力,讓自己的心中只有敲代碼只有Java這一條主線,我們都會成為更好的我們,未來的時間裡,我們繼續一起努力向前!


你吃飽了嗎


興趣是一方面,課程體系的設置也是比較重要的,有些老師的講課方式就比較容易吸引人,聽起來不枯燥,學習Java,學習編程,比較重要的是練習,多練習,多總結,多思考,模仿別人的代碼,看別人是怎麼實現的,然後在自己實現,或者是自己先實現功能,再去優化,這樣進步會更大一些;


維心每日看點


恰好我之前寫了四篇Java工程師學習指南,就用前兩篇的內容來回答一下這個問題吧。
我寫過一個Java工程師學習指南,我把它分為了四個部分,第一步是打好Java基礎,掌握Java核心技術,第二步是掌握Java Web技術棧,能夠做一些項目,第三步是掌握Java方面的進階技術,包括網絡編程、併發編程、JVM等,第四步是掌握後端進階技術,比如分佈式、緩存、消息隊列等技術。
按照這樣的一個脈絡,我覺得能夠掌握這裡面的絕大部分內容,並且有過相應的一些實踐,那麼可以算是學好了Java。當然,學好Java只是一個開始,要真的幹好活,做好項目,以及其他各方面的技術工作,則是在學好Java的基礎去延伸和展開的。
接下來就是具體的文章,建議大家按順序閱讀,有點長,收藏的時候記得點贊或者評論哈。筆芯!文中也多次提到了我的博客,這裡放下我的博客地址 https://blog.csdn.net/a724888
Java工程師學習指南
入門篇
最近有很多小夥伴來問我,Java小白如何入門,如何安排學習路線,每一步應該怎麼走比較好。原本我以為之前的幾篇文章已經可以解決大家的問題了,其實不然,因為我之前寫的文章都是站在Java後端的全局上進行思考和總結的,忽略了很多小白們的感受,而很多朋友都需要更加基礎,更加詳細的學習路線。
所以,今天我們重新開一個新的專題,分別按照四篇文章講述Java的學習路線(分別是入門篇,初級篇,中級篇,高級篇),筆者也打算趁此機會,回憶一下自己的Java學習歷程。今天我們要講的是,小白同學如何入門Java。
先聲明一點,文章內容不會詳細到每一步怎麼操作,只會提供大致的思路和方向,給大家以啟發,如果真的要一步一步指導操作的話,那至少需要一本書的厚度啦。
本文所述的方法不一定適合所有人,如有錯誤敬請諒解。
01 前期準備工作
開發環境搭建
這一步我們往往會直接跳過,但既然是面向小白的教程,這裡就提一下吧。首先你需要一臺電腦,然後安裝好JDK和JRE,JDK提供的是Java開發工具,也就是一些必備的jar包,JRE則是Java的運行環境組件,我們熟悉的JVM就在這裡面。
安裝好這兩個東東之後,一般還要配置一下環境變量,否則有一些目錄可能無法被正確找到。
IDE選擇和安裝
IDE指的就是本地開發編輯器,沒有了它,你就只能直接在記事本這類工具裡敲代碼了。IDE最大的好處就是整合了大量的工具和功能模塊,讓你非常輕鬆地完成開發。
以前大家都用eclipse,不過eclipse已經不流行了,現在我推薦你直接用intellij idea作為你的第一個代碼編輯器。如果是用過eclipse的同學,基本上也可以無痛切換。
intellij idea可以直接在官網上下載,試用版30天,如果想要永久使用,網上也有一些辦法滴。
關於jar包
jar包是什麼,其實就是將一堆class格式文件打包,Java中把它稱為jar包,這些jar包在編譯器中能被直接識別,讓開發者使用。
對於新手來說,可能只需要用到JDK自帶的一些API,但是如果你要引用外部jar包,可能就會遇到一些困難了。對於idea來說,導入外部jar包有兩種辦法,一種是手動導入jar包,一種是使用maven。後者會在Java Web相關的文章中講起。
手動導入jar包其實也不難,你需要先下載好jar包,然後在對應的項目下選擇導入jar包即可,具體的方法這裡就不展開說了,因為在網上都找得到。
02 學習Java基礎的幾種方法
瞭解基礎語法
學習一門語言,最開始要做的事情就是學習它的語法。我最早學習Java語法是在Runoob,這個網站可以讓你對任意一門語言完成最快速的語法入門,當然,這只是相當於你瀏覽了一遍基礎語法。
想要真正掌握Java語言基礎,光看基礎語法還遠遠不夠,我在大三第一次接觸Java課程,聽老師講面向對象三大特徵聽得一頭霧水,連數組的初始化方式都理不清楚,但這些內容都是我們需要掌握的。所以,為了學好Java基礎,我們還需要看視頻或者看書進行學習。
看視頻
視頻的話,可以到極客學院或者慕課網聽Java基礎課程,當然也可以看我分享的Java視頻課程。大家也都知道,現在Java的培訓班非常多,基本上學的東西也都大同小異,不過它們的有些課程還不錯,大家有渠道的話也可以去看一看。
看視頻的好處是你可以更好地接收知識,同時也會耗費你更多實踐,所以,有時候你也可以選擇看書。
看書
看書的話,對於小白來說不推薦太複雜的書,比如《Java編程思想》這種書,新手千萬不要看。我個人建議,你只需要先看看《Java入門到精通》這種類型的書就足夠了,因為這個部分的學習只是為你後面的學習開個頭,你以後可能還要回過頭來重新研究這些內容。
現在市面上介紹Java基礎的書籍實在太多了,質量參差不齊,內容同質化嚴重,筆者看過的其實也不多。給大家一個建議,你只需要挑一兩本書來看即可,這裡推薦兩本最簡單的吧,《head first java》和《Java從入門到精通》。
看博客
這裡再推薦另一種學習方式,就是看博客,博客比起書籍來說,更適合對於某個技術點的學習,你可以很容易地在網上找到這個知識點相關的原理,實現方法,以及代碼範例。
我的博客裡沒有講解特別基礎的東西,如果你看一些比較基礎的文章,可以到Runoob等網站上查看。如果你有一個很明確的知識點想要學習,相信搜搜引擎會給你更好的答案。
代碼實踐
除此之外,一般的Java書籍或者視頻課程都會要求你相應完成一些練習題,這部分內容你需要自己在電腦裡使用IDE完成。
在IDE裡,你可以很好地熟悉Java語言的使用,基本代碼的實現,同時可以嘗試各種各樣的API,並且測試一些語言特性,比如繼承,封裝,多態等等。
另外,這也是你熟悉IDE的一個好機會,因為在公司裡做開發可能要用到IDE各種各樣的功能,提前熟悉好IDE絕對是有益無害的。
03 Java入門必備知識點梳理
在Java入門階段,你可能需要接觸到以下這部分知識,不管你是從通過哪種方式學習,這些內容都是你學習Java基礎時繞不過的重點。
Java基礎知識
這部分內容是你必須要掌握的內容,在入門階段你需要把這些基礎打紮實,以便於在學習後面的內容時可以更上一層樓。
如何把基礎打紮實呢,最好的辦法就是在IDE上把書上或者視頻上的每個例子都實現一遍,當然有的時候你也可以自己寫一些有意思的例子。
1 基本數據類型
比如int,double,char,以及其包裝類。
熟悉基本數據類型的使用,瞭解每種類型所佔的字節數,以及它們和包裝類之間的相互轉換。
2 流程控制
比如for循環,if else,while循環等等
如果是學過c語言的同學,這部分可以跳過了。
3 字符串類型String的使用
字符串類型是Java中很重要的類型,它不是基本數據類型,但卻很常用,熟悉和實踐String相關的api,開始你對字符串的學習吧。
4 數組
數組的初始化方式有哪些,二維數組應該怎麼寫,把數組當成方法參數又該怎麼處理?
5 類和對象
Java中最重要的兩個概念:類和對象,它們有什麼用呢,有什麼區別和聯繫呢,請在代碼中實踐它們吧。
Java核心技術
對於這部分內容,我相信很多小白只能瞭解它們的基本使用方法,但是並不明白其背後的一些原理:比如為什麼接口和抽象類有這些區別,多態的意義是什麼,為什麼要有反射。
新手在學習這部分內容時,只需要知道怎麼用就可以了。當然,你最好把這些特性都實現一遍,以加深印象。
至於為什麼有這些特性,這些特性背後的原理是什麼,不是我們現在討論的內容,這些內容我們將在初級和中級篇中講述。因為,要了解這些原理,你得了解JVM,瞭解併發技術的基礎,瞭解網絡基礎,甚至更多。顯然,這不是你現在能做到的。
1 接口和抽象類
寫一些接口,同時寫一些實現類去實現這些接口,並且瞭解一下為什麼我們需要接口,為什麼子類需要實現接口裡的方法。
同理,去實現一些抽象類吧。然後,看看它和接口有什麼不同。
2 繼承,封裝和多態
如何理解繼承,子類和父類之間有什麼聯繫呢。
封裝是一種保護代碼的方式,有哪些方式可以實現封裝呢。
多態一般分為重載和重寫,它們分別怎麼使用?
3 異常處理
Java中的異常處理主要用於捕獲和處理錯誤,請你寫一些try catch代碼塊去捕獲錯誤吧。
4 集合類
集合類是我們經常需要打交道的東西,List,Map,Set等等,趕快去熟悉API,然後寫一些測試例子吧。
5 IO輸入流和輸出流
IO輸入流和輸出流可以操作文件,網絡數據等內容,如何在Java代碼中完成這麼複雜的操作呢,其實只需要簡單的幾個api就可以了。
6 多線程
為了讓系統資源最合理地分配和調度,我們需要多線程,多線程會讓程序變得有趣,也會帶來很多問題,使用Thread和相關API,去嘗試這些有趣的事情吧。
可選內容:
1 反射(瞭解即可,不是入門必須)
2 枚舉類型和泛型(瞭解即可,不是入門必須)
3 網絡通信(瞭解基本的socket使用即可,需要網絡基礎)
4 數據庫操作(瞭解基本的JDBC即可,需要數據庫基礎)
04 總結
總而言之,對於一個Java小白來說,入門Java可以分為這幾步:
1 首先搭建好Java開發環境 2 通過Runoob等一些網站熟悉Java的基本語法 3 通過看書看視頻等方式熟悉Java基礎知識,通過代碼實踐加深理解 4 通過看書看視頻等方式初步瞭解Java核心技術,通過代碼實踐加深理解。

本文主要是為大家提供一個學習的思路,以及推薦一些學習方法,如果你能夠按照這樣的步驟去學習,並且配合上一些適合你自己的學習方法來完成學習計劃,相信你可以很好地完成對Java的入門。


更多內容請關注微信公眾號【Java技術江湖】
一位阿里 Java 工程師的技術小站。作者黃小斜,專注 Java 相關技術:SSM、SpringBoot、MySQL、分佈式、中間件、集群、Linux、網絡、多線程,偶爾講點Docker、ELK,同時也分享技術乾貨和學習經驗,致力於Java全棧開發!(關注公眾號後回覆”Java“即可領取 Java基礎、進階、項目和架構師等免費學習資料,更有數據庫、分佈式、微服務等熱門技術學習視頻,內容豐富,兼顧原理和實踐,另外也將贈送作者原創的Java學習指南、Java程序員面試指南等乾貨資源)


Java工程師學習指南
初級篇
最近有很多小夥伴來問我,Java小白如何入門,如何安排學習路線,每一步應該怎麼走比較好。原本我以為之前的幾篇文章已經可以解決大家的問題了,其實不然,因為我之前寫的文章都是站在Java後端的全局上進行思考和總結的,忽略了很多小白們的感受,而很多朋友都需要更加基礎,更加詳細的學習路線。
所以,今天我們重新開一個新的專題,分別按照四篇文章講述Java的學習路線(分別是入門篇,初級篇,中級篇,高級篇),筆者也打算趁此機會,回憶一下自己的Java學習歷程。今天我們要講的是,小白同學如何入門Java。
先聲明一點,文章內容不會詳細到每一步怎麼操作,只會提供大致的思路和方向,給大家以啟發,如果真的要一步一步指導操作的話,那至少需要一本書的厚度啦。
本文所述的方法不一定適合所有人,如有錯誤敬請諒解。
01 Java Web項目指南
jav在上一篇文章中,我們講到了入門Java的幾個步驟,先搭建好環境,然後熟悉基本語法,接著熟悉Java的一些核心技術,並且在代碼中進行實現。
如果你已經完成了這部分內容的學習,應該會感覺自己對Java已經有一定了解了,可以輕鬆地寫出一些Java代碼,比如實現多線程輸出數字,再如操作IO流等等。
當然,這些代碼通常只是一些demo,我們在實際的項目中可能並不會這麼簡單地使用這些技術,我們可能會同時使用集合類,多線程,以及操作數據庫的API。
所以,在今天的初級篇中,我們就來談談怎麼做項目吧。
Java Web項目
對於大部分Java新手來說,最適合他們入門的項目就是Java Web了。因為Java天然適合做Web應用,並且生態完善,更有很多開源的工具和框架去支撐這些應用,比如Spring,Hibernate,SpringMVC等等。
那麼,如何開始著手做一個Java Web項目呢。個人認為最好的方式就是看視頻了。因為,看書的話,很多內容比較過時,並且一般不會提供源代碼。也有一些大佬喜歡推薦開源的項目(在GitHub上面的項目),但是對於小白來說,如果沒有很完整的文檔去指導他們,那也是毫無意義的。
曾幾何時,Java Web的項目還在使用JSP + Servlet進行開發,後來出現了Struts2,再後來,出現了我們現在也一直在用的SpringMVC,說實話,不論使用哪種開發框架,你都需要先花一些時間去學習相關的技術,否則你會發現,即使是看視頻,你也不知道里面在講什麼。
要想做好一個JavaWeb項目,你不僅需要一個好的項目課程,還需要足夠的知識儲備,下面就讓我們來理一理這些內容把。
知識儲備
Java基礎部分的內容咱們上次說過了,這裡就不再重複啦~下面我們分別來說說其他幾方面的知識儲備把
02 前端知識
推薦資源:在w3cschool學習html,css和js,支持在線測試代碼。
既然是做Web,就難免要涉及到前端技術,不過,現在前後端分離已經是一種趨勢,所以,如果你對前端不感興趣,也沒必要花太多時間去學習。
對於大部分同學來說,你最好要了解html的基本標籤和格式,自己能夠寫一些簡單頁面,CSS的話,也可以稍微接觸一些。相對於前面兩個服務於樣式的技術,我們倒是更應該去學習一下JavaScript,瞭解它的一些基本語法,以及ajax的使用,因為在前後端交互時,ajax是非常重要的。
所以,做一個Java Web項目,你不需要花太多時間在寫前端頁面上,如果有源代碼可以直接使用,當然,對於一些需要修改的前端頁面,你得怎麼去做修改它,因為有時候你需要使用JSP,JSP既包括前端代碼也包括Java代碼,如果你完全看不懂前端代碼的話,那就很尷尬了。
03 Java Web常用技術
JavaWeb的技術棧其實比較龐大,所以我們不要求面面俱到,只是希望你能夠熟悉一下項目中可能用到的技術。下面列舉一些常見的技術,大家最好要了解一下。
1 JSP和Servlet
推薦資源:《JavaWeb入門到精通》,慕課網、極客學院等網站上的JavaWeb基礎課程
這是Java Web開發最原始的形態,現在很少直接使用了,但是後來的各種框架其實也是建立在servlet之上來做的。你們需要了解這兩個技術分別是用來幹什麼的,最好能寫一些demo來實踐。
對於JSP,有時候你可能還要學習jstl等標籤語言,因為這些標籤可以讓你更方便地往JSP中插入Java代碼。
2 Spring和SpringMVC
推薦資源:《Spring實戰》,慕課網、極客學院等網站上的SpringMVC基礎課程。
事實上,除了上述資源之外,你也可以直接到官網上查看快速開始文檔。
Struts2早已被時代拋棄,Spring則是當今的霸主,你需要了解Spring如何使用,以及SpringMVC如何使用,並且學會在項目中使用它。
由於SpringBoot最近很火,並且搭建方式比SpringMVC更簡單,你也可以先學習SpringBoot,以便更快速地搭建起你的第一個Java Web項目。
3 MySQL
推薦資源:《Sql必知必會》,Runoob上的MySQL基礎教程,慕課網、極客學院等網站上的視頻課程
一個JavaWeb應用一定要有數據啊,所以我們需要用到數據庫,其實搭一個mysql數據庫是非常簡單的,但是對於初學者來說最麻煩的就是寫sql了,所以,先學會建表,熟悉sql,對你以後做項目也是大有裨益的。
4 Hibernate和Mybatis
推薦資源:Runoob上的Hibernate和Mybatis基礎教程,慕課網、極客學院等網站上的視頻課程
當你學會了使用sql去查詢數據,可能還不足以讓你在項目中很方便地處理數據,因為我們還需要一個步驟,就是把數據庫的數據轉化成Java裡的對象。orm框架就是為了解決這一問題而出現的,它可以讓一張表和Java類一一對應,讓數據查詢變得非常方便。Hibernate和Mybatis都是orm框架,只不過現在mybatis越來越火了。
所以,你需要了解這一技術,因為它會廣泛地運用到大部分Java Web項目中。
5 Maven
推薦資源:《maven實戰》,易百教程裡的maven教程,慕課網、極客學院等網站上的視頻課程
剛才咱們已經說過了Spring,orm框架,以及MySQL等方面的技術了。實際上,一個簡單的Java Web項目也只需要這些東西了。
但是,有一個問題,就是:一個項目裡用到這麼多技術,所需要的jar包也會很多,我們如何管理這些jar包呢。如果直接導入所需jar包,那當jar包更新或者需要替換時,每次都要手動操作,非常麻煩。另外,當jar包很多時,項目打包後的war格式文件也會很大,不利於傳輸。
為了解決上述問題,maven應運而生了。maven通過pom.xml文件來指定所需的jar包,並且自帶了很多構建相關的功能,比如編譯,打包,運行單元測試等等,因為它本身就是一個構建工具。
當然,新手可能還難以理解這些概念,你必須要知道的是,大部分Java Web項目需要用maven來管理,你需要學會maven的基本用法,最基本的用法就是:學會修改pom.xml文件。
6 Tomcat
推薦資源:慕課網、極客學院等網站上的視頻課程。
對於小白來說,Tomcat相關的技術是非常複雜的,畢竟它是一個應用服務器啊,事實上這個時候,你只需要學會如何安裝Tomcat即可。畢竟,它在項目中的作用就是提供一個運行環境而已。
正常來說,你只要下載解壓Tomcat的壓縮包即可。由於現在的IDE都支持集成Tomcat,所以一般情況下你都可以在IDE中配置好你的Tomcat路徑,然後設置好你的項目路徑,IDE會自動把你的工程代碼部署到Tomcat服務器上。
如果你使用想跳過IDE直接部署工程到Tomcat上,也可以直接編譯工程並且打包得到war格式的文件(這個步驟可以使用maven來完成),然後拷貝war文件到Tomcat下的特定目錄即可。
上述兩種部署方式的詳細步驟請到搜索引擎尋找答案。
7 Git和GitHub
推薦資源:廖雪峰的Git教程,GitHub官網,慕課網、極客學院等網站上的視頻課程。
既然要做項目,為什麼不把它發佈在GitHub上。當你熟悉了Git指令之後,你可以很方便地發佈你項目中的每一次更新,並且同步到GitHub上,這樣既可以讓你更好地管理項目版本,又可以讓你GitHub更加活躍,為你未來的面試加分。
所以,趕緊學好Git指令,然後開啟你的項目之旅吧。
04 其他常用組件
除了上面幾種必備的技術之外,有時候我們在項目中還會用到其他東西,在這裡我們把它們叫做組件。這裡只做簡單的介紹,至於具體怎麼使用,在網上都可以很容易地找到相關文章。
1 日誌系統
當項目代碼比較多的時候,容易發生錯誤,日誌可以很好地記錄代碼運行時的錯誤,常用的日誌系統有log4j,logging等等,另外你還需要了解一下slf4j。
2 單元測試
日誌系統可以記錄代碼問題,單元測試則是為了避免代碼出錯,常用的單元測試組件主要是JUnit,建議你找個文檔看一看,然後下載下來玩一下。
3 JSON
JSON逐漸成為前後端數據交互的標準格式,為了在項目中使用JSON的API,你也需要導入它的jar包,一般我們都會使用阿里提供的fastjson,趕快下載來玩一玩吧。
當然,常用的Java Web組件還有很多,比如HTTPClient,再比如一些加密工具,一些壓縮工具等等,這裡就不再一一列舉了。
5 總結
今天的內容就到這裡了,與其說是初級篇,反而更像是“項目篇”呢。因為學完基礎內容之後,做項目是最好的複習和實踐方式了。所以這篇文章圍繞著做項目來展開,也就不足為奇了。
今天我們主要講的是,做好一個JavaWeb項目,需要哪些知識儲備,需要了解哪些技術,並且我也推薦一些比較精品的視頻課程。
後面我還會寫一篇文章,專門講一講怎麼做項目,會更加詳細,更加側重怎麼去做,敬請期待吧。
總結以下今天說的幾個要點吧:
1 Java基礎知識儲備 2 前端知識儲備 3 瞭解和使用JavaWeb常用技術 4 JavaWeb常用組件介紹 5 視頻課程推薦
俗話說的好,磨刀不誤砍柴工,相信你看了本文之後,可以更好地做好知識儲備,然後開始Java Web的項目實踐,希望你能夠順利地完成你的第一個項目。
筆者在今年秋招中成功拿到BAT頭條網易等大廠的研發offer,期間總結了很多經驗和技巧,我把它們寫成文字,做成專題,發表在公眾號上,希望讓更多有需要的朋友看到。
關注微信公眾號【Java技術江湖】後,可以在後臺回覆“資料”即可領取3T精品學習資源(不斷更新中,不止是Java方向哦),學習資源包括基礎,實戰以及求職等內容。
我寫過一個Java工程師學習指南,我把它分為了四個部分,第一步是打好Java基礎,掌握Java核心技術,第二步是掌握Java Web技術棧,能夠做一些項目,第三步是掌握Java方面的進階技術,包括網絡編程、併發編程、JVM等,第四步是掌握後端進階技術,比如分佈式、緩存、消息隊列等技術。
按照這樣的一個脈絡,我覺得能夠掌握這裡面的絕大部分內容,並且有過相應的一些實踐,那麼可以算是學好了Java。當然,學好Java只是一個開始,要真的幹好活,做好項目,以及其他各方面的技術工作,則是在學好Java的基礎去延伸和展開的。
接下來就是具體的文章,建議大家按順序閱讀,有點長,收藏的時候記得點贊或者評論哈。筆芯!
Java工程師學習指南
入門篇
最近有很多小夥伴來問我,Java小白如何入門,如何安排學習路線,每一步應該怎麼走比較好。原本我以為之前的幾篇文章已經可以解決大家的問題了,其實不然,因為我之前寫的文章都是站在Java後端的全局上進行思考和總結的,忽略了很多小白們的感受,而很多朋友都需要更加基礎,更加詳細的學習路線。
所以,今天我們重新開一個新的專題,分別按照四篇文章講述Java的學習路線(分別是入門篇,初級篇,中級篇,高級篇),筆者也打算趁此機會,回憶一下自己的Java學習歷程。今天我們要講的是,小白同學如何入門Java。
先聲明一點,文章內容不會詳細到每一步怎麼操作,只會提供大致的思路和方向,給大家以啟發,如果真的要一步一步指導操作的話,那至少需要一本書的厚度啦。
本文所述的方法不一定適合所有人,如有錯誤敬請諒解。
01 前期準備工作
開發環境搭建
這一步我們往往會直接跳過,但既然是面向小白的教程,這裡就提一下吧。首先你需要一臺電腦,然後安裝好JDK和JRE,JDK提供的是Java開發工具,也就是一些必備的jar包,JRE則是Java的運行環境組件,我們熟悉的JVM就在這裡面。
安裝好這兩個東東之後,一般還要配置一下環境變量,否則有一些目錄可能無法被正確找到。
IDE選擇和安裝
IDE指的就是本地開發編輯器,沒有了它,你就只能直接在記事本這類工具裡敲代碼了。IDE最大的好處就是整合了大量的工具和功能模塊,讓你非常輕鬆地完成開發。
以前大家都用eclipse,不過eclipse已經不流行了,現在我推薦你直接用intellij idea作為你的第一個代碼編輯器。如果是用過eclipse的同學,基本上也可以無痛切換。
intellij idea可以直接在官網上下載,試用版30天,如果想要永久使用,網上也有一些辦法滴。
關於jar包
jar包是什麼,其實就是將一堆class格式文件打包,Java中把它稱為jar包,這些jar包在編譯器中能被直接識別,讓開發者使用。
對於新手來說,可能只需要用到JDK自帶的一些API,但是如果你要引用外部jar包,可能就會遇到一些困難了。對於idea來說,導入外部jar包有兩種辦法,一種是手動導入jar包,一種是使用maven。後者會在Java Web相關的文章中講起。
手動導入jar包其實也不難,你需要先下載好jar包,然後在對應的項目下選擇導入jar包即可,具體的方法這裡就不展開說了,因為在網上都找得到。
02 學習Java基礎的幾種方法
瞭解基礎語法
學習一門語言,最開始要做的事情就是學習它的語法。我最早學習Java語法是在Runoob,這個網站可以讓你對任意一門語言完成最快速的語法入門,當然,這只是相當於你瀏覽了一遍基礎語法。
想要真正掌握Java語言基礎,光看基礎語法還遠遠不夠,我在大三第一次接觸Java課程,聽老師講面向對象三大特徵聽得一頭霧水,連數組的初始化方式都理不清楚,但這些內容都是我們需要掌握的。所以,為了學好Java基礎,我們還需要看視頻或者看書進行學習。
看視頻
視頻的話,可以到極客學院或者慕課網聽Java基礎課程,當然也可以看我分享的Java視頻課程。大家也都知道,現在Java的培訓班非常多,基本上學的東西也都大同小異,不過它們的有些課程還不錯,大家有渠道的話也可以去看一看。
看視頻的好處是你可以更好地接收知識,同時也會耗費你更多實踐,所以,有時候你也可以選擇看書。
看書
看書的話,對於小白來說不推薦太複雜的書,比如《Java編程思想》這種書,新手千萬不要看。我個人建議,你只需要先看看《Java入門到精通》這種類型的書就足夠了,因為這個部分的學習只是為你後面的學習開個頭,你以後可能還要回過頭來重新研究這些內容。
現在市面上介紹Java基礎的書籍實在太多了,質量參差不齊,內容同質化嚴重,筆者看過的其實也不多。給大家一個建議,你只需要挑一兩本書來看即可,這裡推薦兩本最簡單的吧,《head first java》和《Java從入門到精通》。
看博客
這裡再推薦另一種學習方式,就是看博客,博客比起書籍來說,更適合對於某個技術點的學習,你可以很容易地在網上找到這個知識點相關的原理,實現方法,以及代碼範例。
我的博客裡沒有講解特別基礎的東西,如果你看一些比較基礎的文章,可以到Runoob等網站上查看。如果你有一個很明確的知識點想要學習,相信搜搜引擎會給你更好的答案。
代碼實踐
除此之外,一般的Java書籍或者視頻課程都會要求你相應完成一些練習題,這部分內容你需要自己在電腦裡使用IDE完成。
在IDE裡,你可以很好地熟悉Java語言的使用,基本代碼的實現,同時可以嘗試各種各樣的API,並且測試一些語言特性,比如繼承,封裝,多態等等。
另外,這也是你熟悉IDE的一個好機會,因為在公司裡做開發可能要用到IDE各種各樣的功能,提前熟悉好IDE絕對是有益無害的。
03 Java入門必備知識點梳理
在Java入門階段,你可能需要接觸到以下這部分知識,不管你是從通過哪種方式學習,這些內容都是你學習Java基礎時繞不過的重點。
Java基礎知識
這部分內容是你必須要掌握的內容,在入門階段你需要把這些基礎打紮實,以便於在學習後面的內容時可以更上一層樓。
如何把基礎打紮實呢,最好的辦法就是在IDE上把書上或者視頻上的每個例子都實現一遍,當然有的時候你也可以自己寫一些有意思的例子。
1 基本數據類型
比如int,double,char,以及其包裝類。
熟悉基本數據類型的使用,瞭解每種類型所佔的字節數,以及它們和包裝類之間的相互轉換。
2 流程控制
比如for循環,if else,while循環等等
如果是學過c語言的同學,這部分可以跳過了。
3 字符串類型String的使用
字符串類型是Java中很重要的類型,它不是基本數據類型,但卻很常用,熟悉和實踐String相關的api,開始你對字符串的學習吧。
4 數組
數組的初始化方式有哪些,二維數組應該怎麼寫,把數組當成方法參數又該怎麼處理?
5 類和對象
Java中最重要的兩個概念:類和對象,它們有什麼用呢,有什麼區別和聯繫呢,請在代碼中實踐它們吧。
Java核心技術
對於這部分內容,我相信很多小白只能瞭解它們的基本使用方法,但是並不明白其背後的一些原理:比如為什麼接口和抽象類有這些區別,多態的意義是什麼,為什麼要有反射。
新手在學習這部分內容時,只需要知道怎麼用就可以了。當然,你最好把這些特性都實現一遍,以加深印象。
至於為什麼有這些特性,這些特性背後的原理是什麼,不是我們現在討論的內容,這些內容我們將在初級和中級篇中講述。因為,要了解這些原理,你得了解JVM,瞭解併發技術的基礎,瞭解網絡基礎,甚至更多。顯然,這不是你現在能做到的。
1 接口和抽象類
寫一些接口,同時寫一些實現類去實現這些接口,並且瞭解一下為什麼我們需要接口,為什麼子類需要實現接口裡的方法。
同理,去實現一些抽象類吧。然後,看看它和接口有什麼不同。
2 繼承,封裝和多態
如何理解繼承,子類和父類之間有什麼聯繫呢。
封裝是一種保護代碼的方式,有哪些方式可以實現封裝呢。
多態一般分為重載和重寫,它們分別怎麼使用?
3 異常處理
Java中的異常處理主要用於捕獲和處理錯誤,請你寫一些try catch代碼塊去捕獲錯誤吧。
4 集合類
集合類是我們經常需要打交道的東西,List,Map,Set等等,趕快去熟悉API,然後寫一些測試例子吧。
5 IO輸入流和輸出流
IO輸入流和輸出流可以操作文件,網絡數據等內容,如何在Java代碼中完成這麼複雜的操作呢,其實只需要簡單的幾個api就可以了。
6 多線程
為了讓系統資源最合理地分配和調度,我們需要多線程,多線程會讓程序變得有趣,也會帶來很多問題,使用Thread和相關API,去嘗試這些有趣的事情吧。
可選內容:
1 反射(瞭解即可,不是入門必須)
2 枚舉類型和泛型(瞭解即可,不是入門必須)
3 網絡通信(瞭解基本的socket使用即可,需要網絡基礎)
4 數據庫操作(瞭解基本的JDBC即可,需要數據庫基礎)
04 總結
總而言之,對於一個Java小白來說,入門Java可以分為這幾步:
1 首先搭建好Java開發環境 2 通過Runoob等一些網站熟悉Java的基本語法 3 通過看書看視頻等方式熟悉Java基礎知識,通過代碼實踐加深理解 4 通過看書看視頻等方式初步瞭解Java核心技術,通過代碼實踐加深理解。
本文主要是為大家提供一個學習的思路,以及推薦一些學習方法,如果你能夠按照這樣的步驟去學習,並且配合上一些適合你自己的學習方法來完成學習計劃,相信你可以很好地完成對Java的入門。
Java工程師學習指南
初級篇
最近有很多小夥伴來問我,Java小白如何入門,如何安排學習路線,每一步應該怎麼走比較好。原本我以為之前的幾篇文章已經可以解決大家的問題了,其實不然,因為我之前寫的文章都是站在Java後端的全局上進行思考和總結的,忽略了很多小白們的感受,而很多朋友都需要更加基礎,更加詳細的學習路線。
所以,今天我們重新開一個新的專題,分別按照四篇文章講述Java的學習路線(分別是入門篇,初級篇,中級篇,高級篇),筆者也打算趁此機會,回憶一下自己的Java學習歷程。今天我們要講的是,小白同學如何入門Java。
先聲明一點,文章內容不會詳細到每一步怎麼操作,只會提供大致的思路和方向,給大家以啟發,如果真的要一步一步指導操作的話,那至少需要一本書的厚度啦。
本文所述的方法不一定適合所有人,如有錯誤敬請諒解。
01 Java Web項目指南
jav在上一篇文章中,我們講到了入門Java的幾個步驟,先搭建好環境,然後熟悉基本語法,接著熟悉Java的一些核心技術,並且在代碼中進行實現。
如果你已經完成了這部分內容的學習,應該會感覺自己對Java已經有一定了解了,可以輕鬆地寫出一些Java代碼,比如實現多線程輸出數字,再如操作IO流等等。
當然,這些代碼通常只是一些demo,我們在實際的項目中可能並不會這麼簡單地使用這些技術,我們可能會同時使用集合類,多線程,以及操作數據庫的API。
所以,在今天的初級篇中,我們就來談談怎麼做項目吧。
Java Web項目
對於大部分Java新手來說,最適合他們入門的項目就是Java Web了。因為Java天然適合做Web應用,並且生態完善,更有很多開源的工具和框架去支撐這些應用,比如Spring,Hibernate,SpringMVC等等。
那麼,如何開始著手做一個Java Web項目呢。個人認為最好的方式就是看視頻了。因為,看書的話,很多內容比較過時,並且一般不會提供源代碼。也有一些大佬喜歡推薦開源的項目(在GitHub上面的項目),但是對於小白來說,如果沒有很完整的文檔去指導他們,那也是毫無意義的。
曾幾何時,Java Web的項目還在使用JSP + Servlet進行開發,後來出現了Struts2,再後來,出現了我們現在也一直在用的SpringMVC,說實話,不論使用哪種開發框架,你都需要先花一些時間去學習相關的技術,否則你會發現,即使是看視頻,你也不知道里面在講什麼。
要想做好一個JavaWeb項目,你不僅需要一個好的項目課程,還需要足夠的知識儲備,下面就讓我們來理一理這些內容把。
知識儲備
Java基礎部分的內容咱們上次說過了,這裡就不再重複啦~下面我們分別來說說其他幾方面的知識儲備把
02 前端知識
推薦資源:在w3cschool學習html,css和js,支持在線測試代碼。
既然是做Web,就難免要涉及到前端技術,不過,現在前後端分離已經是一種趨勢,所以,如果你對前端不感興趣,也沒必要花太多時間去學習。
對於大部分同學來說,你最好要了解html的基本標籤和格式,自己能夠寫一些簡單頁面,CSS的話,也可以稍微接觸一些。相對於前面兩個服務於樣式的技術,我們倒是更應該去學習一下JavaScript,瞭解它的一些基本語法,以及ajax的使用,因為在前後端交互時,ajax是非常重要的。
所以,做一個Java Web項目,你不需要花太多時間在寫前端頁面上,如果有源代碼可以直接使用,當然,對於一些需要修改的前端頁面,你得怎麼去做修改它,因為有時候你需要使用JSP,JSP既包括前端代碼也包括Java代碼,如果你完全看不懂前端代碼的話,那就很尷尬了。
03 Java Web常用技術
JavaWeb的技術棧其實比較龐大,所以我們不要求面面俱到,只是希望你能夠熟悉一下項目中可能用到的技術。下面列舉一些常見的技術,大家最好要了解一下。
1 JSP和Servlet
推薦資源:《JavaWeb入門到精通》,慕課網、極客學院等網站上的JavaWeb基礎課程
這是Java Web開發最原始的形態,現在很少直接使用了,但是後來的各種框架其實也是建立在servlet之上來做的。你們需要了解這兩個技術分別是用來幹什麼的,最好能寫一些demo來實踐。
對於JSP,有時候你可能還要學習jstl等標籤語言,因為這些標籤可以讓你更方便地往JSP中插入Java代碼。
2 Spring和SpringMVC
推薦資源:《Spring實戰》,慕課網、極客學院等網站上的SpringMVC基礎課程。
事實上,除了上述資源之外,你也可以直接到官網上查看快速開始文檔。
Struts2早已被時代拋棄,Spring則是當今的霸主,你需要了解Spring如何使用,以及SpringMVC如何使用,並且學會在項目中使用它。
由於SpringBoot最近很火,並且搭建方式比SpringMVC更簡單,你也可以先學習SpringBoot,以便更快速地搭建起你的第一個Java Web項目。
3 MySQL
推薦資源:《Sql必知必會》,Runoob上的MySQL基礎教程,慕課網、極客學院等網站上的視頻課程
一個JavaWeb應用一定要有數據啊,所以我們需要用到數據庫,其實搭一個mysql數據庫是非常簡單的,但是對於初學者來說最麻煩的就是寫sql了,所以,先學會建表,熟悉sql,對你以後做項目也是大有裨益的。
4 Hibernate和Mybatis
推薦資源:Runoob上的Hibernate和Mybatis基礎教程,慕課網、極客學院等網站上的視頻課程
當你學會了使用sql去查詢數據,可能還不足以讓你在項目中很方便地處理數據,因為我們還需要一個步驟,就是把數據庫的數據轉化成Java裡的對象。orm框架就是為了解決這一問題而出現的,它可以讓一張表和Java類一一對應,讓數據查詢變得非常方便。Hibernate和Mybatis都是orm框架,只不過現在mybatis越來越火了。
所以,你需要了解這一技術,因為它會廣泛地運用到大部分Java Web項目中。
5 Maven
推薦資源:《maven實戰》,易百教程裡的maven教程,慕課網、極客學院等網站上的視頻課程
剛才咱們已經說過了Spring,orm框架,以及MySQL等方面的技術了。實際上,一個簡單的Java Web項目也只需要這些東西了。
但是,有一個問題,就是:一個項目裡用到這麼多技術,所需要的jar包也會很多,我們如何管理這些jar包呢。如果直接導入所需jar包,那當jar包更新或者需要替換時,每次都要手動操作,非常麻煩。另外,當jar包很多時,項目打包後的war格式文件也會很大,不利於傳輸。
為了解決上述問題,maven應運而生了。maven通過pom.xml文件來指定所需的jar包,並且自帶了很多構建相關的功能,比如編譯,打包,運行單元測試等等,因為它本身就是一個構建工具。
當然,新手可能還難以理解這些概念,你必須要知道的是,大部分Java Web項目需要用maven來管理,你需要學會maven的基本用法,最基本的用法就是:學會修改pom.xml文件。
6 Tomcat
推薦資源:慕課網、極客學院等網站上的視頻課程。
對於小白來說,Tomcat相關的技術是非常複雜的,畢竟它是一個應用服務器啊,事實上這個時候,你只需要學會如何安裝Tomcat即可。畢竟,它在項目中的作用就是提供一個運行環境而已。
正常來說,你只要下載解壓Tomcat的壓縮包即可。由於現在的IDE都支持集成Tomcat,所以一般情況下你都可以在IDE中配置好你的Tomcat路徑,然後設置好你的項目路徑,IDE會自動把你的工程代碼部署到Tomcat服務器上。
如果你使用想跳過IDE直接部署工程到Tomcat上,也可以直接編譯工程並且打包得到war格式的文件(這個步驟可以使用maven來完成),然後拷貝war文件到Tomcat下的特定目錄即可。
上述兩種部署方式的詳細步驟請到搜索引擎尋找答案。
7 Git和GitHub
推薦資源:廖雪峰的Git教程,GitHub官網,慕課網、極客學院等網站上的視頻課程。
既然要做項目,為什麼不把它發佈在GitHub上。當你熟悉了Git指令之後,你可以很方便地發佈你項目中的每一次更新,並且同步到GitHub上,這樣既可以讓你更好地管理項目版本,又可以讓你GitHub更加活躍,為你未來的面試加分。
所以,趕緊學好Git指令,然後開啟你的項目之旅吧。
04 其他常用組件
除了上面幾種必備的技術之外,有時候我們在項目中還會用到其他東西,在這裡我們把它們叫做組件。這裡只做簡單的介紹,至於具體怎麼使用,在網上都可以很容易地找到相關文章。
1 日誌系統
當項目代碼比較多的時候,容易發生錯誤,日誌可以很好地記錄代碼運行時的錯誤,常用的日誌系統有log4j,logging等等,另外你還需要了解一下slf4j。
2 單元測試
日誌系統可以記錄代碼問題,單元測試則是為了避免代碼出錯,常用的單元測試組件主要是JUnit,建議你找個文檔看一看,然後下載下來玩一下。
3 JSON
JSON逐漸成為前後端數據交互的標準格式,為了在項目中使用JSON的API,你也需要導入它的jar包,一般我們都會使用阿里提供的fastjson,趕快下載來玩一玩吧。
當然,常用的Java Web組件還有很多,比如HTTPClient,再比如一些加密工具,一些壓縮工具等等,這裡就不再一一列舉了。
5 總結
今天的內容就到這裡了,與其說是初級篇,反而更像是“項目篇”呢。因為學完基礎內容之後,做項目是最好的複習和實踐方式了。所以這篇文章圍繞著做項目來展開,也就不足為奇了。
今天我們主要講的是,做好一個JavaWeb項目,需要哪些知識儲備,需要了解哪些技術,並且我也推薦一些比較精品的視頻課程。
後面我還會寫一篇文章,專門講一講怎麼做項目,會更加詳細,更加側重怎麼去做,敬請期待吧。
總結以下今天說的幾個要點吧:
1 Java基礎知識儲備 2 前端知識儲備 3 瞭解和使用JavaWeb常用技術 4 JavaWeb常用組件介紹 5 視頻課程推薦
俗話說的好,磨刀不誤砍柴工,相信你看了本文之後,可以更好地做好知識儲備,然後開始Java Web的項目實踐,希望你能夠順利地完成你的第一個項目。
Java工程師學習指南
中級篇
最近有很多小夥伴來問我,Java小白如何入門,如何安排學習路線,每一步應該怎麼走比較好。原本我以為之前的幾篇文章已經可以解決大家的問題了,其實不然,因為我寫的文章都是站在Java後端的全局上進行思考和總結的,忽略了很多小白們的感受,而很多朋友都需要更加基礎,更加詳細的學習路線。
所以,今天我們重新開一個新的專題,分別按照四個部分講述Java的學習路線,筆者也打算趁此機會,回憶一下自己的Java學習歷程。今天我們要講的是第三部分,Java工程師學習指南(中級篇)。
先聲明一點,文章裡面不會詳細到每一步怎麼操作,只會提供大致的思路和方向,給大家以啟發,如果真的要一步一步指導操作的話,那至少需要一本書的厚度啦。
當然,本文提到的大部分內容都能在我的博客中找到對應的一些文章。所以也歡迎大家去我博客找到你們需要的資源。
本文中的方法不一定適合所有人,如有錯誤還請諒解。
上期回顧
在上一篇文章中,我們主要討論的是如何做一個Java Web項目,以及前期需要哪些方面的基礎。最後,我還推薦了幾個比較不錯的視頻課程,以便給大家參考。
當然,跟著視頻課程做完一個項目,你只是照葫蘆畫瓢又練習了一遍,可能其中有很多東西你並不太理解,比如你可能不知道為什麼代碼要分層,為什麼要用maven進行線上編譯,為什麼Tomcat啟動時會輸出那麼多的日誌。
有疑問很正常,因為一個Java Web項目涉及的技術還是很多的,如果要理解這些技術的原理,光靠一個項目課程是遠遠不夠的。所以,在你體驗了Java Web項目的開發流程以後,你應該花些時間去了解相關技術原理了,今天我們要講的也是這部分內容。
對於即將參加校招的同學來說,最重要的也是這部分內容,你需要了解JVM虛擬機原理,Java併發原理,並且熟悉JDK的部分源碼,瞭解這些API的底層實現。除此之外,還有很多,下面我們分別來談一談。
PS:文中多次提到我的博客,是因為我的博客裡整理了多個技術專欄,基本上包含了下面所說的內容。關注公眾號後,在公眾號後臺回覆“練級”即可獲得我的技術博客地址,以及其他相關的資源。
01 計算機基礎知識
計算機基礎課程(非科班)
如果你不是計算機專業的同學,那你可能要注意一下了。在學習下面這些內容之前,你最好要學習一下計算機基礎課程。
這裡我們說的計算機課程是:數據結構,操作系統,計算機網絡。
數據結構:這門課應該算是三門課程比較簡單的一門了,推薦《數據結構與算法(Java語言描述)》,看書結合代碼實踐,把基本的數據結構算法寫一寫就可以了。
操作系統:關於操作系統我看了很多本書,但是沒有感覺特別好的,所以如果有時間的話可以先看另外一本書《深入理解計算機系統》,這本書講了很多計算機的基本概念,不侷限於操作系統。
然後可以看一看湯小丹寫的《操作系統》,或者你們學校的教材。
計算機網絡:網絡方面的書也非常多,推薦看一下《計算機網絡:自頂向下方法》,另外還有一本《TCP/IP 詳解:卷一》也是備受推崇的書。
除此之外,我還要推薦一下劉欣老師的書《碼農翻身》,書中用一些有趣的故事來講解操作系統和計算網絡的一些複雜概念,有助於大家理解這部分內容。
02 JVM虛擬機
JVM虛擬機
為什麼把JVM放在第一位,因為它是最基礎也最重要的一塊內容。所有的Java代碼都運行在JVM上,事實上,JVM在操作系統中只是一個進程。為了瞭解Java代碼的運行方式,底層引擎的執行原理,以及內存的分配情況,我們必須要學習JVM虛擬機。
推薦資源:《深入理解JVM虛擬機》
很高興地告訴你們,學習JVM你只需要把這本書吃透即可,當然,看一遍可不夠,筆者前後至少看了三遍,有條件的話最好把書中的實例都跑一跑。
另外,JVM也是面試必考的內容,所以,相應地去準備一些面試題也是很有必要的,如果你基本掌握了這本書的內容,相信你不會懼怕任何JVM面試題。
03 設計模式與源碼閱讀
設計模式
為什麼在這裡提到設計模式呢,因為設計模式是Java編程規範的經典總結,並且在JDK源碼中經常使用,由於我們後面會講到JDK源碼方面的學習,所以對於設計模式,建議大家先學習一下,最好的學習方式就是看書結合實踐,把一些常用的設計模式自己實現一下。
推薦資源:《head first 設計模式》
JDK源碼(主要指集合類源碼)
接下來下場的選手是:JDK源碼。不過對於大部分人來說,只要能夠掌握集合類,字符串這些源碼就可以了,其他部分的源碼主要集中在JUC併發包裡,而這些內容我們會放在Java併發技術裡來講。
為什麼我們需要掌握集合類源碼呢,其一是因為面試喜歡考,其二是因為集合類的源碼實現都比較經典,難度也不算太大,並且運用了很多優化方法,所以瞭解它對於學習Java的同學來說大有裨益。
推薦資源
市面上並沒有哪本書專門來講JDK源碼的,所以這部分內容的學習資源主要是兩個部分,一是JDK源碼本身,而是一些技術博客。
1 對於JDK源碼,直接看可能比較有難度,不推薦新手這麼做。 2 講解源碼的文章質量參差不齊,所以我只推薦幾個我自己比較熟悉的,一個是importnew。一個是我的博客。另外,我之前分享的一篇文章《你不可錯過的Java學習資源》中也推薦了很多大牛和博客,大家也可以去看看。
Spring源碼
說實話,Spring源碼的複雜度遠高於集合類的源碼,這也是因為Spring運用了很多的設計模式,並且有著非常繁雜的類關係。所以,我不建議大家直接去讀Spring源碼,因為即使是看Spring源碼解析的書籍,你也會感到很吃力。
所以,我推薦的方式是,看書+看一些比較好的源碼解析文章。另外要告訴大家的是,Spring的源碼很多,並不是所有內容都需要你掌握的,大家都知道Spring最常用的特性就是IOC和AOP,所以看源碼解析時,最重要的也是這兩個部分了。
另外,看完Spring的源碼解析以後,別忘了看SpringMVC的源碼解析,學習方法也是一樣的,找重點內容看即可。
推薦資源:《Spring源碼深度》,我的博客專欄
04 Java併發技術
Java併發技術
相信你為了搞定集合類源碼和Spring源碼花了不少功夫了,接下來輪到Java併發技術出場了。我們在入門篇其實已經談到了多線程,但是也僅僅停留在使用Thread或者Runnable實現簡單的多線程demo。
實際上,為了理解Java併發技術的底層實現,我們還需要知道JMM模型,瞭解synchronized和volatile的底層實現,同時還要明白Java中的多線程和操作系統的多線程和什麼聯繫和區別。除此之外,我們經常談到的線程安全,有哪些實現方法,也是這部分內容的要點。
學習併發技術,我建議分為三個步驟
1 首先熟悉Java的多線程基礎知識,比如Thread的使用,線程的狀態轉換,以及一些api的使用方式。 2 瞭解一些理論基礎,比如JMM,操作系統的多線程實現。這部分內容推薦通過看書和看博客來學習。 3 瞭解並使用JUC的一些API,然後開始看JUC的一些源代碼。這個階段是最重要也是最困難的。
推薦資源: 書籍:《Java併發編程藝術》,《Java併發編程實戰》 網站:我的博客專欄,併發編程網,importnew,《你不可錯過的Java學習資源》
05 Java網絡編程
Java網絡編程
在搞懂Java併發編程技術之後,相信這部分內容也難不倒你。當然,前提是你對計算機網絡有一定了解,因為網絡編程涉及到TCP和HTTP相關的知識點。
在學習這部分內容的時候,你首先要了解socket的使用以及原理,然後再去了解NIO的相關API,多寫一些客戶端和服務端通訊的demo,以便熟悉這些內容。為了更好地理解網絡編程,你還要去了解UNIX網絡編程模型。
除此之外,如果你想要更好地理解Java網絡編程,你還需要去了解Tomcat的實現原理。同時,Netty也是值得你去學習的一部分內容,最好有機會去用一用這一網絡編程框架,學有餘力的同學還可以考慮看看它的源碼(筆者沒有看)。
推薦資源:我的技術博客,《Java網絡編程》,《你不可錯過的Java學習資源》
05 Java8
Java的版本一直在更新,但目前在用的主要還是Java8和Java7,等再過幾年可能這部分的內容就過時了。但是目前看來,對Java8的學習和了解還是很重要的,畢竟面試也喜歡考。
對這部分內容學習的最好方式就是:看文章+代碼實踐
推薦資源:《Java8實戰》
06 總結
今天的內容貌似有點多,大家會不會感覺有點吃不消呢。沒關係,因為這部分內容確實需要花很多時間去學習。對於一個在校的Java學習者來說,可能沒有機會接觸到多麼高大上的項目,所以對內功的修煉顯得格外重要。
看書,寫demo,讀源碼,看似簡單的事情實際上需要花費大量時間和精力,這個過程是需要你靜下心來,慢慢沉澱的,在學習的過程中你也可以和筆者一樣,寫一些總結和博客,以便更好地回顧自己的學習歷程。
總結以下今天所講的內容吧:
1 計算機基礎課程:數據結構,網絡和操作系統 2 JVM基本原理 3 設計模式,JDK源碼,Spring源碼 4 Java併發技術,JUC源碼 5 Java網絡編程 6 Java8
如果你對上述內容仍有疑問或者有一些建議,也可以和我交流。 關注公眾號後在後臺回覆“少俠”可以獲得我的聯繫方式。歡迎來撩。
Java工程師學習指南
完結篇
先聲明一點,文章裡面不會詳細到每一步怎麼操作,只會提供大致的思路和方向,給大家以啟發,如果真的要一步一步指導操作的話,那至少需要一本書的厚度啦。
因為筆者還只是一名在校生,所以寫的內容主要還是針對Java初學者或者接觸Java後端不久的朋友,不適用於已經工作多年的Java大佬們。所以本文中的方法不一定適合所有人,如有錯誤還請諒解。
本期的內容是系列文章的最後一部分內容了。這個系列可能還有很多東西沒有說清楚,也有很多內容被忽略了。但是這些內容也確實是筆者結合自己經驗總結而成的,希望能對大家有用 ~ 當然如果有什麼建議也可以隨時和筆者交流。
上期回顧
上期我們重點介紹了Java工程師進階所需要掌握的一些技術內容。特別對於即將參加校招的同學來說,最重要的也是這部分內容,你需要了解JVM虛擬機原理,Java併發原理,並且熟悉JDK的部分源碼,瞭解這些API的底層實現。
之所以把這部分放在Java Web項目之後來講,是因為我覺得,一開始做項目的時候你不可能已經掌握好上述內容了,所以你完全可以帶著問題去做項目,再花時間去學習底層原理,這樣你可以很好地結合你之前實踐過的代碼去理解那些底層技術了。
本期主題
本期主要介紹的是Java後端技術比較“高端”的一些內容,也就是我們經常聊的分佈式,架構,緩存,消息隊列等內容,另外我們也會介紹一些大後端相關的技術,比如雲計算(OpenStack和docker),大數據(hadoop生態),以及一些常用的後端技術。
這些內容其實離我們並不遠,只不過在平時的項目中可能用的比較少,所以作為學生黨一般也只能通過一些文章或者書本去學習理論知識。那麼基於這麼一個情況,我們來談談怎麼學習這部分的內容吧。
01 Web後端架構
Web後端架構
後端進階第一步,先把Web架構相關的技術學好吧,因為之前大家都做過Java Web項目,想必對這塊內容還是比較熟悉的吧。我們需要了解Web架構演化的歷史,瞭解為什麼要做服務器集群,為什麼要用緩存,為什麼要做拆分,做主從,以及為什麼要有分佈式。
推薦資源:《深入分析Java Web技術內幕》,《大型網站技術架構》
兩本都是阿里大佬出的書,兩位都是淘寶系的技術大牛。前一本書主要講述的Java Web的一些技術基礎,關於Web架構的內容比較少。
後一本則是李智慧大佬寫的架構科普書籍,用非常簡單易懂的語言寫出了大型Web項目架構之美,分別著眼於高可用,高性能,高擴展等方面講解了很多設計結構的原則和方法。這本書應該是Web架構小白最好的入門書籍了。
02 分佈式理論基礎
由於下面的內容或多或少都會涉及到分佈式相關的知識,所以這一部分我們主要介紹一下有關分佈式的基礎知識。筆者對分佈式的學習主要也停留在理論上,所以這裡講的也是一些理論的東西。
推薦資源:《從Paxos到zookeeper分佈式一致性原理與實踐》,我的技術博客專欄“分佈式系統理論與實踐”
這本書比較好地科普了分佈式基礎知識,也介紹了zookeeper的原理和使用。瞭解zookeeper是瞭解分佈式技術很重要的一個環節。
1 CAP 和 BASE
談分佈式就要談CAP,一致性,高可用,網絡分區容忍性為何只能三選二,為什麼網絡分區容忍性必須要被考慮。CAP在實際應用中真的可靠麼?
BASE出現的原因,為什麼BASE更容易實現,更適合實際應用,BASE可以通過哪些技術去實現呢?
2 一致性協議和算法
一致性協議也是分佈式理論的一個重點,2PC,3PC,分別指的是什麼,其中分別有什麼問題。3PC解決了2PC的一個問題,卻仍然不完美。
Paxos和Raft兩種一致性算法,顯然前者比後者複雜得多,但是Raft可能更加實用。為什麼我們需要一致性算法,它們又有什麼用呢。
3 分佈式事務和最終一致性
分佈式事務是一個複雜的概念,主要指分佈式系統中需要強一致場景時所用到的事務。理解和實現它都不是簡單的事情。
如果我們退而求其次,不要求強一致性,而選擇最終一致性,則可以用更加靈活的方案,比如事務消息。
03 常見分佈式技術
推薦資源:《從Paxos到zookeeper分佈式一致性原理與實踐》,我的技術博客專欄“分佈式系統理論與實踐”,《深入理解Spring Cloud與微服務構建》,《分佈式服務框架原理與實踐》。
1 zookeeper
上文說到zookeeper是分佈式技術很重要的一塊內容,這是因為zookeeper用於管理和協調分佈式組件,雖然它出自hadoop生態,卻用於很多應用當中,基本上有分佈式的地方就有zk的存在。
簡單說來,zk可以提供全局統一的節點樹結構,通過節點來管理資源,同時zk自身是使用集群方式部署的,所以保證自己是高可用的。根據這一特點,它可以作為服務註冊中心,還可以實現分佈式鎖等功能。
2 分佈式服務
分佈式服務是一個挺有意思的東西,也很常用,簡單來說,就是把服務組件部署在不同節點上,通過rpc的方式訪問,為了實現這一功能,我們需要考慮通信協議,序列化方式,進一步來說,我們還要了解如何做服務註冊和發現,以及如何做限流,做服務熔斷和降級,等等等等。
常見的分佈式服務框架有dubbo,以及Spring Cloud這類產品,學會使用他們,然後瞭解它們的底層實現原理,相信會是一個很有趣的過程。
3 負載均衡
關於負載均衡,說起來其實很簡單,就是把一組請求分成多組,按照某種規則分發到多臺服務器上。
但是負載均衡也涉及很多內容,包括負載均衡的算法,負載均衡的實現方式,我們需要了解它到底是在哪一層實現的。
一般來說,常用的負載均衡方式有nginx和lvs兩種,分別是7層和4層的負載均衡,一個基於域名進行負載均衡,一個基於端口號做負載均衡。瞭解它們的實現原理,會讓你更好地理解這部分內容。
4 分佈式session和分佈式鎖
這兩個組件也是分佈式項目中經常要用到的,瞭解它們的使用和實現原理,有助於以後在項目中的實踐。
分佈式session一般有多種實現方式,可以存數據庫或者緩存,也可以單獨部署成一個服務,總之最重要的一點就是,性能要好,並且要高可用。
分佈式鎖則用於一些需要一致性的場景中,比如訂單生成這種全局唯一的功能,分佈式鎖通常可以用緩存或者數據庫來實現,但為了保證高性能,並且避免死鎖,我們一般採用Redis或者zookeeper來實現。
04 緩存
講到緩存,我們說的最多的就是Redis,所以我們要講的也是Redis。學習Redis,除了學會使用簡單的api之外,最好還要了解它的實現原理。
推薦資源:我的技術博客專欄“重新學習MySQL和Redis”,《Redis設計與實現》
這裡我們主要介紹三部分內容,也是我個人認為比較重要的三塊內容。
1 數據結構和底層實現
Redis的數據結構比較豐富,但更有意思的是這些數據結構背後的底層實現,也就是作者如何用c語言來實現這些結構的。其中會有你熟悉的數組,鏈表,還有一些有意思的結構比如跳錶,哈希表。
2 持久化方式
持久化方式主要分兩種,aof和rdb,前者基於追加日誌的方式來實現日誌持久化,後者則是使用備份數據的方式來實現持久化。
3 分佈式方案
這是Redis最有趣也最複雜的部分。 首先,Redis可以使用主從的方式部署,其中“哨兵”這一組件用於故障切換。
基於哨兵的主從部署後來發展為Redis cluster的部署方式,也就是Redis集群,通過分片的方式來部署Redis集群,並且集群中任一節點都可以用來對外提供服務。
當然,除了Redis集群之外,還有codis的分佈式方案,codis基於代理的方式來實現,表面上還是使用原來的Redis API,但實際上訪問的卻是一個Redis集群。
05 消息隊列
消息隊列的作用一般來說就是削峰,控流,解耦合,目前業界也有很多的消息隊列產品,在很多公司都會使用,當然,它們各有各的優缺點,我們也不必全都瞭解,這裡我們大概介紹3種消息隊列,它們各自的特點都比較鮮明,值得大家去了解一番。
1 RabbitMQ
筆者剛開始接觸的消息隊列是rabbitmq,它的使用方法比較簡單。 RabbitMQ是一個由erlang開發的AMQP(Advanced Message Queue )的開源實現,主要有以下特點:
  1. 安裝部署簡單,上手門檻低,功能豐富,符合AMQP標準;
  2. 企業級消息隊列,經過大量實踐考驗的高可靠;
  3. 集群易擴展,可以輕鬆的增減集群節點;
  4. 有強大的WEB管理頁面。
2 Kafka
與其他MQ相比較,Kafka有一些優缺點,主要如下
優點:
  1. 可擴展。Kafka集群可以透明的擴展,增加新的服務器進集群。
  2. 高性能。Kafka性能遠超過傳統的ActiveMQ、RabbitMQ等,Kafka支持Batch操作。
  3. 容錯性。Kafka每個Partition數據會複製到幾臺服務器,當某個Broker失效時,Zookeeper將通知生產者和消費者從而使用其他的Broker。
缺點:
  1. 重複消息。Kafka保證每條消息至少送達一次,雖然幾率很小,但一條消息可能被送達多次。
  2. 消息亂序。Kafka某一個固定的Partition內部的消息是保證有序的,如果一個Topic有多個Partition,partition之間的消息送達不保證有序。
  3. 複雜性。Kafka需要Zookeeper的支持,Topic一般需要人工創建,部署和維護比一般MQ成本更高。
RocketMQ
RocketMQ是一個純java、分佈式、隊列模型的開源消息中間件,前身是Metaq,當 Metaq 3.0發佈時,產品名稱改為 RocketMQ。
具有以下特點:
  1. 1、能夠保證嚴格的消息順序
  2. 2、提供豐富的消息拉取模式
  3. 3、高效的訂閱者水平擴展能力
  4. 4、實時的消息訂閱機制
  5. 5、億級消息堆積能力
除此之外,它還有一個優點,就是支持事務消息,讓分佈式事務的實現變得簡單
05 分佈式數據庫
這裡說的分佈式”數據庫“,其實指的是數據庫的分佈式方案,更具體來說,主要指的是數據庫的主從部署,以及分庫,分表。
1 主從複製和讀寫分離
這是數據庫高可用的基礎。MySQL數據庫會使用日誌來完成主從複製,先寫主庫,然後再同步到從庫。讀寫分離則一般是指的是:從庫負責讀,主庫負責寫。
2 分庫分表方案
分庫分表是解決大表性能瓶頸的一種方法,當然也分為橫向拆分和縱向拆分,橫向拆分指的就是減少單表的數據量,放到其他表或者其他庫中。縱向拆分則一般指按照業務來拆分,把不必要的字段放到其他表中。
分庫分表可以在應用層做,通過對id或者其他字段進行hash以便映射到對應的表中。當然也可以通過數據庫中間件來完成,例如mycat這種中間件,通過代理的方式實現分庫分表,非常方便。
06 大後端相關技術
這部分的內容筆者也只是略知一二,所以這裡只是拋磚引玉,做一個簡單的科普罷了。畢竟咱們學技術的人都是先講深度再來談廣度。當你對之前的內容掌握得比較好的時候,再去看看大後端的一些其他技術,也會感覺挺有意思的。
下面這些技術主要是我自己學習路上接觸過的一些內容,所以比較熟悉,才拿出來分享,至於適不適合大家的口味,可能就見仁見智了。
Hadoop生態
筆者之前參與過數據倉庫相關的項目,所以稍微瞭解了這方面的內容,感覺hadoop生態還是挺有意思的。
大家不妨去了解一下其中的基本組件,然後打一個集群自己玩玩看。 常見的組件有:hdfs,hbase,hive,zookeeper,flume,sqoop,yarn。
推薦資源:我的技術博客-個人分類-hadoop,《大數據技術原理與應用》
對於入門hadoop生態來說,這本書完全足夠了,如果你要做大數據平臺開發或者是數據研發工程師,可能需要非常全面地瞭解這些組件的底層原理。
雲計算初探
筆者之前參與過私有云相關的項目,所以稍微瞭解了這方面的內容,感覺這方面的內容也蠻有趣的。
我在項目中主要接觸到的是OpenStack,docker以及kubenetes,OpenStack是一個私有云生態,內部結構對於我們來說還是比較複雜的,不過最根本的虛擬化技術還是基於kvm虛擬化來實現的。
docker則是現在非常流行的一種容器,用於快速部署應用。
kubenetes也藉著docker的東風火了起來,可以理解為是基於容器的分佈式調度系統。
這些技術在企業中也是比較常用的,只不過對於研發同學來說,更多時候扮演的是工具的角色。
推薦資源:《Docker技術入門與實戰》,《kubenetes權威指南》
其他常見後端技術
除此之外,想必大家還了解過很多其他的技術,只不過不同的業務用到的組件往往不一樣,所以並不是每個東西你都需要去了解。
比如搜索引擎技術Lucene,基於它的兩款產品solr和elasticsearch,通常出現在需要搜索功能的項目中。
再比如流式計算技術,如storm和spark streaming等等,通常都用於大數據部門,用作實時數據採集。
又如ELK實現的分佈式日誌系統,多用於分析和定位系統問題,經常會出現在一些比較重要的應用當中。
當然,也有現在大火的人工智能,還有太多的技術我們沒機會去了解和使用,我們能做的也就是在自己能力範圍內把需要做的東西做到最好了。
所以,這些內容並不是每一樣你都需要知道,但是如果有時間去了解一下的話,還是建議多瞭解一點的。
07 總結
總結
今天碼的字有點多,所以難免有些寫的不太好的地方,希望大家見諒。縱觀全文,我們主要講了這些內容:
1 Web架構 2 分佈式基礎理論 3 常見分佈式技術 4 緩存 5 消息隊列 6 數據的分佈式方案 7 大後端相關技術
至此本系列文章就已經結束了,不知道大家有什麼問題或者建議想和筆者交流嗎~趕緊加我的微信來聊聊吧。
寫本系列文章也是因為有很多朋友想要了解更加清晰的Java後端學習路線,所以我總結了之前自己的學習歷程,才創作出這四篇文章,希望能夠對大家有所幫助~

黃小斜


不論之前是還未參加工作的人,還是已經在別的行業做了很久的人,只要原來不是做程序員的,面對Java這門技術,都是從零開始的新手小白。一個良好的學習路線規劃,能夠幫助你們在學習的時候事半功倍,那麼對於新手轉行青島Java開發的學習路線規劃的建議由哪些呢?

新手Java學習路線規劃先要明白Java體系設計到得三個方面:J2SE,J2EE,J2ME。

1、J2SE

新手在學習的時候先要從J2SE開始學起,所包含的內容主要分為:面向對象概念的理解、Java基本語法的學習,Java桌面圖形界面應用程序的開發,掌握常用的Java API等(關鍵是要學會怎樣查閱)。

此處需要重點學習的是:Java基本語法(循環結構,數據類型,數組,運算符等)、Swing,awt,事件機制、文件輸入輸出處理等

2、J2EE

在學習了J2SE之後,可以嘗試著慢慢過渡到J2EE。而且學習J2EE還需要許多非Java技術的支撐,比如數據庫技術,網頁編程技術等等。J2EE有三個必學的框架,即Struts、spring和hibernate。雖然這三個框架應用很廣,但不代表這三個框架就代表了J2EE。

學習J2EE較為核心的內容有:JDBC、JSP、servlet和JavaBean,後面三個也是學習SSH的基礎(Struts/Spring/Hibernate的簡稱)。鑑於J2EE的內容太過複雜,建議大家最初只學習:JSP,servlet和JavaBean,等這個基礎掌握好再把SSH學習了,再對其他J2EE技術有個大致的瞭解就可以出去找工作了。

除了這些技術的東西,在這階段,大家更多的是會接觸到比如設計模式的東西,比如工廠模式、橋樑模式、單例模式等等,還要學習建模思想(比如UML建模等等)和軟件生命週期等等。

3、數據庫技術

數據庫幾乎是程序中不可或缺的一部分,在整個軟件開發中更是佔據了重要作用。目前數據庫幾乎都是關係型數據庫,代表的有:SQL Server/MySQL。

4、網頁編程基礎

網頁編程基礎要學的內容也比較多,但主要集中在以下這三個技術之上,大家每天看的各種樣式的網頁都是它們呈現的:HTML:超文本標記語言、CSS:層疊樣式表、JavaScript:瀏覽器客戶端腳本語言。現在更是流行各種JavaScript庫,比如:jQuery、ExtJs等。

5、J2ME

如果已經掌握了以上的技術了,可以再學習手機程序的開發。J2ME的學習的話,切忌不要單純的再模擬器上測試,一定要找真機測試,真機和模擬器的效果之間差別是很大的。

除了學習的規劃線路之外,選擇合適的開發工具也是比較重要的,工欲善其事必先利其器,作為初學者比較建議使用的開發工具是:JCreator或是記事本,當熟悉了Java代碼之後再根據自己的習慣和發展去選擇合適的工具。


千鋒青島


學任何的編程語言, 都不容易,每個語言的誕生都有它的意義存在,它的背後都有很多人的心血,重要的是你對他們的理解和認識。世上無難事,只怕有心人。多去接觸接觸它們,找一個你比較喜歡的認認真真地去理解。

java相對於其他程序設計語言比較簡單。java是一門面向對象的程序設計語言,建議就不學什麼C語言了。就直接學java理解其面向對象的特性,直接面向對象編程才是王道。你需要學習的知識有,java se就是java基礎,然後可以轉向web編程,java ee ,學習web編程 就得學習java三大框架SSH。所以要學的東西很明確。你可以參照網上的視頻學習,也可以買書來看,很容易上手的。

如果有基礎,可以嘗試自學,但要有極強的自制力和問題解決能力,如果是零基礎,想要快速入門,建議你可以報個培訓班,可以快速掌握系統的理論體系和積累一定的實操經驗,比如中公教育的優就業,就有專門針對零基礎學員的java課程,題主可以參考參考!


湖南IT達人


興趣是一方面,課程體系的設置也是比較重要的,有些老師的講課方式就比較容易吸引人,聽起來不枯燥,學習Java,學習編程,比較重要的是練習,多練習,多總結,多思考,模仿別人的代碼,看別人是怎麼實現的,然後在自己實現,或者是自己先實現功能,再去優化,這樣進步會更大一些;

以前學習Java的時候,看的是 “ 如鵬網 ”的視頻教程——《這樣學Java不枯燥》。學起來挺好玩的,通過開發超級瑪麗,飛機大戰,吃金幣,電影的彈幕動畫等經典小遊戲來講解Java的知識點,沒想到Java還可以這麼學;

通過這種開發小遊戲的方式來學習Java,也比較容易上手,學起來不枯燥,做出來的東西也蠻有成就感的,具體的可以到 如鵬網 官網上去了解一下;


玩著學編程


您好,我是一個資深的Java開發者。今天來回答你的問題,也是不想讓你在學Java的道路上走彎路。

首先,學習Java是不難的。這一點你一定要銘記於心。

Java是一個面向對象的語言,在Java語言中,萬物皆對象。只要你弄懂了這一點,你學習Java語言使用Java語言就得心應手了。

其次,做一個Java程序員,你得有長期不斷學習的心裡準備,因為很多技術都在不斷更新。


我在頭條號上面也發佈了非常多Java學習資料,教學視頻,對初學者,以致於Java學習進階都非常有幫助。有興趣,你可以去看看。

記住,多練。多思考。Java學習就這麼簡單。


Super數碼君


講真Java不難學,我問你高考難嗎?各有說法,清華北大考上靠天賦智力,但是一般和好一點的大學不難,只要認真學習就可以開始,你說是不是?作為一個過來人告訴你,不難,一個行業進入不難,精通很難,但是能達到的不多。說遠了。言歸正傳,Java不難學,你覺得難是你對未知的懼怕,和對他的不瞭解,和不自信。那麼多人從事Java他們能做的很好,你也可以,不是嗎?當然前提是有人引導,你這種情況自學不是很建議,因為一開始你會像無頭蒼蠅一樣,那樣會浪費時間。所以找個靠譜的培訓班吧,還有就是好好學,不要放棄。


分享到:


相關文章: