03.06 在學JAVA的時候對io,多線程一知半解,是繼續往後學到做項目的時候弄明白呢還是剛開始就要弄懂它們?

用戶68056351


我的建議是剛開始不要太過糾結於一些細節點,只要能做到能用、會用就可以了。等以後你實際做項目了,有了具體實踐的場景,你再回過頭來看這些理論知識,肯定會有一種豁然開朗的感覺。

理論抓整體,捨棄細枝末節

這裡讓你設計細枝末節不是說不懂的就不需要去了解,可以按照是什麼、為什麼、怎麼使用的原則去看一些理論知識,比如多線程:

  1. 多線程是什麼?可以多個線程併發同事去幹某件事情。

  2. 為什麼使用多線程?可多線並行,可以提高效率

  3. 怎麼使用?可以通過繼承Thread類,實現Runnable、Callable接口,線程池等方式

對於初學者,我認為掌握了多線程基本的知識後就可以了。此時如果再去了解一些線程死鎖、線程安全等深入一些的問題的話,你可能也不太能理解。就算當時能理解,可是你沒有實際使用過啊,有些坑是一定你自己親自去踩了才能夠去明白的。就像我們上學時學過的高等代數、微積分之類的課程,當時死記硬背都會啊,可是平時不用現在有幾個記得住的?所以我不建議一開始就太深入一些技術細節,掌握基礎理論即可。

實踐出真知,實踐後再鞏固理論

俗話說“實踐出真知”,在我們的項目的實踐中,肯定會遇到各種各樣的問題,我們解決問題之後,要勤于思考:為什麼這裡會出問題?它背後的邏輯是怎麼實現的?這些問題會推動我們主動回頭去看那些晦澀難懂的理論知識,理論結合實踐,相信你就會有一種豁然開朗的感覺。

只有在不斷理論-實踐-理論的循環過程中,我們才能更好的掌握Java這門語言。


代碼那些事兒


一定不要帶著疑問進入項目的開發。

建議題主可以做一些小案例,例如文件讀寫,socket通信來增強對IO的理解,而多線程可以手寫一個爬蟲來體會多線程的強大之處。


李老師tome


Java這一行目前以框架為主,都是封裝好的你。你暫時可以不必糾結,應該對工作影響不大。但是從長遠考慮必須要學好。io這塊Apache有幾個工具包,可以多讀讀相關代碼。還有個hutool的工具包對常用操作有封裝可以從這方面入手。




自成宇宙


關於這個問題,幾乎所有從業者都會以過來人身份建議你:

先把筆試/面試題整明白,把項目中用到的技術學會用,至於 IO 和 線程 可以先放一放,以後不斷做項目不斷理解。

相信所有從業者都是從這一部分一步一步走過來的,因此建議肯定是有道理的。

但以我們對很多新手在項目中的表現來看,我們還是傾向於先把 IO 和 多線程最基本的東西整明白了再繼續向後學習。

另外就是,整明白 IO 和 多線程 跟 做項目 並不衝突,兩者可以同時進行。把 IO 和 多線程 整明白了有助於做項目,通過做項目可以加深對 IO 和 多線程 的理解。

以下簡單介紹一下我們期望新手能夠掌握的 IO 和 多線程 知識 以及 我們建議的學習方法。


1、IO部分

這部分內容相對於多線程來說容易多了,是初學者可以搞明白的。

在 Java IO 部分,我們建議初學者依次序掌握以下內容:

  • 文件( 通過 File 類的實例操作 文件 和 目錄 )
  • 流 ( 輸入流/輸出流 、字符流/字節流 、節點流/過濾流 )
  • 順序訪問文件和隨機訪問文件
  • 對象序列化和反序列化

如果以上內容學習起來比較輕鬆,建議再依次序學習以下內容:

  • JDK 1.7 之前的 NIO ( Buffer 、Channel 、 Selector )

  • JDK 1.7 之後的 NIO ( 這部分比較多,這裡不羅列 )

這裡與一般圖書資料或視頻資料建議的學習順序不太一樣,我們建議初學者先學習 File 類,徹底理解 File 實例的含義,理解 文件 和 目錄 的區別,理解 文件元數據 和 文件內容 的區別,理解字符編碼對文件的影響,然後再學習 IO 部分。

學習 IO 部分也要講究學習方法,比如學習順序。

