1. 程式人生 > >新手的java學習建議

新手的java學習建議

前言

  • 進入IT領域,就像進入大海—浩瀚而廣闊。然而,它又很容易讓人迷茫,不知所措。所以,在IT的海洋中,找好一艘船特別重要,這艘船帶你前進、減少迷失。這艘船或許是一個人,或一本書,又或許是一篇文章。
  • 然而在現實的大學生活中,在我們普通院校中,其實更多的可能是忙忙碌碌,或者碌碌無為。或者就是按照課本循規蹈矩,學著一些陳舊,或者自己不喜歡的東西。到最後就是那種啥都會、啥又都不會的人。
  • 筆者為一個即將進入大四的學生,在這個領域的學生生涯也算是感觸良多吧,自己算不上優秀但是也不是無所事事的那種人。在大一和大二荒廢和浪費了太多時間,每每想到都會後悔上一番。希望後人能夠引以為戒!

預備工作

瞭解IT領域

熱門語言

  • 在學習一門語言,或者一門技術,你首先要先了解這門技術,這門語言在世界,在中國的市場份額。以及火熱程度。有些語言漸漸暗淡。而有些語言逐漸興起。
  • 當前比較火熱的語言大致有javapythonc、c(嵌入式)、javascript、typescript、c#、R、go、kotlin(安卓)、scala(大資料)、ruby、php、matlab、dart(flutter跨平臺移動端)、swift(蘋果)、objective -c(蘋果)、shell指令碼、lua指令碼等等。
  • 選擇一門語言要根據你的方向來。比如你要學習後端。那就java、python、php、c#、或node.js。如果搞安卓那肯定java、kotlin、js(混式開發)。如果大資料那肯定是java、scala最好,其次python也行。如果搞人工智慧演算法那肯定是python、matlab。資料分析可以考慮R、python、matlab。如果你想搞爬蟲,那python肯定最好選擇,當然java等其他語言都可以。如果你是競賽ACMer。那c 肯定是你的拿手菜、也不排除部分鬼才用java哈。
  • 筆者從大眾角度還是建議要熟悉掌握一門程式語言。對於作為學習的基礎語言。建議從java或者c 開始。後續可以學習python。go等語言。

熱門方向

  • 對於方向,雖然籠統的說有web開發、大資料、人工智慧、物聯網、雲端計算、運維、測試、網路安全等等。但是對於普同學軟體的大學生來說主要的還是·前端後端運維大資料、測試這些。
  • 對於很多人說的或者當前炒的火熱的人工智慧、爬蟲那些。我只能說很大程度那就是一個坑吧。因為大公司除了一些做搜尋引擎的百度、谷歌、360他們利用爬蟲 演算法 儲存做搜尋引擎。而其他大公司他們都有自己產生的資料、他們更多致力於這些資料的處理,分析。而不是想著怎麼爬。還有就是理性看待培訓機構的python吹
    ,python是很方便簡單,是能幹很多事情。對於鼓吹的爬蟲學到後面的拓展方向。要麼是擴大量分散式方向拓展。要麼就是分析JavaScript各種加密。如果是安卓等app還要反編譯看原始碼檢視java程式碼的邏輯,以前記錄的淺談網路爬蟲。而AI方向眾所周知一般非985/211碩士很難找到。並且AI重要的是數學和演算法,跟程式語言關係也不大。python僅僅是一個工具而已。
  • 根據方向市場大部分需求還是前端、後臺、演算法(要求很高)。前端和後臺的需求遠遠超過其他的方向人員。因為所有網站的其他開發功能都要依賴於前端和後臺。並且隨著html5流行。web能幹的事情也越來越多。這也極大的搶佔了桌面應用和原生安卓、蘋果應用。所以個人建議後端、前端、運維三個方向選擇一個。當然。具體選擇方向還是要根據興趣來,你喜歡大資料(工程類要求不是很高,資料探勘演算法要求高),人工智慧,爬蟲,遊戲開發,桌面開發等你都可以做。只不過再選擇方向時候要儘早不要好高騖遠。根據自己所在院校、自己實際水平。以及計劃研究自己想要研究的。

自身定位:

你是想要進大廠,還是想進小公司呢?
對於一個普通本科生,很可能真正步入學習的時間不多。並且能夠掌握的知識的廣度和深度也是有限度的,還要考慮學習環境的影響。要慎重選擇學習的側重點。

  • 相進大廠,那麼如果裸的只會java後端技術是不夠的。在校招階段進大廠更多知識的要求不是廣度,而是深度。比如作業系統網路資料結構和演算法,以及jvm,和java的基礎知識需要熟練掌握。而框架和一些高階中介軟體需要你瞭解或簡單應用。但是大廠就那幾個,競爭壓力還是比較大的。
  • 想進小公司,其實很多小公司的要求特別高,並且很多小公司乾的活也多一定程度能夠使得技術快速成長,也有不少人先到小公司積累技術然後跳大廠。小公司更多看中你會的技術有哪些,會那些框架,中介軟體而相對不太注重那些底層。
  • 如果你要就業一定要提前幾個月準備面試,準備基礎,進行復習,github上的javaguide力薦。

