1. 程式人生 > >現代Java服務端開發核心技術之互聯網生態下的Java

現代Java服務端開發核心技術之互聯網生態下的Java

any 排行榜 oracl 編寫 工具 令行 招聘 編譯器 排錯

現代Java服務端開發核心技術之互聯網生態下的Java

現代Java服務端開發核心技術

1.1 信息技術發展趨勢

目前信息技術主要經歷了互聯網、移動互聯網以及以大數據、雲計算、物聯網、人工智能、區塊鏈為代表的新興技術三個階段。

  • 互聯網
    互聯網從20世紀90年代逐漸興起,主要是連接了世界各地的筆記本、臺式機以及背後提供後臺數據服務的服務器集群,其中絕大多數筆記本和臺式機都運行著Windows,macOS系統,而服務器主要是以類Unix(CentOS,Ubuntu)占據主要市場優勢,依靠互聯網成長起來的公司有微軟、谷歌、蘋果、亞馬遜、百度、阿裏巴巴、騰訊等等。

  • 移動互聯網
    移動互聯網主要是連接了世界各地的移動設備(最典型的就是手機),它們絕大多數都運行著Android,IOS系統,依靠移動互聯網公司成長起來的有美團、滴滴、小米、螞蟻金服。

  • 雲計算、大數據
    當然隨著用戶數據的爆發式增長,以海量數據為基礎的大數據、雲計算技術在BAT,Apple,Microsoft,Amazon,Google級別的超大型互聯網公司有廣泛的應用場景。

  • 物聯網
    物聯網會以手機為中樞,連接所有智能設備,包括智能家居、汽車、電視等嵌入式設備。

  • 人工智能
    人工智能(AI)作為當前最火爆的技術之一,國內的BAT紛紛開始根據自身核心業務布局,阿裏巴巴最早將人工智能應用在電商和物流領域,而百度開發出了對話時人工智能操作系統Dueros和自動駕駛平臺Apollo,而騰訊則是在遊戲領域應用人工智能

  • 區塊鏈
    而區塊鏈經歷了數字貨幣、智能合約、和超級賬本三個發展階段,區塊鏈技術可以廣泛使用在金融、供應鏈、物流、公共服務領域,解決互聯網的信任問題。
    目前螞蟻金服已經有大量的區塊鏈應用落地。

1.2 淺談計算機系統架構

1.2.1 計算機硬件系統

現代計算機是由運算器、控制器、存儲器、輸入設備、輸出設備五大部分組成,它們各司其職,完成了數據的計算、存儲、傳輸任務,計算機整體架構如下圖所示
技術分享圖片
下面是它們各個組件的功能介紹:

  • CPU:也被稱為中央處理器,由運算器和控制器組成,其主要作用是數據計算(從內存中獲取指令並執行後將結果返回給內存或者寫入到磁盤)和控制其他設備(聲卡顯卡,鼠標鍵盤)協同工作。目前主流的CPU架構有基於Intel的復雜指令集的X86架構(32位和64位)和手機(ARM指令集),服務器(Ultra SPARC指令集)的精簡指令集。CPU通過總線(數據總線、地址總線、控制總線)和外部進行交互。

  • 內存:采用編址存儲,其主要作用是用來作為程序的工作區,程序運行時其數據和指令會被加載到內存,斷電後數據會丟失。

  • 硬盤:其主要作用是永久性存儲海量數據,分為機械式硬盤和固態硬盤兩大類。

  • IO設備:其主要作用是用來數據的輸入輸出,常見的輸入設備包括鼠標鍵盤,常見的輸出設備包含聲卡,顯卡,打印機等等。網卡主要是負責數據在網絡上的傳輸。

在後期程序排錯時除了考慮程序本身的錯誤之外還要考慮計算機硬件故障(例如磁盤被寫滿,網絡不通)等問題。

1.2.2 計算機軟件系統

軟件出現的作用是實現了人和計算機更好的交互,它是由開發人員采用某種編程語言來編寫一系列的指令以及產生的數據組成。

不同平臺的軟件有不同的交互方式:

  • 服務器端:運維開發人員基於命令行的字符界面實現人機交互。
  • PC桌面端:開發人員、普通用戶通常是基於圖形化界面實現人機交互。
  • 移動端:用戶通常是通過語音,手勢觸控實現人機交互。

