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,一经查实,立即删除!

相关文章

socket python实例_Python网络编程—第27课—Socket实例(0531)

一、创建套接字示例(服务端)import socket #导入模块import time #导入模块s socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建TCP套接字address (127.0.0.1, 8888)s.bind(address) #为TCP套接字绑定IP及端口s.listen(10) #启动TCP监听&#xff0c;同时接受10个sock…

Linux 命令之 bzip2 -- bz2文件的压缩程序

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;一&#xff09;压缩指定文件&#xff08;二&#xff09;压缩指定目录下的文件&#xff08;三&#xff09;解压指定的文件一、命令介绍 Linux 系统中命令 bzip2 的英文是“bunzip2”&#xff0c;即.bz2 文件格式的压缩…

错误计算机怎么打开,电脑开机出错怎么回事

开机后出现这个错误&#xff0c;有没有大神教一下怎么办[Window Title]Error[Main Instruction]A JavaScript error occurred in the main process[Content]Uncaught Exception:Error: Unable to find a valid appat Object. (C:\Program Files (x86)\Thunder Network\Thunder\…

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

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

基于Spring Boot配置文件的日志记录示例样本

我们希望在Spring Boot中为不同的配置文件使用不同的日志记录配置&#xff0c;例如在本地运行中&#xff0c;我们只希望控制台日志记录和用于生产&#xff0c;我们希望文件记录日志支持每天滚动日志文件。 我想出了一个示例logback配置&#xff0c;该配置将在所有应用程序中使…

Linux 命令之 bunzip2 -- bz2 文件的解压缩程序

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;一&#xff09;解压 .bz2 文件一、命令介绍 bunzip2 可解压缩 .bz2 格式的压缩文件。bunzip2 其实是 bzip2 的符号链接&#xff0c;即软链接&#xff0c;因此压缩解压都可以通过 bzip2 实现。执行bunzip2 与 bzip2 -…

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

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

python email模块写邮件_python常用模块email----创建简单的文本邮件并发送

email模块可以方便的用来构造邮件&#xff0c;今天我们通过一个简单的例子来实现文本邮件的构造的发送。先将要发送的内容写在文件里面&#xff1a;cat /tmp/email_test.txthello there!i love python!编写如下脚本&#xff1a;cat test.py#!/usr/bin/python#codingutf-8import…

java私有属性和私有方法_Java接口–历年来Java 9之旅–默认方法和私有方法

java私有属性和私有方法介绍 Java接口已经比Java版本进行了更多的演变&#xff0c;而Java 8和Java 9则有所发展。在本文中&#xff0c;我们将介绍接口在Java 8之前的样子以及如何在Java 8和Java 9中得到增强。 Java 8之前的接口 接口将具有一个或多个抽象方法&#xff0c;如下…

Linux 命令行中的文件名/文件路径中使用通配符的说明

文章目录支持通配符通配符表达式示例通配符使用限制使用通配符表示的路径示例带有空格的通配符或文件名必须加上引号支持通配符 * 表示任意数量的任意字符? 表示任意单个字符 通配符表达式示例 *.txt&#xff1a;这样会查找(添加、选定……)所有扩展名是“.txt”的文件?a*…

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

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

python编程狮题库答案_‎Python编程狮-零基础学Python dans l’App Store

Python编程狮是W3Cschool编程狮旗下专门为零基础Python编程爱好者打造的一款入门工具App&#xff0c;致力于帮助初学者入门&#xff0c;轻松迈入编程世界。学Python&#xff0c;从这里开始&#xff01;【零基础也能学】初学者从0到1&#xff0c;轻松入门&#xff1b;【微课即学…

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

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

关于压缩工具 7z(7-zip) 如何设置压缩算法(选项 -m 的解读)

文章目录 一、用于指定压缩算法的选项 -m 介绍二、Zip 参数(一)X=[0 | 5 | 9 ],设置压缩等级(二)fb={NumFastBytes},设置 Deflate 编码器的单词大小(三)pass={NumPasses},设置 Deflate 编码器的传送大小三、Gzip 参数四、7z 参数(一)x=[0 | 1 | 5 | 7 | 9 ],设置压…

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

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

乘方运算中的“次幂”和“次方”有什么区别?

一个数的“N次幂”和“N次方”在意义上有什么区别&#xff1f;为什么要用不同的名称&#xff1f; 答1&#xff1a; 从数学角度来说&#xff0c;没有什么大的区别。意义都是一致的&#xff0c;都表示N个相同数的连乘。 从语法角度讲&#xff0c;N次幂强调整体性&#xff0c;给人…

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文件中声…

dedian系统云服务器,云服务器选择Ubuntu还是Debian镜像系统?根据熟悉度选择

我们在选择云服务器的时候是不是对于镜像系统选择也有一些纠结&#xff0c;当然对于老用户而言绝对是没有这些问题的。一来我们可以根据自己的熟悉度选择&#xff0c;你平时用什么就选择什么&#xff0c;以及我们可以根据实际的需要有些朋友还会自定义安装自己的镜像系统。当然…