Java后端程序員都做些什么?


這個問題來自於QQ網友,一句兩句說不清楚,索性寫個文章。

我剛開始做Web開發的時候,根本沒有前端,后端之說。

原因很簡單,那個時候服務器端的代碼就是一切:接受瀏覽器的請求,實現業務邏輯,訪問數據庫,用JSP生成HTML,然后發送給瀏覽器。

即使后來Javascript在瀏覽器中添加了一些AJAX的效果,那也是錦上添花,絕對不敢造次。因為頁面的HTML主要還是用所謂“套模板”的方式生成:美工生成HTML模板,程序員用JSP,Veloctiy,FreeMaker等技術把動態的內容添加上去,僅此而已。

那個時候最流行的圖是這個樣子:

image

在最初的J2EE體系中,這個表示層可不僅僅是瀏覽器中運行的頁面,還包括Java寫的桌面端,只是Java在桌面端太不爭氣, 沒有發展起來。

每個程序員都是所謂“全棧”工程師,不僅要搞定HTML, JavaScript, CSS,還要實現業務邏輯,編寫訪問數據庫的代碼。等到部署的時候,就把所有的代碼打成一個WAR包,往Tomcat指定的目錄一扔,測試一下沒問題,收工回家!

不差錢的公司會把程序部署到Weblogic,Websphere這樣的應用服務器中,還會用上高大上的EJB。

雖然看起來生活“簡單”又“愜意”,但實際上也需要實現那些多變的、不講邏輯的業務需求,苦逼的本質並沒有改變。

1. 前后端的分離

隨着大家對瀏覽器頁面的視覺和交互要求越來越高,“套模板”的方式漸漸無法滿足要求,這個所謂的表示層慢慢地遷移到瀏覽器當中去了,一大批像Angular, ReactJS之類的框架崛起,前后端分離了!

后端的工程師只負責提供接口和數據,專注於業務邏輯的實現,前端取到數據后在瀏覽器中展示,各司其職。

像Java這樣的語言很適合去實現復雜的業務邏輯,尤其是一些MIS系統,行業軟件如稅務、電力、煙草、金融,通信等等。  所以剝離表示層,只做后端挺合適的。 

但是如果僅僅是實現業務邏輯,那后端也不會需要這么多技術了,搞定SSH/SSM就行了。 

2. 后端技術

互聯網,尤其是移動互聯網開始興起以后,海量的用戶呼嘯而來,一個單機部署的小小War包肯定是撐不住了,必須得做分布式。 

原來的單個Tomcat得變成Tomcat的集群,前邊弄個Web服務器做請求的負載均衡,不僅如此,還得考慮狀態問題,session的一致性。

業務越來越復雜,我們不得不把某些業務放到一個機器(或集群)上,把另外一部分業務放到另外一個機器(或集群)上,雖然系統的計算能力,處理能力大大增強,但是這些系統之間的通信就變成了頭疼的問題,消息隊列(MQ),RPC框架(如Dubbo)應運而生,為了提高通信效率,各種序列化的工具(如Protobuf)也爭先空后地問世。

單個數據庫也撐不住了,那就做數據庫的讀寫分離,如果還不行,就做分庫和分表,把原有的數據庫垂直地切一切,或者水平地切一切, 但不管怎么切,都會讓應用程序的訪問非常麻煩,因為數據要跨庫做Join/排序,還需要事務,為了解決這個問題,又有各種各樣“數據訪問中間件”的工具和產品誕生。

為了最大程度地提高性能,緩存肯定少不了,可以在本機做緩存(如Ehcache),也可以做分布式緩存(如Redis),如何搞數據分片,數據遷移,失效轉移,這又是一個超級大的主題了。

互聯網用戶喜歡上傳圖片和文件,還得搞一個分布式的文件系統(如FastDFS),要求高可用,高可靠。

數據量大了,搜索的需求就自然而然地浮出水面,你得弄一個支持全文索引的搜索引擎(如Elasticsearch ,Solr)出來。

林子大了,什么鳥都有,必須得考慮安全,數據的加密/解密,簽名、證書,防止SQL注入,XSS/CSRF等各種攻擊。

3. “大后端”

