1. 程式人生 > 其它 >如何成為一名合格的JAVA程式設計師?

如何成為一名合格的JAVA程式設計師?

作為一名碼程式碼的技術工人,我們乾的是技術活。那麼如何才能技術過硬?成為一名合格的程式設計師!

下面我會按照相關類別談談我們應該掌握哪些。

1、計算機基礎

一名和電腦打交道的工種,計算機是我們賴以生存的工具。所以一些基礎技能是我們應該和必須掌握的。

比如網路相關的知識。其中就包含了 TCP 協議,它和 UDP 的差異。需要理解 TCP 三次握手的含義,拆、粘包等問題。當然上層最常見的 HTTP 也需要了解,甚至是熟悉。

接著是作業系統相關知識。由於工作後你寫的大部分程式碼都是執行在 Linux 伺服器上,所以對於這個看它臉色行事主你也得熟悉才行。比如程序、執行緒、記憶體等概念;伺服器常見的命令使用,這個沒啥竅門就是得平時多敲敲多總結。

當作為一個初學者學習這些東西時肯定會覺得枯燥乏味,大學一般在講專業課之前都會有這些基礎學科。我相信大部分同學應該都沒怎麼仔細聽講,因為確實這些東西就算是學會了記熟了也沒有太多直接的激勵。但當你工作幾年之後會發現,只要你還在做計算機相關的工作,這些都是繞不開的,當哪天這些知識不經意的幫助到你時你會慶幸當初正確的選擇。

2、資料結構與演算法

演算法方面,演算法和資料結構是計算機學習的基石。無論你學習計算機的任何方向,沒有紮實的演算法和資料結構,肯定學習起來就捉襟見肘了。

資料結構和演算法是內功,這門內功基本上是可以融入到任何語言中去的,甚至是資料庫系統,看一遍你就知道Java中的集合為什麼要這麼設計等,對時間和空間的理解能上升個層次。
程式=資料結構+演算法,不學不要怪別人叫你碼農。

《資料結構與演算法》推薦給大家

3、Java 基礎

這裡大部分的讀者都是 Java 相關,所以這個強相關的技能非常重要。

Java 基礎則是走向 Java 高階的必經之路

這裡拋開基本語法不談,重點討論實際工作中高頻次的東西。

  • 基本容器,如:HashMap、ArrayList、HashSet、LinkedList 等,不但要會用還得了解其中的原理。這樣才能在不同的場景選擇最優的設計。
  • IO、NIO 也是需要掌握。日常開發中大部分是在和磁碟、網路(寫日誌、資料庫、Redis)打交道,這些都是 IO 的過程。
  • 常見的設計模式如:代理、工廠、回撥、構建者模式,這對開發靈活、擴充套件性強的應用有很大幫助。
  • Java 多執行緒是非常重要的特性,日常開發很多。能理解執行緒模型、多執行緒優缺點、以及如何避免。
  • 良好的單測習慣,很多人覺得寫單測浪費時間沒有意義。但正是有了單測可以提前暴露出許多問題,減少測試返工機率,提高程式碼質量。
  • 良好的程式設計規範

《java300集》值得推薦

4、多執行緒應用

有了紮實的基礎之後來談談多執行緒、併發相關的內容。

想讓自己的 title 里加上“高階”兩字肯定得經過併發的洗禮。

這裡談論的併發主要是指單應用裡的場景,多應用的可以看後文的分散式內容。
多執行緒的出現主要是為了提高 CPU 的利用率、任務的執行效率。但並不是用了多執行緒就一定能達到這樣的效果,因為它同時也帶來了一些問題:

  • 上下文切換
  • 共享資源
  • 可見性、原子性、有序性等。

一旦使用了多執行緒那肯定會比單執行緒的程式要變得複雜和不可控,甚至使用不當還會比單執行緒慢。所以要考慮清楚是否真的需要多執行緒。

會用了之後也要考慮為啥多執行緒會出現那樣的問題,這時就需要理解記憶體模型、可見性之類的知識點。

同樣的解決方式又有哪些?各自的優缺點也需要掌握。

