1. 程式人生 > 其它 >程式設計師最常用技術棧和工具集合

程式設計師最常用技術棧和工具集合

2021Java 程式設計師最常用技術棧和工具集合(建議收藏)

老炮說Java
釋出於 2021-02-02
歡迎微信搜尋公眾號【java版web專案】獲取資源:java學習視訊/設計模式筆記/演算法手冊/java專案

作為一枚Java程式設計師,需要掌握哪些技術和工具才能完成一個JavaWeb專案呢?今天羅列一些常用技術和工具,這些技術都是我這10年工作中用的比較多的,我知道技術棧遠不止這些,本人只列自己熟悉和用的最多的,完成一個專案絕對夠用了。說這麼多技術不是讓大家都要熟悉,有些太老的現在也用的少了甚至不用了,本人主要結合我這10年開發經驗告訴大家JavaWeb的常用技術棧。

下面這張是技術棧思維導圖:

技術棧
什麼是技術棧?
舉個例子:
開發一個普通管理系統,會用到Sprin Boot+MyBatis+Spring+Mysql+Redis+RabbitMq+Nginx+Vue+Shiro+html+等等,這些技術合起來就可以稱為技術棧。

我將技術棧大致分為5大塊:前端、後端、中介軟體、資料庫和工具。

前端

JSP
JSP全稱Java Server Pages,是一種動態網頁開發技術。它使用JSP標籤在HTML網頁中插入Java程式碼。

JSP本質上是一個servlet,主要用於實現Java web應用程式的使用者介面部分。

第一個JSP程式 <% out.println("Hello World!"); %> JSP這種網頁技術我猜5年以下的程式設計師基本沒接觸過,10年前我接觸的專案前端基本都是採用的JSP技術,jsp配合各種html+jquery/JavaScript+css完成前端頁面開發。

前端框架
DWZ、EasyUI、EXT、BootStrap、KendoUI 都是基於基於 HTML、CSS、JavaScript/jquery的一些富文字客戶端UI框架,在當時簡直是後端開發人員的福音。這些框架最大的特點就是官網上提供了各種元件的使用方法,後端人員只要套到JSP頁面中,進行資料渲染即可。這些UI框架風格基本已經固定,更適合開發一些管理類系統,都包括:強大的資料來源,通用的拖拉(Drag-and-Drop)功能,模板,和UI控制元件。

IE
是中國人自己開發的基於jQuery實現的Ajax RIA開源框架,設計目標是簡單實用,快速開發,降低ajax開發成本。

官網:https://jui.org/

EasyUI
easyui是一種基於jQuery的使用者介面外掛集合,為建立現代化,互動,JavaScript應用程式,提供必要的功能。使用easyui你不需要寫很多程式碼,你只需要通過編寫一些簡單HTML標記,就可以定義使用者介面,為網頁開發的時間和規模。

官網;http://www.jeasyui.com/

分機
ExtJS是基於YUI(雅虎使用者介面)的sencha的JavaScript框架和產品,它基本上是具有現代UI的桌面應用程式開發平臺。

中文官網:http://extjs-doc-cn.github.io...

引導帶
bootstrap是Twitter推出的一個用於前端開發的開源工具包

中文官網:https://www.bootcss.com/

劍道UI
是一套 JavaScript 函式庫,提供抽象化、可自訂主題的 GUI 控制項與動畫效果。基於 jQuery JavaScript 函式庫,可用來建構互動式的 Web 應用

官網:http://www.kendoui.io/

自由標記
FreeMarker是一個免費的模板引擎,一個基於模板生成文字輸出的通用工具,使用純Java編寫的,用來生成HTML Web頁面,特別是基於MVC模式的應用程式。通常由Java程式準備要顯示的資料,由FreeMarker生成頁面,通過模板顯示準備的資料(如下圖)

FreeMarker不是一個Web應用框架,FreeMarker與容器無關,也可以在模板中使用JSP標記庫。

< html >
< head >
< title >歡迎!</ title >
</ head >
< body >
< h1 >歡迎$ {user} !
< / h1 > < p >我們
的最新
產品: $ { latestProduct.name } ! _ </正文> <
html
上面很多前端框架都是基於html的,需要你有js/jq、css基礎,這是所有前端框架的基礎。因為光框架有時並不能滿足我們的需求,有時需要對框架無法實現的功能需要在框架基礎上調整;還有這個飛速發展的網際網路時代,對前端的要求越來越高,原生html得到了快速發展,基本所有前端效果使用原生時可以實現的。