雖然傳統 IO 部分涉及的類非常多,但並不是無規律可循,實際上只需要掌握四個類的用法,基本上就可以搞定其它的 IO 類了,這四個類是:

  • java.io.InputStream

  • java.io.OutputStream

  • java.io.Reader

  • java.io.Writer

以上四個類分別對應了字節輸入流、字節輸出流、字符輸入流、字符輸出流。

以其中的 InputStream 為例,該類屬於字節流,是所有表示字節輸入流的類的父類,掌握這個類的用法,等同於從根本上掌握了字節輸入流的用法。另外三個類的地位與 InputStream 類的地位是相同的。

以下以字節流為例展示傳統 IO 中字節流的繼承體系:

同樣在學習完我們建議掌握的傳統 IO 知識後,在學習 NIO 時,也可以採用同樣的策略,比如學習 Buffer 可以從最頂層的 Buffer類 學起來,學習 Channel 可以從最頂層的 Channel接口 學起。


2、多線程部分

在整個 Java 基礎部分,這部分屬於偏難的,甚至很多高校講到這部分後老師都是略過去或者僅講一下如何創建線程、如何啟動線程。

雖然說這部分偏難,有些朋友為了相對深入研究這部分,甚至需要惡補一下操作系統知識,但這仍然不是我們要放棄這部分的理由。

實際上,所有的從業者都知道的,真正從事開發工作後,我們所使用的框架和容器基本上都把多線程部分封裝了,果真等到做項目時、等到工作後再去琢磨多線程,恐怕會廢掉很多人(很多人恐怕再也不會去琢磨多線程了)。曾經面試過號稱有五年工作經驗的人,對多線程部分甚至連最基本的知識都不能準確作答。

所以我們建議多線程部分還是要先掌握一些基礎知識並在剛開始學習的時候就開始琢磨起來,以後工作了做項目時才會有更深的體會,當然也會通過項目更加加深理解。

這部分我們建議初學者依次序掌握以下內容:

  • 操作系統、程序、進程、線程之間的關係

  • 線程調度方式 ( 協作式/搶佔式 ) 、理解並行和併發

  • 創建線程的方法 ( 建議先學 Thread 和 Runnable ,其它先放放 )

  • 線程狀態

  • 線程調度 ( priority 、yield 、join 、sleep 、demon )

  • 同步和互斥

  • 線程通信 ( wait / notify)

學習以上內容之後,建議在學習以下內容:

  • 多線程併發

  • 線程通信 (多線程之間有數據傳遞,不僅是 wait 和 notify )

  • 線程池

因為這部分內容一旦展開就非常非常多,所以,建議初學者在剛開始不要再繼續深入研究,到此打住。等到工作兩三年後再回來深入研究這部分內容也來得及。


墨子編程


多線程在java中比較普遍的問題,也是較難理解的部分。

現在可以學習多線程,多線程的內容比較多,有的也涉及到底層。現在可以學學試著理解,有一知半解的時候可以試試找找資料,也可以先記錄下來,後面慢慢理解。內容較多,等項目運用到的時候,再學習,可能不知從哪裡做起,到時候又花費較多的時間。

總之,學習還是循序漸進,一步步的理解。




代碼接盤俠


學的時候就可以寫點小demo。像io,可以試著用代碼把文件搞到另外一個文件裡邊,這裡還可以看下poi讀取excel的例子,這裡邊就牽扯到流的東西,用java操作excel,word,這裡邊還是有點難度的。另外,線程池在具體的項目中用的比較多,搞線程這方面的時候,可以重點看下這方面怎麼弄。



林夕adp


多線程在java中算是比較難的一塊,因此對於剛開始學習的話確實比較難理解,涉及到線程安全的問題。在你學習的過程中可以繼續往後學,不影響你學其他模塊,最後學完之後可以單獨對多線程模塊進行強化學習,代碼實踐,之前我看過一本多線程的書,可以推薦給你。


java你我他


先往後邊學,學習框架知識,許多框架中運用到了java基礎比如說多線程.IO.集合等,這時候如果想更深層次的學習框架,那麼就要主動回頭學習一下基礎知識,這樣有目的性的學習效果會比你現在死記硬背好多了。



程序猿Jin


我也是半路出家的java程序員,而且主要靠自學起家的。

作為新手,如果你需要找工作,建議你把面試常問的問題搞清楚,就可以了。如果你已經上班了,建議你有一兩年實際開發經驗以後,再去徹底搞清楚這些問題。


王小碼


Java基礎很重要,這個才是限制未來的發展


分享到:


相關文章: