前言
如果你想自學(xué) Java吭狡,認(rèn)真看完本文尖殃,你以后的職場生涯至少少走1年彎路。
本文會持續(xù)更新划煮,建議收藏分衫。
初衷
在 CSDN 上經(jīng)常有同學(xué)私聊我詢問 “如何自學(xué) Java”、“想轉(zhuǎn)行 Java 靠譜嗎” 等問題般此,因為自己也是在大學(xué)時自學(xué)的 Java,所以我能理解這些同學(xué)的痛苦和迷茫牵现。
寫這篇文章前铐懊,我看了一些網(wǎng)上 Java 自學(xué)的文章,很多我都不太滿意瞎疼,有的甚至讓我感到憤怒科乎,要么是站在現(xiàn)有的視角侃侃而談,要么是純粹的瞎編騙小白贼急。
很多文章都有一個老毛裁┟:完全沒有從小白的視角去思考,內(nèi)容太多太抓,什么微服務(wù)空闲、架構(gòu)、大數(shù)據(jù)都來了走敌,這根本不是自學(xué)階段該去看的東西碴倾,小白看了這些文章,只會越看越懵逼,根本沒法下手跌榔。
其實我在18年寫過一篇“0基礎(chǔ)Java自學(xué)之路”异雁,但是現(xiàn)在來看,當(dāng)時那篇文章寫的過于簡單僧须,只是提供了一個思路纲刀,但是很多內(nèi)容沒有寫。
如今已經(jīng)過去了3年担平,我對于這個話題又有了一些新的思考示绊,同時為了拯救廣大正處于水深火熱的同學(xué)們,于是驱闷,我決定重新寫一篇自學(xué)教程耻台。
自我介紹
在寫本文前有必要介紹下我自己,讓大家更好的去比較和參考空另。
我大學(xué)是普通本科盆耽,大三開始自學(xué)的 Java,自學(xué)了一年扼菠,但是我是計算機專業(yè)的摄杂,所以有C語言基礎(chǔ),但是我這一年的自學(xué)走了不少彎路循榆,花了很多時間學(xué)了很多后面根本沒用到的東西:Oracle析恢、Hibernate、Struct2秧饮、JBPM 等等映挂,還有就是缺少有經(jīng)驗的人的指導(dǎo),所以容易抓不到重點盗尸,所以也浪費了不少時間柑船。
不過當(dāng)時還沒有現(xiàn)在這么內(nèi)卷,所以我在大四秋招剛開始就找到工作了泼各。
行業(yè)現(xiàn)狀
程序員現(xiàn)狀
由于程序員的薪水比較高鞍时,最近幾年有很多其他專業(yè)的人涌進了程序員行業(yè),加速了這個行業(yè)的內(nèi)卷扣蜻,但是據(jù)某招聘網(wǎng)上的數(shù)據(jù)統(tǒng)計逆巍,程序員當(dāng)前的需求量還是遠(yuǎn)高于全行業(yè)的平均線的。所以莽使,程序員的現(xiàn)狀我覺得是不錯的锐极,至少幾年內(nèi)是無需擔(dān)心的。
Java 現(xiàn)狀
最近幾年芳肌,Go溪烤、Python 等語言快速崛起味咳,大有挑戰(zhàn) Java 地位的趨勢,但是 Java 毋庸置疑仍是當(dāng)前互聯(lián)網(wǎng)行業(yè)里招聘需求量最大的檬嘀。
眾多大廠:阿里槽驶、美團、快手鸳兽、拼多多掂铐、滴滴、網(wǎng)易等揍异,都是以 Java 為公司的主語言全陨,部分大廠:騰訊、百度衷掷、字節(jié)等辱姨,雖然以其他語言為主語言,但是多多少少也會有一些 Java 崗戚嗅。
所以雨涛,Java 的現(xiàn)狀及未來,我覺得都是比較不錯的懦胞。崗位多也代表著機會多替久,對于新人來說比較友好,所以我個人是比較推薦新人學(xué) Java 的躏尉。
自學(xué)前你應(yīng)該知道
自學(xué)前請做好心理準(zhǔn)備蚯根,自學(xué)是一個既寂寞又漫長的過程,如果想踏進來胀糜,請做好放棄幾乎所有娛樂生活的準(zhǔn)備颅拦,包括過年的時候。如果只是抱著三天打魚兩天曬網(wǎng)的態(tài)度教藻,那我建議還是放棄吧矩距。
但是如果你能堅持下來,我相信一定能有所回報怖竭,我自己就是個例子,我走了那么多彎路陡蝇,跟著本文走痊臭,你們沒理由比我當(dāng)時更差。
自學(xué)預(yù)估周期
自學(xué)的周期我給大家定了一個參考時間:6個月登夫,平均每天6-8小時广匙,共1200個小時左右,大致安排:
1恼策、3個月基礎(chǔ)知識學(xué)習(xí)和強化鸦致。
2潮剪、2個月 SSM 項目實戰(zhàn)反復(fù)練習(xí),項目實戰(zhàn)同時也在復(fù)習(xí)和鞏固之前的基礎(chǔ)知識分唾。
3抗碰、1個月面試高頻題準(zhǔn)備,看面試題其實也會增加自己的專業(yè)知識绽乔,而且可能比你想象的要多弧蝇,不夸張的說,前幾年我從面試題里學(xué)到的知識可能比工作里獲得的還多折砸。
自學(xué)教程獲取
很重要的建議
1看疗、愛因斯坦的成功公式:成功 = 效率 * 時間,自學(xué)也一樣睦授,需要勞逸結(jié)合两芳,不要搞的太累,否則效率下降去枷,花再多時間也沒用怖辆。
2、自學(xué)是一個漫長的過程沉填,循序漸進疗隶、保持耐心,如果可以翼闹,找個伴一起學(xué)習(xí)斑鼻,互相鼓勵,互相交流猎荠,可以讓自己更有動力堅持下去坚弱。
3、將自己的學(xué)習(xí)過程記錄下來关摇,當(dāng)你發(fā)現(xiàn)累計的越來越多的時候荒叶,心里會有一種小成就感,這會提高你學(xué)習(xí)的動力输虱。
4些楣、專注于重點知識的學(xué)習(xí),本文介紹的基本涵蓋了當(dāng)前你應(yīng)該學(xué)習(xí)的內(nèi)容宪睹,沒有提到的大部分是沒那么重要的愁茁,如果你無法判斷是否重要,可以在本文下面留言亭病,我會一一解答鹅很,至于像一些什么:k8s、hadoop罪帖、hbase 等等促煮,看都別看邮屁,對于當(dāng)前的你來說只是浪費時間。
5菠齿、利用好搜索引擎佑吝,有什么問題就百度,新手大部分的問題百度都能解決泞当。
6迹蛤、看視頻不要看書,當(dāng)前階段的你看任何書襟士,包括大名鼎鼎的《Java編程思想》都是浪費時間盗飒。
7、看視頻要跟著敲一遍甚至多遍陋桂,如果只看視頻不跟著敲逆趣,你會發(fā)現(xiàn)最后啥都學(xué)不會。
8嗜历、視頻中一些介紹歷史的視頻可以過一遍簡單了解就行宣渗,節(jié)省點時間。
9梨州、關(guān)于視頻教程的選群鄞选:選擇近2~3年的教程,講師讓自己聽著舒服即可暴匠,點擊高的視頻水平基本差不多鞍恢。
10、不懂的知識可以反復(fù)看每窖,例如同一個知識點有兩套教程帮掉,看完第一個沒完全理解,可以再看第二個窒典,加深印象蟆炊,也可以查些資料幫助理解。
自學(xué)知識點
1瀑志、Java SE
1.1涩搓、Java基礎(chǔ)
基礎(chǔ)概念/語法:面向?qū)ο螅ɡ^承、封裝劈猪、多態(tài))基礎(chǔ)昧甘、包、類岸霹、接口、方法将饺、對象贡避、屬性痛黎、第一個 Java 程序。
數(shù)據(jù)類型:1)基本數(shù)據(jù)類型8種:byte刮吧、short湖饱、int、long杀捻、float井厌、double、char致讥、boolean仅仆;2)引用數(shù)據(jù)類型
變量類型:局部變量、實例變量(成員變量)垢袱、類變量(靜態(tài)變量)
修飾符:public墓拜、private、不寫请契、protected咳榜、static、final爽锥、abstract涌韩、synchronized ,volatile
運算符:1)算術(shù)運算符:+氯夷、-臣樱、、/肠槽、%擎淤、++、--秸仙;2)關(guān)系運算符:==嘴拢、!=、>寂纪、<席吴、>=、<=捞蛋;3)邏輯運算符:&&孝冒、||、!拟杉;4)賦值運算符:=庄涡、+=、-=搬设、=穴店、/=撕捍;5)條件運算符:Object x = (expression) ? value if true : value if false;
循環(huán)結(jié)構(gòu):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缘厢、數(shù)組、日期時間义钉、枚舉昧绣、使用 IDE 進行 DEBUG
1.2、集合
Map:HashMap(最重要)捶闸、ConcurrentHashMap夜畴、TreeMap、Hashtable
List:ArrayList(最重要)删壮、LinkedList
Set:HashSet(最重要)贪绘、TreeSet
1.3、多線程
線程生命周期
創(chuàng)建線程的三種方式:繼承 Thread央碟、實現(xiàn) Runnable税灌;實現(xiàn) Callable
ThreadPoolExecutor(線程池)
鎖:synchronized 和 Lock
1.4、I/O流
1.5亿虽、網(wǎng)絡(luò)編程
1.6菱涤、反射
1.7、泛型
1.8洛勉、注解
小結(jié):
1粘秆、該階段很重要,建議至少看兩套不同的教程收毫。由于每個老師的觀點都會有一些片面性攻走,當(dāng)遇到疑惑的時候,可以看看其他老師的理解此再,可能就想通了昔搂。
2、看第一遍時會比較慢输拇,第二遍會快一點摘符,已經(jīng)掌握的知識可以快速帶過。
3、有疑問的知識多看幾遍逛裤,也可以網(wǎng)上看點博文輔助理解蠢古,實在看不懂的可以先記下來,后面學(xué)到一定程度可能就理解了别凹。
4、對于重點知識洽糟,可以做筆記來加深自己的理解炉菲,也方便后續(xù)自己復(fù)習(xí)。
5坤溃、Java基礎(chǔ)拍霜、集合、多線程是核心中的核心薪介。
章節(jié)目標(biāo):熟練掌握該章節(jié)所列的所有 Java 核心基礎(chǔ)知識祠饺,能熟練的編寫 Java 程序。
2汁政、SQL
2.1道偷、SQL
1)了解基礎(chǔ)概念;2)掌握 DML 語句的使用:SELECT记劈、UPDATE勺鸦、INSERT 和 DELETE;3)掌握 DDL 語句的使用:操作表時用到的一些SQL語句目木。例如:CREATE换途、ALTER、DROP等刽射。
2.2军拟、JDBC
掌握基本的使用。
2.3誓禁、MySQL
掌握基本的使用懈息。
章節(jié)目標(biāo):熟練掌握SQL語句的基礎(chǔ)使用,了解JDBC和MySQL的基礎(chǔ)使用现横。
3漓拾、Java Web
3.1、偏前端內(nèi)容
HTML戒祠、CSS骇两、JS(JavaScript)、Ajax姜盈、jQuery
3.2低千、偏后端內(nèi)容
Servlet、JSP、Request示血、Response棋傍、HTTP、Session难审、Cookie瘫拣、Filter、Listener
Java Web初級內(nèi)容的相關(guān)技術(shù)在當(dāng)前 Java 后端已經(jīng)比較少直接使用到了告喊,最近幾年的 Java 程序員甚至可能都沒接觸過麸拄。大部分是被下一節(jié)的 SSM 框架給封裝代替掉了,但是這一章節(jié)初學(xué)者還是有必要認(rèn)真學(xué)習(xí)一下黔姜,做到能看得懂拢切、能照著改。
章節(jié)目標(biāo):了解該章節(jié)所涉及的知識秆吵,做到能看得懂淮椰、能照著改。對于 Servlet 可以稍微多留意一下纳寂,Servlet 是本章節(jié)比較重要的知識主穗。
4、常用工具
4.1毙芜、Tomcat
Web 應(yīng)用服務(wù)器黔牵。
4.2、Maven
項目構(gòu)建管理爷肝,簡單理解為用于導(dǎo)入 Jar 依賴的工具猾浦。
4.3、Git
分布式版本控制系統(tǒng)灯抛,簡單理解為代碼管理工具金赦。
章節(jié)目標(biāo):需要知道有這么些工具,然后掌握其基本的使用即可对嚼。
5夹抗、核心框架
5.1、Spring
1)掌握基本的使用纵竖;2)掌握核心概念漠烧,需重點注意的知識點:IoC(控制翻轉(zhuǎn))、DI(依賴注入)靡砌、AOP(面向切面編程)已脓、事務(wù)控制。
5.2通殃、SpringMVC
1)掌握基本的使用度液;2)掌握核心概念,需重點注意的知識點:MVC 架構(gòu)、Controller 里的各種注解堕担、一個 HTTP 請求的流程已慢。
5.3、MyBatis
1)掌握基本的使用霹购;2)掌握核心概念佑惠,需重點注意的知識點:XML 文件力的 SQL 語法、接口(interface)和 SQL 的映射齐疙。
5.4兢仰、Spring Boot
掌握基本的使用。
章節(jié)目標(biāo):了解 SSM 框架的基本使用剂碴,該階段可以不用做到完全理解,可以在項目實戰(zhàn)里去通過實際的例子加深自己對 SSM 的理解轻专。
6忆矛、項目實戰(zhàn)
準(zhǔn)備 2~3個項目實戰(zhàn),將之前所學(xué)的知識點應(yīng)用起來请垛,做出一個真正的項目(網(wǎng)站)催训。學(xué)習(xí)的項目必須使用 SSM 框架,加深自己對 SSM 的理解宗收。該階段所做的項目漫拭,也是未來寫在你簡歷里的“項目經(jīng)驗”,需要跟著敲一遍混稽。
目標(biāo):將之前所學(xué)知識串聯(lián)起來采驻,熟練掌握一個 Web 項目的完整流程,通過項目加深對之前所學(xué)知識的理解匈勋,特別是 SSM 框架知識礼旅。
7、面試準(zhǔn)備
如果對于上述的 Java 基礎(chǔ)知識你已經(jīng)能熟練使用洽洁,然后也能熟練搭建一個簡單的 SSM 的項目痘系。那我建議你可以將時間多花在面試準(zhǔn)備這一章節(jié)上,面試準(zhǔn)備的重要程度可能超過很多人的想象饿自。同時在看面試題的過程中也能加深自己對之前知識的認(rèn)知汰翠。
7.1、重點內(nèi)容
Java 基礎(chǔ)高頻面試題
集合高頻面試題昭雌,重點:HashMap
多線程高頻面試題复唤,重點: synchronized、線程池
MySQL高頻面試題烛卧,重點:索引苟穆、鎖
Spring/SpringMVC/MyBatis高頻面試題,重點:Spring
SSM 實戰(zhàn)項目
該模塊對應(yīng)我們上面學(xué)習(xí)的知識,但是只會使用是很難滿足當(dāng)前的面試要求的雳旅,因此需要針對這些知識進行面試強化跟磨,具體的題目可以看下我的面試系列文章。
7.2攒盈、進階內(nèi)容****
JVM
Redis
Kafka
Zookeeper
Dubbo
算法:常見的算法抵拘,二分、排序等型豁,可以刷劍指offer的題目
設(shè)計模式:可以主要看下單例模式
你可能會有疑問僵蛛,為什么進階里列的知識點都是之前上面沒有提過的,還需要準(zhǔn)備面試題迎变。之所以補充進階部分充尉,主要是為了應(yīng)對當(dāng)前互聯(lián)網(wǎng)行業(yè)內(nèi)卷越來越嚴(yán)重的現(xiàn)象,這幾個知識點都是當(dāng)前 Java 面試的高頻考點衣形,但是要像前面的基礎(chǔ)知識一樣驼侠,系統(tǒng)的學(xué)習(xí)這些知識對于初學(xué)者當(dāng)前階段來說基本不太可能,所以一個比較合適的方式是直接看高頻面試題谆吴,然后將高頻面試題帶著理解記下來倒源。
章節(jié)目標(biāo):各個知識點的高頻面試題熟記于心,盡量做到理解句狼,不能理解就先硬背笋熬。
路線問題可以參考:阿里成長學(xué)習(xí)筆記
面試真題可以參考我的文章:字節(jié)Java面試題庫
常見問題
1、自學(xué)時遇到不懂的知識怎么辦腻菇?
答:百度/谷歌找答案胳螟,初學(xué)者遇到的問題基本百度上都能找得到,多利用搜索引擎筹吐,鍛煉自己的解決問題的能力旺隙,這個能力會貫穿你的整個程序員生涯。
2骏令、普通人按本文自學(xué)后能達到什么程度蔬捷?
答:如果你確實很努力的花了超過1000個小時,按本文的路線去學(xué)習(xí)榔袋,掌握了本文所介紹的知識周拐,那我相信你找個工作是不難的。
3凰兑、在網(wǎng)上看到有人自學(xué)6個月進 BAT妥粟?
答:自學(xué)6個月進 BAT 有嗎?我相信是有的吏够。多嗎勾给?我相信是海底撈針滩报。
針對這個話題,大部分是假的播急,更多的是一些人/機構(gòu)用于打廣告的脓钾,看了文章內(nèi)容99%要你付費加群或買資料。
4桩警、自學(xué)還是培訓(xùn)機構(gòu)可训?
答:坦白的講,培訓(xùn)機構(gòu)肯定比自學(xué)要輕松點捶枢,至少培訓(xùn)機構(gòu)會幫你們制定好方向握截。時間是程序員最大的痛點;
我只能幫你們分析烂叔,你們可以根據(jù)自己的情況去選擇谨胞。
5、算法是否重要蒜鸡?
答:對于0基礎(chǔ)自學(xué)的同學(xué)來說胯努,算法的地位可以稍微放后面一點,當(dāng)前的目標(biāo)還是先打好 Java 基礎(chǔ)术瓮,能寫 Java 代碼。
6贰健、是否應(yīng)該先學(xué) C 語言胞四?
答:說實話,我個人并不建議伶椿,雖然 C 語言確實是挺重要的辜伟,但是我覺得如果有這個時間,還不如把 Java 基礎(chǔ)多鞏固一下脊另。
7导狡、初中/高中/中專學(xué)歷能不能自學(xué) Java?
答:網(wǎng)上可能有很多人/機構(gòu)說學(xué)歷不重要啊偎痛,balabala旱捧。但是負(fù)責(zé)任的說,學(xué)歷還是很重要的踩麦,我不是很推薦這些同學(xué)自學(xué) Java枚赡,因為真的比較難,就算學(xué)會了也困難重重谓谦,很多企業(yè)都有學(xué)歷限制贫橙。
目前來看,至少要有大專學(xué)歷反粥,最好有本科卢肃,否則建議還是仔細(xì)考慮下疲迂,除非你確實已經(jīng)走投無路了。
8莫湘、大齡轉(zhuǎn)行自學(xué) Java 是否可行尤蒿?
答:跟學(xué)歷一樣,大齡在這個行業(yè)也是個問題逊脯,如果現(xiàn)在有工作优质,我建議可以先用業(yè)余時間學(xué)看看,但是不要輕易辭職自學(xué)军洼,風(fēng)險很大巩螃。
9、看書學(xué)習(xí)快匕争,還是看視頻學(xué)習(xí)快呢避乏?
答:視頻。自學(xué)階段的小白看書效率很低甘桑,基本是看不下去的拍皮,不推薦看書,可以后續(xù)學(xué)習(xí)的差不多了跑杭,看點入門的書籍輔助铆帽。初學(xué)階段主要看視頻,然后輔助看一些網(wǎng)上入門的博文德谅。
10爹橱、為什么不能看書,我有時候看了一上午視頻就感覺很浮躁窄做,下午去教室看書不行嗎愧驱?
答:因為本文還是主要按大多數(shù)人的學(xué)習(xí)情況來寫,所以正常會推薦新手看視頻椭盏,但是如果視頻有時候看不下去组砚,想嘗試下看書,我覺得也是可以的掏颊,但是如果看書看不下去后糟红,說明不合適,就不要繼續(xù)堅持了乌叶,還是看視頻為主改化。
看書的話,《Java編程思想》我肯定是不推薦的枉昏,這本書我自己當(dāng)時看過陈肛,效果不好,不推薦兄裂。
目前看來對于初學(xué)者句旱,評價比較好的是:《Java核心技術(shù)·卷 I 基礎(chǔ)知識》阳藻,這本書我自己沒看過,但是我看有好幾個正在自學(xué)的同學(xué)推薦看谈撒,然后本身評價也不錯腥泥,所以想看書的同學(xué)建議可以入這本書試試。
11啃匿、有不少大一新生表示看不懂蛔外?
答:大一新生看不懂,我覺得是正常的溯乒,也不需要急夹厌,因為你們所處的時間點還是很早的,只要現(xiàn)在抓緊時間裆悄,按本文的路線去學(xué)習(xí)矛纹,到大三應(yīng)該就學(xué)的差不多了,后面還有時間去學(xué)學(xué)進階的知識光稼。后面畢業(yè)后或南,你們會發(fā)現(xiàn)你們的優(yōu)勢是比較大的。
12艾君、好多東西聽不懂采够,還有好多詞看了后就忘了,不知道具體是啥意思冰垄,搞的越來越懵了蹬癌?
答:這個是初學(xué)者正常都會遇到的,不需要很慌張播演,沒有什么捷徑冀瓦,就是多看伴奥、多敲写烤、多練,久而久之用多了拾徙,就記住了洲炊。
推薦閱讀
《飛馬計劃》到底是什么? 可以讓數(shù)萬程序員為之著迷
看完三件事
如果你覺得這篇內(nèi)容對你還蠻有幫助暂衡,我想邀請你幫我三個小忙:
點贊,轉(zhuǎn)發(fā)崖瞭,有你們的 『點贊和評論』狂巢,才是我創(chuàng)造的動力。
關(guān)注公眾號 『 Java斗帝 』书聚,不定期分享原創(chuàng)知識唧领。
同時可以期待后續(xù)文章ing??