看法
vue.js 使用了基於 HTML 的模板語法,允許開發者宣告式地將 DOM 繫結至底層 Vue 例項的資料。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循規範的瀏覽器和 HTML 解析器解析。

在底層的實現上,Vue 將模板編譯成虛擬 DOM 渲染函式。結合響應系統,Vue 能夠智慧地計算出最少需要重新渲染多少元件,並把 DOM 操作次數減到最少。

VUE+elementUI目前使用最多的,尤其是開發一些後臺管理系統還是比較簡單便捷的。

後端

小服務程式
servlet是Server Applet的簡稱,翻譯過來就是服務程式,簡單的講就是是執行在伺服器上的一個小程式,用來處理伺服器請求的。我們通過瀏覽器訪問一個應用,在這個過程中,我們的瀏覽器傳送訪問請求,伺服器接收請求,並對瀏覽器的請求作出相應的處理,這就是我們熟悉的B/S模型(瀏覽器-伺服器模型).而servlet就是對請求作出處理的元件,運行於支援Java的應用伺服器中。如圖如是:

支柱
struts主要是指struts1和struts2,是經典的MVC框架,除去一些老專案,現在用的越來越少了。但struts1和struts2還是有區別的,主要區別二者本質不一樣。

struts1:通過採用Java Servlet/JSP技術,實現了基於Java EE Web應用的Model-View-Controller(MVC)設計模式的應用框架,是MVC經典設計模式中的一個經典產品。

struts2:以WebWork為核心,採用攔截器的機制來處理使用者的請求,這樣的設計也使得業務邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解為WebWork的更新產品。

最經典的組合strutsMVC+SPring+Hibernate,號稱SSH,當年都是面試必問的技術。

春天
Spring框架是一個開源Java應用框架,解決了開發者在開發中遇到的許多常見的問題,提供了功能強大IOC、AOP及Web MVC等功能。Spring可以單獨應用於應用程式,也可以和Struts、Webwork等眾多Web框架組合使用。Spring框架主要由七部分組成,分別是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。

持久層框架
資料庫
JDBC(Java Data Base Connectivity,java資料庫連線)是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。JDBC提供了一種基準,據此可以構建更高階的工具和介面,使資料庫開發人員能夠編寫資料庫應用程式。

早期專案大部分都是通過對JDBC封裝來操作資料庫,實現增刪改查,對效能考慮也不多,隨時間推移不斷衍生出很多框架,例如:mybatis,hibernate等。

伊巴蒂斯
iBATIS一詞來源於“internet”和“abatis”的組合,是一個由Clinton Begin在2001年發起的開放原始碼專案。最初側重於密碼軟體的開發,現在是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO),同時還提供一個利用這個框架開發的JPetStore例項。

iBATIS 目前提供了三種語言實現的版本,包括:Java、.NET以及Ruby。

米巴蒂斯
MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。

MyBatis 是一款優秀的持久層框架,它支援定製化SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。

MyBatis-Plus
Mybatis 增強工具包 - 只做增強不做改變,簡化CRUD操作

JPA
JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0註解或XML描述物件-關係表的對映關係,並將執行期的實體物件持久化到資料庫中。

Sun引入新的JPA ORM規範出於兩個原因:其一,簡化現有Java EE和Java SE應用開發工作;其二,Sun希望整合ORM技術,實現天下歸一。

彈簧靴
SpringBoot是由Pivotal團隊在2013年開始研發、2014年4月釋出第一個版本的全新開源的輕量級框架。它基於Spring4.0設計,不僅繼承了Spring框架原有的優秀特性,而且還通過簡化配置來進一步簡化了Spring應用的整個搭建和開發過程。另外SpringBoot通過整合大量的框架使得依賴包的版本衝突,以及引用的不穩定性等問題得到了很好的解決。

分散式/微服務
春雲
Spring Cloud 為開發者提供了在分散式系統(如配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、一次性 Token、全域性鎖、決策競選、分散式會話和叢集狀態)操作的開發工具。使用 Spring Cloud 開發者可以快速實現上述這些模式。

Spring Cloud 的 GitHub 主頁:https://github.com/spring-cloud

達博
Dubbo 是阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring 框架無縫整合。

主要核心部件:

Remoting: 網路通訊框架,實現了 sync-over-async 和 request-response 訊息機制

RPC: 一個遠端過程呼叫的抽象,支援負載均衡、容災和叢集功能

Registry: 服務目錄框架用於服務的註冊和服務事件釋出和訂閱

春天雲阿里巴巴
Spring Cloud Alibaba 致力於提供分散式應用服務開發的一站式解決方案。此專案包含開發分散式應用服務的必需元件,方便開發者通過 Spring Cloud 程式設計模型輕鬆使用這些元件來開發分散式應用服務。

