程序员不讲武德_针对Java程序员的二十大Spring REST面试问题答案

程序员不讲武德

程序员不讲武德

大家好,最近两周我一直在与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响应转换为JSONXML

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方法(例如GETPOST放入,删除等

什么是安全的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 Framework将来也可能使用此注释来提供一些与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批注,该批注允许您在自定义异常情况下发送自定义HTTP状态代码以及正确的错误消息。

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

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

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

@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Book")  // 404
 public 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教程和资源

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

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

程序员不讲武德

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值