從啥也不會到可以勝任最基本的JavaWeb工作,推薦給新人的學習路線(二)


1482457766457011227.jpg

在上一節中,主要闡述了JavaScript方面的學習路線。先列舉一下我朋友的經歷,他去過培訓機構,說是4個月后月薪過萬,雖然他現在還未達到這個指標。

培訓機構一般的套路是這樣:先教JavaSE,什么都講一講,可是都講不透,基礎差一點的只有越聽越糊塗,被面向對象的概念,接口,抽象類,搞得頭都大了。一天到晚盯着幾個干巴巴的案例看。

JavaSE大概持續講兩個月,最后會讓你做一個控制台的小屁項目,可能是ATM管理系統,也可能是圖書管理啥的。

然后,開始講html、css,這兩樣東西一般就是1到2天,講了等於沒有講,讓他做一個小網站的前端頁面根本不可能,他只會用div畫幾個五顏六色的框框。定位也不會,總是憑着老師課堂上講的那幾個例子,寫寫 position:absolute。然后郁悶得一塌糊塗,這個div怎么就移不過去呢,怎么就是不動呢??為什么老師的代碼可以,我寫的代碼就不行??去問老師,老師說,我們是Java培訓,這個是附帶的,沒關系,你們到時候也不會寫這種代碼,你們是寫Java的。(呵呵了)

不管那么多了,接下來幾天馬上學習JavaScript,第一天,着重講了講var是什么,js的幾種基礎數據類型。然后講function,alert怎么用。大概3到5天的樣子吧,JavaScript就講完了。

最后一天用來講jQuery,發現好神奇啊,可是$是啥,為什么會這樣,就不知道了。只會寫寫 $("#id")這樣的代碼。可是不管怎么樣,jQuery已經講完了。懂不懂是你的事。

我朋友直到畢業,都不知道json是啥,ajax是啥?就最后兩個禮拜講了SSH,帶了一下。

JavaScript講完后,立刻開始數據庫,數據庫一般還是教的Oracle。第一天,啥也不做,Oracle太大了,也不教你怎么安裝,反正就告訴你老師的主機已經安裝好了,那個培訓機構的電腦可承受不起oracle。數據庫教了1個禮拜,什么都涉及一點,包括觸發器,但是沒有存儲過程。反正學完以后,我朋友只會 select * from student了。left join,right join 沒看懂,只記得老師花了半天時間解釋啥叫笛卡爾積,什么是三大范式?好像很厲害,然后... ...不懂。

接下來就是tomcat,JSP,這段時間對他來說就是噩夢了,反正最后差點棄坑。最后半個月,終於,萬眾矚目,SSH閃亮登場。OK,培訓結束,去月薪過萬吧。

因為關系比較好,我和他經常保持聯系,后來一段時間,他去了外包。因為太辛苦,后來又辭職了。

說了這么多,我在此提出質疑,個人認為,這種學習路線絕對有大問題。對於一個沒有什么編程基礎的人,這種學習路線肯定會害了他。我個人推崇的路線應該是這樣:

第一步:不學任何后台語言,從Html + css開始。

這個階段,你可以花費一到兩周的時間,看各種視頻外加各種操練。最起碼,你得有一些繪制網頁的能力吧。雖然如同easyui的框架非常流行,可是你起碼也要有點這方面的基礎吧。用戶的需求千變萬化,你不可能永遠依賴easyui的。你不要跟我說什么bootstrap,如果你連div + css都不懂,bootstrap你真的能用得溜嗎?在我現在看來,bootstrap只是一種工具罷了,一些前輩把很多經常用到的代碼封裝起來,方便自己和他人使用,僅此而已。你不要覺得有多么難,毫無疑問,這種工程,我想最開始的時候肯定是一個人做的,后來隨着名氣越來越大,可能會有一個團隊來維護。但是,最早最早的時候,肯定來源於一個人的想法和思考。

第二步:深入學習JavaScript。

