快速浏览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

最新的20多个JMS面试问答(2020)相关推荐

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

    jms面试题 快速浏览JMS(Java消息服务)常见问题面试问题和答案. 2020年以来的最新问题已添加到列表中. 1.简介 在本教程中,我们将了解2020年经常问到的JMS面试问题.作为面试的一部分 ...

  2. linux 的vi命令中将当前文件另存为新文件a.log,【转】20条Linux命令面试问答

    问:1 如何查看当前的Linux服务器的运行级别? 答: 'who -r' 和 'runlevel' 命令可以用来查看当前的Linux服务器的运行级别. 问:2 如何查看Linux的默认网关? 答: ...

  3. 20条Linux命令面试问答

    问:1 如何查看当前的Linux服务器的运行级别? 答: 'who -r' 和 'runlevel' 命令可以用来查看当前的Linux服务器的运行级别. 问:2 如何查看Linux的默认网关? 答: ...

  4. oppo2020秋招面试_扑面试问答2020

    oppo2020秋招面试 The first alpha version of Flutter appeared almost three years ago - in May 2017. No on ...

  5. scala面试问题_Scala高级面试问答

    scala面试问题 Before reading this post, please go through my previous two posts at "Scala Basic&quo ...

  6. 运维工程师岗位-面试问答

    一.前言 最近参加运维工程师岗位的面试,笔者把自己遇到的和网友分享的一些常见的面试问答收集整理出来了,希望能对自己和对正在准备面试的同学提供一些参考. 二.面试问答 1.介绍下自己?(几乎每家公司首先 ...

  7. 多线程面试题_100多线程和Java并发面试问答–最终清单(PDF下载)

    多线程面试题 在这篇文章中,我们将提供有关多线程和Java并发面试问答的综合文章. 编者注:并发始终是开发人员的挑战,编写并发程序可能非常困难. 引入并发时,有很多事情可能会崩溃,并且系统的复杂性会大 ...

  8. web前端面试问答_Web服务面试问答

    web前端面试问答 在这篇文章中,我们涵盖了您需要熟悉的Web服务概念的几乎所有部分,以回答任何层级问题. 您还将在分类中找到最佳的Web服务面试问题和答案,因此只有在必要时才可以使用特定条款. 今天 ...

  9. java的xml面试题_Java程序员的10个XML面试问答

    java的xml面试题 XML面试问题在各种编程工作面试中非常受欢迎,包括针对Web开发人员的Java面试 . XML是一项成熟的技术,通常用作从一个平台传输数据的标准. XML面试问题包含来自各种X ...

最新文章

  1. np.unique 去重用法
  2. ECCV 2020 五项大奖出炉!李飞飞高徒、徒孙共摘最佳论文奖
  3. python3学习笔记一(标识符、关键字)
  4. jQuery选择器之可见性过滤选择器Demo
  5. spring原始注解(value)-03
  6. animation动画不生效_SwiftUI动画(1)之Animatable
  7. json数据格式化展示出来
  8. 浅谈C/C++中的指针和数组(一)
  9. 西建大历年电子与通信工程复试真题_学姐分享2020年西安电子科技大学电子与通信工程考研初复试经验指导...
  10. The Linux Process Principle, PID、PGID、PPID、SID、TID、TTY
  11. 数据挖掘入门之Titanic
  12. 安卓基础干货(六):安卓Activity的学习
  13. pyecharts、plotly图表插入PPT中
  14. linux命令 sys,syslinux常用菜單命令
  15. xcode 真机调试无法选择对应设备 “ineligible devices“
  16. MarkdownPad2 自动生成目录
  17. 提取文件名+复制+改名+批量创建文件程序(Excel VBA版)
  18. 怎么证明未显式定义构造方法时,编译器会自动生成无参的构造方法?
  19. jQuery基础文档(持续更新)
  20. 板材眼镜大小调整方法

热门文章

  1. 2021牛客暑期多校训练营7 K-xay loves sequence(主席树+二分)
  2. codeforces1484 B. Restore Modulo(数学)
  3. 【结论】Number(jzoj(gz) 1781)
  4. 【dfs】I Like Matrix!
  5. Mybatis生成器插件扩展,定制方法生成,list参数生成
  6. 如何使用MAT进行JVM内存泄露分析
  7. Linux查找含有某字符串的所有文件
  8. Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
  9. break 和continue的用法 java——CSDN
  10. 单例 (Singleton)设计模式