模型一詞,本來是好理解的,名詞,大概就是一個縮小版的實際產品的意思。java
固然了,你能夠去查查百科,模型其實不僅能夠描述實物,還能夠描述虛擬物件。咱們主要來看看後者。(百科: https://baike.baidu.com/item/模型/1741186?fr=aladdin)react
當模型這在軟件行業使用時,好像就變了味道。好比:開發模型,java內存模型,線程模型,io模型,reactor模型,生產模型,消費模型,消息傳遞模型...面試
這讓我在很長一段時間裏,一直搞不懂,何謂模型。隨着年齡的增加,總算有了些許本身的理解,權當故事講給本身聽吧。數據庫
交互模型:由一種或者多種元素構成,包括用例、順序圖、狀態圖、用戶界面原型等,它描述了用戶與系統之間採用了哪一種交互方式;雖說內容不少,不太像是在說一個叫模型的東西,可是,確實和其描述「交互」 很相關,因此理解起來倒也輕鬆自在。而接下來我們的幾個例子,則可不必定了!後端
java內存模型?你說內存就內存吧,不是長方形就是正方形,還能咋的。錯了,java內存模型內容能夠包含內存佈局和內存交互方式,如佈局爲主內存加工做內存的方式,主內存爲全部線程一塊兒共享的內存區域,工做內存爲當前線程的私有區域。交互方式爲,當一個線程運行時,它會從主存中拷貝一份須要的內容到工做內存,在這基礎上進行運算處理,操做完成後,將結果寫回主存中。而這個模型還有一件很重要的工做就是,要解決工做內存與主存的交互問題,因此產生了各類屏障,也就是它的關鍵。這就是java的內存模型,你要說有什麼不合適吧也沒有,可是當別人問我這東西的時候,我問題懷疑什麼叫模型,總想象着一個縮小版物理是什麼樣的?回答不上來也徹底不是由於我不知道他們的工做方式,尷尬。數據結構
netty線程模型?線程能有什麼模型,頂多就線程池唄還能咋的?不過若是換個問法可能親民了,netty的io線程線程是如何工做的?正確答案是reactor模型,reactor中文翻譯爲核反應堆,大概就是一個導火線,引起一個大爆炸的這麼個樣子。具體來講就是,一個acceptor線程專門接收客戶端請求,而後接收到請求後將請求分發到後端線程池,消息的讀取,編解碼和發送都由這個線程池完成。固然了,這只是reactor的其中一種模式,它還有其餘更完善的方式,如主從reactor線程池模式。總之,目的就是讓系統可以處理更多的併發請求,經過多個線程池的方式。因此,這個不叫線程模型好像也很差其餘方式了。併發
雙親委託加載模型?這個是java中的基礎的類加載方式,概念見過就是見過,沒見過就是沒見過。本也沒啥,就是在加載類時優先讓父類進行加載,不行再由本身加載的這麼個過程。只是我以爲一個很簡單一句話被提煉出一個雙親委託加載模型後,逼格瞬間提升了不少。並且,這裏模型好像就變成了一個動詞有木有。若是不提煉這麼個名詞出來,你又如何去描述這一事物呢?框架
消息傳遞模型?這個比較容易理解,也就是一個消息如何從一個點傳遞到另外一個點描述。基本上如今的MQ產品裏描述的比較清楚,描述方向也各有不一樣,好比點對點消息傳遞模型、發佈訂閱消息傳遞模型。簡單說這種模型通常都一個producer,queue,consumer這麼幾個元素,由producer發送一個消息到queue中,而後由consumer從queue中獲取數據的這麼個過程,其中重點要關注的可能就是確認ack機制以及推消息模型還拉消息模式,這確實得要細細去了解具體的產品了。但整體來講,知道是這麼個問題本質方向是比較重要的,畢竟誰還不會寫幾個bug呢?可是能把bug講得聲色俱全的倒是很少的。分佈式
數據模型?這個概念其實咱們見得也是最多的,好比作開發的時候,表的設計,不就是一個創建數據模型的過程嗎?(建模)。百科上有準確的描述:數據模型(Data Model)是數據特徵的抽象。數據(Data)是描述事物的符號記錄,模型(Model)是現實世界的抽象。數據模型從抽象層次上描述了系統的靜態特徵、動態行爲和約束條件,爲數據庫系統的信息表示與操做提供了一個抽象的框架。數據模型所描述的內容有三部分:數據結構、數據操做和數據約束。這麼一說概念,好像都很清楚明白,可是當一個逼格高的面試官問題,大家的數據模型是怎麼樣的?你可就不必定答得上來了吧,其實就是問你的數據是如何抽象出來的,他們之間是如何關聯,以及都各自的特色。好像話說白了,都顯得逼格低,尷尬。函數
java對象模型?按照數據模型的套路,也能夠描述下這個問題。1. 由什麼組成?大方向是有對象頭+實例數據+對齊填充組成,咱們更多須要描述下對象頭的內容,好比 _mark, _metadata, 與鎖相關的運行時數據保存在_mark對象頭中,並且_mark內容不是固定的,它會根據鎖狀態不一樣存儲不一樣的信息,主要包含GC分代年齡、鎖狀態標記、哈希碼、epoch等信息; 2. 能作什麼操做?數據的實例信息都保存在堆中,由對象頭的指針標明其所在。
mapreduce模型?這是hadoop的分佈式並行計算模型,即只有兩個函數map和reduce組成的計算模型,其中由分片,排序,合併,歸併等重要操做鏈接起來的這麼個模型,可讓開發人員只需關注計算邏輯而無需協調各類分佈式問題,從而簡化大數據開發流程下降開發門坎的這麼個模型,包括後續的spark,storm,flink其中也多少脫不了mapreduce的影子。
開發模型?這準確的說是一個管理類模型,很形象:瀑布模型;快速原型模型;增量模型;螺旋模型;演化模型。。。 這可能更符合小白眼中的模型概念吧!
還有其餘有意思的模型,讓咱們拭目以待吧!
嘮叨: 深度優先。