JavaScript輕巧,靈活,只需要一個瀏覽器,就能立即看到效果,沒有環境搭建方面的疑慮。另外,JavaScript兼具面向對象語言的各種特點,再加上現在前端這么火,你學習JavaScript吃不了虧。當然,我說的學習,不是泛泛而學,而是有目的地去深入學習。仔細體會其中的樂趣和奧妙,最起碼,你得達到能夠自己封裝一個彈窗組件的程度。

我學習JavaScript后,再學JavaSE,真的就是一個水到渠成的過程,每學到一個地方,腦海中立馬就閃現 “這不就是JavaScript中的XXX嗎?”的念頭。最好的學習方法就是類比。記得牢,而且可以融會貫通。就好像玄幻小說里面描寫的那樣,當你對某一個技能或者法則達到了很高深的境界,那么對於其他任何流派就都能融會貫通了。

第三步:突襲JavaSE

為什么說突襲JavaSE?因為我現在明白過來,對於JavaWeb開發而言,沒必要對JavaSE做太多的深入。如果你的JS功底足夠,那么JavaSE對你來說就太簡單了,因為JS比Java難入門得多。以下的學習清單是我整理所得:

理解什么是類?

你不要去管什么面向對象還是不面向對象了,我認為面向對象這種概念很難用語言描述清楚,更多的是當你代碼寫多了,產生的一種直觀的覺悟。你是去查資料也好,看視頻也罷,先理解什么是類。然后自己嘗試着寫幾個類。你不要去寫什么Person類,Animal類了,有什么意思呢?隨便打開一個網頁,比如百度貼吧,你有百度賬號的話,你就想想,一個百度賬號會有哪些屬性?用戶名,密碼,頭像,是否可用,等等。用這些信息來寫Java類。

一個Java類,無非就是屬性和方法,大部分情況下,方法無非就是用來給屬性賦值的。屬性是干嘛用的,不就是用來存儲數據的嗎?你說對不對呢?Java有八種基本數據類型:分別為整型 int,短整型 short,長整型 long,字節型 byte,布爾型 boolean,字符型 char,單精度浮點數 float,雙精度浮點數 double。

就比如說int,Java編譯器規定int占四個字節,也就是4個byte,一個字節占8位,一個位就是一個bit。bit是計算機中最小的單位,它只有0和1兩種狀態。我們常說一個文件有多少兆,這個兆就是MB,1MB有1024KB,1KB有1024個字節。當你定義了一個int類型的變量,在運行的時候就會在Java虛擬機中申請一個4個字節的空間。1MB有1024KB,1KB有1024個字節。所以說1MB可以存放 (1024 * 1024 / 4) = 262144 個int變量。Java虛擬機的默認內存是64MB,所以最多應該能存放16777216個int類型的變量。當你定義一個int類型的變量,那么運行的時候,虛擬機的剩余內存就會被減掉4個字節。所以,屬性是干嘛用的,我們在寫Java類的時候,為什么要定義屬性。我覺得沒有別的含義了,定義屬性就是為了存儲數據的嘛。

我們寫一個

private int a;

Java虛擬機(JVM)跑起來,一旦我們new了這個對象。這個a變量就會被放到JVM的內存中,然后JVM就會專門開辟一個空間,來裝載這個數據。然后,我們才可以在計算機中操作這些個數據。你總不可能說,我有一個數字100,就要計算機對這個數字進行加減乘除的運算吧。計算機怎么知道這個事情呢?你是不是必須要告訴計算機有一個數字100,它才會知道?

為了裝載這些數據,所以才有了八種基本數據類型,每一個數據類型就好比一個籃子,有的籃子大一點,比如long類型,可以放好長好長的數字。有的籃子小一點,比如byte類型,只能放一點點大的數字。Java類,我的理解就是一個模板,因為我學過JS,所以我會類比。但是這些類比,僅限於我個人,在此就不多說了。

Java類,,我更願意把它稱為一個 數據模板。它只是一個模板而已,不是一個實實在在的對象,這一點首先要確定。就好像工廠生產一個產品,首先是不是要有一個模板和設計圖紙,這個模板決定了你這個產品是一種怎樣的形狀,以及可能會具備哪些功能?圖紙則決定了功能的具體實現。比如生成一部手機,模板開出來就是一個扁平的長方體的樣子,可是光有模板還不行,你還得規定它的一些具體細節。這些細節就好比是Java類的構造方法,以及其他的一些方法實現。