而軟件通常被分為系統軟件和應用軟件

  • 系統軟件:系統軟件有Unix,Linux,macOS,Windows,Android,IOS,編譯器、數據庫等等。
  • 應用軟件:應用軟件有淘寶、京東、微信、支付寶等等。

通常由操作系統(Windows,Linux,macOS)的內核負責和底層硬件交互,應用軟件運行在操作系統之上。因此操作系統起著承上啟下的作用。

1.2.3 常用應用的軟硬件協作實現

  • 聊天:應用程序監聽鍵盤輸入的數據,放到內存,然後傳給網卡,通過網絡傳遞給另外一個網卡,再從網卡傳到內存,顯示在顯示器上。
  • 聽音樂:應用程序將音樂數據加載到內存之後,然後寫到聲卡上。
  • 看視頻:應用程序將視頻數據加載到內存,然後寫到顯卡上。
  • 讀文檔: 應用程序將磁盤中的文檔數據加載到內存後顯示到屏幕上。
  • 寫文檔: 應用程序將內存中的數據寫入到磁盤上。

1.3 編程語言發展史及其應用場景

1.3.1 程序和指令

程序是為了完成某項特定任務(例如聊天,聽音樂等等)而使用某種編程語言編寫的一組指令序列,而指令是對計算機進行程序控制的最小單位,由操作碼和操作數組成,操作碼指的是機器要執行什麽操作(例如加減乘除),而操作數就是具體執行的對象(具體的數據以及存放數據的位置),所有指令的集合稱為計算機的指令系統,常見的電腦指令系統有Intel X86指令集,常見的手機指令系統有ARM。因此手機上的應用程序不加修改是不能在電腦上直接運行,因為不同的指令集是不兼容的。

1.3.2 編譯器與高級語言

首先明確一點,計算機最底層只能識別二進制(010101)的機器指令,那些由匯編語言或者是高級程序設計語言編寫的應用程序只是為了方便開發人員理解和維護,這就需要將匯編語言和高級語言翻譯成計算機能夠理解的機器語言,而編譯器或者解釋器就是做這個工作的。它的出現讓開發人員在編寫程序時不用考慮底層硬件的差異性,只需要專註業務邏輯的實現即可。

1.3.3 編程語言發展史

任何事物都是從無到有,逐步發展壯大起來的,編程語言也是一樣。

計算機程序設計語言經歷了機器語言到匯編語言和高級程序設計語言三個階段,其特點是使得程序員用編程語言開發、測試、部署應用程序越來越方便、高效。但是是以犧牲效率為代價,但是隨著計算機硬件的發展,絕大多數應用場景的效率損失可以忽略不計。

  • 機器語言
    計算機發展的最早期,程序員編寫程序采用二進制的指令(010010101)來實現的,而每種CPU都有各自不同的指令系統(SPARC/Intel X86/ARM),因此在不同的機器上使用不同的機器語言實現。其特點是性能特別高效,而面向機器編程也就意味著不能移植,需要手動處理底層硬件的差異性,而且二進制的指令難以理解和維護。

  • 匯編語言
    隨著時代和計算機技術的發展,匯編語言和編譯器的出現解決了機器語言需要記住非常多的二進制機器指令的難題,但是還是沒有從根本上解決移植性的問題,只是將機器指令轉換為易懂的英文單詞,然後由編譯器編譯成機器指令,因為計算機終歸揭底只能識別0001110100110機器指令,而且匯編語言是面向機器的,不同機器(SPARC/Intel X86/ARM)的匯編指令是不相同的。

  • 高級程序設計語言
    高級程序設計語言的高級之處體現在開發人員在編寫程序時無需關心計算機底層硬件差異而只需要專註於業務模塊實現即可。甚至是可以實現 一次編譯,到處運行,這裏以Java為例子:通過實現不同平臺的JVM,編譯生成的字節碼文件可以在任意的JVM上運行。
    高級語言通常都需要編譯器或者是解釋器將源碼編譯或者解釋後執行。

高級語言主要分為面向過程和面向對象兩種,其中典型的面向過程語言就是C,面向對象的編程語言有Java,C++等等。

1.3.3 編程語言應用場景

如果想知道目前主流的編程語言有哪些,可以訪問tiobe 首頁獲取編程語言排行榜,如下圖所示,從Tiobe官網獲取最新(2018年10月)的編程語言排行榜的前20名,
技術分享圖片

根據Tiobe排行榜得知,Java/C/C++分別排在前三名, 隨後緊跟著Python,C#,PHP,JavaScript等等,每種語言都有不同的應用場景和擅長的領域,如下表格所示。