依託 Spring Cloud Alibaba,您只需要新增一些註解和少量配置,就可以將 Spring Cloud 應用接入阿里分散式應用解決方案,通過阿里中介軟體來迅速搭建分散式應用系統。

安全框架
四郎
Apache Shiro 是 Java 的一個安全框架。目前,使用 Apache Shiro 的人越來越多,因為它相當簡單,對比 Spring Security,可能沒有 Spring Security 做的功能強大,但是在實際工作時可能並不需要那麼複雜的東西,所以使用小而簡單的 Shiro 就足夠了。對於它倆到底哪個好,這個不必糾結,能更簡單的解決專案問題就好了。

春季安全
Spring Security是一個能夠為基於Spring的企業應用系統提供宣告式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉Inversion of Control ,DI:Dependency Injection 依賴注入)和AOP(面向切面程式設計)功能,為應用系統提供宣告式的安全訪問控制功能,減少了為企業系統安全控制編寫大量重複程式碼的工作。

oauth2.0
OAuth(開放授權)是一個開放標準,允許使用者讓第三方應用訪問該使用者在某一網站上儲存的私密的資源(如照片,視訊,聯絡人列表),而無需將使用者名稱和密碼提供給第三方應用。

OAuth 2.0 是目前比較流行的做法,它率先被Google, Yahoo, Microsoft, Facebook等使用。之所以標註為 2.0,是因為最初有一個1.0協議,但這個1.0協議被弄得太複雜,易用性差,所以沒有得到普及。2.0是一個新的設計,協議簡單清晰,但它並不相容1.0,可以說與1.0沒什麼關係。

專案管理
行家
Maven 是 Apache 下的一個純 Java 開發的開源專案。利用一箇中央資訊片斷能管理一個專案的構建、報告和文件等步驟。是一個專案管理工具,可以對 Java 專案進行構建、依賴管理。

螞蟻
ant 是一個將軟體編譯、測試、部署等步驟聯絡在一起加以自動化的一個工具,大多用於Java環境中的軟體開發。在實際軟體開發中,有很多地方可以用到ant。

畢業典禮
Gradle是一個基於Apache Ant和Apache Maven概念的專案自動化構建開源工具。它使用一種基於Groovy的特定領域語言(DSL)來宣告專案設定,目前也增加了基於Kotlin語言的kotlin-based DSL,拋棄了基於XML的各種繁瑣配置。

伺服器軟體
雄貓
Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP 程式的首選

阿帕奇
Apache(阿帕奇)是世界使用排名第一的Web伺服器軟體。它可以執行在幾乎所有廣泛使用的計算機平臺上,由於其跨平臺和安全性被廣泛使用,是最流行的Web伺服器端軟體之一

碼頭
Jetty 是一個開源的servlet容器,它為基於Java的web容器,例如JSP和servlet提供執行環境。

網路邏輯
WebLogic Server是專門為企業電子商務應用系統開發的。企業電子商務應用系統需要快速開發,並要求伺服器端元件具有良好的靈活性和安全性,同時還要支援關鍵任務所必需的擴充套件、效能、和高可用性。WebLogic Server簡化了可移植及可擴充套件的應用系統的開發,併為其它應用 系統和系統提供了豐富的互操作性。

nginx
Nginx是一款輕量級的Web伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,在BSD-like 協議下發行。其特點是佔有記憶體少,併發能力強。

中介軟體

快取
快取是現在系統中必不可少的模組,並且已經成為了高併發高效能架構的一個關鍵元件。快取的主要作用:提升效能和緩解資料庫壓力,

再說一遍
Redis是一個開源的記憶體資料結構儲存,用作資料庫、快取和訊息代理。提供諸如字串、雜湊、列表、集合、帶範圍查詢的排序集合、點陣圖、超日誌、地理空間索引和流等資料結構。具有內建的複製、Lua指令碼、LRU逐出、事務和不同級別的磁碟永續性,並通過Redis Sentinel和Redis Cluster的自動分割槽提供高可用性。

MongoDB
MongoDB 是一個基於分散式檔案儲存的資料庫。由 C++ 語言編寫。旨在為 WEB 應用提供可擴充套件的高效能資料儲存解決方案。是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。

記憶體快取
Memcached是一個自由開源的,高效能,分散式記憶體物件快取系統,用來提高Web應用擴充套件性的重要因素。是一個基於記憶體的key-value儲存,用來儲存小塊的任意資料(字串、物件)。簡潔而強大,它的簡潔設計便於快速開發,減輕開發難度,解決了大資料量快取的很多問題。一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度、提高可擴充套件性。