但是,你光給客戶模板和圖紙行嗎?一般來說是不行的。

至於靜態方法,我們知道,我們調用靜態方法的時候,不需要先生成一個實例,可以通過類名直接調用。這就相當於,在弄模版的時候,這些功能就已經定制在里面了。你買手機的時候,里面不是經常有一些內置的應用嗎?有些刪都刪不掉,這不就相當於靜態方法嗎?

(我只是舉一個例子啊,你不要非得較真說我可以ROOT一下啊)

如果模板里面已經有了一些做好的功能,今后任何根據這個模具生成出來的產品也自帶了這些功能。如果模板里面已經做好了一些功能,那么我的確可以使用這個模板,而不需要真正拿到一個產品。比如生產一部手機,它的模板里面已經做好了一個手電筒的功能,那么,你即便不給我一個真正的產品,僅僅給我一個模板,我是不是也可以用它的手電筒功能呢?

這就是靜態方法。所以我們常說,靜態方法和靜態屬性為所有實例共用,不就是這個道理嗎?

所以,正常情況下,我們調用一個類的非靜態方法,是不是必須要先new一個對象?

2.基礎知識

這部分包括:包的知識,java中數據類型的分類(值類型,引用類型),繼承以及繼承的特點等。快速過一遍就行了,不要去深究,就算你深究了其實也沒啥用。以后代碼寫多了,自然就會爛熟於心。

3.數組和其他一些常用類

數組的話,會用即可,不要深究。其他常用類,比如Date類,最好都去學一下,但是同樣不要深究。

4.集合

集合框架,只需要掌握兩個,一個是ArrayList,一個是HashMap,知道怎么用就行了。其他集合都可以不去管它,你不要老是覺得,我學這些會不會不夠啊?等你以后成為了老司機,還不是學什么會什么?現在功利一些也無妨。有余力的,去研究源碼,沒有余力的話,不研究也沒事。

對於ArrayList,我寫過兩篇文章,還差一篇才完結,以后補上。

5.泛型

能看懂 List< Map< String,Object > > 是啥意思即可,其他都不要管。你又不去寫框架,就算真有這種雄心壯志,也是若干年后的事情了,現在你的當務之急還是找一份工作。

6.設計模式

不要管,最多去學一下單例和工廠。其他的暫時不需要考慮,剛工作那會,就是做一些增刪改查,先找到工作,穩定下來再去提升。

7.IO流

其實這部分真無所謂,還不如直接學文件上傳。即便是文件上傳,一般公司都有現成的類給你調用,也不需要你自己去寫。所以,IO流,不學都沒關系。

8.Awt,Swing

有多遠,扔多遠,不要問我為什么。有精力學這個不如去學SWT,雖然99%你學了還是用不到。Swing有啥用,我能想到的只有去網上接一些課程設計啥的私活了。

9.反射

不需要,你又不去寫框架,暫時不必關心。

10.新特性

不需要,不是你初學者該考慮的。等你以后工作穩定了再說吧。

11.JDBC

這個,你僅僅需要知道如果導入驅動包,在項目里面成功拿到鏈接就行了。其他都不用管,最原始的JDBC1.0規范,不學也沒事。還不如重點去學一下Mybatis。關鍵在於,你要學會配置文件怎么配。至於SQL,順帶着學一下就行了。

再說一遍,直接去學MyBatis之類的現成框架,不要再JDBC上浪費太多時間。

我相關的文章:

http://www.jianshu.com/p/8944864f5161

JavaSE,我認為初學的話,能做到這樣就可以了。畢業標准就是自己能夠做一個完整地增刪改查出來。你會測試就行,比如用JUnit測試,不要去寫那種什么控制台項目了,有什么意思呢?直接寫DAO層,然后體會一下其中的流程即可。

學完JavaSE,就是JSP、Servlet,這一塊要相當用心地去學。它是基礎,我個人認為比框架更重要。這些內容會在下一篇中講到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM