0 基礎 Java 自學之路(2021年最新版)
如果你想自學 Java,認真看完本文,你以后的職場生涯至少少走1年彎路。
本文會持續(xù)更新,建議收藏。
初衷
在 CSDN 上經常有同學私聊我詢問 “如何自學 Java”、“想轉行 Java 靠譜嗎” 等問題,因為自己也是在大學時自學的 Java,所以我能理解這些同學的痛苦和迷茫。
寫這篇文章前,我看了一些網上 Java 自學的文章,很多我都不太滿意,有的甚至讓我感到憤怒,要么是站在現有的視角侃侃而談,要么是純粹的瞎編騙小白。
很多文章都有一個老毛病:完全沒有從小白的視角去思考,內容太多,什么微服務、架構、大數據都來了,這根本不是自學階段該去看的東西,小白看了這些文章,只會越看越懵逼,根本沒法下手。
其實我在18年寫過一篇“0基礎Java自學之路”,但是現在來看,當時那篇文章寫的過于簡單,只是提供了一個思路,但是很多內容沒有寫。
如今已經過去了3年,我對于這個話題又有了一些新的思考,同時為了拯救廣大正處于水深火熱的同學們,于是,我決定重新寫一篇自學教程。
自我介紹
在寫本文前有必要介紹下我自己,讓大家更好的去比較和參考。
我大學是普通本科,大三開始自學的 Java,自學了一年,但是我是計算機專業(yè)的,所以有C語言基礎,但是我這一年的自學走了不少彎路,花了很多時間學了很多后面根本沒用到的東西:Oracle、Hibernate、Struct2、JBPM 等等,還有就是缺少有經驗的人的指導,所以容易抓不到重點,所以也浪費了不少時間。
不過當時還沒有現在這么內卷,所以我在大四秋招剛開始就找到工作了。
行業(yè)現狀
程序員現狀
由于程序員的薪水比較高,最近幾年有很多其他專業(yè)的人涌進了程序員行業(yè),加速了這個行業(yè)的內卷,但是據某招聘網上的數據統(tǒng)計,程序員當前的需求量還是遠高于全行業(yè)的平均線的。所以,程序員的現狀我覺得是不錯的,至少幾年內是無需擔心的。
Java 現狀
最近幾年,Go、Python 等語言快速崛起,大有挑戰(zhàn) Java 地位的趨勢,但是 Java 毋庸置疑仍是當前互聯網行業(yè)里招聘需求量最大的。
眾多大廠:阿里、美團、快手、拼多多、滴滴、網易等,都是以 Java 為公司的主語言,部分大廠:騰訊、百度、字節(jié)等,雖然以其他語言為主語言,但是多多少少也會有一些 Java 崗。
所以,Java 的現狀及未來,我覺得都是比較不錯的。崗位多也代表著機會多,對于新人來說比較友好,所以我個人是比較推薦新人學 Java 的。
自學前你應該知道
自學前請做好心理準備,自學是一個既寂寞又漫長的過程,如果想踏進來,請做好放棄幾乎所有娛樂生活的準備,包括過年的時候。如果只是抱著三天打魚兩天曬網的態(tài)度,那我建議還是放棄吧。
但是如果你能堅持下來,我相信一定能有所回報,我自己就是個例子,我走了那么多彎路,跟著本文走,你們沒理由比我當時更差。
自學預估周期
自學的周期我給大家定了一個參考時間:6個月,平均每天6-8小時,共1200個小時左右,大致安排:
1、3個月基礎知識學習和強化。
2、2個月 SSM 項目實戰(zhàn)反復練習,項目實戰(zhàn)同時也在復習和鞏固之前的基礎知識。
3、1個月面試高頻題準備,看面試題其實也會增加自己的專業(yè)知識,而且可能比你想象的要多,不夸張的說,前幾年我從面試題里學到的知識可能比工作里獲得的還多。
自學教程獲取
授人以魚不如授人以漁,一個簡單又靠譜的的教程獲取方式:B站搜索關鍵字+教程,例如:Java零基礎教程視頻、JDBC教程、MySQL基礎教程、JavaWeb視頻教程、SSM整合教程、Java項目實戰(zhàn)等等,然后按“最多點擊”排序,在前幾個里尋找一個合適的即可,一般點擊高的都是質量還可以的。
很重要的建議
1、愛因斯坦的成功公式:成功 = 效率 * 時間,自學也一樣,需要勞逸結合,不要搞的太累,否則效率下降,花再多時間也沒用。
2、自學是一個漫長的過程,循序漸進、保持耐心,如果可以,找個伴一起學習,互相鼓勵,互相交流,可以讓自己更有動力堅持下去。
3、將自己的學習過程記錄下來,當你發(fā)現累計的越來越多的時候,心里會有一種小成就感,這會提高你學習的動力。
4、專注于重點知識的學習,本文介紹的基本涵蓋了當前你應該學習的內容,沒有提到的大部分是沒那么重要的,如果你無法判斷是否重要,可以在本文下面留言,我會一一解答,至于像一些什么:k8s、hadoop、hbase 等等,看都別看,對于當前的你來說只是浪費時間。
5、利用好搜索引擎,有什么問題就百度,新手大部分的問題百度都能解決。
6、看視頻不要看書,當前階段的你看任何書,包括大名鼎鼎的《Java編程思想》都是浪費時間。
7、看視頻要跟著敲一遍甚至多遍,如果只看視頻不跟著敲,你會發(fā)現最后啥都學不會。
8、視頻中一些介紹歷史的視頻可以過一遍簡單了解就行,節(jié)省點時間。
9、關于視頻教程的選?。哼x擇近2~3年的教程,講師讓自己聽著舒服即可,點擊高的視頻水平基本差不多。
10、不懂的知識可以反復看,例如同一個知識點有兩套教程,看完第一個沒完全理解,可以再看第二個,加深印象,也可以查些資料幫助理解。
自學知識點
1、Java SE
1.1、Java基礎
基礎概念/語法:面向對象(繼承、封裝、多態(tài))基礎、包、類、接口、方法、對象、屬性、第一個 Java 程序。
數據類型:1)基本數據類型8種:byte、short、int、long、float、double、char、boolean;2)引用數據類型
變量類型:局部變量、實例變量(成員變量)、類變量(靜態(tài)變量)
修飾符:public、private、不寫、protected、static、final、abstract、synchronized ,volatile
運算符:1)算術運算符:+、-、*、/、%、++、--;2)關系運算符:==、!=、>、<、>=、<=;3)邏輯運算符:&&、||、!;4)賦值運算符:=、+=、-=、*=、/=;5)條件運算符:Object x = (expression) ? value if true : value if false;
循環(huán)結構:for 循環(huán)、while 循環(huán)、do...while 循環(huán)
條件語句:if...else、if...else if...else
異常處理:try...catch...finally、throws、throw
字符串:String、StringBuilder、StringBuffer
其他:switch case、數組、日期時間、枚舉、使用 IDE 進行 DEBUG
1.2、集合
Map:HashMap(最重要)、ConcurrentHashMap、TreeMap、Hashtable
List:ArrayList(最重要)、LinkedList
Set:HashSet(最重要)、TreeSet
1.3、多線程
線程生命周期
創(chuàng)建線程的三種方式:繼承 Thread、實現 Runnable;實現 Callable
ThreadPoolExecutor(線程池)
鎖:synchronized 和 Lock
1.4、I/O流
1.5、網絡編程
1.6、反射
1.7、泛型
1.8、注解
小結:
1、該階段很重要,建議至少看兩套不同的教程。由于每個老師的觀點都會有一些片面性,當遇到疑惑的時候,可以看看其他老師的理解,可能就想通了。
2、看第一遍時會比較慢,第二遍會快一點,已經掌握的知識可以快速帶過。
3、有疑問的知識多看幾遍,也可以網上看點博文輔助理解,實在看不懂的可以先記下來,后面學到一定程度可能就理解了。
4、對于重點知識,可以做筆記來加深自己的理解,也方便后續(xù)自己復習。
5、Java基礎、集合、多線程是核心中的核心。
章節(jié)目標:熟練掌握該章節(jié)所列的所有 Java 核心基礎知識,能熟練的編寫 Java 程序。
2、SQL
2.1、SQL
1)了解基礎概念;2)掌握 DML 語句的使用:SELECT、UPDATE、INSERT 和 DELETE;3)掌握 DDL 語句的使用:操作表時用到的一些SQL語句。例如:CREATE、ALTER、DROP等。
2.2、JDBC
掌握基本的使用。
2.3、MySQL
掌握基本的使用。
章節(jié)目標:熟練掌握SQL語句的基礎使用,了解JDBC和MySQL的基礎使用。
3、Java Web
3.1、偏前端內容
HTML、CSS、JS(JavaScript)、Ajax、jQuery
3.2、偏后端內容
Servlet、JSP、Request、Response、HTTP、Session、Cookie、Filter、Listener
Java Web初級內容的相關技術在當前 Java 后端已經比較少直接使用到了,最近幾年的 Java 程序員甚至可能都沒接觸過。大部分是被下一節(jié)的 SSM 框架給封裝代替掉了,但是這一章節(jié)初學者還是有必要認真學習一下,做到能看得懂、能照著改。
章節(jié)目標:了解該章節(jié)所涉及的知識,做到能看得懂、能照著改。對于 Servlet 可以稍微多留意一下,Servlet 是本章節(jié)比較重要的知識。
4、常用工具
4.1、Tomcat
Web 應用服務器。
4.2、Maven
項目構建管理,簡單理解為用于導入 Jar 依賴的工具。
4.3、Git
分布式版本控制系統(tǒng),簡單理解為代碼管理工具。
章節(jié)目標:需要知道有這么些工具,然后掌握其基本的使用即可。
5、核心框架
5.1、Spring
1)掌握基本的使用;2)掌握核心概念,需重點注意的知識點:IoC(控制翻轉)、DI(依賴注入)、AOP(面向切面編程)、事務控制。
5.2、SpringMVC
1)掌握基本的使用;2)掌握核心概念,需重點注意的知識點:MVC 架構、Controller 里的各種注解、一個 HTTP 請求的流程。
5.3、MyBatis
1)掌握基本的使用;2)掌握核心概念,需重點注意的知識點:XML 文件力的 SQL 語法、接口(interface)和 SQL 的映射。
5.4、Spring Boot
掌握基本的使用。
章節(jié)目標:了解 SSM 框架的基本使用,該階段可以不用做到完全理解,可以在項目實戰(zhàn)里去通過實際的例子加深自己對 SSM 的理解。
6、項目實戰(zhàn)
準備 2~3個項目實戰(zhàn),將之前所學的知識點應用起來,做出一個真正的項目(網站)。學習的項目必須使用 SSM 框架,加深自己對 SSM 的理解。該階段所做的項目,也是未來寫在你簡歷里的“項目經驗”,需要跟著敲一遍。
目標:將之前所學知識串聯起來,熟練掌握一個 Web 項目的完整流程,通過項目加深對之前所學知識的理解,特別是 SSM 框架知識。
7、面試準備
如果對于上述的 Java 基礎知識你已經能熟練使用,然后也能熟練搭建一個簡單的 SSM 的項目。那我建議你可以將時間多花在面試準備這一章節(jié)上,面試準備的重要程度可能超過很多人的想象。同時在看面試題的過程中也能加深自己對之前知識的認知。
7.1、重點內容
Java 基礎高頻面試題
集合高頻面試題,重點:HashMap
多線程高頻面試題,重點: synchronized、線程池
MySQL高頻面試題,重點:索引、鎖
Spring/SpringMVC/MyBatis高頻面試題,重點:Spring
SSM 實戰(zhàn)項目
該模塊對應我們上面學習的知識,但是只會使用是很難滿足當前的面試要求的,因此需要針對這些知識進行面試強化,具體的題目可以看下我的面試系列文章。
7.2、進階內容
JVM
Redis
Kafka
Zookeeper
Dubbo
算法:常見的算法,二分、排序等,可以刷劍指offer的題目
設計模式:可以主要看下單例模式
你可能會有疑問,為什么進階里列的知識點都是之前上面沒有提過的,還需要準備面試題。之所以補充進階部分,主要是為了應對當前互聯網行業(yè)內卷越來越嚴重的現象,這幾個知識點都是當前 Java 面試的高頻考點,但是要像前面的基礎知識一樣,系統(tǒng)的學習這些知識對于初學者當前階段來說基本不太可能,所以一個比較合適的方式是直接看高頻面試題,然后將高頻面試題帶著理解記下來。
章節(jié)目標:各個知識點的高頻面試題熟記于心,盡量做到理解,不能理解就先硬背。
面試真題可以參考我的文章:Java 基礎高頻面試題(2021年最新版)。
常見問題
1、自學時遇到不懂的知識怎么辦?
答:百度/谷歌找答案,初學者遇到的問題基本百度上都能找得到,多利用搜索引擎,鍛煉自己的解決問題的能力,這個能力會貫穿你的整個程序員生涯。
2、普通人按本文自學后能達到什么程度?
答:如果你確實很努力的花了超過1000個小時,按本文的路線去學習,掌握了本文所介紹的知識,那我相信你找個工作是不難的。
3、在網上看到有人自學6個月進 BAT?
答:自學6個月進 BAT 有嗎?我相信是有的。多嗎?我相信是海底撈針。
針對這個話題,大部分是假的,更多的是一些人/機構用于打廣告的,看了文章內容99%要你付費加群或買資料。
4、自學還是培訓機構?
答:坦白的講,培訓機構肯定比自學要輕松點,至少培訓機構會幫你們制定好方向。但是自學其實會給公司留下不錯的印象,公司會覺得你的學習能力不錯,同時自學也很鍛煉人,對你以后的成長有幫助。
我只能幫你們分析,你們可以根據自己的情況去選擇。但是,我覺得如果你無法靠自學進入這一行,你以后的路可能也會走得比較艱難。
但是如果你已經報了培訓機構,那就好好學不要多想,并不是說一定不能找培訓機構,先入行再說。
5、算法是否重要?
答:對于0基礎自學的同學來說,算法的地位可以稍微放后面一點,當前的目標還是先打好 Java 基礎,能寫 Java 代碼。
6、是否應該先學 C 語言?
答:說實話,我個人并不建議,雖然 C 語言確實是挺重要的,但是我覺得如果有這個時間,還不如把 Java 基礎多鞏固一下。
7、初中/高中/中專學歷能不能自學 Java?
答:網上可能有很多人/機構說學歷不重要啊,balabala。但是負責任的說,學歷還是很重要的,我不是很推薦這些同學自學 Java,因為真的比較難,就算學會了也困難重重,很多企業(yè)都有學歷限制。
目前來看,至少要有大專學歷,最好有本科,否則建議還是仔細考慮下,除非你確實已經走投無路了。
8、大齡轉行自學 Java 是否可行?
答:跟學歷一樣,大齡在這個行業(yè)也是個問題,如果現在有工作,我建議可以先用業(yè)余時間學看看,但是不要輕易辭職自學,風險很大。
9、看書學習快,還是看視頻學習快呢?
答:視頻。自學階段的小白看書效率很低,基本是看不下去的,不推薦看書,可以后續(xù)學習的差不多了,看點入門的書籍輔助。初學階段主要看視頻,然后輔助看一些網上入門的博文。
10、為什么不能看書,我有時候看了一上午視頻就感覺很浮躁,下午去教室看書不行嗎?
答:因為本文還是主要按大多數人的學習情況來寫,所以正常會推薦新手看視頻,但是如果視頻有時候看不下去,想嘗試下看書,我覺得也是可以的,但是如果看書看不下去后,說明不合適,就不要繼續(xù)堅持了,還是看視頻為主。
看書的話,《Java編程思想》我肯定是不推薦的,這本書我自己當時看過,效果不好,不推薦。
目前看來對于初學者,評價比較好的是:《Java核心技術·卷 I 基礎知識》,這本書我自己沒看過,但是我看有好幾個正在自學的同學推薦看,然后本身評價也不錯,所以想看書的同學建議可以入這本書試試。
11、有不少大一新生表示看不懂?
答:大一新生看不懂,我覺得是正常的,也不需要急,因為你們所處的時間點還是很早的,只要現在抓緊時間,按本文的路線去學習,到大三應該就學的差不多了,后面還有時間去學學進階的知識。后面畢業(yè)后,你們會發(fā)現你們的優(yōu)勢是比較大的。
12、好多東西聽不懂,還有好多詞看了后就忘了,不知道具體是啥意思,搞的越來越懵了?
答:這個是初學者正常都會遇到的,不需要很慌張,沒有什么捷徑,就是多看、多敲、多練,久而久之用多了,就記住了。
福利
文章提到的知識點,我在B站找了一些當前點擊量和評價比較不錯的教程,簡單的整理了一份“0 基礎 Java 自學之路(配套教程)”,需要的在公眾號右下角菜單欄“自學教程”自行獲取即可。
如果覺得不合適,也可以按文中“自學教程獲取”提到的方法去自己尋找合適的,也是可以的。
學習交流群
另外,我自己也有一個“Java 學習交流群”,里面有很多也在自學的同學,也有一些工作了的同學,大家可以在里面討論 Java 相關內容。
有興趣的在公眾號右下角菜單欄“聯系我”加我好友,備注:加群,我拉你進群。
最后
如果你的問題沒有在本文提到,或者你對本文有疑問,你可以在文章下方留我留言,對于每個留言我基本都會在24小時內回復,極端情況下可能會放到周末回復,原則上只要是與本文相關的正常留言我都會回復。
推薦閱讀