差異性我就不多說了,簡單說下他們的使用場景:

Memcached:動態系統中減輕資料庫負載,提升效能;做快取,適合多讀少寫,大資料量的情況(如人人網大量查詢使用者資訊、好友資訊、文章資訊等)。
Redis:適用於對讀寫效率要求都很高,資料處理業務複雜和對安全性要求較高的系統(如新浪微博的計數和微博釋出部分系統,對資料安全性、讀寫要求都很高)。
MongoDB:主要解決海量資料的訪問效率問題。
搜尋
索爾
Solr是一個獨立的企業級搜尋應用伺服器,它對外提供類似於Web-service的API介面。使用者可以通過http請求,向搜尋引擎伺服器提交一定格式的XML檔案,生成索引;也可以通過Http Get操作提出查詢請求,並得到XML格式的返回結果。

彈性搜尋
Elasticsearch是一個基於Lucene的搜尋伺服器。它提供了一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面

二者主要區別
es基本是開箱即用,非常簡單,Solr略微複雜。

Solr 支援更多格式的資料,比如JSON、XML、CSV,而 Elasticsearch 僅支援json檔案格式。

Solr 查詢快,但更新索引時慢(即插入刪除慢),ES建立索引快(即查詢慢),即實時性查詢快。

每個
之所以推薦ELK是因為面對分散式微服務情況下,會顯示出他的威力,不管是資料收集、資料處理、還是資料分析可以節約很多時間。ELK是Elasticsearch + Logstash + Kibana三個開源軟體的組合,但是通常為了提高效能需要藉助kafka,利用Filebeat進行日誌收集,下面這個架構圖是我做過的一個日誌服務平臺。

定時任務
說定定時任務大家可能都接觸過,例如Spring自帶的定時任務SpringTask,但是SpringTask是存在很多問題的,例如:最致命的一個問題就是一旦定時丟擲異常,生命就結束,下一次不會再執行。複雜業務中使用起來是不方便的,這裡推薦兩個定時任務框架Quartz和xx-job,第三方的功能比較強大,好用。

石英
Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源專案,完全由Java開發,可以用來執行定時任務,類似於java.util.Timer。但是相較於Timer, Quartz增加了很多功能:

永續性作業 - 就是保持排程定時的狀態;
作業管理 - 對排程作業進行有效的管理;
xx工作
XXL-JOB是一個輕量級分散式任務排程平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴充套件。現已開放原始碼並接入多家公司線上產品線,開箱即用。

目前已有多家公司接入xxl-job,包括比較知名的大眾點評,京東,優信二手車,北京尚德,360金融 (360),聯想集團 (聯想),易信 (網易)等等....
Quartz作為開源作業排程中的佼佼者,是作業排程的首選

Quartz在叢集環境下只能通過API的方式對任務管理,同時,系統侵入性相當嚴重,而XX-JOB可以完美解決叢集下任務額管理。所以,可以根據自己業務情況選擇合適定時任務框架,

配置中心
什麼是配置中心?

集中將應用系統中對配置資訊的管理作為一個新的應用功能模組,區別與傳統的配置資訊分散到系統各個角落方式,進行集中統一管理,並且提供額外功能。尤其是在微服務架構中,是不可或缺元件,甚至是必要元件之一。

為什麼要使用配置中心?

在微服務體系中,服務的數量以及配置資訊的日益增多,比如各種伺服器引數配置、各種資料庫訪問引數配置、各種環境下應用配置資訊的不同、配置資訊修改之後實時生效等等,傳統的配置檔案方式或者將配置資訊存放於資料庫中的方式已無法滿足開發人員對配置管理的要求。常見的配置中心中介軟體有:SpringCloud Config ,Nacos,apollo等。

SpringCloud 配置
2014年9月開源,Spring Cloud 生態元件,可以和Spring Cloud體系無縫整合,Spring Cloud Config支援通過/bus/refresh端點的destination引數來指定要更新配置的機器,不過整個流程不夠自動化和體系化。相對於Apollo和Nacos還是比較弱的。

納科斯
2018年6月,阿里開源的配置中心,也可以做DNS和RPC的服務發現。Nacos使用起來相對比較簡潔,在對效能要求比較高的大規模場景更適合。此外,Nacos除了提供配置中心的功能,還提供了動態服務發現、服務共享與管理的功能,降低了服務化改造過程中的難度。

