Java編程領域你需要懂得技術名詞解釋與常用開源框架理解

2020-12-23 Java從零開始

1、Java中間件,分布式系統、分布式緩存、消息隊列

JAVA中間件:包括服務框架中間件:解決集群間的訪問通信問題。消息中間件:解決應用之間的消息傳遞、解耦、異步的問題。數據訪問中間件:解決應用訪問資料庫的共性問題。

分布式系統:一定是有多個節點組成的系統,一般一個節點就是一臺伺服器,節點之間是相互連通協作的,這些連通的節點上部署了我們的組件,共同服務於一個大型系統。比如淘寶網,在對瀏覽器發送請求的背後,是一個大型的分布式系統為我們服務,整個系統有的負責請求處理,有的負責存儲,有的負責計算,最終通過相互的協作把請求的結果返回給瀏覽器,並呈現給我們。

分布式緩存:就是把數據存放在不同的物理機器上,利用分布式緩存中間件進行處理數據。Redis和memcached緩存系統都是以key-value的形式存儲和訪問數據,在內存中維護一張巨大的HashTable。但是redis比memcached支持的數據類型更多,有五種數據類型:String、Hash、List、Set、ZSet(有序集合)。注意:分布式緩存系統需要用到一致哈希算法,它的的好處在於節點個數發生變化(減少或增加)時無需重新計算哈希值,避免大量key的重新映射,保證數據儲存或讀取時可以正確、快速地找到對應的節點。

消息隊列(中間件):負責消息的收發管理,利用高效可靠的異步消息傳遞機制集成到分布式系統。五大優點:解耦、異步、橫向擴展、安全可靠、順序保證。常見的有activeMQ(支持多語言,實現jms1.1),RabbitMQ(支持更多語言,基於AMQP規範),kafka(高吞吐量,分布式,分區,O(1)磁碟順序提供消息持久化)

2、常用的開源項目框架理解

Spring

Spring是輕量級的IoC和AOP的容器框架,是進行對象管理、對象關聯、解耦的一個中間層框架。是面向Bean的編程,實現了組件的解耦。

IoC(DI)依賴注入實現的技術反射機制、工廠模式。其中pring的BeanFactory主要實現步驟如下,

解析配置文件(bean.xml)

使用反射機制動態加載每個class節點中配置的類

為每個class節點中配置的類實例化一個對象

使用反射機制調用各個對象的seter方法,將配置文件中的屬性值設置進對應的對象

將這些對象放在一個存儲空間(beanMap)中

使用getBean方法從存儲空間(beanMap)中取出指定的JavaBean

AOP實現的技術: JDK動態代理技術 和 CGLIB技術(動態字節碼增強技術) 。儘管實現技術不一樣,但都是基於代理模式 , 都是生成一個代理對象 。

JDK動態代理技術:主要使用到 InvocationHandler 接口和 java.lang.reflect.Proxy類的newProxyInstance() 方法。通過使用接口,使系統鬆耦合。

CGLIB(動態字節碼增強)技術:是繼承被代理對象,然後Override需要被代理的方法。使用繼承,代碼寫起來更簡單。

Struts2

Struts2是基於servlet、MVC設計模式的Web應用框架,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與視圖的數據交互。

Struts2框架採用Filter(StrutsPrepareAndExecuteFilter)作為核心控制器實現。是類級別的攔截,每次請求對應實例一個新的Action,然後調用setter getter方法把request中的數據注入。一個Action對象對應一個request上下文。

Struts2流程分析:

①當在瀏覽器中輸入相應網址,會加載web.xml中的核心控制器

②核心控制器會攔截所有請求,加載struts.xml的配置文件,找到和請求名字相同的action

③創建Class屬性指定類的對象

④執行method屬性指定的方法,返回一個字符串結果

⑤找Name等於此字符串的result,轉到相應頁面或action

⑥在頁面中執行相關代碼:通過EL表達式或者OGNL表達式取當前類屬性的值

SpringMVC

SpringMVC是基於Servlet 、MVC設計模式的一個鬆耦合的web應用框架,使用前端控制器模式來進行設計,再根據請求映射規則分發給相應的後端控制器進行處理。

SpringMVC框架採用Servlet作為核心控制器實現。是方法級別的攔截,攔截到方法後根據參數上的註解,把request數據注入進去。一個方法對應一個Request上下文,所以方法直接基本上是獨立的,獨享request,response數據。、

開發效率對比:

