您的位置:首页 > 职场人生

我遇到的面试题

2016-03-24 21:06 417 查看
1.Hashtable的原理,并说出HashMap与Hashtable的区别。

原理:和HashMap一样,Hashtable
也是一个散列表,它存储的内容是键值对(key-value)映射。Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。此外,Hashtable中的映射不是有序的。

详细的介绍:点击打开链接

区别:

类定义不同

public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
Hashtable实现 abstract Dictionary ,HashMap实现 abstract AbstractMap类。

Hashtable 方法是同步的。
Hashtable 不允许value==null。
Hashtable 调用了key的hashCode方法,如果key==null,会抛出空指针异常。
HashMap 方法是不同步的。
HashMap 方法允许key==null。
HashMap 方法并没有对value进行任何调用,所以允许为null。

2.解释J2EE的名词JNDI、JMS、JTA、RMI

JNDI: (Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。 现在JNDI已经成为J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI的服务。
JMS: (Java Message Service) 即Java消息服务。它提供标准的产生、发送、接收消息的接口简化企业 应用的开发。它支持两种消息通信模型:点到点(point-to-point)(P2P)模型和发布/订阅(Pub/Sub)模型。P2P 模型规定了一个消息只能有一个接收者;Pub/Sub 模型允许一个消息可以有多个接收者。

对于点到点模型,消息生产者产生一个消息后,把这个消息发送到一个Queue(队列)中,然后消息接收者再从这个Queue中读取,一旦这个消息被一个接收者读取之后,它就在这个Queue中消失了,所以一个消息只能被一个接收者消费。

与点到点模型不同,发布/订阅模型中,消息生产者产生一个消息后,把这个消息发送到一个Topic中,这个Topic可以同时有多个接收者在监听,当一个消息到达这个Topic之后,所有消息接收者都会收到这个消息。
简单的讲,点到点模型和发布/订阅模型的区别就是前者是一对一,后者是一对多。

几个重要概念

Destination :消息发送的目的地,也就是前面说的Queue和Topic。创建好一个消息之后,只需要把这个消息发送到目的地,消息的发送者就可以继续做自己的事情,而不用等待消息被处理完成。至于这个消息什么时候,会被哪个消费者消费,完全取决于消息的接受者。

Message :从字面上就可以看出是被发送的消息。它有下面几种类型:

StreamMessage:Java 数据流消息,用标准流操作来顺序的填充和读取。

MapMessage:一个Map类型的消息;名称为 string 类型,而值为 Java 的基本类型。

TextMessage:普通字符串消息,包含一个String。

ObjectMessage:对象消息,包含一个可序列化的Java 对象

BytesMessage:二进制数组消息,包含一个byte[]。

XMLMessage: 一个XML类型的消息。

最常用的是TextMessage和ObjectMessage。

Session: 与JMS提供者所建立的会话,通过Session我们才可以创建一个Message。

Connection: 与JMS提供者建立的一个连接。可以从这个连接创建一个会话,即Session。

ConnectionFactory: 那如何创建一个Connection呢?这就需要下面讲到的ConnectionFactory了。通过这个工厂类就可以得到一个与JMS提供者的连接,即Conection。

Producer: 消息的生产者,要发送一个消息,必须通过这个生产者来发送。

MessageConsumer: 与生产者相对应,这是消息的消费者或接收者,通过它来接收一个消息。

前面多次提到JMS提供者,因为JMS给我们提供的只是一系列接口,当我们使用一个JMS的时候,还是需要一个第三方的提供者,它的作用就是真正管理 这些Connection,Session,Topic和Queue等。

通过下面这个简图可以看出上面这些概念的关系。

ConnectionFactory---->Connection--->Session--->Message

Destination + Session------------------------------------>Producer

Destination + Session------------------------------------>MessageConsumer

那么可能有人会问: ConnectionFactory和Destination 从哪儿得到?

这就和JMS提供者有关了. 如果在一个JavaEE环境中, 可以通过JNDI查找得到, 如果在一个非JavaEE环境中, 那只能通过JMS提供者提供给我们的接口得到了.

JTA: (Java Transaction API),JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序的JTA支持极大地增强了数据访问能力。

JTA和JTS

Java事务API(JTA:Java Transaction API)和它的同胞Java事务服务(JTS:Java Transaction Service),为J2EE平台提供了分布式事务服务(distributed
transaction)。
一个分布式事务(distributed transaction)包括一个事务管理器(transaction manager)和一个或多个资源管理器(resource manager)。
一个资源管理器(resource manager)是任意类型的持久化数据存储。
事务管理器(transaction manager)承担着所有事务参与单元者的相互通讯的责任。

JTA与JDBC

JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中:JDBC连接、JDO
PersistenceManager 对象、JMS 队列、JMS 主题、企业JavaBeans(EJB)、一个用J2EE Connector Architecture 规范编译的资源分配器。

RMI: (Remote Method Invoke)-远程调用方法,是java的一组用户开发分布式应用程序的API。通过该RMI机制,可以实现程序组件在不同操作系统之间的通信。它是一种被EJB使用的更底层的协议,比如:一个EJB可以通过RMI调用Web上另一台机器上的EJB远程方法。
RMI使用了序列化方式在客户端和服务器端传递数据,这样,我们就可以在远程方式下编写和使用对象,而不必知道它们实际上是远程的对象。

3.String类和StringBuffer类的区别

简单地说,就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。

StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。

String:在String类中没有用来改变已有字符串中的某个字符的方法,由于不能改变一个java字符串中的某个单独字符,所以在JDK文档中称String类的对象是不可改变的。然而,不可改变的字符串具有一个很大的优点:编译器可以把字符串设为共享的。

StringBuffer:StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer类的append方法追加字符 比 String使用 + 操作符添加字符 到 一个已经存在的字符串后面有效率得多。因为使用 + 操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无凝是一个非常消耗时间的操作。添加多个字符也就意味着要一次又一次的对字符串重新分配内存。使用StringBuffer类就避免了这个问题。

StringBuffer是线程安全的,在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: