jms面试题_最新的20多个JMS面试问答(2020)

jms面试题

快速浏览JMS(Java消息服务)常见问题面试问题和答案。 2020年以来的最新问题已添加到列表中。

1.简介

在本教程中,我们将了解2020年经常问到的JMS面试问题。作为面试的一部分,如果您有6年以上的经验,就有机会在JMS领域提出一些问题。 但是,即使经验不足,也可以将JMS经验作为参考。 采访者将检查消息传递是否是企业Java开发的关键方面。

JMS是一种流行的开源Messaging API,许多供应商(例如 Apache Active MQWebsphere MQSonic 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

jms面试题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tomcat(13)Host和Engine容器

【0】README0.1)本文部分文字描述转自 “how tomcat works”,旨在学习 “tomcat(13)Host和Engine容器” 的基础知识;0.2)Host容器:若你想在同一个tomcat部署 上运行多个Context 容器的话,就需要使用 Host 容…

spring react_使用Spring WebFlux构建React性REST API –第2部分

spring react在上一篇文章的续篇中,我们将看到React式流规范及其实现之一,称为Project Reactor 。 React流规范定义了以下接口。 让我们看看这些接口的细节。 发布者→发布者是潜在数量不受限制的序列元素的提供者,可按其订阅者的要求发布它…

tomcat(14)服务器组件和服务组件

【0】README0.1)本文部分文字描述转自 “how tomcat works”,旨在学习 “tomcat(14)服务器组件和服务组件” 的基础知识;0.2)for complete source code ,please visit https://github.com/pacosonTang/HowTomcatWorks/tree/maste…

组合模式的安全模式与透明模式

转载自 树形结构的处理——组合模式(四) 1 透明组合模式与安全组合模式 通过引入组合模式,Sunny公司设计的杀毒软件具有良好的可扩展性,在增加新的文件类型时,无须修改现有类库代码,只需增加一个新的文件类…

spring react_使用Spring WebFlux构建React性REST API –第1部分

spring react在本文中,我们将看到如何使用Spring WebFlux构建响应式REST API。 在进入React式API之前,让我们看看系统是如何发展的,传统REST实现遇到的问题以及现代API的需求。 如果您查看从旧版系统到下文所述的现代系统的期望,…

tomcat(15)Digester库

【0】README0.1)本文部分文字描述转自 “how tomcat works”,旨在学习 “tomcat(15)Digester库” 的基础知识;2)problemsolution:2.1)problem:如下面的代码,Bootstrap类实例化连接器…

api restful_HATEOAS的RESTful服务。 记录超媒体API

api restful1.简介 希望本教程的前一部分不仅揭示了超媒体和HATEOAS的深远意义,而且使我们确信这些都是RESTful Web服务和API的基本构建模块。 在这一部分中,我们将继续侧重于文档方面,以解决如何预先传递Web服务或API功能的问题。 目录 1.…

模版方法模式

转载自 23种设计模式(6):模版方法模式定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。 类型:行为类模式 类图&#…

java并发编程实践(1)intro

【0】README0.1)本文部分文字描述转自“java并发编程实践”,旨在学习“java并发编程实践(1)intro”的相关知识;【3】线程带来的风险【3.1】安全性问题1)intro:在没有充足同步的case下,多个线程的操作执行顺…

读入的字节都写入字节数组中_使用Java将文件读入字节数组的7个示例

读入的字节都写入字节数组中嗨,大家好,Java程序员经常在现实世界中遇到编程问题,他们需要将文件中的数据加载到字节数组中,该文件可以是文本文件或二进制文件。 一个示例是将文件的内容转换为String以显示。 不幸的是,…

迭代子模式

转载自 《JAVA与模式》之迭代子模式 在阎宏博士的《JAVA与模式》一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部…

java并发编程实践(2)线程安全性

【0】README 0.0)本文部分文字描述转自:“java并发编程实战”, 旨在学习“java并发编程实践(2)线程安全性” 的相关知识;0.1)几个术语(terms)t1)对象的状态:是指存储在状…

自动配置jdk_JDK 15中自动自动发送更好的NullPointerException消息

自动配置jdk我讨论了期待已久的和高度赞赏改进的NullPointerException ( NPE在帖)消息“ 更好的默认NullPointerException异常消息即将到Java? ”和“ JDK 14中更好的NPE消息 ”。 当此JEP 358驱动的功能添加到JDK 14中时 ,想要从…

tomat(16)关闭钩子

【0】REAMDE0)本文部分文字描述转自:“how tomcat works”,旨在学习“tomat(16)关闭钩子”的相关知识;1)problemsolution:1.1)problem:在很多实际环境中,当用户关闭应用程…

apache.camel_Apache Camel 3.1 – XML路由的快速加载

apache.camelCamel 3.1中添加的一项功能是能够更快地加载XML路由。 这是我们为使Camel变得更小,更快而进行的总体工作的一部分。 您可能会说ewww XML。 但坦率地说,有很多Camel用户使用XML定义路由来构建应用程序。 在Camel 2.x中,您将不得不…

程序中 设置jvm 参数_高效应用程序的7个JVM参数

程序中 设置jvm 参数在撰写本文时(2020年3月),围绕垃圾收集和内存,您可以将600多个参数传递给JVM。 如果您包括其他方面,则JVM参数总数将很容易超过1000个。 😊。 任何人都无法消化和理解太多的论据。 在本…

tomcat(17)启动tomcat

【0】README 1)本文部分文字描述转自“how tomcat works”,旨在学习“tomcat(17)启动tomcat”的相关知识;2)本文重点关注启动Tomcat时会用到的两个类,分别是Catalina类和 Bootstrap类;(干货——…

八爪鱼 是java做的吗_章鱼扫描仪:Java构建工具和恶意软件

八爪鱼 是java做的吗Alvaro Munoz最近在GitHub Security Lab网站上发布了“ Octopus扫描程序恶意软件:攻击开源供应链 ”。 我发现这篇文章很有趣,原因有很多,其中包括对Octopus Scanner恶意软件的工作原理和发现方式的详细介绍, …

spring(1)Spring之旅

【0】README0.1)本文部分文字描述转自:“Spring In Action(中/英文版)”,旨在reviewSpring(1)Spring之旅 的相关知识;【1】简化java 开发1)为了降低java开发的复杂性,Spring采取了以…

apache.camel_Apache Camel K 1.0在这里–您为什么要关心

apache.camel昨天我们发布了Apache Camel K 1.0,并在社交媒体和Camel网站上宣布了该版本。 那么,骆驼K是什么,为什么你要在乎呢? 这是一个很好的问题,我想通过提及伟大的思想来帮助回答这个问题。 Hugo Guerrero发表…