由於SpringMVC基於方法的攔截,有加載一次單例模式bean注入。而Struts2是類級別的攔截,每次請求對應實例一個新的Action,需要加載所有的屬性值注入,所以,SpringMVC開發效率和性能高於Struts2

SpringMVC的工作流程如下:

用戶發送請求至前端控制器(DispatcherServlet)

DispatcherServlet收到請求調用處理器映射器(HandlerMapping)

處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器對象一併返回給DispatcherServlet

DispatcherServlet通過處理器適配器(HandlerAdapter)調用具體的處理器(Controller)

處理器即後端控制器(Controller)執行具體的業務操作,完成後返回ModelAndView

HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet

DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器

ViewReslover解析後返回具體View

DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)

DispatcherServlet響應用戶

MyBatis

MyBatis 是一個基於 Java 的 持久層 框架, MyBatis 消除了幾乎所有的 JDBC 代碼和參數的手工設置以及結果集的檢索。 把實體類和SQL語句之間建立了映射關係,是一種半自動化的ORM實現。

MyBatis的特點:

基於SQL語法,SQL語句封裝在配置文件中,便於統一管理與維護。

自動化程度低、手工映射SQL,靈活程度高。

Hibernate

Hibernate是優秀的Java 持久化層解決方案、對象-關係映射(ORM)工具、簡化了JDBC 繁瑣的編碼。

Hibernate特點:

Hibernate對象-關係映射能力強,資料庫無關性好,對於關係模型要求高的軟體(例如需求固定的定製化軟體)如果用hibernate開發可以節省很多代碼,提高效率。

編寫程序的時候,HQL語句操作,以面向對象的方式處理數據。而保存數據的時候,卻以關係型資料庫的方式存儲。

SpringBoot

SpringBoot是基於Spring4.0的一套快速搭建Spring框架的整合包。方便對各種框架的整合,讓他們集成在一起更加簡單,簡化了我們在集成過程中的模板化配置。遵循」約定大於配置」,實現零配置。

特點:

創建獨立的Spring應用程式

嵌入的Tomcat,無需部署WAR文件

簡化Maven配置

自動配置Spring

提供生產就緒型功能,如指標,健康檢查和外部配置

微服務

微服務是一種可以讓軟體職責單一、鬆耦合、自包含、可以獨立運行和部署的架構思想。微服務架構是讓微服務與微服務之間在結構上「鬆耦合」,而在功能上則表現為一個統一的整體。目的是有效的拆分應用,實現敏捷開發和部署。

關鍵思想就是:拆分、單一、獨立、組件化。把原本一個龐大、複雜的項目按業務邊界拆分一個一個獨立運行的小項目,通過接口的方式組裝成一個大的項目。

Dubbo

首先了解一下ESB(企業數據總線):一般採用集中式轉發請求,適合大量異構系統集成,側重任務的編排,性能問題可通過異構的方式來進行規避,無法支持特別大的並發。

Dubbo(服務註冊管理),採用的是分布式調用,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。其側重服務的治理,將各個服務顆粒化,各個子業務系統在程序邏輯上完成業務的編排。是遠程服務調用的分布式框架(告別Web Service模式中的WSdl,以服務者與消費者的方式在dubbo上註冊)

其核心部分包含:

1. 遠程通訊: 提供對多種基於長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及「請求-響應」模式的信息交換方式。

2. 集群容錯: 提供基於接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集群支持。

3. 自動發現: 基於註冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。

服務註冊中心:Zookeeper 服務調用方式: RPC

Spring Cloud

Spring cloud是基於spring boot以及結合Netflix 相關思想和代碼對微服務理念的java實現。提供了一些可以用於快速構建分布式系統通用模式的工具(例如:配置管理、服務註冊與發現、斷路器、智能路由、微代理、控制總線),在本質上是一種分布式的解決方案。

五大核心組件:

服務註冊發現 - Netflix Eureka

配置中心 - spring cloud config

負載均衡-Netflix Ribbon

斷路器 - Netflix Hystrix

路由(網關) - Netflix Zuu

服務註冊中心:Netflix Eureka 服務調用方式:REST API

Zookeeper

ZooKeeper是一種分布式應用程式協調服務,用於管理大型主機。它是集群的管理者,監視著集群中各個節點的狀態,根據節點提交的反饋進行下一步合理操作。最終,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。

Zookeeper作用:

1.命名服務 2.配置管理 3.集群管理 4.分布式鎖 5.隊列管理