apollo(阿波羅)
2016年5月,攜程開源的配置管理中心,具備規範的許可權、流程治理等特性,Apollo可以直接在控制檯上點灰度釋出指定釋出機器的IP,接著再全量釋出,做得比較體系化。

三者對比如何選擇:
核心功能: Apollo和Nacos相對於Spring Cloud Config的生態支援更廣

實時推送: Nacos和Apollo在配置實時推送鏈路上是比較簡單高效的,Spring Cloud Config比較複雜。

高可用部署: Nacos的部署結構比較簡單,運維成本較低。Apollo部署元件較多,運維成本比Nacos高。Spring Cloud Config生產高可用的成本最高。

監控
伺服器監控是實時掌握伺服器工作狀態,並在需要時可以隨時呼叫監控記錄進行檢視。

SpringBoot 管理員
Spring Boot Admin用來管理和監控Spring Boot應用程式,通過UI來檢視應用程式的狀態,例如Spring Beans,系統屬性,執行緒,http的呼叫情況等有限狀態。

德魯伊
我知道Druid更多的用途就是連線池,其實他還有一個對SQL監控功能。

空中漫步
Skywalking是由國內開源愛好者吳晟(原OneAPM工程師,目前在華為)開源並提交到Apache孵化器的產品,它同時吸收了Zipkin/Pinpoint/CAT的設計思路,支援非侵入式埋點。是一款基於分散式跟蹤的應用程式效能監控系統。另外社群還發展出了一個叫OpenTracing的組織,旨在推進呼叫鏈監控的一些規範和標準工作。

儲存
把涉及到資料庫相關或者可以作為資料倉庫的中介軟體都歸到一起了。

我的貓
Mycat是一個開源資料庫中介軟體,是一個實現了MySQL協議的的資料庫中介軟體伺服器,我們可以把它看作是一個數據庫代理,用MySQL客戶端工具和命令列訪問Mycat,而Mycat再使用用MySQL原生(Native)協議與多個MySQL伺服器通訊,也可以用JDBC協議與大多數主流資料庫伺服器通訊,包括SQL Server、Oracle、DB2、PostgreSQL等主流資料庫,也支援MongoDB這種新型NoSQL方式的儲存,未來還會支援更多型別的儲存;一般地,Mycat主要用於代理MySQL資料庫,雖然它也支援去訪問其他型別的資料庫;

Mycat官網:http://www.mycat.io/

渠道
我們先看官網的介紹

canal,譯意為水道/管道/溝渠,主要用途是基於 MySQL 資料庫增量日誌解析,提供增量資料訂閱和消費。
這句介紹有幾個關鍵字:增量日誌,增量資料訂閱和消費。

這裡我們可以簡單地把canal理解為一個用來同步增量資料的一個工具。

接下來我們看一張官網提供的示意圖:

共享-jdbc
定位為輕量級Java框架,在Java的JDBC層提供的額外服務。 它使用客戶端直連資料庫,以jar包形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動,完全相容JDBC和各種ORM框架。

主要功能

分庫 & 分表
讀寫分離
分散式主鍵
動物園管理員
ZooKeeper是Hadoop的正式子專案,它是一個針對大型分散式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、分散式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。

事務
這個事務更多指的是分散式事務處理外掛。

Apache ShardingSphere
Apache ShardingSphere(Incubator) 是一套開源的分散式資料庫中介軟體解決方案組成的生態圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(規劃中)這3款相互獨立,卻又能夠混合部署配合使用的產品組成。它們均提供標準化的資料分片、分散式事務和資料庫治理功能,可適用於如Java同構、異構語言、容器、雲原生等各種多樣化的應用場景。

座位
Seata 是 Simple Extensible Autonomous Transaction Architecture 的簡寫,由 feascar 改名而來。是阿里開源的分散式事務框架,屬於二階段提交模式。

訊息佇列
什麼是訊息佇列
訊息佇列是一個存放訊息的容器,當我們需要使用訊息的時候可以取出訊息供自己使用。訊息佇列是分散式系統中重要的元件,使用訊息佇列主要是為了通過非同步處理提高系統性能和削峰、降低系統耦合性。目前使用較多的訊息佇列有ActiveMQ,RabbitMQ,Kafka,RocketMQ。

為什麼需要訊息佇列
1.通過非同步處理提高系統性能(削峰、減少響應所需時間);

2.降低系統耦合性;

卡夫卡
Kafka是由Apache軟體基金會開發的一個開源流處理平臺,由Scala和Java編寫。Kafka是一種高吞吐量的分散式釋出訂閱訊息系統,它可以處理消費者在網站中的所有動作流資料。這些資料通常是由於吞吐量的要求而通過處理日誌和日誌聚合來解決。 對於像Hadoop一樣的日誌資料和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。Kafka的目的是通過Hadoop的並行載入機制來統一線上和離線的訊息處理,也是為了通過叢集來提供實時的訊息。

