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 ...
随机推荐
- 使用HandyJSON导致的内存泄漏问题相关解决方法
在移动开发中,与服务器打交道是不可避免的,从服务器拿到的接口数据最终都会被我们解析成模型,现在比较常见的数据传输格式是json格式,对json格式的解析可以使用原生的解析方式,也可以使用第三方的,我们 ...
- MacBook Pro实现共享屏幕(多台mac之间)
1 开启允许所有用户控制屏幕 设置— 共享 2 在另一台MacBook Pro里打开finder窗口,并设置好network显示边栏 3 另一台机器发送请求控制 找 ...
- Linux学习--第九天--du、df、fsck、dumpe2fs、mount、NTFS-3G、fdisk、partprobe、/etc/fstab、free、mkswap、swapon
分区类型 主分区:最多只能分四个 扩展分区:只能有一个,如果有了扩展分区,主分区只能有三个.扩展分区不能格式化和存储数据,再划分为逻辑分区才能进行相应操作. 逻辑分区:IDE硬盘,linux最多支持5 ...
- python常有模块:模块、引入语法、两种执行方式、模块搜索顺序
今天主要讲了以下几点:一.模块三问.定义及分类二.import和from的语法三.文件的两种执行方式及搜索顺序四.内置函数 一.模块.import和from的语法 1.什么是模块 模块是一堆功能函 ...
- apache简介与安装
1.1 apache简介 apache当前全世界排名点击这里 1.1.1 当前互联网主流web服务说明 静态服务 apache --->中小型静态web服务的主流,web服务器中的老大哥 ngi ...
- Git学习笔记(2)-Eclipse中Git插件使用
目前我使用的Eclipse luna版本中已经集成了git插件,这里就不介绍如何安装Git插件了,不懂可以看其他的博客. 上篇笔记介绍了Git的基本指令,实际开发中我基本都使用eclipse插件进行代 ...
- 代码检查工具sonarqube介绍
SonarQube 是一款用于代码质量管理的开源工具,它主要用于管理源代码的质量.通过插件形式,可以支持众多计算机语言. 比如 java, C#, go,C/C++, PL/SQL,Cobol,Jav ...
- Python twisted事件驱动网络框架 源码剖析
一.Twisted简介 Twisted是一个事件驱动的网络框架,其中包含了诸多功能,例如:网络协议.线程.数据库管理.网络操作.电子邮件等. 事件驱动简而言之,事件驱动分为二个部分:第一,注册事件:第 ...
- pip install --upgrade pip
pip install --upgrade pip python库中urllib3 (1.24.3) or chardet (2.2.1) 的版本不兼容 解决如下: # pip uninstall u ...
- App支付宝登录授权
一.在支付宝开放平台申请App应用,并且配置后台信息 https://openhome.alipay.com/platform/appManage.htm#/apps 填写自己的申请信息 添加应用功能 ...