前面提到了這么多的系統,還都是分布式的,每次上線,運維的同學說:把這么多系統協調好,把老子都累死了。

得把持續集成做好,能自動化地部署,自動化測試(其實前端也是如此),后來出現了一個革命化的技術docker, 能夠讓開發、測試、生成環境保持一致,系統原來只是在環境(如Ngnix, JVM,Tomcat,MySQL等)上部署代碼,現在把代碼和環境一並打包, 運維的工作一下子就簡化了。

公司自己購買服務器比較貴,維護也很麻煩,又難於彈性地增長,那就搞點虛擬的服務器吧,硬盤、內存都可以動態擴展(反正是虛擬的), 訪問量大的時候多用點,沒啥訪問量了就釋放一點,按需分配,很方便,這就是雲計算的一個場景。

隨着時間的推移,各個公司和系統收集的數據越來越多,都堆成一座大山了,難道就放在那里白白地浪費硬盤空間嗎?

有人就驚奇地發現,咦,我們利用這些數據搞點事情啊, 比如把數據好好分析一下,預測一下這個用戶的購買/閱讀/瀏覽習慣,給他推薦一點東西嘛。

可是這么多數據,用傳統的方式計算好幾天甚至好幾個月才能出個結果,到時候黃花菜都涼了,所以也得利用分布式的技術,想辦法把計算分到各個計算機去,然后再把計算結果收回來, 時勢造英雄,Hadoop及其生態系統就應運而生了。

之前聽說過一個大前端的概念,把移動端和網頁端都歸結為“前端”,我這里造個詞“大后端”,把那些用戶直接接觸不到的、發生在服務器端的都歸結進來。

4. 怎么學?

現在無論是前端還是后端,技術領域多如牛毛,都嚴重地細分了,所以我認為真正的全棧工程師根本不存在,因為一個人精力有限,不可能搞定這么多技術領域,太難了。

培訓機構所說的“全棧”,我認為就是前后端還在拉拉扯扯,藕斷絲連,沒有徹底分離的時候的“全棧”工程師。

那么問題來了, 后端這么多東西,我該怎么學?

Java后端學習流程

首先,我個人比較推崇的學習方法是:先學java前端,也就是HTML,css,js,因為學習java以后肯定是往java ee方向發展的,學習完前端,在學習后端很多東西比計較容易理解!

其中J2SE是關鍵,如果學好了java se 部分,基礎扎實了,后面進階學習也比較輕松!

補充說明一下:我覺得學習java比較合適的方法是先把所有的知識點過一遍,然后把所有的知識點串起來,邊做開發邊補充,就像寫文章一樣,先寫好框架,然后再去潤色填充。因為前期在學習的時候你不知道用在哪里,不知道用途,沒有學習的目的,所以很多概念就很難理解,時間久了也容易遺忘。但是如果你直接從實踐開始學習,很多知識點都充串聯起來了,而且會印象深刻,當然前提條件是你已經入門,已經能寫一些簡單的程序,我個人現在也是按照這個方式在學習了,感覺很有效。

說明:本文介紹的內容過於詳盡,這里我補充一些基本的學習路線,相對比較簡略,但是比較可行:

  1. 基礎語法。也就是我們常說,各種編程語言都有的部分,數據類型,數組,for循環,do-while,switch……等等,是學習任何編程語言的基礎,很關鍵;

  2. 面對對象:①類和對象;②Java的三大特性(封裝、繼承、多態);

  3. 工具類:①異常和異常處理;②集合框架(主要是List和Map);

  4. 常用的流(stream):①輸入流;②輸出流;③緩沖流;

  5. 網絡與線程:①Socket ; ②多線程(Thread,Runnable);

  6. 數據操作:①Mysql、Oracle; ②JDBC;

  7. web基礎:①Html/css;②Javascript;③JQuery;

  8. 框架。

只要學會上面的前7條,基本上從前台到后台開發常見的應用還是沒太大問題的,當然學習了框架以后,那就最好了,但關鍵還是要學好基礎,說實話,像下面這個表格中所列的知識點,真正能全面掌握還是有難度的,所以凡事還是要踏踏實實的靜下心學習,不要只看學習的進度,要看學習的效果。

第一階段

技術名稱

技術內容

J2SE
(java基礎部分)

