自學(xué)java細(xì)節(jié)篇
? ? 這篇文章也是我以前總結(jié)的自學(xué)java細(xì)節(jié)篇文章,由于消息隊(duì)列,集群之類的東西沒(méi)有總結(jié)出來(lái),所以我一直放到后臺(tái),而且我現(xiàn)在已經(jīng)沒(méi)有時(shí)間寫(xiě)技術(shù)類文章了。
? ?接下來(lái)我分享下自己曾經(jīng)自學(xué)java的細(xì)節(jié)。這些細(xì)節(jié)將對(duì)比當(dāng)下網(wǎng)絡(luò)中最火的后端學(xué)習(xí)路線,不斷地進(jìn)行填充。如下圖所示

計(jì)算機(jī)基礎(chǔ)課
? ? 在自學(xué)java的前一個(gè)月里面,我自學(xué)了計(jì)算機(jī)專業(yè)的三門課程,計(jì)算機(jī)網(wǎng)絡(luò),操作系統(tǒng),數(shù)據(jù)結(jié)構(gòu)。對(duì)于剛?cè)腴T的小白,計(jì)算機(jī)網(wǎng)絡(luò)是最值得學(xué)習(xí)的,通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)的學(xué)習(xí),我們將了解到我們的請(qǐng)求是如何從客戶端發(fā)送出去,如何通過(guò)網(wǎng)絡(luò)中各個(gè)節(jié)點(diǎn)轉(zhuǎn)發(fā),最終到達(dá)服務(wù)器,然后服務(wù)器又是如何將數(shù)據(jù)返回給我們客戶端的。我們會(huì)大概了解到HTTP協(xié)議,TCP/IP協(xié)議,以太網(wǎng)協(xié)議,DNS協(xié)議等這些由牛人們提前創(chuàng)建下的數(shù)據(jù)收發(fā)規(guī)則。關(guān)于計(jì)算機(jī)網(wǎng)絡(luò),我從HTTP協(xié)議入手寫(xiě)了一篇文章,并且自己用思科的packet tracer軟件,構(gòu)建了一個(gè)網(wǎng)絡(luò)拓?fù)?,錄制了一個(gè)視頻,動(dòng)態(tài)演示了一次HTTP請(qǐng)求中,數(shù)據(jù)包轉(zhuǎn)發(fā)的詳細(xì)過(guò)程,文章鏈接如下。
互聯(lián)網(wǎng)協(xié)議簡(jiǎn)析及java中HTTP協(xié)議的實(shí)戰(zhàn)
java基礎(chǔ)及數(shù)據(jù)庫(kù)
? ? 接下來(lái)圖中顯示的是前端的知識(shí),這不符合網(wǎng)絡(luò)上各種教程的習(xí)慣,所以先跳過(guò),我們直接選擇一門編程語(yǔ)言,那就是java,第一步當(dāng)然是配置JDK環(huán)境變量,讓自己的電腦擁有java最基本的類庫(kù),然后輸入自己的第一個(gè)hello world。這個(gè)過(guò)程最好通過(guò)自己百度完成,網(wǎng)絡(luò)上有成千上萬(wàn)篇教人配置JDK的博客,最好可以自己去oracle官網(wǎng)下載JDK1.8版本,實(shí)在下載不下來(lái)還想堅(jiān)持的,可以到群里找我要鏈接。如果你靠自己完成了以上這些步驟,那么你接下來(lái)碰到什么問(wèn)題,基本可以自我驅(qū)動(dòng)了。然后開(kāi)始學(xué)習(xí)基本數(shù)據(jù)類型,運(yùn)算符,字符串,流程控制語(yǔ)句,數(shù)組。接著是類與對(duì)象,方法與接口的概念,然后是繼承,封裝,多態(tài),jar包管理,第三方類的導(dǎo)入。之后開(kāi)始學(xué)習(xí)集合和泛型,接著學(xué)習(xí)異常處理(到這里其實(shí)就差不多了,后邊兩個(gè)后來(lái)用到再補(bǔ)),最后是IO數(shù)據(jù)流與多線程。之后大概率,你會(huì)開(kāi)始學(xué)習(xí)JDBC,java數(shù)據(jù)庫(kù)連接。此時(shí)你大概需要深入理解兩個(gè)東西,第一種是API(應(yīng)用程序接口),其實(shí)前邊你學(xué)的那些無(wú)處不在用這種思想。第二種是數(shù)據(jù)庫(kù),應(yīng)為你開(kāi)始使用java操作數(shù)據(jù)庫(kù)了,這也證明你將要開(kāi)始下一個(gè)征程。以下為我一開(kāi)始寫(xiě)的例子,如何理解API,以及什么是數(shù)據(jù)庫(kù),大概過(guò)一遍,不要死磕。
到底什么是關(guān)系型數(shù)據(jù)庫(kù)及關(guān)系到底是啥
關(guān)系型數(shù)據(jù)庫(kù)之三大范式
????數(shù)據(jù)庫(kù)的學(xué)習(xí)最好是在B站上百度一個(gè)比較火的教程,開(kāi)始學(xué)習(xí)簡(jiǎn)單的sql語(yǔ)句,也就是結(jié)構(gòu)化查詢語(yǔ)句,工作中十分常用,所以對(duì)于這一方面不可偷懶,勤加練習(xí)。之后你就可以結(jié)合所學(xué)的數(shù)據(jù)庫(kù)知識(shí),學(xué)習(xí)JDBC了。sql語(yǔ)句的練習(xí)可以百度動(dòng)力節(jié)點(diǎn)sql練習(xí)題,這里面的習(xí)題反復(fù)做幾遍,應(yīng)付日常工作綽綽有余。
web服務(wù)
? ? 現(xiàn)在你擁有了使用java操作數(shù)據(jù)庫(kù)的能力。那么你想要通過(guò)瀏覽器訪問(wèn)你的java應(yīng)用程序,就需要學(xué)習(xí)WebSockets,配合之前學(xué)習(xí)的計(jì)算機(jī)網(wǎng)絡(luò)知識(shí),理解IP地址+端口號(hào)的含義,然后需要學(xué)習(xí)web應(yīng)用服務(wù)器(一般是tomcat),這東西可以讓你的java程序處于運(yùn)行狀態(tài),同時(shí)學(xué)習(xí)servlet,用來(lái)與tomcat進(jìn)行交互。這些學(xué)完,你就可以用瀏覽器與你的java應(yīng)用通信了。結(jié)合之前學(xué)習(xí)的數(shù)據(jù)庫(kù)知識(shí),你就可以從瀏覽器端通過(guò)java應(yīng)用程序?qū)?shù)據(jù)庫(kù)中的數(shù)據(jù)取出來(lái),再拋給瀏覽器。
前端學(xué)習(xí)
? ? 接下來(lái)你需要將數(shù)據(jù)在瀏覽器上展示出來(lái)。你需要學(xué)習(xí)一些網(wǎng)頁(yè)布局知識(shí)了,那就是HTML,CSS,然后你需要?jiǎng)討B(tài)操作網(wǎng)頁(yè),動(dòng)態(tài)操作數(shù)據(jù),那么就需要學(xué)習(xí)JavaScript語(yǔ)言,之后你需要調(diào)用別人寫(xiě)好的js庫(kù),那么就需要學(xué)習(xí)點(diǎn)jQuery。如果你想要使網(wǎng)頁(yè)局部數(shù)據(jù)發(fā)生改變,而不影響其他部分,就需要學(xué)習(xí)Ajax。這些都是前端用到的知識(shí),不過(guò)你要想做出簡(jiǎn)單的頁(yè)面,必須學(xué)習(xí)一點(diǎn)。學(xué)完以上知識(shí),你可以搭建一些小型的管理系統(tǒng)了,基本都是些數(shù)據(jù)表格,可以進(jìn)行一些簡(jiǎn)單的增刪改查。
ORM框架,spring,maven
????然后你需要學(xué)習(xí)OR Map框架了,用來(lái)簡(jiǎn)化JDBC的繁雜操作(國(guó)內(nèi)大多數(shù)使用mybatis)。接著學(xué)習(xí)spring,簡(jiǎn)化整個(gè)java應(yīng)用之間的調(diào)用流程,減少大批重復(fù)代碼,并且減少對(duì)象創(chuàng)建次數(shù)。之后學(xué)習(xí)springmvc,簡(jiǎn)化控制層代碼,不再去配置servlet,不再用過(guò)多的if else 去分發(fā)不同的調(diào)用請(qǐng)求。接著應(yīng)該學(xué)習(xí)maven,管理jar包,學(xué)會(huì)配置pom文件(初期的手動(dòng)導(dǎo)包過(guò)程可能在如今已經(jīng)沒(méi)有教的了,maven的學(xué)習(xí)應(yīng)該會(huì)早于orm框架,不過(guò)在這期間肯定會(huì)遇到)。
緩存
????然后開(kāi)始學(xué)習(xí)Nosql數(shù)據(jù)庫(kù),一般從Redis開(kāi)始。使用redis,大多數(shù)時(shí)候是組裝key的過(guò)程。然后多了解一些redis的使用場(chǎng)景,練習(xí)幾個(gè)demo。以下是我自己寫(xiě)的入門級(jí)實(shí)操練習(xí)。
springboot及微服務(wù)
? ? 接著學(xué)習(xí)springboot,這個(gè)東西只需要在網(wǎng)上照片文章大概配置一次,就知道怎么回事了,然后在以后地學(xué)習(xí)中不斷地練習(xí)他,熟悉他,最終就會(huì)和你曾經(jīng)學(xué)習(xí)的知識(shí)全部綁定到一起。接下來(lái)學(xué)習(xí)spring cloud微服務(wù),按照網(wǎng)上的一篇教你從零搭建微服務(wù),整個(gè)流程搞下來(lái),你就大概知道怎么回事了。
權(quán)限系統(tǒng)
????我們寫(xiě)出來(lái)的后端接口,并不是所有人都有權(quán)限訪問(wèn)的,根據(jù)人員角色的不同,訪問(wèn)接口的權(quán)限會(huì)不一樣。這個(gè)時(shí)候就需要權(quán)限框架來(lái)幫助我們解決了,畢竟手寫(xiě)一個(gè)權(quán)限框架是十分耗費(fèi)時(shí)間的,直接集成現(xiàn)有的就很方便。
任何人都能懂的shiro權(quán)限控制實(shí)戰(zhàn)篇
linux系統(tǒng)
????后來(lái)到了拔高期,我需要開(kāi)始學(xué)習(xí)各種技術(shù)的原理,但是發(fā)現(xiàn)任何原理基本上都離不開(kāi)操作系統(tǒng)這個(gè)東西,因此我開(kāi)始學(xué)習(xí)linux系統(tǒng),因?yàn)槲覀兒蠖朔?wù)大多數(shù)時(shí)候都跑在linux系統(tǒng)服務(wù)器上,大多數(shù)軟件的編寫(xiě)基礎(chǔ)都會(huì)涉及到操作系統(tǒng)的IO模型。以下是我對(duì)于linux系統(tǒng)的一些總結(jié),不過(guò)還沒(méi)有總結(jié)完,我已經(jīng)離開(kāi)這個(gè)行業(yè)了。
自學(xué)程序--快速學(xué)習(xí)linux之虛擬文件系統(tǒng)
自學(xué)程序---快速學(xué)習(xí)linux之內(nèi)存管理
自學(xué)程序---快速學(xué)習(xí)linux之中斷
自學(xué)程序---快速學(xué)習(xí)linux之文件描述符
自學(xué)程序---快速學(xué)習(xí)linux之從linux看網(wǎng)絡(luò)IO
自學(xué)程序---快速學(xué)習(xí)linux之IO多路復(fù)用器
自學(xué)程序---快速學(xué)習(xí)linux之java版linux內(nèi)存淘汰算法LRU
JVM原理? ?
????我們的java語(yǔ)言是跑在java虛擬機(jī)上邊的,因此我當(dāng)時(shí)覺(jué)得學(xué)習(xí)JVM原理很有必要,因此就把深入理解JVM總結(jié)了一邊。以下是我對(duì)JVM原理的簡(jiǎn)單總結(jié),由于自己能力有限,所以文章最終以導(dǎo)讀的形式出現(xiàn)。
簡(jiǎn)單算法
????雖然我們知道,大部分程序員工作中并用不到什么算法,但是面試的時(shí)候,我們總是會(huì)碰到這些東西,普通程序員面試常見(jiàn)的算法通過(guò)下面的視頻就可以形象的展現(xiàn)出來(lái)
