Java Web Services面试
Q. 应用集成方式有哪些?
A. 应用可以采用以下方式集成:
1. 共享数据库
2. 批量文件传输
3. 远程过程调用(RPC)
4. 通过消息中间件来交换异步信息(MOM)

Q. 应用集成可以采用的Web服务方式有什么?
A. SOAP WS(Simple Object Access Protocal) 和RESTful Web Service(REpresentational State Transfer)
Q. SOAP WS 和RESTful Web Service之间有什么不同呢?
|
Web service |
REST |
|
适用于安全性和事务处理可靠性要求比较高 的服务 |
简单、性能不错、可扩展性好,并且支持多种数据格式 |
|
既支持远程过程调用(RPC)又支持消息中间件(MOM)方式进行应用集成 |
仅支持RPC集成方式 |
|
传输协议无关,支持多种协议,如,HTTP(S)、Messaging、TCP、UDP SMTP等等 |
协议相关,只支持HTTP(S) |
|
仅允许使用XML数据格式,定义的操作通过POST请求发送。重点是通过操作名来获取服务,并将应用逻辑封装为服务 |
允许多种数据格式,如XML、JSON、文本、HTML等等。由于采用标准GET、PUT、POST、DELETE方法,因此所有的浏览器都可以支持。重点是通过资源名来获取服务,并将数据封装为服务。无状态CRUD操作(创建、读、更新和删除)更适合这种方式 |
|
无法缓存SOAP方式读取的内容 |
可以缓存,而且性能和可扩展性都更好一些 |
|
支持SSL和WS-security,针对企业级应用可以有更多安全保障。例如按需提升安全指数、通过第三方来保证身份认证信息的安全性、除了点到点SSL(point to point SSL)之外,更针对消息的不同部分来提供不同的保密算法等等 |
只支持点到点SSL,而且无论是不是敏感消息,SSl多会加密整条消息 |
|
基于ACID的短寿命事务管理以及基于补偿事务管理的长寿命事务有深入的支持。基于ACID的短寿命事务管理以及基于补偿事务管理的长寿命事务有深入的支持 |
由于基于HTTP协议,因此对于事务处理既不兼容ACID方式也不提供分布式事务的两阶段提交方式。 |
|
即便是要通过SOAP的第三方程序,SOAP通过内置的重试逻辑也可以提供端到端可靠性。 |
没有一个标准的消息系统,因而寄希望于客户通过重连去解决通信失败问题 |
Q.开发基于SOAP的Web service有哪些方式呢?
A.有两种方式;
- 契约先行(也称为自顶向下,contract-first)方式:通过XSD和WSDL来定义contract,然后根据contract生成Java类;
- 契约后行(也称为自底向上,contract-last)方式:先定义Java类,然后生成约定,也就是从Java类得到WSDL文件。
注意:WSDL描述这样一些信息:服务所提供的所有用户操作、终端位置信息(例如,调用服务的URL),请求和响应中的简单或者复杂元素等。
Q. 上面两种方式各有什么优缺点吗?你更推荐哪种?
A.
契约先行方式的Web service
优点:
- 客户端程序和服务器端程序分离,因此重构服务器端代码不会影响到客户端。
- 由于遵守相同的规范,因此客户端和服务器端的开发可以并行进行。
- 开发者可以控制请求\响应消息的结构:例如,“status”应该是作为消息的一个元素还是一个属性?契约规定的非常明确。因此开发者可以大胆的去修改OXM(Object to XML Mapping)库,而不用担心是否会导致“status”从元素变成“属性”。不仅如此,甚至Web service框架和工具箱都可以更换,比如从Apache Axis变成Apache CXF等等。
缺点:
- 开发前期需要额外的一些搭建XSD和WSDL的工作。使用XML Spy、OxygenXM等工具可以简化这些工作。另外,还需要开发对象模型。
- 开发者需要除了Java之外,还需要去学习XSD和WSDL。
契约后行方式的Web service
优点:
- 开发者不用去学习XSD、WSDL和SOAP相关知识。可以通过框架或者工具集利用已有服务来快速构建新的服务。例如,通过基于IDE向导快速构建应用。
- 学习曲线和开发时间会比契约先行方式小。
缺点:
- 项目初始的开发时间会缩短,但是一旦contract发生变化或者需要加入新的元素,那么随之而来的维护和扩展应用所带来的开发时间会是怎样呢?采用这种方式,由于客户端和服务器端之间紧密耦合,因此未来潜在的变化可能破坏客户端的contract,导致所有的客户都会受到影响,为了避免这中情况的发生,项目开发时需要很小心的开发和管理未来要发布的服务。
- XML的有效负载(payload)无法控制。这也就是说修改应用的OXM库会导致某个元素错误的变成了属性。
那么,你会选择哪一种方式呢?
最好的方式是“契约先行”(contract-first),这里有篇文章(ontract-first versus contract-last web services )用一些例子来解释为什么。总的来说,契约先行方式比契约后行方式开发出来的应用更加强壮。当然,选择哪种方式是跟需求和工具等等有关的,需要综合这些因素考虑决定。
Q.如何选择采用哪种Web service?SOAP WS还是REST?
A.一般而言,基于REST的Web service的优势在于其简单、性能不错、可扩展性好,并且也支持多种数据格式。而SOAP则适用于安全性和事务处理可靠性方面要求比较高的服务中。
对于这个问题的答案,更多的考虑依据是设计者对功能性和非功能性需求的要求。通过回答下列问题可以帮助你做出选择:
- 所提供的服务会暴露数据或者业务逻辑吗?(如果会暴露数据的话可以选择REST方式,如果会暴露业务逻辑的话可以选择SOAP WS)。客户或者服务提供商需要一个正式的契约(contract)吗?(SOAP可以通过WSDL(Web Service Description Language)提供一个正式契约)
- 需要支持多种数据格式吗?
- 需要进行AJAX调用吗?(REST可以采用XMLHttpRequest来发送AJAX调用)
- 同步调用还是异步调用?
- 有状态调用还是无状态调用?(REST适合无状态CRUD操作)
- 对于安全性的要求?(SOAP WS对于安全性的支持更好些)
- 对于事务处理的要求?(SOAP WS这方面更有优势)
- 有带宽限制吗?(SOAP消息比较冗长)
- 哪种方式更适合开发者呢呢?(REST更好实现,也更好测试和维护)
Q.有什么可以用来测试Web Service的工具吗?
A.测试SOAP WS可以使用SoapUI,测试RESTFul service可以采用Firefox的“poster”插件。
Q. SOA和Web service的区别是什么?
A. SOA是一种软件设计准则,一种实现松耦合,高可复用性和粗粒度的web服务的设计模式。开发者可以选择任意协议实现SOA,例如,HTTP、HTTPS、JMS、SMTP、RMI、IIOP(例如,采用IIOP的EJB)、RPC等。消息可以采用XML或者数据传输对象(Data Transfer Objects,DTOs)。
Web Service是实现SOA的技术之一。也可以不用Web service来实现SOA应用:例如,用一些传统的技术,像Java RMI,EJB,JMS消息等。但是Web service提供的是标准的平台无关的服务,这些服务采用HTTP、XML、SOAP、WSDL和UDDI技术,因此可以带来J2EE和.NET这些异构技术(heterogeneous technologies)之间的互操作性。
Q.如果可以使用传统的中间件方式,例如,RPC、CORBA、RMI和DCOM,为什么还要选择Web service?
A. 传统的中间件跟应用关系紧密,对应用的任何修改都可能会引起对应中间件的修改。因此这种方式下应用不好维护,复用性也比较差。一般情况下也无法支持异质系统(heterogeneity)。另外,采用这种方式应尽量避免互联网访问应用。还有,这种方式代价更高并且可用性差。
Web service采用松耦合连接,即在客户端和服务器端之间提供了一个抽象层。这种松耦合应用可以减少维护成本并增加可复用性。Web service提供了一种基于XML和Web的新的中间件形式。Web service是语言和平台无关的,任何语言都可以用来开发一个Web service,并且部署到任何平台上,包括小型设备到大型超级计算机。Web service采用语言无关协议,例如HTTP,并且通过Web API来在不同的应用程序之间传输XML消息。Web service可以通过互联网访问,开销少并且可用性好。
转自:http://www.importnew.com/1851.html
Java Web Services面试的更多相关文章
- 【转】Java Web Services面试问题集锦
Q. 应用集成方式有哪些? A. 应用可以采用以下方式集成: 1. 共享数据库 2. 批量文件传输 3. 远程过程调用(RPC) 4. 通过消息中间件来交换异步信息(MOM) Q. 应用集成可以采用的 ...
- Java Web services: WS-Security with Metro--referenc
As you know from "Introducing Metro," the reference implementations of the JAXB 2.x data-b ...
- [Web Service] Java Web Services Tutorial
两种主要的java web services api: JAX-WS 和JAX-RS. Java web service application 之间通过WSDL来交互. 有两种方法来书写java w ...
- (Java后端 Java web)面试时如何展示自己非技术方面的能力(其实就是综合能力)
这篇文章的适用范围其实不仅限于Java后端或Java Web,不过其中有些是拿这方面举例的,在其它方面,大家可以举一反三,应该也能得到些启示. 我们在面试时,会发现有些候选人技术不错,比如在Java ...
- Java Web Services (0) - Overview
前言第1章 Web服务快速入门 1.1 Web服务杂项 1.2 Web服务有什么好处 1.3 Web服务和面向服务的架构 1.4 Web服务简史 1.4.1 从DCE/RPC到XML-RPC 1.4. ...
- Java Web Services (1) - 第1章 Web服务快速入门
SCRIPTS_DIR=/Users/liuzhaofu/opus-dev/product/tools/devPRODUCT_DIR=/Users/liuzhaofu/opus-dev/product ...
- Java Web Services (2) - 第2章 启动日志分析
ZHAOFLIU-Mac:dev liuzhaofu$ ./start --seed########################################################## ...
- Java web 前端面试知识点总结
经过几家大厂面试,目前成功拿到唯品会offer,分享一下我的面试知识点总结: 耦合性:也称块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块的独立性 ...
- java Web Services搭建环境时遇到的各种问题,记录一下。 java.lang.OutOfMemoryError: PermGen space,org/apache/struts2/util/ObjectFactoryDestroyable
情况:在同一个,myEclipes 下加载俩个项目,一个seriver端,一个client端. 必备: myEclipes ,apache-tomcat-7.0.42,apache-tomcat ...
随机推荐
- js中with的作用
js中with的作用当一个对象有多个需要操作的属性或方法时,可以使用如<体>试验<script type=“text/javascript”>var o=文件.创建元素(“DI ...
- JS-逻辑运算符的与,或,非
JS-逻辑运算符的与,或,非 1.非 所谓非,就是取反,非真即假,非假即真. 非运算符不仅仅只能用于布尔值,其他数据类型也是可以的,如下: 1.如果操作数是一个对象,返回false 2.如果操作数是一 ...
- postgres 表和库等信息大小统计
一 .数据库大小的统计 1.单个库查询 select pg_database_size('zybdb'); 2.查询所有的库 方法一: select pg_database.datname, pg_s ...
- greenlet、gevent:历史悠久的用于处理并发的模块
greenlet介绍 greenlet是用C语言编写的一个模块,然后让python调用,目的就是为了让python支持协程. A "greenlet" is a small ind ...
- 【原创】马哥 文本三剑客之awk
命令 awk 全称: man搜索: 简述 基本用法 选项 用法与实验 print 打印 (1)(2)(3) 变量 1.内建变量 FS与OFS RS与ORS NR与FNR NF ARGC与ARGC 2. ...
- visio连接线随形状移动自动伸缩
粘附可保持形状和连接线彼此依附.粘附打开时,可在移动形状时保持连接线跟着一起移动.粘附关闭时,移动形状时连接线将不会跟着移动. 1.在“视图”选项卡上的“视觉帮助”组中,单击对话框启动器 . 2. ...
- BLE 5协议栈-逻辑链路控制与适配协议层(L2CAP)
文章转载自:http://www.sunyouqun.com/2017/04/page/2/ 逻辑链路控制与适配协议通常简称为L2CAP(Logical Link Control and Adapta ...
- C++二叉树前中后序遍历(递归&非递归)统一代码格式
统一下二叉树的代码格式,递归和非递归都统一格式,方便记忆管理. 三种递归格式: 前序遍历: void PreOrder(TreeNode* root, vector<int>&pa ...
- sql 新增一个不为空的列
ALTER TABLE dbo.FW_PATROL_TASK ADD CRUISE_TYPE INT; UPDATE FW_PATROL_TASKSET CRUISE_TYPE = 0; --设置新列 ...
- 热门前沿知识相关面试问题-android插件化面试问题讲解
插件化由来: 65536/64K[技术层面上]随着代码越来越大,业务逻辑越来繁杂,所以很容易达到一个65536的天花板,其65536指的是整个项目中的方法总数如果达到这个数量时则不无法创建新的方法了, ...