兔MQ
AMQP,即Advanced Message Queuing Protocol,高階訊息佇列協議,是應用層協議的一個開放標準,為面向訊息的中介軟體設計。訊息中介軟體主要用於元件之間的解耦,訊息的傳送者無需知道訊息使用者的存在,反之亦然。
AMQP的主要特徵是面向訊息、佇列、路由(包括點對點和釋出/訂閱)、可靠性、安全。
RabbitMQ是一個開源的AMQP實現,伺服器端用Erlang語言編寫,支援多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支援AJAX。用於在分散式系統中儲存轉發訊息,在易用性、擴充套件性、高可用性等方面表現不俗。

活動MQ
ActiveMQ是一種開源的基於JMS(Java Message Servie)規範的一種訊息中介軟體的實現,ActiveMQ的設計目標是提供標準的,面向訊息的,能夠跨越多語言和多系統的應用整合訊息通訊中介軟體。

三者區別及其使用場景
特性 活動MQ 兔MQ 卡夫卡
開發語言 爪哇 erlang 梯子
單機吞吐量 萬級 萬級 10萬級
時效性 ms級 us級 ms級以內
可用性 高(主從架構) 高(主從架構) 非常高(分散式架構)
功能特性 成熟的產品,在很多公司得到應用;有較多的文件;各種協議支援較好 基於erlang開發,所以併發能力很強,效能極其好,延時很低;管理介面較豐富 只支援主要的MQ功能,像一些訊息查詢,訊息回溯等功能沒有提供,畢竟是為大資料準備的,在大資料領域應用廣。
資料庫

該資料庫主要是指關係型資料庫,是按照資料結構來組織、儲存和管理資料的倉庫,資料庫是存放資料的倉庫,是一個系統或者軟體必不可少的一部分。每個資料庫都有一個或多個不同的 API 用於建立,訪問,管理,搜尋和複製所儲存的資料。我們也可以將資料儲存在檔案中,但是在檔案中讀寫資料速度相對較慢。

所以,現在我們使用關係型資料庫管理系統來儲存和管理大資料量。所謂的關係型資料庫,是建立在關係模型基礎上的資料庫,藉助於集合代數等數學概念和方法來處理資料庫中的資料。

關係資料庫管理系統的特點:

1.資料以表格的形式出現
2.每行為各種記錄名稱
3.每列為記錄名稱所對應的資料域
4.許多的行和列組成一張表單
5.若干的表單組成database
常見的資料管理系統主要有:oracle、mysql、SQL Server、access、TiDB。

甲骨文
Oracle Database,簡稱 Oracle。Oracle 資料庫系統是美國 Oracle 公司(甲骨文)提供的以分散式資料庫為核心的一組軟體產品,是目前最流行的客戶/伺服器(client/server)的資料庫之一。Oracle 資料庫是目前世界上使用最為廣泛的資料庫管理系統,作為一個通用的資料庫系統,它具有完整的資料管理功能;作為一個關係型資料庫,它是一個完備關係的產品;作為分散式資料庫它實現了分散式處理功能,但它的所有知識,只要在一種機型上學習了Oracle知識,便能在各種型別的機器上使用它。

mysql
MySQL 是最流行的關係型資料庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關係資料庫管理系統)應用軟體之一。目前也是Oracle 公司來託管。

SQL 伺服器
美國Microsoft公司推出的一種關係型資料庫系統。SQL Server是一個可擴充套件的、高效能的、為分散式客戶機/伺服器計算所設計的資料庫管理系統,實現了與WindowsNT的有機結合,提供了基於事務的企業級資訊管理系統方案。

使用權
Access是微軟把資料庫引擎的圖形使用者介面和軟體開發工具結合在一起的一個數據庫管理系統。它是微軟OFFICE的一個成員, 在包括專業版和更高版本的office版本里面被單獨出售。

TiDB
TiDB 是 PingCAP 公司自主設計、研發的開源分散式關係型資料庫,是一款同時支援線上事務處理與線上分析處理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分散式資料庫產品,具備水平擴容或者縮容、金融級高可用、實時 HTAP、雲原生的分散式資料庫、相容 MySQL 5.7 協議和 MySQL 生態等重要特性。目標是為使用者提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解決方案。TiDB 適合高可用、強一致要求較高、資料規模較大等各種應用場景。