Zookeeper設計目的:

1.最終一致性:client不論連接到哪個Server,展示給它都是同一個視圖,這是zookeeper最重要的性能。

2.可靠性:具有簡單、健壯、良好的性能,如果消息被到一臺伺服器接受,那麼它將被所有的伺服器接受。

3.實時性:Zookeeper保證客戶端將在一個時間間隔範圍內獲得伺服器的更新信息,或者伺服器失效的信息。但由於網絡延時等原因,Zookeeper不能保證兩個客戶端能同時得到剛更新的數據,如果需要最新數據,應該在讀數據之前調用sync()接口。

4.等待無關(wait-free):慢的或者失效的client不得幹預快速的client的請求,使得每個client都能有效的等待。

5.原子性:更新只能成功或者失敗,沒有中間狀態。

6.順序性:包括全局有序和偏序兩種:全局有序是指如果在一臺伺服器上消息a在消息b前發布,則在所有Server上消息a都將在消息b前被發布;偏序是指如果一個消息b在消息a後被同一個發送者發布,a必將排在b前面。

Docker

Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口Docker 將應用程式與該程序的依賴,打包在一個文件裡面。運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器裡運行,就好像在真實的物理機上運行一樣。有了 Docker,就不用擔心環境問題。

總體來說,Docker 的接口相當簡單,用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的代碼一樣。

Docker 主要用途。

(1)提供一次性的環境。比如,本地測試他人的軟體、持續集成的時候提供單元測試和構建的環境。

(2)提供彈性的雲服務。因為 Docker 容器可以隨開隨關,很適合動態擴容和縮容。

(3)組建微服務架構。通過多個容器,一臺機器可以跑多個服務,因此在本機就可以模擬出微服務架構。

Redis

Redis 是一個開源的,基於高級的key-value存儲在內存中的數據結構存儲系統,它可以用作資料庫、緩存和消息中間件。 它支持多種類型的數據結構,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。 Redis 內置了 複製(replication),LUA腳本(Lua scripting), LRU驅動事件(LRU eviction),事務(transactions) 和不同級別的 磁碟持久化(persistence), 並通過 Redis哨兵(Sentinel)和自動 分區(Cluster)提供高可用性(high availability)。

Redis優點

(1) 速度快,因為數據存在內存中,類似於HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1)

(2) 支持豐富數據類型,支持string,list,set,sorted set,hash

(3) 支持事務,操作都是原子性,所謂的原子性就是對數據的更改要麼全部執行,要麼全部不執行

(4) 豐富的特性:可用於緩存,消息,按key設置過期時間,過期後將會自動刪除

Memcached

Memcached基於一個存儲鍵/值對的hashmap。Memcached 是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕資料庫負載。它通過在內存中緩存數據和對象來減少讀取資料庫的次數,從而提高動態、資料庫驅動網站的速度。

Memcached特徵:

協議簡單

基於libevent的事件處理

內置內存存儲方式

memcached不互相通信的分布式

Memcache與Redis的區別都有哪些?

1)、存儲方式 Memecache把數據全部存在內存之中,斷電後會掛掉,數據不能超過內存大小。 Redis有部份存在硬碟上,這樣能保證數據的持久性。

2)、數據支持類型 Memcache對數據類型支持相對簡單。 Redis有複雜的數據類型。

3)、使用底層模型不同 它們之間底層實現方式 以及與客戶端之間通信的應用協議不一樣。 Redis直接自己構建了VM 機制 ,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求。

3、遠程服務調用 RPC、REST API

RPC即遠程過程調用(Remote Procedure Call Protocol,簡稱RPC),像調用本地服務(方法)一樣調用伺服器的服務(方法)。通常的實現有 XML-RPC , JSON-RPC , 通信方式基本相同, 不同的只是傳輸數據的格式。

RPC架構裡包含如下4個組件:

1、 客戶端(Client):服務調用方

2、 客戶端存根(Client Stub):存放服務端地址信息,將客戶端的請求參數打包成網絡消息,再通過網絡發送給服務方

3、 服務端存根(Server Stub):接受客戶端發送過來的消息並解包,再調用本地服務

4、 服務端(Server):真正的服務提供者。

RPC架構目的是把調用、編碼/解碼的過程封裝起來,讓用戶像調用本地服務一樣的調用遠程服務。要做到對客戶端(調用方)透明化服務, RPC框架需要考慮解決如下問題:

服務端提供的服務如何發布,客戶端如何發現服務;