同時,也不要有心理包袱,不要認為自己是雙非的大學就進不了大廠,如果學習的早,自身積累夠多,夠紮實,用心準備那麼進大廠也是沒問題的。

解決學習障礙


個人感覺在學校的學習過程中主要有兩大障礙。一個是個人障礙,另一個是學校障礙。

個人障礙:

  • 不瞭解就業的壓力。總把事情交給’明天’,以後。或者把領域看的很簡單,又或者好高騖遠,看不上當前所學,又不拓展新知識。
  • 還有 混日子等臨近畢業補習找工作。這種就是低薪碼農,和容易被淘汰的。IT的每一個技術棧都很深,都需要長期的沉澱才能變強。
  • 考研黨會認為:我要考研。我要考研,我不要學這個,我要做研究。你做研究,研究生基本是演算法或者底層深入的研究。有些甚至連基本知識、語法都不會,準備用寶貴的兩年半去從0開始麼。這裡就不再吐槽了。如果想要考研的也要為自己的將來打算做鋪墊。比如你想將來研究機器學習演算法。你可以刷刷題提高程式設計思維能力,學個爬蟲能夠抓取一些資料。為自己以後做個鋪墊

學校障礙:

這個可能有些學校好一些。但是對於我們學校的教學方案和課程。真的很想吐槽一下。雖然學習是個人的事情,但是在當前教育制度下很多學校也有無法推脫的責任。

  • 課程陳舊、冷門課程:IT發展迅速、技術更迭較快,然而很多學校課程甚至5、6年都不改。就比如我自己我們瘋狂學C#,sqlserver,windowsapp(windows應用商店app),.net微軟這些玩意。如果認真學習出來真的是沒啥用——不迎合市場。對於這些,如果你是忠於技術的感覺還是要有所取捨。如果你要是鑽研你自己的技術一直鑽研下去那麼你肯定會慢慢沉澱,收穫很多。但是學科成績就會降低甚至是掛科。對於其他更深的影響這裡就不分析了。
  • 還有些學校瘋狂開設相關性不大的課程 比如日語,瘋狂開硬體課程。確實佔用大量學習時間。如果在遇到一些要求很嚴格的老師,真的是欲哭無淚。
  • 對於這些障礙,你要認清自己大學期間想要收穫的是什麼。然後自行決定取捨。如果你是想從事技術就業,個人感覺學業成績沒那麼重要、可以多關注技術,多做專案對成長、就業的好處會更大。但是對於作業系統資料結構和演算法網路這些課程也是程式設計師內功區分的很大準則。還是要認真學習的。

淺談java學習

這裡通過個人過程淺談一些java方向學習的建議

javaSE

萬歲入門難。當你敲起hello world跑起來,那其實算不上入門。論上入門應該是把Java的基礎都掌握吧。javaSE是java的核心和基礎。只有這塊學好在後面閱讀其他程式碼、框架才能更加輕鬆容易。

幾點建議:

  1. 對於入門的書籍,其實還是推薦,內容豐富而通俗易懂。跟著書上案例敲demo就很容易入門。如果認為這本很簡單,可以買一本,其他的書暫時就不建議買。
  2. 對於入門的視訊,其實比較多了,像網易課堂,騰訊課堂,慕課,這些線上教育平臺有很多免費課程,適合入門。並且淘寶上也有很多培訓機構的課程,也是相當不錯。比如黑馬,尚學堂,傳智播客,各種可以從淘寶買的到。
  3. 對於入門的資料,其實比較多了。基於微文章,部落格等的流行,越來越多好文章湧現在stack overflower,csdn部落格園掘金,今日頭條,簡書,微信公眾號以及個人部落格上,所以要充分利用搜尋引擎獲取資源。
  4. 對於編譯器,入門建議eclipse。idea(入手需要時間)也可以。如果用idea最好先找一下idea搭建專案流程和介紹。兩者編譯器有些不一樣。java基礎學習建議eclipse。javaweb建議使用idea。不建議使用myeclipse,感覺太臃腫。