編程語言 應用場景
C 硬件驅動、操作系統、系統軟件
C++ 系統軟件、網絡通訊、科學計算
C# Windows應用,Web應用
Java 大型互聯網應用(淘寶、天貓),Android,大數據
Python 人工智能、機器學習、自動化運維、數據分析 、圖形處理
PHP 中小型網站開發
Objective-C/Swift macOS,iPhone,iPad應用開發
JavaScript 瀏覽器端、服務端、PC桌面
Go 高並發、區塊鏈

那麽如果你作為一個野生程序員的初學者,面對如此之多的編程語言,到底應該先從哪門語言上車呢?首先需要明確語言只是實現目標的工具,而非目標本身。
本人建議Java,因為無論是招聘市場需求,還是語言的功能性和應用場景方面,Java首屈一指。

而目前互聯網公司的後臺業務處理通常采用Java/Python/Go去實現,而前端主要包含PC,H5,Android,IOS,微信小程序,主要由基於HTML5+CSS3+JavasScirpt的技術棧實現。

1.4 Java概述

技術分享圖片
Java之父-James Golsing

當人們談論起Java時,它不僅僅是一門優秀的編程語言,還是一個非常流行的開發平臺和運行平臺。

  • 開發平臺:
    經過20多年(1995年正式對外公開發布)的發展已經逐步建立起自己強大的生態體系,在大型互聯網應用開發,移動端Android開發以及大數據開發占據了廣闊的市場,最典型的就是國內互聯網巨頭-阿裏巴巴在其電商、物流、金融、支付等業務場景中大量使用了Java及其相關技術棧(Spring Framework/SpringBoot/SpringCloud)。
  • 運行平臺:
    Java程序是運行在JVM之上的,這就是Java程序跨平臺實現的本質原因,而且由於Java的開放性,有越來越多的語言是運行在JVM之上的,例如大數據處理語言Scala,Android開發的Kotlin。

1.4.1 Java發展簡史

  • 起源
    1991年,Sun公司的James Golsing領導的工程師小組想要開發一種用於像有線電視機頂盒這樣的消費類電子產品的小型計算機語言,該產品的特點是由於不同的廠商選擇不同的CPU和操作系統,因此要求該語言不能和特定的體系結構綁定在一起,也就是跨平臺的。最初將這個語言命名為Oak,然後發現已經有一種語言叫這個名字了,然後改為Java。

  • 流行
    20世紀90年代末,Java趕上了互聯網發展的潮流,而互聯網的特點剛好和消費類嵌入式電子產品類似(不同計算機產商選擇不同的CPU和操作系統),得益於Java的跨平臺特性,可以制作在支持Java的Web瀏覽器內的程序(Applet)而逐漸流行起來。

  • 生態
    由於Java開源,也得到了許多大廠(例如Oracle,IBM)的支持,逐步發展成為具有開源、跨平臺、高性能、支持多線程、分布式、安全可靠等諸多特性的開發平臺,而且自JDK1.4以後湧現出許多開源框架,例如後期會學習的Spring Framework,MyBatis等等,用於簡化開發,同時開發者可以通過閱讀Java和框架的源碼來提高自身的編程功力。

1.4.2 Java程序的運行機制

計算機語言按照運行機制來分來可以分為編譯型和解釋型

  • 編譯型:應用程序通過編譯器將應用程序一次性編譯成特定平臺的機器碼,並鏈接成特定平臺的可執行文件,編譯型的特點是效率高,但是不能移植。C/C++就是編譯型的編程語言。
  • 解釋型:應用程序通過解釋器逐行解釋成特定平臺的機器碼並立即執行,解釋型的特點是效率低,但是可以實現移植。Python,PHP就是解釋型的編程語言。

Java程序的運行機制會同時經過編譯和解釋

  • 編譯:通過JDK(Java Development Kit)提供的javac命令將Java源程序(.java結尾的文件)編譯成和平臺無關的字節碼文件(.class結尾的文件),既然和平臺無關,那麽也就意味著無法脫離開發環境運行。
  • 解釋:首先由JVM的類加載器將字節碼文件加載到JVM內存,然後經過字節碼校驗器校驗之後,由解釋器解釋執行,而這一步驟通過JRE(Java Runtime Enviroment)提供的java命令來實現。

現代Java服務端開發核心技術之互聯網生態下的Java