上面這幾個資料庫優缺點都比較明顯,不在囉嗦了,大家在工作中可以根據自己實際情況選擇合適的資料。

工具

開發
IntelliJ IDEA

IntelliJ在業界被公認為最好的java開發工具,尤其在智慧程式碼助手、程式碼自動提示、重構、JavaEE支援、各類版本工具(git、svn等)、JUnit、CVS整合、程式碼分析、 創新的GUI設計等方面的功能可以說是超常的。IDEA是JetBrains公司的產品,這家公司總部位於捷克共和國的首都布拉格,開發人員以嚴謹著稱的東歐程式設計師為主。它的旗艦版本還支援HTML,CSS,PHP,MySQL,Python等。免費版只支援Java,Kotlin等少數語言。

Eclipse 是一個開放原始碼的、基於 Java 的可擴充套件開發平臺, 是 Java 的整合開發環境(IDE),當然 Eclipse 也可以作為其他開發語言的整合開發環境,如C,C++,PHP,和 Ruby 等。

日食

MyEclipse,是在Eclipse 基礎上加上自己的外掛開發而成的功能強大的企業級整合開發環境,主要用於Java、Java EE以及移動應用的開發。在最新版本的MyEclipse中,配合CodeMix使用支援也十分廣泛,尤其是對各種開源產品和主流開發框架的支援相當不錯。目前已支援PHP、Python、Vue、Angular、React、Java、Java EE等語言和框架開發。

這三款工具好壞我也不做任何評價,每個工具使用者都不少,我周圍IntelliJ IDEA和MyEclipse都有,我個人比較喜歡用IntelliJ IDEA。

客戶端工具
版本控制
常見的版本空間工具svn和git

svn

TortoiseSVN 是 Subversion 版本控制系統的一個免費開源客戶端,可以超越時間的管理檔案和目錄。檔案儲存在中央版本庫,除了能記住檔案和目錄的每次修改以外,版本庫非常像普通的檔案伺服器。你可以將檔案恢復到過去的版本,並且可以通過檢查歷史知道資料做了哪些修改,誰做的修改。這就是為什麼許多人將 Subversion 和版本控制系統看作一種“時間機器”。

Git 是用於Linux核心開發的版本控制工具。與常用的版本控制工具 Subversion 不同,它採用了分散式版本庫的方式,不必伺服器端軟體支援,程式碼的釋出和交流極其方便。 Git 的速度很快,這樣的大專案來說自然很重要。 Git 最為出色的是它的合併跟蹤(merge tracing)能力。

SVN的特點是簡單,只是需要一個放程式碼的地方時用是OK的。

Git的特點版本控制可以不依賴網路做任何事情,對分支和合並有更好的支援(這應該算是開發者最關心的地方)。

資料庫
Navicat
Navicat是一套快速、可靠並價格相當便宜的資料庫管理工具,專為簡化資料庫的管理及降低系統管理成本而設。它的設計符合資料庫管理員、開發人員及中小企業的需要。Navicat 是以直覺化的圖形使用者介面而建的,讓你可以以安全並且簡單的方式建立、組織、訪問並共用資訊。

PLSQL
PL/SQL Developer是一個整合開發環境,專門開發面向Oracle資料庫的應用。PL/SQL也是一種程式語言,叫做過程化SQL語言(Procedural Language/SQL)。PL/SQL是Oracle資料庫對SQL語句的擴充套件。在普通SQL語句的使用上增加了程式語言的特點,所以PL/SQL把資料操作和查詢語句組織在PL/SQL程式碼的過程性單元中,通過邏輯判斷、迴圈等操作實現複雜的功能或者計算,PL/SQL 只有 Oracle 資料庫有。

Redis 桌面管理器
Redis Desktop Manager是一款windows平臺下的視覺化redis資料庫桌面管理工具,使用它你可以檢視、刪除、修改你的redis資料庫資料!

linux遠端
殼牌
XShell是一個強大的安全終端模擬軟體,它支援SSH1,SSH2,以及Microsoft Windows平臺的TELNET協議。
XShell可以在Windows介面下用來訪問遠端不同系統下的伺服器,從而比較好的達到遠端控制終端的目的。

WinSCP

寶塔
寶塔面板是一個可以安裝在伺服器上的整合環境,並配套了web管理面板,可以在瀏覽器上直接控制你的伺服器,非常方便。 可以一鍵建立網站、FTP、資料庫、SSL;安全管理,計劃任務,檔案管理,PHP多版本共存及切換;自帶基礎網站環境,支援windows系統(apache)和linux系統(apache或nginx)。