javase知識體系

  • java基礎:
    包過安裝環境,第一個helloworld,命名規範,資料型別,運算子,控制語句和方法,陣列,字串,面向物件,異常,泛型,以及一些api 例如正則、math、大數等模組。這部分比較簡單,跟著書上、視訊、部落格的demo跟著敲就能夠理解。對於一些模組不一定需要立即完全掌握。比如Math類有很多數學計算方法,你掌握一些常用的求平方、根號可以以後用到再慢慢積累。還有正則和大數模組在入門階段要求也不是很高。
  • java 進階:
    對於進階部分的內容。都是java處理問題的利器!,並且都很重要。
  • io(熟練掌握):在後面javaEE開發中,或者實際專案中。很多涉及到檔案傳送,需要對IO的api熟練掌握,並且io的拓展也比較多有NIO,BIO等等。
  • 集合(熟練掌握):Map和List在開發過程中使用是非常多的。並且在面試中也會常問Hashmap,currentHashMap,ArrayList、LinkList相關內容。並且在寫演算法題,寫專案時候集合也是必不可少的部分。
  • 網路程式設計(瞭解):瞭解socket程式設計,tcp/udp程式設計。如果喜歡網路程式設計或者想研究通訊方面或者一些網路傳輸中介軟體要深入瞭解網路程式設計。
  • 多執行緒(先了解熟悉):這部分內容比較深。在入門學習可先了解熟悉,因為等java有一定基礎還需要對多執行緒進行深入學習。因為在大型專案中會涉及到執行緒安全問題、同步問題。都需要多執行緒方面的知識。
  • 反射(先了解):反射的功能比較強大,對於很多人來說還是太難了。這部分在入門學習建議瞭解。如果後面有能力可以深入學習。因為當前流行的spring,mybatis很大程度是依賴反射去完成的。
  • jdbc(掌握),jdbc在jsp/servlet中關於資料庫的操作幾乎必不可少,這部分在javaEE會二次學習。
  • javaswing(直接跳過):java在桌面程式設計並沒有太大優勢,雖然eclipse,idea,webstrom,pycharm等眾多編輯器是java開發的。但java開發桌面效率還是偏低。難度偏大。但是很多老師的課程設計會基於javaswing的管理系統。如果你想學也可以研究吧。但是個人覺得還不如多花點時間用web做一個管理系統呢。

javaEE


前言

  • 在從javaSE剛過度到javaEE的時候,筆者初期感到深入不適,甚至也停止了好久。因為對一些概念沒搞清楚並且有一點畏難的思想。因此也耽誤了很長時間。因為之前的javase只有java程式碼。而javaEE有java程式碼,又有啥javabean,serverlet,jsp,js/css,xml,tomcat,還有session,cookie系列名詞。後面還有啥maven,框架啥的。這些沒有接觸的概念曾經一度阻擋自己學習。
  • 其實當你有這些問題時候,建議你兩點:一就是先百度把各個名詞先百度一下,先弄清楚這些玩意是幹什麼的。二就是建議你找個系統的視訊課程或者教程跟著學習,他們會帶著你一步步更新認知和了解。能夠少走很多彎路。
  • 這部分還有一個很重要的就是省略得當,有些技術過時的、陳舊的不需要學或者不需要深學。比如jsp頁面語法,strus2,hibernate,jsp整合javabean等等。瞭解就好。

jsp/servlet

  • 這部分應該是javaEE的基礎部分吧。推薦這部分可以在
    菜鳥教程,或者易百教程,或者較為體系化的結構可以參考。
  • 這部分感覺總要的還是cookie、session、表單處理、檔案上傳、檔案下載、servlet3.0新特性、過濾器、監聽器需要掌握。而jsp對應的內容和在jsp嵌入java程式碼稍微瞭解吧。因為現在用jsp做模板引擎的不多並且前後端分離已經成為潮流。也就是——jsp有點過時了。
  • 這部分跟著教程瞭解每一個特性,把每一個元件整合一下就ok,不需要利用這部分的技術做太多的專案。至於websocoket如果做web小遊戲或者通訊可以研究。但市場有很多封裝好的拆箱即用。

傳統框架(掌握)

  • 上一代的傳統框架為ssh(spring,strus2,hibernate)。但是那套體系很陳舊,很少有公司使用了。所以沒必要學。現在更多的是springboot mybatis。springboot是整合spring相關內容,使得開發減少配置,更加方便。所以還是要先學ssm,然後再springboot。
  • 對於學習順序,筆者建議先從mybatis,然後spring,然後springmvc。然後整合spring、springmvc、mybatis。然後再學習springboot。
  • mybatis學習:除了看視訊之餘。推薦一位部落格園的博主孤傲蒼狼
    寫的mybatis教程,感覺寫的特別棒。當然,你也可以在其他教程上學習mybatis的教程。對於mybatis半自動化ORM框架(基於jdbc封裝)。寫sql,封裝成一個介面呼叫。比起jdbc方便很多,極大提高效率。
  • Spring學習:spring 主要ioc和aop。對於入門階段要熟練掌握ioc。aop可以先放一放。個人覺得到後面有專案業務需求時候可以再學。
  • Springmvc: 這部分學習可以精簡得當,因為很多教程可能還是用大量model(modelAndview)。以及el表示式渲染資料。這部分如果專注個人開發可以多學一點。對於spring和springmvc。
  • ssm整合:筆者記得當初在整合ssm專案的時候是廢了很大一把勁。剛開始用的myeclipse用它下載部分spring的jar包。然後整合的時候又是各種報錯。然後又找各種缺失的jar包。然後又是各種版本錯誤。找bug。最終好容易整合到跑以來。但是這樣專案不易於管理。又專案轉移到IDEA.用maven管理jar包。百度很多能跑的整合方案卻不多。然後到最後好不容易找到完整的跑起來。所以在學框架的時候最好就是從開學就用maven管理依賴jar包。對於如果有整合難題可以到github找ssm專案copy修改。當然你也可以關注筆者公眾號:bigsai 筆者也很樂於幫助