(一)EJB与WebServices部分
1.EBJ是基于哪些技术实现的和JavaBean的区别?
EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现EJB是一个关于用JAVA语言开发的可部署的服务器端组件的组件体系结构。它是一个技术协议,能使组件运行于任何应用服务器,专门用来解决商务问题JAVABEANS是JAVA类,是由属性、事件和方法组成的JAVA组件,它们可以用来组成JAVA应用程序
Java Bean是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理,客户通过容器来访问真正的EJB组件。
2.Webservice有什么好处?
跨平台的可互操作性跨防火墙的通信应用程序集成软件和数据重用。
3.什么是事物处理,J2EE提供哪两种事物处理方式
事务(Transaction)是数据库管理系统提供的基本功能之一,可以把完成用户一个特定工作的一组操作看作是一个不可拆分的工作单元,所以事务也就是作业或任务。
JDBC:支持单一数据库连接事务
JTA:支持分布式事务
4.WEB SERVICE的理解【大唐动力面试题】
Web Service主要是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、WSDL等,所以Web Service可以在任何支持这些标准的环境(Windows,Linux)中使用。注:SOAP协议(Simple Object Access Protocal,简单对象访问协议),它是一个用于分散和分布式环境下网络信息交换的基于XML的通讯协议。在此协议下,软件组件或应用程序能够通过标准的HTTP协议进行通讯。它的设计目标就是简单性和扩展性,这有助于大量异构程序和平台之间的互操作性,从而使存在的应用程序能够被广泛的用户访问。
5.J2EE系统访问速度慢.从哪些方面可以优化
J2EE性能的优化包括很多方面的,要达到一个性能优良的系统,除了关注代码之外,还应该根据系统实际的运行情况,从服务器软硬件环境、集群技术、系统构架设计、系统部署环境、数据结构、算法设计等方面综合考虑来优化。一般程序级别的优化首先考虑做数据缓存,数据库方面全做表的切割、数据分区、索引等这些方面来加快对数据的访问。
6.说说你所知道的应用服务器?
BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss
7.什么是J2EE?J2EE是技术还是平台还是框架?什么是J2EE
答:
Je22是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。
J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。
J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。
8.请对以下在J2EE中常用的名词进行解释(或简单描述)
web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
EJB容器:Enterprise java bean容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。
9.如何给weblogic指定大小的内存?
在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以调整最小内存为32M,最大200M
10.如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置?
缺省安装中使用DemoIdentity.jks和DemoTrust.jks KeyStore实现SSL,需要配置服务器使用Enable SSL,配置其端口,在产品模式下需要从CA获取私有密钥和数字证书,创建identity和trust keystore,装载获得的密钥和数字证书。可以配置此SSL连接是单向还是双向的。
11.EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别?
EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。
对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。
对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。
Session Bean还可以再细分为Stateful Session Bean与Stateless Session Bean,这两种的Session Bean都可以将系统逻辑放在method之中执行,不同的是Stateful Session Bean可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的Stateful Session Bean的实体。Stateless Session Bean虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫Stateless Session Bean的时候,EJB Container并不会找寻特定的Stateless Session Bean的实体来执行这个method。换言之,很可能数个使用者在执行某个Stateless Session Bean的methods时,会是同一个Bean的Instance在执行。从内存方面来看,Stateful Session Bean与Stateless Session Bean比较,Stateful Session Bean会消耗J2EE Server较多的内存,然而Stateful Session Bean的优势却在于他可以维持使用者的状态。
12.EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
SessionBean:Stateless Session Bean的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean的方法时容器会把调用分派到与此客户机相关联的Bean实例。
EntityBean:Entity Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或者Beans自己管理。
EJB通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API(JTA),开发组(X/Open)的XA接口。
13.EJB的几种类型
【参考答案】
会话(Session Bean)Bean,实体(Entity Bean)Bean消息驱动的(Message Driven Bean)Bean
会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种。
实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种。
14.Tomcat和WebLogic的区别?【杭州网阙科技】
【参考答案】
1)WLS全面支持J2EE的标准规范和其他标准规范(Web Service, SSL, xml等),同时BEA为众多规范组织的制定者之一,积极参与规范的制定;Tomcat只支持部分J2EE标准,应用局限性强,不能够安全稳定的支持大并发
2)WLS:集群机制,支持分布式的应用;Tomcat:不支持
3)WLS:开发模式下,不用重起部署新Web, EJB应用;Tomcat:不支持
4)WLS收费的应用服务器,支持EJB容器。Tomat开源,但只实现了Web容器,不支持企业级应用。
(二)项目管理与设计模式
1.OO设计原则?
单一责任原则、依赖倒置原则、开放封闭原则OCP。
2.什么情况下,不能用单例模式。
单例模式简单易用,但是也是所有设计模式中最容易滥用的模式。当你的类想得到很好的扩展时,不能使用单例模式。
3.软件开发的流程是怎样的?【云巢动脉】
需求分析、概要设计、详细设计、编码、测试、交付、验收、维护
4.描述工厂模式和单例优缺点举例在什么情况下用。
单例模式优点:
单例保证一个类只有单一的实例,也就是说你无法通过New来创建这个类的一个新实例好处:当一个对象在程序内部只能有一个实例的时候,它可以保证我们不会重复创建,而是始终指向同一个对象。缺点就是它就是在内存上共享,都可以去访问它,而且多个用户访问的都是同一个实例,会造成线程不安全。
工厂模式优点:
第一,方便系统统一管理与维护,降低组件间耦合。
第二,它让具体的创建实例与客户端分离,客户端是通过它们的抽象接口操纵实例,使得实例名不会出现在客户端代码中。
5.写适配器模式,观察者模式?【云巢动脉】
适配器模式:
Target:定义Client使用的与特定领域相关的接口
publicinterfaceTarget
{
voidrequest();
}
Adaptee:现在需要适配的已经存在的接口
publicclassAdaptee
{
publicvoidspecificRequest(){}
}
Adapter:对Adaptee的接口与Target接口进行适配
publicclassAdapterimplementsTarget
{
publicAdapter(Adaptee adaptee)
{
super();
this.adaptee = adaptee;
}
publicvoidrequest()
{
adaptee.specificRequest();
}
privateAdaptee adaptee;
}
观察者模式:
Subject:
1. Subject可以加将Observer对象的引用保存在一个聚集中,每个Subject可以有任意个Observer。
2.提供注册和删除Observer对象的接口。
publicinterfaceSubject
{
publicvoidregisterObserver(Observer o);
publicvoidremoveObserver(Observer o);
publicvoidnotifyObservers();
}
Observer:
1.为那些在Subject发生改变时需获得通知的对象定义一个更新接口。
publicinterfaceObserver
{
publicvoidupdate();
}
Concrete Subject:
1.将有关状态存入各ConcreteObserver对象,当它的状态发生改变时,向它的各个观察者发出通知。
publicclassConcreteSubjectimplementsSubject
{
privateArrayList observers;
publicConcreteSubject()
{
observers =newArrayList();
}
publicvoidregisterObserver(Observer o)
{
observers.add(o);
}
publicvoidremoveObserver(Observer o)
{
inti = observers.indexOf(o);
if(i >= 0)
{
observers.remove(i);
}
}
publicvoidnotifyObservers()
{
for(inti = 0; i < observers.size(); i++)
{
observer = observers.get(i);
observer.update();
}
}
publicvoidstateChanged()
{
notifyObservers();
}
publicvoidsetState()
{
stateChanged();
}}
Concrete Observer:
1.维护一个指向ConcreteSubject对象的引用。
2.存储有关状态,这些状态应与Subject的状态保持一致。
3.实现Observer的更新接口以使自身状态与Subject的状态保持一致。
publicclassConcreteObserverimplementsObserver
{
privateSubject subject;
publicConcreteObserver(Subject subject)
{
this.subject = subject;
subject.registerObserver(this);
}
publicvoidupdate()
{
// your code
}}
6.适配器模式解释【】
把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端
7.说说UML
标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。
8.UML中的几种关系?
依赖,关联,泛化,实现
9.UML几种图及用途?
1)用例图—描述系统的参与者与用例之间的关系
2)类图—描述系统中的概念及它们之间的关系
3)对象图—描述系统中实例及它们之间关系
4)状态图—描述系统中对象所具备的状态,及触发状态改变的事件
5)时序图—描述对象之间发送消息的时间顺序
6)协作图—描述对象之间协作关系
7)活动图—描述执行过程中涉及的活动及状态变化
8)组件图—描述系统组件之间的关系
9)配置图—描述系统的硬件及软件的物理结构
10.常用的设计模式?说明工厂模式。
Java中的23种设计模式:
Factory(工厂模式),Builder(建造模式),Factory Method(工厂方法模式),
Prototype(原始模型模式),Singleton(单例模式),Facade(门面模式),
Adapter(适配器模式),Bridge(桥梁模式),Composite(合成模式),
Decorator(装饰模式),Flyweight(享元模式),Proxy(代理模式),
Command(命令模式),Interpreter(解释器模式),Visitor(访问者模式),
Iterator(迭代子模式),Mediator(调停者模式),Memento(备忘录模式),
Observer(观察者模式),State(状态模式),Strategy(策略模式),
Template Method(模板方法模式),Chain Of Responsibleity(责任链模式)
工厂模式:
工厂模式是一种经常被使用到的模式,所指的是简单工厂模式,还有另一种工厂方法模式、单例模式,也用到一些工厂模式的思想。工厂模式可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例,这就是工厂模式的实现。
【说明】
设计模式分为三大类:创建型,结构型,行为型。
分别是:
创建型(工厂、工厂方法、抽象工厂、单例)
结构型(包装、适配器,组合,代理)
行为(观察者,模版,策略)
说6、7种即可。
11.DAO设计模式与DELEGATE模式
DAO(Data Access Object)模式实际上是两个模式的组合,即Data Accessor模式和Active Domain Object模式,其中Data Accessor模式实现了数据访问和业务逻辑的分离,而Active Domain Object模式实现了业务数据的对象化封装,一般我们将这两个模式组合使用。
DAO模式通过对底层数据的封装,为业务层提供一个面向对象的接口,使得业务逻辑开发员可以面向业务中的实体进行编码。通过引入DAO模式,业务逻辑更加清晰,且富于形象性和描述性,这将为日后的维护带来极大的便利。试想,在业务曾通过Customer.getName方法获得客户姓名,相对于直接通过SQL语句访问数据库表并从ResultSet中获得某个字符型字段而言,哪种方式更加易于业务逻辑的形象化和简洁化?
Business Delegate起到客户端业务抽象化的作用。它抽象化,进而隐藏业务服务的实现。使用Business Delegate,可以降低表示层客户端和系统的业务服务之间的耦合程度。根据实现策略不同,Business Delegate可以在业务服务API的实现中,保护客户端不受可能的变动性影响。这样,在业务服务API或其底层实现变化时,可以潜在地减少必须修改表示层客户端代码的次数。
12.适配器模式与桥梁模式的区别
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。又称为转换器模式、变压器模式、包装模式(把已有的一些类包装起来,使之能有满足需要的接口)。适配器模式的用意是将接口不同而功能相同或者相近的两个接口加以转换,包括适配器角色补充一些源角色没有但目标接口需要的方法。就像生活中电器插头是三相的,而电源插座是两相的,这时需要一个三相变两相的转换器来满足。
比如,在Java I/O库中使用了适配器模式,象FileInputStream是一个适配器类,其继承了InputStrem类型,同时持有一个对FileDiscriptor的引用。这是将一个FileDiscriptor对象适配成InputStrem类型的对象形式的适配器模式。StringReader是一个适配器类,其继承了Reader类型,持有一个对String对象的引用。它将String的接口适配成Reader类型的接口。等等。
桥梁模式的用意是要把实现和它的接口分开,以便它们可以独立地变化。桥梁模式并不是用来把一个已有的对象接到不相匹配的接口上的。当一个客户端只知道一个特定的接口,但是又必须与具有不同接口的类打交道时,就应该使用桥梁模式。
比如,JDBC驱动器就是一个桥梁模式的应用,使用驱动程序的应用系统就是抽象化角色,而驱动器本身扮演实现化角色。应用系统和JDBC驱动器是相对独立的。应用系统动态地选择一个合适的驱动器,然后通过驱动器向数据库引擎发出指令就可以访问数据库中的数据。
13.开发中都用到了那些设计模式?用在什么场合?
简单工厂模式、单例模式、观察者模式、适配器模式等。
i���F�
下载完整面试题文件:
https://www.duyunwl.cn/2019/03/08/java面试题大全/