java開發前奏

計算機基本原理,Java語言發展簡史以及開發環境的搭建,體驗Java程序的開發,環境變量的設置,程序的執行過程,相關反編譯工具介紹,java開發工具Eclipse的安裝和使用,javadoc的說明。

Java基礎語法

Java語法格式,常量和變量,變量的作用域,方法和方法的重載,運算符,程序流程控制,數組和操作數組的類,對數組循環遍歷以及針對數組的常用查找、排序算法原理,最后使用Java程序進行功能實現。

面向對象編程

理解對象的本質,以及面向對象,類與對象之間的關系,如何用面向對象的思想分析和解決顯示生活中的問題,並java程序的手段編寫出來。
如何設計類,設計類的基本原則,類的實例化過程,類元素:構造函數、this關鍵字、方法和方法的參數傳遞過程、static關鍵字、內部類,Java的垃圾對象回收機制。
對象的三大特性:封裝、繼承和多態。子類對象的實例化過程、方法的重寫和重載、final關鍵字、抽象類、接口、繼承的優點和缺點。

對象的多態性:子類和父類之間的轉換、父類指向子類的引用、抽象類和接口在多態中的應用、多態優點。常用設計模式如單利、模版等模式。什么是異常 異常的捕捉和拋出 異常捕捉的原則 finally的使用,package的應用 import關鍵字。

多線程應用

多線程的概念,如何在程序中創建多線程(Thread、Runnable),線程安全問題,線程的同步,線程之間的通訊、死鎖問題的剖析。

javaAPI詳解

JavaAPI介紹、String和StringBuffer、各種基本數據類型包裝類,System和Runtime類,Date和DateFomat類等。
常用的集合類使用如下:Java Collections Framework:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、TreeMap、Iterator、Enumeration等常用集合類API。

IO技術

什么是IO,File及相關類,字節流InputStream和OutputStream,字符流Reader和Writer,以及相應緩沖流和管道流,字節和字符的轉化流,包裝流,以及常用包裝類使用,分析java的IO性能。

網絡編程

Java網絡編程,網絡通信底層協議TCP/UDP/IP,Socket編程。網絡通信常用應用層協議簡介:HTTP、FTP等,以及WEB服務器的工作原理。

java高級特性

遞歸程序,Java的高級特性:反射、代理和泛型、枚舉、Java正則表達式API詳解及其應用。

 

第二階段

技術名稱

技術內容

數據庫技術

Oracle 基礎管理

Oracle背景簡介,數據庫的安裝,數據庫的用戶名和密碼,客戶端登錄數據庫服務SQLPLUS,數據庫基本概。

SQL語句

數據庫的創建,表的創建,修改,刪除,查詢,索引的創建,主從表的建立,數據控制授權和回收,事務控制,查詢語句以及運算符的詳解,sql中的函數使用。

多表連接和子查詢

等值和非等值連接,外連接,自連接;交叉連接,自然連接,using子句連接,完全外連接和左右外連接,子查詢使用以及注意事項。

觸發器、存儲過程

觸發器和存儲過程使用場合, 通過實例進行詳解。

數據庫設計優化

WHERE子句中的連接順序,選擇最有效率的表名順序,SELECT子句中避免使用 ‘ * ‘ 計算記錄條數等等。

數據備份與移植

移植技巧,備份方案;導入導出等。

 

第三階段

技術名稱

技術內容

jdbc技術

JDBC基礎

JDBC Connection、Statement、PreparedStatement、CallableStatement、ResultSet等不同類的使用。

連接池技術

了解連接池的概念,掌握連接池的建立、治理、關閉和配置。

ORM與DAO封裝

對象關系映射思想,jdbc的dao封裝,實現自己的jdbc。

可以把第四階段的知識提前一點,特別是對哪些剛開始接觸面向對象編程的同學,我剛開始就學java se,感覺入門很不容易。先學web部分,有利於理解面向對象的概念,另外,web部分相對比較簡單,也比較直觀,寫完直接就可以看見效果,有助於提升大家的學習積極性。

第四階段

技術名稱

技術內容

web基礎技術
(項目實戰)

Xml技術

使用jdom和dom4j來對xml文檔的解析和生成操作,xml 的作用和使用場合。