如何對請求對象和返回結果進行序列化和反序列化;

如何更高效進行網絡通信。

最後,對於想要在網際網路行業發展的小夥伴,我總結了一套學習Java的資料與面試題,如果你在技術方面想提升自己的話,可以關注私聊我免費領取。

相關焦點

  • Javaweb開發學習路線及Java三大框架分享
    Java web開發,是用Java技術來解決相關web網際網路領域的技術總和。web包括:web伺服器和web客戶端兩部分。Java在客戶端的應用有java applet,不過使用得很少,Java在伺服器端的應用非常的豐富,比如Servlet,JSP和第三方框架等等。Java技術對Web領域的發展注入了強大的動力。
  • 適合Java新手的開源項目集合——在 GitHub 學編程
    在開源的世界裡,有著無數的 Java 項目等待你去發現探索,讓我們一起跟著本篇文章去看看有哪些開源項目吧?興趣是最好的老師,HelloGitHub 就是幫你找到編程的樂趣。在歷史的長河中誕生過無數的著作,計算機領域也不例外,而《Think in Java》就是我要重點介紹的一本著作,這本書給我的第一印象就是:全!從最基本的數據類型到之後的面向對象再到後面的泛型反射的高級話題,無所不包。我之前閱讀的是第四版實體書,現在的好消息是,第五版來了!而且是以開源的形式。
  • 人工智慧領域常用開源框架和庫舉例
    機器學習相關Scikit-learn作為專門面向機器學習的 Python 開源框架,Scikit-learn 內部實現了多種機器學習算法,容易安裝和使用Mahout在大數據分布式框架 Hadoop 下使用,包含了機器學習中常用的算法(含推薦算法)。
  • |Java 開源項目
    今天給大家帶來一款開源 Java 版網盤項目—— Kiftd-source,本文將用 3 分鐘帶大家搭建一個個人網盤,技術便利生活,你值得擁有~項目地址:https://github.com/KOHGYLW/kiftd-source項目介紹
  • 5 個開源的 Java IDE 工具
    這些框架是為了在各種伺服器環境上運行各種應用程式而設計開發的;這包括解析註解、掃描描述符、加載配置以及在 Java 虛擬機(JVM)上啟動實際的服務等方面的動態行為。控制這麼多的任務需要更多的代碼,這就很難降低內存佔用、加快新應用的啟動時間。無論如何,據TIOBE 指數,在當今使用的程式語言中 Java 一直排名前三,擁有著 700 萬到 1000 萬開發者的社區。
  • 2021 必須掌握的 21個Java 核心技術
    當然JVM不是唯一決定技術能力好壞的面試問題,但是可以佐證java開發能力的高低。面向對象編程的概念 這是一個java的核心概念,對於任何java開發者都需要熟練掌握。 Java中很多特性或者說知識點都是和java面向對象編程概念相關的。 在我的理解,一個好的開發者不僅僅需要了解這些特性(知識點)本身。
  • 逛了五年GitHub,終於整理出七大java開源技術項目文檔,趕緊收藏
    前言大家都知道 Github 是一個程式設計師福地,這裡有各種厲害的開源框架、軟體或者教程。這些東西對於我們學習和進步有著莫大的進步,所以將 Github 上非常棒的七大Java開源項目技術文檔整理下來供大家學習!!!
  • 開課吧:Java軟體工程師一般要學習哪些課程?
    JAVA只是一種程式語言,由這個語言衍生出來領域很多,如果您有過使用JAVA語言開發經驗,那您肯定會關心JAVA的某一方向學習的問題,但您直接關心JAVA學習要學哪些課程,那我猜您一定是零基礎,作為零基礎的,以下建議僅供參考:
  • 給Java新手的一些建議——Java知識點歸納(Java基礎部分)
    當然JVM不是唯一決定技術能力好壞的面試問題,但是可以佐證java開發能力的高低。訪問控制這也是java封裝特性的一個基礎,需要掌握的有:public protected default private 對於class, method, field 的修飾作用6. 流程控制Java 流程控制的基礎, 雖然有些語法不一定很常用,但是都需要了解,並且在合適的地方使用它們。
  • 鬥魚發布首個開源框架Jupiter
    鬥魚首個開源項目來了。2020年6月1日,鬥魚將基於Go語言的微服務框架Jupiter正式開源,這也奠定了鬥魚在國內GO語言開發領域的技術領先地位。據悉,Jupiter脫胎於鬥魚內部的Golang微服務框架,歷經多機房建設、雲化、容器化等多次基礎架構演進,基本涵蓋了內部框架的主要功能。經過了三年打磨,超過30名鬥魚技術人員的不斷優化下,Jupiter已經完成了10個大版本和99個小版本的迭代。而在超過500個業務場景的實際驗證後,鬥魚最終決定將這套微服務框架正式開源。
  • 百度開源2020:二十個技術領域持續開源 飛槳、阿波羅成行業領先者...
    一、20個技術領域持續開源  截止2020年底,在GitHub/Gitee百度官方組織下已經圍繞著安全、監控、知識圖譜、網絡與接入、視覺、量子計算、開發框架等20個技術領域開源了86個項目,其中自然語言處理、開發框架與前端領域的開源項目數佔比超過50%。
  • JAVA並發編程:並發問題的根源及主要解決方法
    編譯器優化帶來的有序性因為現在程式設計師編寫的都是高級語言,編譯器需要將用戶的代碼轉成CPU可以執行的指令。同時,由於計算機領域的不斷發展,編譯器也越來越智能,它會自動對程式設計師編寫的代碼進行優化,而優化中就有可能出現實際執行代碼順序和編寫的代碼順序不一樣的情況。
  • 企業對Java的招聘需求越來越多,你知道原因嗎-開課吧
    隨著IT技術的發展,編程能力越顯重要,在未來,編程可能會成為像英語一樣的基本技能。JavJava算是編程界打不死的小強,一統後端技術棧,像現在的電商、社交、在線教育,大多採用Java作為基本的開發語言;同時框架也基本由Spring一統天下,入門門檻低,開發效率高,是很多大公司的首選。
  • 大數據入門:Java和Scala編程對比
    在學習大數據之初,很多人都會對程式語言的學習有疑問,比如說大數據編程主要用什麼語言,在實際運用當中,大數據主流編程是Java,但是涉及到Spark、Kafka框架,還需要懂Scala。今天的大數據入門分享,我們就來對Java和Scala這兩門語言的編程做個對比。
  • 百度飛槳推出開源框架V2.0RC版本,帶來「編程一致、動靜統一」全新...
    螺旋槳,開發更加便捷的飛槳開源框架2.0 RC版,端雲協同的AI集成開發環境BML CodeLab,支持更強大分布式訓練的業界首個通用異構參數伺服器架構,開源算法庫增至200+,飛槳企業版EasyDL智能數據服務升級,飛槳硬體生態路線圖以及攜手全球開發者開啟「大航海」計劃。
  • Java學習必不可少的十大網站
    StackoverflowStackoverflow.com可能是編程世界上最受歡迎的網站。有數百萬個很好的問題和答案。學習API或程式語言通常依賴於代碼示例,stackoverflow有很多代碼段。關於stackoverflow的另一個好處是它是社交的。
  • 網站編程錦上添花 分享8個常用代碼優化小助手
    企業建立網站,程式語言是人和計算機之間最直接的交流。而代碼又是編程的主要途徑。代碼優化是通過對程序代碼進行等價變化,而不改變程序的運行結果。常用的代碼優化技術有刪除多餘運算,循環不變代碼外提,強度削弱等。下面,IDC評述網與大家分享8個代碼優化小助手,供參考。1.
  • java大數據和python大數據的全面對比,哪個更主流?
    大數據是目前網際網路流行的技術語言,處理大數據的程式語言比較有優勢的也很多,比如java、python、go、R語言、Hadoop等等,按道理來說每種程式語言都可以處理大數據,只是處理的規模不一樣而且,但是現在比較受歡迎的數據處理程式語言是java與python。
  • 開源軟體分享-基於.net core 3.1的快速開發框架
    曾幾何時.NET們很羨慕JAVA的生態,java開源生態裡面你用得著的幾乎都有開源的實現。比如大數據、微服務、以及各種各樣的快速開發框架,特別是spring boot出來以後,簡化了SSM那套繁瑣的配置文件,搭建框架也越來越方便了。
  • 菜鳥如何學java?
    那麼零基礎到底如何學java呢?Java需要學多久?萬丈高樓平地起,Java沒有速成,只有反覆的練習和思考沉澱。如果你想幾天就學會它,小編勸你還是想想就算了,想要隨心所欲的搭建一個平臺或是開發一個系統,沒有一番代碼的積累,沒有三五個月基本是不太可能的。