java面试spring_针对Java程序员的二十大Spring REST面试问题答案

java面试spring

大家好,过去两周来,我一直在与Spring教程共享一些REST,今天,我将向申请Web开发人员角色的Java开发人员共享一些常见的Spring和REST采访问题。 由于Spring Framework是用于开发Java Web应用程序和RESTful Web Services的最受欢迎的标准框架,因此任何资深Java开发人员都应该对Spring核心和Spring MVC有所了解,但是如果职位描述中提到REST和Web Services,您还需要了解如何使用Spring Framework开发RESTful Web服务。 从Spring 3.1开始,该框架进行了很多增强,以支持RESTFul API即开即用的许多功能,例如
通过仅检测类路径中的相关库(例如Jackson和JAXB), HTTPMessageConverter可以将HTTP响应转换为JSON或XML 。

Spring还为RESTful Web服务提供了自定义的注释,例如@ RestController ,它可以使Controller知道REST,因此您不需要执行每个REST API所需的常规工作,例如将响应转换为JSON。

对于在现实世界中开发和保护RESTful Web服务也必须具备对Spring Security的全面了解。 由于没有安全性就无法使生活成为平凡的REST API,因此对安全性基础知识(例如HTTP基本身份验证 ,摘要身份验证,OAuth和JWT)的充分了解非常重要。

20 Spring REST Web服务面试问题

这是有关在Spring Framework中使用REST Web服务的几个常见问题。

REST代表什么? (回答)

REST代表REpresentational State Transfer,它使用HTTP协议将数据从客户端发送到服务器,例如,可以使用JSON或XML将服务器中的书交付给客户端。

什么是资源? (回答)