談到多執行緒就不得不提併發包下面的內容 java.util.concurrent。

最常用及需要掌握的有:

  1. 原子類:用於併發場景的原子操作。
  2. 佇列。常用於解耦,需要了解其實現原理。
  3. 併發工具,工具使用以及原理。
  4. 線池使用以及相關原理。
  5. 鎖相關內容 的使用及原理。

這一塊的內容可以然我們知道寫 JDK 大牛處理併發的思路,對我們自己編寫高質量的多執行緒程式也有很多幫助。

推薦《Java 併發程式設計的藝術》很好的併發入門書籍。

5、JVM 虛擬機器

想要深入 Java ,JVM 是不可或缺的。對於大部分工作 1~3 年的開發者來說直接接觸這一些內容是比較少的。

到了 3~5 年這個階段就必須得了解了,以下內容我覺得是必須要掌握的:

  • JVM 記憶體劃分,知道哪塊記憶體存放哪些內容;執行緒安全與否;記憶體不夠怎麼處理等。
  • 不同情況的記憶體溢位、棧溢位,以及定位解決方案。
  • 分代的垃圾回收策略。
  • 線上問題定位及相關解決方案
  • 一個類的載入、建立物件、垃圾回收、類解除安裝的整個過程。

掌握這些內容真的對實際分析問題起到巨大幫助。

對此強力推薦 《深入理解Java虛擬機器》,這本書反反覆覆看過好幾遍,每個階段閱讀都有不同的收穫。


6、資料庫

做 WEB 應用開發的同學肯定要和資料庫打不少交道,而且通常來說一個系統最先出現瓶頸往往都是資料庫,說資料庫是壓到系統的最後一根稻草一點也不為過。

所以對資料庫的掌握也是非常有必要。拿網際網路用的較多的 MySQL 資料庫為例,一些必須掌握的知識點:

索引的資料結構及原理、哪些欄位應當建立索引。
針對於一個慢 SQL 的優化思路。
資料庫水平垂直拆分的方案,需要了解業界常用的 MyCAT、sharding-sphere 等中介軟體。
常規使用可以參考《阿里巴巴 Java 開發手冊》中的資料庫章節,想要深入瞭解 MySQL 那肯定得推薦經典的《高效能 MySQL》一書了。

7、懂點架構

相信大家都有一個架構師的夢想。

架構師給人的感覺就是畫畫圖紙,搭好架子,下面的人員來添磚加瓦最終產出。

但其實需要的內功也要非常深厚,就上面列舉的樣樣需要掌握,底層到作業系統、演算法;上層到應用、框架都需要非常精通。(PPT 架構師除外)

首先分散式肯定得掌握,畢竟現在大部分的架構都是基於分散式的。

這其中就得根據 CAP 理論結合專案情況來選擇一致性還是可用性,同時如何做好適合現有團隊的技術選型。

如何學習


現在來聊聊如何學習,這也是被問的最多的一個話題。

而關於學習討論的最多的也是看視訊還是看書?

1、視訊

不得不承認視訊是獲取知識最便捷的來源,畢竟包含了圖、文、聲。

我其實入門看的是高淇老師的java300集剛入門的小夥伴可以試試看哦,在B站是免費的教學視訊,還是2021最新版本呢!

2、看書

當你對最基礎的知識有了一定的瞭解後你再開始看書這時候會有很大的提升,這裡我就不推薦了需要的同學可以看看我其他的文章有寫到哦

3、English 挺重要

再來談談英語的重要性,

別怕自己英語差就學不了程式設計,真正常用的就那些詞語。
這句話雖沒錯,但英語在對 IT 這行來說還是有著極大的加分能力。

拿常見的 JDK 裡的原始碼註釋也是純英文的,如果英語還不錯的話,一些 Spring 的東西完全可以自學,直接去 Spring 官網就可以檢視,甚至後面出的 SpringCloud,官方資料就是最好的教程。

再有就是平時查資料時,有條件的可以嘗試用 Google + 英文 搜尋,你會發現新的世界。

不然也不會有面向 Google/Stack Overflow 程式設計。

英語不好的同學好努力學習學習啦!