最新的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

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

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

相关文章

【学习笔记】SAR相关概念

文章目录 1. 基础SAR—复数据转换—多视处理—自适应滤波—地理编码—斜地距转换—地形辐射校正—转DB影像 2. SAR 平差—自动匹配—区域网平差—几何精校正—镶嵌线编辑 3.干涉 SAR(InSAR/DInSAR)—配准—干涉图计算—基线计算—去除平地相位—相干性计算—干涉图滤波—相位解…

c语言逆序输出6A8F,【C语言】将二进制数逆序输出。比如6为000...0110,逆序后为0110....

//将二进制数逆序输出。比如6为000...0110,逆序后为0110...000#include unsigned int reverse_bit(int num){int i;int bit;unsigned new_num 0;for (i 0; i//将二进制数逆序输出。比如6为000...0110,逆序后为0110...000#include unsigned int reverse_bit(int num){int i;in…

加载dll api_运行时类加载以支持不断变化的API

加载dll api我维护一个IntelliJ插件 ,可以改善编写Spock规范的体验。 这个项目的挑战是在单个代码库中支持多个且不兼容的IntelliJ API版本。 回想起来,该解决方案很简单(这是野外适配器模式的一个示例),但是最初它需要…

12生肖 c语言设计,语言十二生肖教案

十二生肖中班教案十二生肖教案反思语言教案十二生肖点击进入查看全文2010虎年运势测算,走好运,发大财!宝宝三个月,来说一说之前购买的海量的婴儿用品的使用况(配合图片),大家可以都来讨论一下吧。太败了,之…

Quarkus的其他(非标准)CDI功能

Quarkus支持CDI(上下文和依赖注入)2.0,但并非全部,仅支持最常见的功能。 但是,Quarkus确实包含一些非标准功能,这些功能对于开发人员非常方便,我想在下面的视频中进行展示。 不管您是否熟悉CDI…

c语言输出星期几的英语表达,C语言程序设计: 输入年月日 然后输出是星期几...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include main(){int year,month,day0,a,b,week,c,i,sum0,days,d;printf("please input year,month,days\n");scanf("%d,%d,%d",&year,&month,&days);for(i1;i{if (year%40){if(year%1000){if (ye…

将Visual Studio Code设置为jshell中的默认编辑器

Java Shell( jshell )是用于在Java中学习和进行原型制作的交互式工具。 它是在Java 9中引入的,从那以后,我在演示过程中偶尔使用它来进行一些快速原型制作,或者只是为了验证Java语言中的新功能。 由于jshell是命令行工…

c语言中组合函数,排列组合c怎么算 公式是什么

排列有两种定义,但计算方法只有一种,凡是符合这两种定义的都用这种方法计算。定义的前提条件是m≦n,m与n均为自然数。下面介绍排列组合c的计算方法及公式,供参考。排列组合中A和C怎么算排列A(n,m)n(n-1).(n-m1)n!/(n-m)!(n为下标,…

使用Spring WebFlux构建反应性REST API –第1部分

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

c语言中大写a对应的数字,123456789a

大写数字网今天精心准备的是《123456789a》,下面是详解!html里,怎么把<a>123456789</a>弄到中间来例如把a标签的字移到中间来<a123456789><&#…

gradle引入依赖:_Gradle善良:获得更多的依赖性见解

gradle引入依赖:在我们的大多数项目中,我们都依赖于其他代码,例如库或其他项目。 Gradle有一个不错的DSL来定义依赖关系。 依赖性在依赖性配置中分组。 这些配置可以自己创建,也可以通过插件添加。 一旦定义了依赖关系,我们就可以…

android popupwindow 调用方法,Android PopUpWindow使用详解

释放双眼,带上耳机,听听看~!一、概述1、PopupWindow与AlertDialog的区别最关键的区别是AlertDialog不能指定显示位置,只能默认显示在屏幕最中间(当然也可以通过设置WindowManager参数来改变位置)。而PopupWindow是可以指定显示位置…

高效应用程序的7个JVM参数

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

junit:junit_简而言之,JUnit:另一个JUnit教程

junit:junit为什么还要另一个JUnit教程? 对于Java世界中的开发人员而言, JUnit似乎是最受欢迎的测试工具 。 因此,难怪就此主题已经写了一些好书 。 但是我仍然经常遇到程序员,他们至多对这个工具及其正确用法都不太了解。 因此&…

16.04编译android 7.0,ubuntu16.04 编译Android5.1报错

hi kylin team,我使用 ubuntu16.04 构建 android 编译环境后编译 android5.1 时出现如下报错。请向开发团队反馈看能否给出解决方案,谢谢!当我使用 ubuntu16.04 构建 Android 编译环境后, 编译报错. 报错信息如下:/home/.../proj/.../anroidsrcroot/preb…

用Java将文件读入字节数组的7个示例

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

部署gradle_使用Gradle消除开发重新部署

部署gradle为了进行服务开发,我的团队最近从Grails转到了Dropwizard框架。 但是,我真正从Grails堆栈中真正错过的一件事是自动重新加载:对源文件的任何更改在保存后立即显示在运行的应用程序中,而无需重新启动。 事实证明&#xf…

android thrift https,HTTPS 学习

https是加密的http协议,通过不对称加密确认对称加密的密钥,之后使用对称加密进行通信。通信流程:客户端-服务端1. 请求服务器 并添加支持的 非对称加密算法 对称加密算法 hash算法----2. 服务器返回证书,加密算法的种类&#xff0…

如何使用Java创建AWS Lambda函数

在本教程中,我们将看到如何在Java中创建AWS Lambda函数,我告诉你,这样做非常容易…… 基本上,我们可以通过三种方式创建AWS Lambda函数: –通过实现RequestHandler接口 –通过实现RequestStreamHandler接口 –自定义…

android 主流机型排行榜,10月份Android热门手机机型Top 50排行榜

根据《尼尔森:第三季度Android占美智能手机43%份额》的报告显示, 43%的美国人拥有智能手机,智能手机用户数量在过去六个月增加了5%,而其中Android占据了43%的份额,iPhone占据了28%,很明显Android的份额优势…