安全CRT
Secure CRT 是一款SSH客戶端軟體,通過使用內含的VCP命令列程式可以進行加密檔案的傳輸。

郵差
Postman一款非常流行的API除錯工具。其實,開發人員用的更多。因為測試人員做介面測試會有更多選擇,例如Jmeter、soapUI等。不過,對於開發過程中去除錯介面,Postman確實足夠的簡單方便,而且功能強大。

輔助
Typora + PicGo
Typora+PicGo,最好用的Markdown+最好用的圖床工具!如果寫部落格的可以收藏起來。

記事本++
Notepad++中文版是程式設計師必備的文字編輯器,Notepad++中文版小巧高效,支援27種程式語言,通吃C,C++ ,Java ,C#, XML, HTML, PHP,JS 等,Notepad++中文版編輯器可完美地取代微軟的記事本。

畫圖
視覺
Office Visio 是Office軟體系列中的負責繪製流程圖和示意圖的軟體,是一款便於IT和商務人員就複雜資訊、系統和流程進行視覺化處理、分析和交流的軟體。使用具有專業外觀的 Office Visio 圖表,可以促進對系統和流程的瞭解,深入瞭解複雜資訊並利用這些知識做出更好的業務決策。常見軟體架構、流程圖都可以在裡面完成。

程序
ProcessOn是一個線上作圖工具的聚合平臺, 它可以線上畫流程圖、思維導圖、UI原型圖、UML、網路拓撲圖、組織結構圖等等, 您無需擔心下載和更新的問題,不管Mac還是Windows,一個瀏覽器就可以隨時隨地的發揮創意,規劃工作。

官網:https://www.processon.com/

電源設計器
owerDesigner是一款非常全面的資料庫設計工具。使用PowerDesigner可以快速建立表,支援表與表之間建立關係,介面簡潔,功能強大。同時支援將sql指令碼匯出,多種匯出型別任意挑選,簡單實用。

Xmind
XMind 是一個全功能的思維導圖和頭腦風暴軟體,為激發靈感和創意而生。作為一款有效提升工作和生活效率的生產力工具,受到全球百千萬使用者的青睞。

iReport
說到 iReport 不得不先介紹 Jasperreport,Jasperreport 是一個報表製作程式,使用者需要按照它制定的規則編寫一個 XML 檔案,然後得到使用者需要輸出的格式檔案。它支援輸出的檔案格式包括 PDF,HTML,XML,XLS,CVS 等等。而 iReport 就是一個製作 Jasperreport 的 XML 檔案的視覺化開發工具。

瀏覽器
鉻合金
Google Chrome是一款由Google公司開發的網頁瀏覽器,該瀏覽器基於其他開源軟體撰寫,包括WebKit,目標是提升穩定性、速度和安全性,並創造出簡單且有效率的使用者介面。

搜狗
搜狗瀏覽器 由搜狗公司開發,基於谷歌chromium核心,力求為使用者提供跨終端無縫使用體驗,讓上網更簡單、網頁閱讀更流暢的瀏覽器。

火狐
Mozilla Firefox,中文俗稱“火狐”,是一個由Mozilla開發的自由及開放原始碼的網頁瀏覽器。其使用Gecko排版引擎,支援多種作業系統,如Windows、macOS及GNU/Linux等

IE
Internet Explorer(簡稱:IE)是微軟公司微軟公司推出的一款網頁瀏覽器。原稱Microsoft Internet Explorer(6版本以前)和Windows Internet Explorer(7、8、9、10、11版本)。在IE7以前,中文直譯為“網路探路者”,但在IE7以後官方便直接俗稱"IE瀏覽器"。

如果做前端開發,這幾款瀏覽器相容性都得兼顧。很早之前IE瀏覽器市場是比較大,隨著時間推移,谷歌瀏覽器佔據了比較大的市場。我個人日常開發中谷歌用的比較多,特殊情況才會使用其它瀏覽器。

效能分析
儀表
JMeter是Apache組織開發的基於Java的壓力測試工具。用於對軟體做壓力測試,它最初被設計用於Web應用測試,但後來擴充套件到其他測試領域。 它可以用於測試靜態和動態資源,例如靜態檔案、Java 服務程式、CGI 指令碼、Java 物件、資料庫, 等等。

離開
apache bench簡稱ab,它是apache自帶的壓力測試工具。ab非常實用,它不僅可以對apache伺服器進行網站訪問壓力測試,也可以對或其它型別的伺服器進行壓力測試。

食物
MAT是Java堆記憶體分析工具,可從http://www.eclipse.org/mat/中...。

你在成為大神的路上都學習了哪些技術,歡迎留言交流。