Java程式設計師必備技能

程式設計師北哥發表於2020-11-07

北哥在前文總結了程式設計師的核心能力,但在專業能力維度,只是做了大概的闡述,並沒有詳細展開。從今天開始,我會把我作為程式設計師成長過程中,學習的知識總結成系列文章陸續發出來,供大家學習參考。

本文是第一篇,關於Java領域的相關技術內容

北哥是java程式設計師出身,寫了有十多年的Java程式碼,這裡的分享是我這些年在java相關領域學習大致路徑。

Java本身是一門程式語言,相比其它的程式語言如c、c++,java在企業級開發中是使用最多的。在包括BAT等網際網路大廠,人員最多的程式設計崗位基本都是Java開發崗。核心在於java豐富的生態和社群,對企業級應用開發良好的支援,以及源源不斷的人才供應。

既然Java是一門程式語言,因此最基礎的程式設計知識是需要掌握的,大部分計算機專業畢業的學生應該都學習過相關課程,這裡做個簡單總結。

01程式設計基礎

最基本的程式設計基礎知識就是資料結構和演算法了。

資料結構方面,常用的包括陣列、棧、佇列、連結串列、二叉樹、紅黑樹、雜湊表、堆、圖等。

這些資料結構基本上都能夠在java的基礎包裡面找到相關實現,我在剛開始學習Java的時候,不知道如何入門,就是研究這些資料結構的Java實現。事實證明,無論在後來接觸什麼樣的框架、中介軟體,深入到原始碼級,這些基礎的資料結構隨處可見。

在演算法層面,需要掌握一些基礎的演算法,常用的有搜尋和排序,像二分搜尋、氣泡排序、選擇排序、插入排序等。這些演算法不僅僅需要了解他們的實現,還需要搞清楚時間複雜度和空間複雜度。除了一些基礎的演算法,還有一些高階演算法例如貪心、揹包、剪枝、動態規劃等,這些高階演算法會在大資料、人工智慧和演算法領域被頻繁的應用。

資料結構之外,另外一個程式設計方面的基礎知識是作業系統和網路相關內容。

在作業系統方面,最基本的需要對程式、執行緒、記憶體管理等有一定的掌握。

網路方面,核心的就是TCP/IP協議,當然HTTP協議也是必學必會的知識。

以上說的都是一些程式設計的基礎知識。掌握了這些程式設計的基礎知識,就可以邁入Java開發的大門了。接下來就重點看下Java相關的基礎技術體系。

02 Java基礎技術

首先,要對Java語言的所具備的基礎特性有了解,比如物件導向、繼承、內部類、反射、泛型、序列化、引用、異常等。

其次,進入到對java的核心類庫(Java core)的學習,需要做到非常熟悉甚至精通,理解他們背後的實現原理,這部分的核心是Java集合類、java.lang、http://java.io包下面的相關類等。

第三,掌握了Java core相關類庫後,就需要深入到jvm層面學習。包括類載入機制,GC的演算法原理和調優,不同種類的垃圾收集器的區別等等。在後面進入到真正的企業級開發過程中,遇到的許多問題都是需要深入到jvm層面研究相關引數和資訊才能發現和解決。

第四,真正的企業級開發都會涉及到多執行緒和網路程式設計。多執行緒相關內容包括執行緒、執行緒池、併發程式設計等,特別是java.util.concurrent包下的相關類是必須要掌握的。網路程式設計包括基於tcp、udp通訊的,主要需要了解socket程式設計相關內容,另外就是基於http相關的Java web程式設計相關,主要是jsp和servlet相關技術,不過隨著前後端分離的原因,目前已經很少使用jsp了。

第五,企業級開發一般都離不開資料庫,Java和資料庫相關的技術主要是jdbc,也有一些場景的資料庫連線池的框架如c3p0、dbcp等技術。

最後,寫完程式碼後,程式設計師都需要做一些自測,常用的單元測試框架如junit、testng、mockito等也是必須要熟悉的。

 

03 開發框架

掌握了Java基礎的技術後,並不意味著通過這些技術就能夠很好的完成企業級應用的開發,利用一些成熟的框架可以大幅提高程式設計的效率。

在10年前,比較流行的Java相關的開發框架主要是ssh,包括spring、struts2和hibernate,隨著技術的迭代更新, 這些框架也不斷升級換代,目前在企業中大部分使用的框架是spring+springMVC+mybatis。隨著近幾年網際網路和移動網際網路的發展,高併發大流量系統越來越常見,對系統效能要求也不斷提高,微服務和快取系統也成為標配,相關的技術框架主要是spring cloud全家桶和springboot。當然類似dubbo這種RPC框架在企業中也使用的較多。而快取系統使用比較多的是redis、memcache等。

為了排查問題,正常的企業應用系統都需要記錄日誌,常用的框架有slf4j、log4j、logback等。

除此之外,還有工作流開發場景會使用到的框架如jbpm、activiti等,許可權控制開發場景會使用到的框架如shiro,處理郵件相關的Java mail等。

使用這些應用框架開發出的應用,在真正提供服務前,還需要部署到機器上,這時就少不了應用伺服器來支撐服務的部署。目前大部分的網際網路公司都採用tomcat或jboss等輕量級的應用伺服器部署應用,還有相對複雜一些的企業級應用伺服器如weblogic、websphere等。另外為了做好負載均衡,還需要將應用伺服器配合nginx等做反向代理一起使用 。

04 工具系統

工欲善其事,必先利其器。Java領域也有一些常用的工具和支撐類的系統。如Java開發工具,現在用的比較多是idea和eclipse。

程式碼版本管理工具svn和git,不過目前svn已經極少使用了,大部分企業會使用gitlab結合git來做程式碼倉庫管理。

包依賴的管理工具maven,以及管理Java包倉庫的nexus和artifactory。

另外如果需要做持續整合和持續釋出使用的jenkins等

以上這些只是北哥這些年在Java相關領域學習的相關技術內容的一部分,實際的開發過程中,還會有大量的相關技術涉及到,這裡就不再詳細描述。管中窺豹,也希望能夠給新入門的同學一些幫助。

如果你有其它想法,也歡迎與我交流。

相關閱讀

聊聊程式設計師的核心能力


我是程式設計師北哥,一個資深程式設計師,架構師,團隊管理者。先後經歷過程式設計師、技術經理、架構師、技術專家和團隊技術總監等多個身份變化,也經歷過數個產品從0到1的打造。
在這裡會分享我的一些工作經歷、思考和總結。偶爾也會發發感悟、隨想和讀書筆記。希望這些能對您有所啟發。
歡迎關注公眾號:程式設計師北哥。

相關文章