资源是REST体系结构中数据的表示方式。 通过将实体公开为资源,它允许客户端使用HTTP方法(例如GET , POST ,
放入 ,删除等

什么是安全的REST操作? (回答)

REST API使用HTTP方法执行操作。 某些不会在服务器上修改资源的HTTP操作被称为安全操作,例如GET和HEAD。 另一方面, PUT ,POST和DELETE是不安全的,因为它们会修改服务器上的资源。


什么是幂等运算? 幂等为什么重要? ( 回答 )

无论您使用多少次,都有一些HTTP方法(例如GET)会产生相同的响应,例如,将多个GET请求发送到相同的URI将导致相同的响应而没有任何副作用,因此被称为等幂。

另一方面,POST不是幂等的,因为如果您发送多个POST请求,它将导致在服务器上创建多个资源,但是如果您使用它来更新资源,则PUT也是幂等的。

甚至,多个PUT请求更新服务器上的资源也会得到相同的最终结果。

REST是否可扩展和/或可互操作? (回答)

是的,REST是可伸缩且可互操作的。 它没有要求在客户端或服务器端选择特定的技术。 您可以使用Java,C ++,Python或JavaScript创建RESTful Web服务并在客户端使用它们。 我建议您读一本有关REST API的好书,例如RESTful Web服务,以了解有关REST的更多信息。

RestTemplate的优点是什么? ( 回答 )

RestTemplate类是Spring框架中Template方法模式的实现。 与其他流行的模板类(例如JdbcTemplateJmsTempalte ,它还简化了与客户端RESTful Web服务的交互。 您可以使用它很容易地使用RESTful Web Servicer,如本示例所示。

REST使用哪种HTTP方法? ( 回答 )

REST可以使用任何HTTP方法,但是最受欢迎的方法是GET用于检索资源,POST用于创建资源,PUt用于更新资源以及DELETE用于从服务器中删除资源。

Spring REST中的HttpMessageConverter是什么? (回答)

HttpMessageConverter是一个Strategy接口 ,它指定可以在HTTP请求和响应之间进行转换的转换器。 Spring REST使用此接口将HTTP响应转换为各种格式,例如JSON或XML。

每个HttpMessageConverter实现都有一个或多个与之关联的MIME类型。 Spring使用“ Accept”标头来确定客户端期望的内容类型。

然后它将尝试找到一个注册的HTTPMessageConverter ,它能够处理该特定的内容类型,并使用它在将响应发送到客户端之前将其转换为该格式。

如何创建HttpMessageConverter的自定义实现以支持新型的请求/响应? (回答)

您只需要创建AbstractHttpMessageConverter的实现,并使用WebMvcConfigurerAdapter#extendMessageConverters()方法将其注册,并生成新的请求/响应类型。

REST通常是无状态的吗? ( 回答 )

是的,REST API应该是无状态的,因为它基于同样无状态的HTTP。 REST API中的请求应包含其处理所需的所有详细信息,即它不应依赖于上一个或下一个请求或服务器端维护的某些数据,例如会话。 REST规范对使其成为无状态设置了约束,因此在设计REST API时应牢记这一点。

@RequestMapping注释有什么作用? ( 回答 )

@RequestMapping批注用于将Web请求映射到Spring Controller方法。 您可以基于HTTP方法(例如GET和POST)以及其他各种参数来映射请求。 例如,如果您正在使用Spring开发RESTful Web Service,则可以使用Produces和consumers属性以及媒体类型注释来指示此方法仅用于产生或使用JSON,如下所示:

@RequestMapping (method = RequestMethod.POST, consumes="application/json")
public Book save(@RequestBody Book aBook) {return bookRepository.save(aBook);
}

您可以类似地创建其他处理程序方法以生成JSON或XML。

@Controller是构造型吗? @RestController是构造型吗? ( 回答 )

是的, @Controller @RestController@RestController都是@RestController型。 @Controller实际上是Spring的@Component型注释的一种特殊形式。 这意味着在容器的组件扫描过程中,Spring容器也会自动检测带有@Controller注释的类。

并且, @RestController是用于RESTful Web服务的@Controller的特殊化。 它不仅结合了@ResponseBody@Controller注释,而且还为您的控制器类赋予了更多含义,以清楚地表明它处理RESTful请求。

Spring框架也可以使用此注释来提供一些将来与REST API开发相关的更有用的功能。

@Controller@RestController什么@RestController ( 回答 )

正如我在较早的文章中所讨论的, @Controller @RestControlle@RestControlle r之间有很多区别(请参阅答案),但最重要的是,使用@RestController可以自动获得@ResponseBody批注,这意味着您无需单独进行批注。您的带有@ResponseBody批注的处理程序方法。 这使得使用Spring可以更轻松地开发RESTful Web服务。 你可以在这里看到学习

在Spring MVC中何时需要@ResponseBody注释? ( 回答 )

可以在方法上放置@ResponseBody批注,以指示应将返回类型直接写到HTTP响应主体(而不是放置在Model中或解释为视图名称)。

例如:

@RequestMapping(path = "/hello", method = RequestMethod.PUT)
@ResponseBody
public String helloWorld() {return "Hello World";
}

另外,您也可以使用@RestController注释代替@Controller注释。 这将消除使用@ResponseBody的需要,因为如上一个答案中所述,它自动带有@RestController批注。

在Spring MVC中, @PathVariable有什么作用? 为什么它在带有Spring的REST中有用? ( 回答 )

这是Spring MVC的有用注释之一,它使您可以从URI(如查询参数)读取值。 在使用Spring创建RESTful Web服务的情况下,这特别有用,因为在REST中,资源标识符是URI的一部分。通常会向有经验的Spring MVC开发人员(例如4至6年的经验)提出这个问题。

例如,如果要提取101 ID,则在URL http://myapp.com/books/101 ,可以使用Spring MVC的@PathVariable注释。

成功的DELETE语句的HTTP状态返回码是什么? ( 回答 )

成功删除后,REST API应该返回什么状态代码没有严格的规则,即它可以返回200 Ok或204 No Content。 通常,如果DELETE操作成功并且响应主体为空,则返回204。如果DELETE请求成功并且响应主体为非空,则返回200

CRUD是什么意思? (回答)

CRUD是创建,读取,更新和删除的缩写。 在REST API中,POST用于创建资源,GET用于读取资源,
PUT用于更新资源,而DELETE用于从服务器删除资源。这是另一级初学者水平的Spring MVC问题,适用于1-3年的经验丰富的程序员

您在哪里需要@EnableWebMVC? (回答)

使用Java配置而不是XML配置Spring MVC时,需要@EnableWebMvc注释才能启用Spring MVC。 它等效<mvc: annotation-driven>in XML配置中的<mvc: annotation-driven>in

它支持使用@RequestMapping将传入请求映射到处理程序方法的@RequestMapping @Controller-annotated类。

在Spring MVC中何时需要@ResponseStatus批注? ( 回答 )
一个3到5年经验丰富的Spring开发人员的好问题。 在Spring MVC和REST中的错误处理期间,需要@ResponseStatus批注。 通常,当在服务器端引发错误或异常时,Web服务器将返回一个覆盖的HTTP状态代码500 –内部服务器错误。

这可能适用于人类用户,但不适用于REST客户端。 如果找不到资源,则需要向他们发送正确的状态代码,例如404。 在这里可以使用@ResponseStatus批注,该批注允许您在自定义Exception的情况下发送自定义HTTP状态代码以及正确的错误消息。

为了使用它,您可以创建自定义异常,并使用@ResponseStatus批注以及正确的HTTP状态代码和原因对其进行批注。

当从控制器的处理程序方法中抛出此类异常并且未在其他任何地方处理此类异常时,带有已设置的正确HTTP状态代码的适当HTTP响应将发送到客户端。

例如,如果您正在为提供书籍信息的库编写RESTful Web服务,则可以使用@ResponseStatus创建异常,当找不到书籍而不是内部服务器错误(500)时,该异常返回HTTP响应代码404,如图所示下面:

@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Book")  // 404public class BookNotFoundException extends RuntimeException {// ...}

如果从任何处理程序方法引发此异常,则将以“ No such Book”为原因的HTTP错误代码404返回给客户端。

REST安全吗? 您可以采取什么措施来保护它? ( 回答 )

这个问题通常是由经验丰富的Java程序员提出的,例如2到5年的REST和Spring经验。 安全性是广义的术语,它可以表示通过加密或使用身份验证和授权提供的访问限制来提供消息的安全性。 REST通常不安全,但是您可以使用Spring安全性来保护它。

至少您可以通过在Spring安全配置文件中使用HTTP来启用HTTP基本认证。 同样,如果基础服务器支持HTTPS,则可以使用HTTPS公开REST API。

REST是否可以与传输层安全性(TLS)一起使用? ( 回答 )

TLS或传输层安全性用于客户端和服务器之间的安全通信。 它是SSL(安全套接字层)的后继者。 由于HTTPS可以同时使用SSL和TLS,因此REST也可以使用TLS。

实际上,REST谈到了有关安全性的所有内容,这取决于实现此要求的服务器。 如果服务器支持SSL,则可以使用HTTP和HTTPS访问相同的RESTful Web服务。

如果您使用的是Tomcat,则可以在此处了解更多有关如何在Tomcat中启用SSL的信息。

您是否需要在类路径中使用Spring MVC来开发RESTful Web服务? ( 回答 )

经常向在Spring拥有1到2年经验的Java程序员提出这个问题。 简短的答案是,是的,您需要Java应用程序的类路径中的Spring MVC才能使用Spring框架开发RESTful Web服务。 它实际上是Spring MVC中提供所有有用的注解如@RestController@ResponseCode@ResponseBody@RequestBody@PathVariable ,因此必须用弹簧mvc.jar或在你的pom.xml适当的Maven项

这就是针对初学者和经验丰富的Java JEE开发人员的一些常见的Spring REST Interview问题 。 如果您要获得Spring认证,这些问题对于提高您对Spring REST的知识也非常有用。 如果您从Spring认证的角度需要更多问题,可以在David Mayer的Core Spring Simulator上找到有关此主题的很多问题,它是目前通过Spring认证的最佳模拟器之一。

您可能喜欢的其他Spring教程和资源

  • 5个免费课程,用于学习Core Spring和Spring Boot
  • Spring MVC框架如何工作?
  • Spring Security中的基本身份验证如何工作?
  • Spring中DispatcherServlet的作用是什么?
  • Spring中@ Service,@ Controller和@Component之间有什么区别
  • Baeldung的REST with Spring认证课程

感谢您阅读本文,如果您喜欢本文,请与您的朋友和同事分享。 如果您有任何未在此列表中回答的问题,请发表评论,我会尽力为您找到答案。

翻译自: https://www.javacodegeeks.com/2018/02/top-20-spring-rest-interview-questions-answers-java-programmers.html

java面试spring

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot jwt token前后端分离_「转」七个开源的 Spring Boot 前后端分离项目,建议收藏加转载...

其实前后端分离本身并不难&#xff0c;后段提供接口&#xff0c;前端做数据展示&#xff0c;关键是这种思想。很多人做惯了前后端不分的开发&#xff0c;在做前后端分离的时候&#xff0c;很容易带进来一些前后端不分时候的开发思路&#xff0c;结果做出来的产品不伦不类&#…

联想办公计算机,办公娱乐两不误!联想这些笔记本电脑不容错过

【PConline 海选导购】随着技术的进步&#xff0c;如今的笔记本电脑性能越来越强&#xff0c;尤其是笔记本电脑携带更加方便&#xff0c;可以让你摆脱使用场景的限制&#xff0c;能随时随地畅玩游戏或者进行日常办公&#xff0c;有着台式机无可比拟的优势&#xff0c;因此&…

ftp主要完成与远程计算机的连接,2015计算机三级《网络技术》复习重点:远程登录服务和FTP服务...

2015计算机三级《网络技术》复习重点&#xff1a;远程登录服务和FTP服务一、远程登录服务(TCP连接)(TCP的23端口服务)1、远程登录协议用户使用Telnet命令&#xff0c;使自己的计算机成为远程计算机的一台仿真终端。远程登录允许任意类型的计算机之间进行通信&#xff0c;具体实…

度量空间的应用_使用Dropwizard度量标准监视和测量无功应用

度量空间的应用在上一篇文章中&#xff0c;我们创建了一个简单的索引代码&#xff0c;该代码可以对ElasticSearch进行数千个并发请求。 监视系统性能的唯一方法是老式的日志记录语句&#xff1a; .window(Duration.ofSeconds(1)) .flatMap(Flux::count) .subscribe(winSize -&…

rust的权限柜怎么做_潍坊装修知识~二胎家庭不做上下铺,把两张床靠墙放,中间做收纳柜,你感觉怎么样?...

如今装修最受关注也最让人头疼的就是儿童房装修了&#xff0c;身边二胎家庭、双胞胎家庭也是越来越多&#xff0c;如果户型小&#xff0c;再面对那只有几十平的小户型&#xff0c;2个孩子无法避免的要挤一间卧室&#xff01;所以对于儿童床的摆放和收纳该如何合理安排呢&#x…

java方法示例注释 @_Java 8中的功能接口是什么? @功能注释和示例

java方法示例注释 函数接口是Java 8最重要的概念之一&#xff0c;实际上为lambda表达式提供了动力&#xff0c;但是许多开发人员没有首先了解函数接口在Java 8中的作用就花了很多精力来理解它&#xff0c;并花时间学习lambda表达式和Stream API。除非您知道什么是功能接口以及l…

sql 除法_七天学会SQL-04SQL复杂查询

一、视图&#xff08;以下SQL操作都在Navicat客户端下操作&#xff09;1、什么是视图&#xff1f;1.是什么&#xff1f; 视图存放sql查询语句&#xff0c;使用视图时&#xff0c;会运行视图里的sql查询语句创造出一张临时表&#xff1b;如需频繁使用一段sql查询语句时可将该查询…

r中rep_Spring中@ Component,@ Service,@ Controller和@Repository之间的区别

r中rep在了解Spring框架中Repository Component &#xff0c; Service Controller &#xff0c; Repository Controller和Repository批注之间的区别之前&#xff0c;了解Component批注在Spring中的作用很重要。 在Spring的初始发行期间&#xff0c;所有bean都用于在XML文件中声…

adf4351使用_使用ADF绑定创建视图对象行CreateInsert操作

adf4351使用在这篇简短的文章中&#xff0c;我将重点介绍与在任务流中创建新记录的一种非常常见的方法有关的一个小陷阱。 让我们考虑一个简单的任务流程示例&#xff0c;该任务流程创建一个新的VO行&#xff0c;如果用户单击“确定”按钮&#xff0c;则在页面片段上显示该行并…

css鼠标移入线条延中心伸长,css动画效果:鼠标移上去底部线条从中间往两边延伸 - 子成君-分享出去,快乐加倍!-旧版已停更...

本站已不再更新,最新资源请前往zcjun.com获取!css&#xff1a;.top-nav a:after {content: ;position: absolute;z-index: 2;bottom: 0;left: 50%;display: block;width: 165px;height: 1px;transform: translate(-50%);}.top-nav a:hover:after {height: 2px;animation: ad_w…

css 深度选择器 ,CSS的coped私有作用域和深度选择器

大家都知道当 编译前&#xff1a;.example {color: red;}编译后&#xff1a;.example[data-v-f3f3eg9] {color: red;}看完你肯定就会明白了&#xff0c;其实是在你写的组件的样式&#xff0c;添加了一个属性而已&#xff0c;这样就实现了所谓的私有作用域。但是也会有弊端&…

营销自动化权威指南_免费电子书:自动化根本原因分析的完整指南

营销自动化权威指南自动化根本原因分析入门指南。 我们在OverOps过夜&#xff0c;梦想着拥有一个自动化的世界。 看起来似乎有些怪异&#xff0c;但是您能想象您和您的团队会比那些不眠之夜和无休止的日子在日志文件中筛选以找出问题出在哪里的快乐多了吗&#xff1f; 这些乏…

光立方原理讲解_90%人不理解什么是防眩光射灯 防昡晕 防炫光,。怎么选项led防眩灯...

关于LED射灯“防眩光(防炫光)”实在想和各位朋友讲解一下防眩光原理 &#xff0c;因为我们碰到90%以上装修朋友&#xff0c;总是把眩光理解为简单的不刺眼的光。我可以负责的告诉大家 &#xff0c;市面上没有不刺眼的射灯&#xff0c;不管是LED芯片直接射出来的光&#xff0c;还…

打印机设置虚拟服务器,虚拟机打印机服务器设置

虚拟机打印机服务器设置 内容精选换一换迁移前&#xff0c;您需要设置目的端服务器。该目的端用来接收源端的数据&#xff0c;同时您也可以使用该目的端进行迁移测试和启动目的端。只有“迁移阶段”为“已就绪”时才可设置目的端。或单击“操作”列的“更多 > 设置目的端”&…

datastore_使用Spring Session和JDBC DataStore进行会话管理

datastore在Web应用程序中&#xff0c;用户会话管理对于管理用户状态至关重要。 在本文中&#xff0c;我们将学习在集群环境中管理用户会话所采用的方法&#xff0c;以及如何使用Spring Session以更简单和可扩展的方式实现该方法。 通常在生产环境中&#xff0c;我们将有多个服…

做一个公众号大概要多少钱_公众号流量主一个月可以赚多少钱?

我是小郁儿&#xff0c;点击上方“关注”&#xff0c;每天为你分享自媒体运营与个人精进干货。细心的读者会发现&#xff0c;阅读我文章的时候&#xff0c;最下面不再出现广告卡片了&#xff0c;因为我前几天已经把流量主功能关掉。起初是因为我在看自己发的视频时&#xff0c;…

从Speedment 3.0.17或更高版本的事务轻松返回值

交易次数 在我以前的文章中&#xff0c;我写了关于如何使用Speedment轻松使用事务的方法&#xff0c;其中我们原子地更新了两个银行帐户。 众所周知&#xff0c;事务是一种将多个数据库操作组合到一个原子执行的单个操作中的方法。 但是事务不仅与更新数据库有关&#xff0c;而…

分布式锁的三种实现方式_分布式锁的多种实现方式

目前几乎很多大型网站及应用都是分布式部署的&#xff0c;分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区…

apache ignite_使用Apache Ignite优化Spark作业性能(第1部分)

apache ignite来看看他们是如何工作的&#xff01; 本文的某些部分摘自我的书《 Apache Ignite的高性能内存计算》 。 如果您对这篇文章感兴趣&#xff0c;请查看本书的其余部分&#xff0c;以获取更多有用的信息。 Apache Ignite提供了多种方法来提高Spark作业的性能&#xf…

微软家庭服务器,微软公布Windows Server 2012版本方案,不再提供家庭服务器版

微软官方网站今日公布Windows Server 2012将有四个版本&#xff0c;分别为Foundation、Essentials、Standard以及Datacenter。其中Foundation只供给原始设备制造商(OEM)&#xff1b;Essentials适合中小企业使用&#xff0c;最大用户数为25个&#xff1b;Standard与Datacenter版…