html/css

Java掌握基本的html標簽的格式和使用,css層疊樣式表對div的定義,實現對網站布局的基本實現。

Javascript

了解javascript的基本語法以及相關函數的使用,並結合html頁面實現流程控制和頁面效果展示。
什么是異常 異常的捕捉和拋出 異常捕捉的原則 finally的使用,package的應用 import關鍵字。

jsp/servlet

Servlet和SP 技術、上傳下載、 Tomcat 服務器技術、servlet 過濾器和監聽器。

jstl和EL

JSTL核心標簽庫、函數標簽庫、格式化標簽庫、自定義標簽技術、EL表達式在jsp頁面的使用。

ajax及框架技術

了解和屬性原生態的ajax的使用,ajax使用的場合,使用ajax的好處,ajax框架jquery渲染頁面效果和相關的強大的第三方類庫,dwr如何和后台服務進行數據傳輸,以及頁面邏輯控制等。

JSON高級應用

Java使用json支持的方式對字符串進行封裝和解析,實現頁面和java后台服務的數據通信。

Fckeditor編輯器

FCKEditor在線編輯器技術、配置、處理圖片和文件上傳。

javaMail技術

了解域名解析與MX記錄、電子郵件工作原理、郵件傳輸協議:SMTP、POP3、IMAP、郵件組織結構:RFC822郵件格式、MIME協議、郵件編碼、復合郵件結構分析、JavaMail API及其體系結構、編程創建郵件內容:簡單郵件內容、包含內嵌圖片的復雜郵件、包含內嵌圖片和附件的復雜郵件。

JfreeChart報表

統計報表;圖表處理。

BBS項目實戰

采用Jquery+dwr+jsp+servlet+Fckeditor+JfreeChart+tomcat+jdbc(oracle) 完成BBS項目的實戰。

實戰價值

學完此課程你至少已經是擁有近1年開發經驗的程序員了,但是你不應該滿足現狀,下面的課程會更加吸引你!

 

第五經典階段

技術名稱

技術內容

web主流框架技術
(項目實戰)

struts2.x

struts2框架的工作原理和架構分析,struts-default.xml與default.properties文件的作用,struts。Xml中引入多個配置文件。OGNL表達式、Struts2 UI和非UI標簽、輸入校驗、使用通配符定義action、動態方法調用、多文件上傳、自定義類型轉換器、為Action的屬性注入值、自定義攔截器、異常處理、使用struts2實現的CRUD操作的案例。

hibernate3.x

Hibernate應用開發基礎; ORM基礎理論; 關系映射技術; 性能調優技術; 性能優化 一級緩存 二級緩存 查詢緩存 事務與並發 悲觀鎖、樂觀鎖。

spring3.x

Spring IoC技術; Spring AOP技術; Spring 聲明事務管理; Spring 常用功能說明,spring3.0的新特性, Spring整合struts2和hibernate3的運用。

Log4j和Junit

Logging API; JUnit單元測試技術; 壓力測試技術:badboy 進行測試計划跟蹤獲取以及JMeter壓力測試。

在線支付技術

完成支付寶的支付接口的在線支付功能。

電子商務網實戰

采用spring3+hibernate3+struts2+jquery+dwr+FckEditor+tomcat 完成電子商務網站實戰開發。

實戰價值

項目實戰價值完全高標准的高要求的迎合企業的需求,學完此課程,全部消化了,你已經就是一個地地道道的高級程序員,已經為你的職業生涯鋪平了道路,你還等什么,向着高薪沖刺吧!

 

第六進階階段

技術名稱

技術內容

web高級進階
(項目實戰)

openJpa技術

JPA介紹及開發環境搭建、單表實體映射、一對多/多對一、一對一、多對多關聯、實體繼承、復合主鍵、JPQL語句、EntityManager API、事務管理,了解一下jpa2.0的新特性以及應用。

lucene搜索引擎

了解全文搜索原理、全文搜索引擎、什么是OSEM、OSEM框架Compass、基於使用Lucene使用Compass實現全文增量型索引創建和搜索、探索Lucene 3.0以及API。

電子商務網重構

此項目采用了Lucene+compass+openJpa+上一版電子商務網站的技術進行重構。

