最新的20多个JMS面试问答(2020)
快速瀏覽JMS(Java消息服務)常見問題面試問題和答案。 2020年以來的最新問題已添加到列表中。
1.簡介
在本教程中,我們將了解2020年常見的JMS面試問題。作為面試的一部分,如果您有6年以上的經驗,就有機會在JMS領域提出一些問題。 但是,即使經驗不足,也可以將JMS經驗作為參考。 采訪者將檢查消息傳遞是企業Java開發的關鍵方面。
JMS是一種流行的開源Messaging API,許多供應商(例如 Apache Active MQ , Websphere MQ , Sonic MQ提供了Java消息傳遞API或JMS的實現。
通常,任何面試都是從基礎開始的。 如果所有問題都得到正確回答,那么我們將繼續研究基于JMS體驗項目的問題。
基礎知識是什么? 什么是隊列? 什么是發布者? 什么是訂戶? 什么是發布者和訂閱者模型? 如何配置MQ?
下一級別意味著對實施JMS概念的項目有疑問嗎?
2. JMS面試問題
2.1 WHat是JMS的意思嗎?
JMS是Sun Microsystems提供的Java消息服務,可在網絡中的計算機之間提供通信。 這是與客戶端系統進行交互的標準。 在這里,J2EE應用程序可以使用JMS來創建,發送或接收,閱讀消息。
2.2 JMS提供哪些消息傳遞類型?
JMS附帶兩種消息。
A)同步
B)異步
2.3同步消息傳遞類型和異步消息傳遞類型之間有什么區別?
同步消息:
同步消息傳遞涉及一個客戶端,它等待服務器響應消息。 消息能夠雙向流動。 從本質上講,這意味著同步消息傳遞是雙向通信。 即,發件人向接收方發送一條消息,接收方接收到此消息并向發送方回復。 發件人直到收到收件人的答復后才發送其他消息。
異步消息
異步消息傳遞涉及一個不等待來自服務器的消息的客戶端。 事件用于觸發來自服務器的消息。 因此,即使客戶端關閉,消息傳遞也將成功完成。 異步消息意味著這是一種單向通信,而通信流只是一種方式。
2.4 JMS提供什么類型的消息傳遞模型?
它在消息傳遞世界中主要提供以下兩種消息傳遞模型,并且這兩種是常用的。
A)點對點模型
B)發布和訂閱模型
點對點模型
P2P消息傳遞模型由消息發送者,接收者,隊列和消息組成。 生成消息的JMS客戶端稱為發送者。 使用消息的JMS客戶端稱為接收器。 在P2P模型中,發件人將消息發送到稱為隊列的目的地。 接收者從同一隊列中檢索消息
發布和訂閱模型
發布/訂閱模型由消息發布者,訂閱者和主題組成。 消息生產者稱為發布者; 消息使用者稱為訂戶。 發布者發送消息而訂閱者檢索消息的目的地稱為主題。 發布/訂閱模型基于內容層次結構中節點的概念,其中發布者將消息發布到目的地,并且消息將廣播到所有注冊的訂戶。
2.5主題和隊列有什么區別?
隊列意味著一條消息發給一個,并且只有一個可能的訂戶。 每個用戶都有一個話題。 主題針對發布者-訂閱者模型,而隊列針對點對點。 所有用戶都收到相同的已發布消息。
主題:一種發布機制,用于發布傳遞到多個訂戶的消息。
2.6 JMS提供程序的用途是什么?
JMS提供程序是一種消息傳遞系統,它實現JMS接口并提供管理和控制功能。 Java EE平臺的實現包括JMS提供程序。 JMS客戶端是用Java編程語言編寫的程序或組件,它們產生和使用消息。
它還指定了非JMS客戶端的加密級別,消息的安全級別和最佳數據類型。
2.7 JMS體系結構中有哪些組件?
消息生產者
消息消費者
JMS消息 管理的JMS對象 JNDI命名服務
2.8舉例說明在JMS中使用點對點模型嗎?
2.9支持JMS的應用程序需要哪些核心JMS對象?
2.10什么是JMS管理對象?
JMS管理的對象是由管理員創建的,用于使用JMS客戶端的預配置JMS對象,并放置在JNDI名稱空間中。
2.11 JMS應用程序的重要部分是什么?
連接
屆會
信息 消息生產者 訊息使用者 連接工廠和目的地
2.12什么是JMS會話及其用途?
會話是用于生成(生成)和消費(接收)消息的單線程上下文。 JMS會話可以是本地事務,非事務或分布式事務。
用途:
會話有幾個目的:
這是一個為消息生產者和消費者服務的工廠。
它提供了提供程序優化的消息工廠。
它支持一系列的交易,這些交易將其生產者和消費者的工作組合成原子單位。 它為消耗的消息和產生的消息定義序列順序。 它保留消耗的消息,直到被確認為止。 它序列化向其消息使用者注冊的消息偵聽器的執行。 一個會話可以創建并服務多個消息生產者和使用者。
2.13持久訂閱和非持久訂閱有什么區別?
持久訂閱使訂戶可以自由地接收來自某個主題的所有消息并永久存儲消息,而非持久訂閱不能保證在客戶端斷開與其他用戶的連接時其他用戶發送的消息,并且這些不存儲任何內容。消息。
注意:我們在兩種情況下比較了持久訂戶和非持久訂戶的性能:持久性消息和非持久性10k大小的消息。 兩種情況都使用AUTO_ACKNOWLEDGE確認模式。 我們僅在持久消息的情況下才發現性能影響,這會使傳遞給持久訂戶的消息速度降低了約30%。
2.14什么是字節消息?
BytesMessage對象用于發送包含未解釋字節流的消息。 它從Message接口繼承,并添加一個字節的消息正文。 消息的接收者提供字節的解釋。
BytesMessage方法主要基于java.io.DataInputStream和java.io.DataOutputStream中的方法。
此消息類型用于現有消息格式的客戶端編碼。 如果可能,應改用其他自定義消息類型之一。
2.15討論JMS API中可用的不同類型的消息嗎?
JMS API中提供了不同類型的消息,這些消息是
TextMessage,BytesMessage,StreamMessage,ObjectMessage和
MapMessage 。
一條短信
TextMessage用于存儲任何特定長度的字符串值。 但這僅需要String消息。 此消息類型可用于傳輸基于文本的消息,包括具有XML內容的消息。
當客戶端收到TextMessage時 ,它處于只讀模式。 如果客戶端此時嘗試寫入消息,則拋出MessageNotWriteableException 。 如果調用clearBody ,則現在可以讀取和寫入消息。
//Create a TextMessage TextMessage sampleTextMsg = session.createTextMessage(); //Store values within TextMessage sampleTextMsg.setText(“sample content”); // Retrieve values from TextMessage String storedText = sampleTextMsg.getText();B.字節消息
//Create BytesMessage BytesMessage sampleBytesMsg = session.createBytesMessage(); //Storing an array of numbers in BytesMessage byte [] byteArray = new byte []{ 66 , 68 , 70 }; sampleBytesMsg.writeBytes(byteArray); // Fetch the stored numbers by doing required casting byte [] msgContent = new byte [ 3 ]; sampleBytesMsg.readBytes(msgContent);C.StreamMessage
StreamMessage對象用于以Java編程語言發送原始類型的流。 它被填充并順序讀取。 原始類型可以使用每種類型的方法顯式讀取或寫入。
//Create a StreamMessage StreamMessage sampleStreamMsg = session.createStreamMessage(); //Store values within StreamMessage sampleStreamMsg.writeBoolean( false ); sampleStreamMsg.writeBoolean( true ); sampleStreamMsg.writeBoolean( false ); // Retrieve values from StreamMessage System.out.println(sampleStreamMsg.readBoolean()); System.out.println(sampleStreamMsg.readBoolean()); System.out.println(sampleStreamMsg.readBoolean());D.對象消息
使用ObjectMessage ,可以將對象包裝為消息并跨其傳輸,但是該對象必須可序列化。
//Create an ObjectMessage ObjectMessage sampleObjMsg = session.createObjectMessage(); //Create a ValueObject and initialize it with values ValueObject vObj = new ValueObject('sampleField', 54 ); //Store the ValueObject within ObjectMessage sampleObjMsg.setObject(vObj)); //Retrieve the stored ValueObject from the ObjectMessage vObj = (ValueObject) sampleObjMsg.getObject();E.MapMessage
MapMessage對象用于發送一組名稱/值對。 名稱是String對象,值是Java的原始數據類型。 名稱不能為空。
//Create a MapMessage MapMessage sampleMapMsg = session.createMapMessage(); //Set Key Value Pair with type String sampleMapMsg.setString( 'SampleKey' , 'SampleValue' ); // Retrieve String value using Key sampleMapMsg.getString( 'SampleKey' ); //Set Key Value Pair without specifying type sampleMapMsg.setObject( 'SampleKey1' , 'SampleValue1' ); // Retrieve Object value using Key sampleMapMsg.getObject(' 'SampleKey1' ); ? 2.16 Difference between the P2P(Peer to Peer) model and subscribe model?主要區別在于P2P是高度可靠的,應僅在一對一方案中使用,而訂戶模型可以在一對多方案中使用。
2.17什么是JMS客戶端?
JMS客戶端是JMS的核心組件,用于發送或接收消息。 JMS支持兩種消息傳遞樣式:點對點以及發布和訂閱消息傳遞樣式
JMS是否支持電子郵件作為消息類型?
不能。JMS沒有繼承它的功能。
2.19 JMS與RPC有何不同?
Java消息服務(JMS)
JMS本質上是異步的。 當必須發送消息時,發件人會將消息發送給接收者。 這樣,發件人的工作就完成了,它將繼續進行進一步的處理。 接收者將接收到該消息并繼續其自身的處理。 接收到消息后,沒有從接收方向發送方發送確認。 這是因為JMS是異步的。
在JMS中,消息的發送者和接收者之間沒有耦合。 因此,JMS允許動態添加新的發送者和接收者,從而管理一段時間內復雜性的變化。 因此,JMS是松散耦合的。
當發生意外故障時,JMS將存儲待發送的消息。 系統啟動后,存儲的消息將被發送到相應的接收者。
遠程過程調用(RPC)
RPC本質上是同步的。 與JMS不同,遠程過程調用的調用者將調用該方法,并繼續等待直到被調用的方法完成其執行。 一旦調用的方法執行完成,控件就會返回到調用者。 這是因為RPC在行為上是同步的。
RPC在相互交互的系統之間建立了緊密的耦合。 當調用程序調用遠程方法時,調用程序將被阻塞,直到響應返回給調用程序為止。
當發生意外故障時,該故障將影響整個系統。 因此,整個系統將崩潰。
2.20如何在JMS中向非Java客戶端傳遞消息?
如果您的Java代碼和非Java代碼可以就基于字節或文本的消息格式達成一致,則可以在它們之間交換消息。 是的,它可能消耗一條Java消息。
3.結論
在本文中,我們已經看到了JMS上最常見的面試問題 。
我們將添加更多的問題和答案。
如果您除了這些以外還有其他疑問,請在評論部分中發布。 我們將在本文中添加答??案。
翻譯自: https://www.javacodegeeks.com/2020/04/latest-20-jms-interview-questions-and-answers-2020.html
總結
以上是生活随笔為你收集整理的最新的20多个JMS面试问答(2020)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Faraday Future:Matth
- 下一篇: 全球首创,杭州亚运会开幕式主火炬将用绿色