實戰價值

此項目的實戰價值是前所未有的超值,已經超越了企業的實際要求,你已經是企業的搶手人才,一旦進入企業,便讓你立於不敗之地,輕松成為公司的技術骨干和精英,技術已經改變了你一生!

Excel/PDF文檔處理技術

java對excel和pdf文檔分別利用poi和itext來進行解析和生成。此技術在企業級系統的報表中經常使用。

OA工作流技術JBPM

工作流是什么、JBPM介紹、JBPM的主要用法、各類節點的用法、任務各種分派方式、JBPM的整體架構原理、工作流定義模型分析、運行期工作流實例模型分析、數據庫表模型分析、流程定義管理、流程實例監控、對JBPM的相關接口進行封裝,構建自己的工作流應用平台等。

WebService技術

WebService技術原理、WebService技術的應用、Soap服務的創建與管理、WSDL描述文檔規范、UDDI 注冊中心運行原理;使用Axis和Xfire創建WEB服務、Webservice客戶端的編寫、使用TCPMonitor監聽SOAP協議、異構平台的整合。

Linux技術

Linux 系統安裝,卸載、linux 使用的核心思想、linux下的用戶管理,文件管理,系統管理、程序的安裝,使用,卸載。linux下作為server的基本應用:web服務器,j2ee服務器,ftp服務器的安裝和項目的部署。

CRM項目實戰

此項目能了解和熟悉客戶關系管理的基本流程以及功能的實現,采用上面幾個階段學到的主流框架實現,同時加入了JBPM的技術。

實戰價值

學完這個系統會讓你輕松進入企業級的大型項目的開發,倍感得心應手。完備的知識體系和最前沿的開發技術,帶給你的將是在精神上不同目光的瞻望和物質上高薪資回報的喜悅,帶你進入人生的新的轉折點和起點!

 

第七架構階段

技術名稱

技術內容

大型高並發網站優化方案
(項目實戰)

如何構建一個高性能網站詳解

什么樣的網站需要高性能,高性能的指標體系,構建高性能網站需要做哪些工作,注意哪些細節。

SSI技術

什么是SSI,使用他有什么好處,什么樣的系統才使用SSI,SSI技術詳解和使用,應用到項目中。

生成靜態頁技術

什么是靜態頁,為什么需要靜態頁以及帶來的好處,生成靜態頁的模版技術Velocity和Freemark,生成靜態頁的訪問規則等。

緩存技術

為什么使用緩存技術,oscache緩存技術的介紹和使用,memcached緩存技術的介紹和使用、兩者緩存技術的比較和如何去使用。

經典web服務器

什么是web服務器,什么是javaweb服務器,他們存在什么關系,當前技術主流中常用的web服務器有哪些, web服務器apache和nginx的應用。

nginx架構實戰

什么是反向代理,負載均衡以及集群,在nginx中如何實現這些高性能的系統架構。

實戰價值

此課程已經將你領入了技術經理和主管以及架構師的門檻了,稍微用心學習加上實戰你就是技術牛人了,薪水非常高,同時很快你就是公司的技術中層管理者,你的人生就此又一次的發生巨大的轉折!

如果你把上面這些東西全部掌握了,那不用說你已經算是java界比較NB的人了,因為一般能掌握這些知識的人,基本上有5-10年的工作經驗,不過也不好說,說不定你就是那個天才呢,加油吧少年!

往深度挖掘,可以成為某個技術領域的專家,如搜索方面的專家、安全方面的專家,分布式文件的專家等等,不管是哪個領域,重點都不是學會使用某個工具和框架, 而是保證你可以自己的知識和技術去搞定這個領域的頂尖問題。

往廣度發展,各個技術領域都要了解,對於某種需求,能夠選取合適的軟件和技術架構來實現它,把需求轉化成合適的技術組件,讓這些組件以合適的方式連接、部署、運行,這也需要持續地學習和不斷的經驗積累。

最后,以一張漫畫來結束吧!

后端是你看不到的那條“巨龍”

(完)

我有一個微信公眾號,經常會分享一些Java技術相關的干貨。如果你喜歡我的分享,可以用微信搜索“Java團長”或者“javatuanzhang”關注。


免責聲明!

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



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