最近面试的小伙伴很多,对此我整理了一份Java面试题手册:基础知识、JavaOOP、Java集合/泛型面试题、Java异常面试题、Java中的IO与NIO面试题、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、SpringBoot、SpringCloud、RabbitMQ、Dubbo、MyBatis、ZooKeeper、数据结构、算法、Elasticsearch、Kafka、微服务、Linux等等。可以分享给大家学习。【持续更新中】
完整版Java面试题地址:【2021最新版】Java面试真题汇总
序号 | 内容 | 地址链接 |
---|---|---|
1 | 【2021最新版】JavaOOP面试题总结 | https://blog.csdn.net/m0_48795607/article/details/115288673 |
2 | 【2021最新版】Java基础面试题总结 | https://blog.csdn.net/m0_48795607/article/details/115485109 |
3 | 【2021最新版】多线程&并发面试题总结 | https://blog.csdn.net/m0_48795607/article/details/115489616 |
4 | 【2021最新版】JVM面试题总结 | https://blog.csdn.net/m0_48795607/article/details/115555086 |
5 | 【2021最新版】Mysql面试题总结 | https://blog.csdn.net/m0_48795607/article/details/115561030 |
6 | 【2021最新版】Redis面试题总结 | https://blog.csdn.net/m0_48795607/article/details/115642129 |
7 | 【2021最新版】Memcached面试题总结 | https://blog.csdn.net/m0_48795607/article/details/115664662 |
8 | 【2021最新版】MongoDB面试题总结 | https://blog.csdn.net/m0_48795607/article/details/115672336 |
9 | 【2021最新版】Spring面试题总结 | https://blog.csdn.net/m0_48795607/article/details/115738909 |
10 | 【2021最新版】Spring Cloud面试题总结 | 未更新 |
11 | 【2021最新版】RabbitMQ面试题总结 | 未更新 |
12 | 【2021最新版】Dubbo面试题总结 | 未更新 |
13 | 【2021最新版】MyBatis面试题总结 | 未更新 |
14 | 【2021最新版】ZooKeeper面试题总结 | 未更新 |
15 | 【2021最新版】数据结构面试题总结 | 未更新 |
16 | 【2021最新版】算法面试题总结 | 未更新 |
17 | 【2021最新版】Elasticsearch面试题总结 | 未更新 |
18 | 【2021最新版】Kafka面试题总结 | 未更新 |
19 | 【2021最新版】微服务面试题总结 | 未更新 |
20 | 【2021最新版】Linux面试题总结 | 未更新 |
答:
多年来,随着新功能的增加 ,spring变得越来越复杂。 只需访问https://spring.io/projects页面 ,我们就会看到可以在我们的应 用程序中使用的所有Spring项目的不同功能。 如果必须启动一个新的Spring项目,我们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加spring配置。因此,开始一个新的spring项目需要很多努力,因为我们现在必须从头开始做所有事情。
Spring Boot是解决这个问题的方法。Spring Boot已经建立在现有spring框架之上。使用spring启动,我们避免了之前我们必须 做的所有样板代码和配置。因此, Spring Boot可以帮助我们以最少的工作量, 更加健壮地使用现有的Spring功能。
答:
Spring Boot 优点非常多,如:
一、独立运行
Spring Boot而且内嵌了各种servlet容器,Tomcat、Jetty等,现在不再需要打成war包部署到容器中,Spring Boot只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个jar包内。
二、简化配置
spring-boot-starter-web启动器自动依赖其他组件,简少了maven的配置。
三、自动配置
Spring Boot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starter-web启动器就能拥有web的功能,无需其他配置。
四、无代码生成和XML配置
Spring Boot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是Spring4.x的核心功能之一。
五、应用监控
Spring Boot提供一系列端点可以监控服务及应用,做健康检测。
答:
Spring Boot的优点有:
1、减少开发,测试时间和努力。
2、使用 JavaConfig 有助于避免使用 XML。
3、避免大量的 Maven 导入和各种版本冲突。
4、提供意见发展方法。
5、通过提供默认值快速开始开发。
6、没有单独的Web服务器需要。这意味着你不再需要启动 omcat,Glassfish或其他任何东西。
7、需要更少的配置 因为没有web.xml文件。只需添加用@Configuration 注释的类,然后添加用@Bean注释的方法,Spring将自动加载对象并像以前一样对其进行管理。您甚至可以将@Autowired添加到bean方法中,以使Spring自动装入需要的依赖关系中。
8、基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序:-Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,Spring将在(application{environment} .properties)中加载后续的应用程序属性文件。
答:
启动类上面的注解是@SpringBootApplication,它也是Spring Boot的核心注解,主要组合包含了以下3个注解:
@SpringBootConfiguration: 组合了@Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration: 打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan: Spring组件扫描
答:
1)打包用命令或者放到容器中运行
2)用Maven/Gradle插件运行
3)直接执行main方法运行
答:
Starters是什么:
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。
如你想使用Spring JPA访问数据库,只要加入springboot-starter-data-jpa启动器依赖就能使用了。Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。
Starters命名:
Spring Boot官方的启动器都是以spring-boot-starter-命名的,代表了一个特定的应用类型。第三方的启动器不能以spring-boot开头命名,它们都被Spring Boot官方保留。一般一个第三方的应该这样命名,像mybatis的mybatis-spring-boot-starter。
Starters分类:
2.Spring Boot生产启动器
3. 其他第三方启动器
答:
如果你想在Spring Boot启动的时候运行一些特定的代码,你可以实现接口ApplicationRunner或者CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个run方法。
CommandLineRunner:启动获取命令行参数。
答:
可以不需要,内置了Tomcat/Jetty等容器。
答:
Spring boot actuator是spring启动框架中的重要功能之一。Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。
有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为HTTP URL访问的REST端点来检查状态。
答:
Spring提供了一种使用ControllerAdvice处理异常的非常有用的方法。 我们通过实现一个ControlerAdvice类,来处理控制器类抛出的所有异常。
答:
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用Spring JPA访问数据库,只要加入spring-boot-starter-data-jpa 启动器依赖就能使用了
答:
spring-boot-starter-web嵌入tomcat和web开发需要servlet与jsp支持
spring-boot-starter-data-jpa数据库支持
spring-boot-starter-data-redis redis数据库支持
spring-boot-starter-data-solr solr支持
mybatis-spring-boot-starter第三方的mybatis集成starter
答:
主要有两种方式:
Spring Loaded
Spring-boot-devtools
答:
在Spring Boot里面,可以使用以下几种方式来加载配置。
1)properties文件;
2)YAML文件;
3)系统环境变量;
4)命令行参数;
等等。
答:
Spring Boot的核心配置文件是application和bootstrap配置文件。
application配置文件这个容易理解,主要用于Spring Boot项目的自动化配置。
bootstrap配置文件有以下几个应用场景。
使用Spring Cloud Config配置中心时,这时需要在bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
一些固定的不能被覆盖的属性;
一些加密/解密的场景
答:
对于集成Spring Boot 和 ActiveMQ,我们使用spring-boot-starter-activemq依赖关系。 它只需要很少的配置,并且不需要样板代码。
答:
Spring JavaConfig是Spring社区的产品,它提供了配置Spring IoC容器的纯Java方法。因此它有助于避免使用XML配置。
使用JavaConfig 的优点在于:
1、面向对象的配置。由于配置被定义为JavaConfig中的类,因此用户可以充分利用Java中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。
2、减少或消除XML配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在XML和Java之间来回切换。
JavaConfig为开发人员提供了一种纯Java方法来配置与XML配置概念相似的Spring容器。从技术角度来讲,只使用JavaConfig配置类来配置容器是可行的,但实际上很多人认为将JavaConfig与XML混合匹配是理想的。
3、类型安全和重构友好。JavaConfig提供了一种类型安全的方法来配置Spring容器。由于Java 5.0对泛型的支持,现在可以按类型而不是按名称检索bean,不需要任何强制转换或基于字符串的查找。
答:
这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。
Spring Boot有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。
Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载Spring Boot上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。
Spring Boot在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。
DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
答:
Spring boot actuator是spring启动框架中的重要功能之一。
Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为HTTP URL访问的REST端点来检查状态。
答:
默认情况下,所有敏感的HTTP端点都是安全的,只有具有ACTUATOR角色的用户才能访问它们。安全性是使用标准的HttpServletRequest.isUserInRole方法实施的。 我们可以使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。
答:
为了在自定义端口上运行Spring Boot应用程序,您可以在application.properties中指定端口。
server.port=8090
答:
YAML是一种人类可读的数据序列化语言。它通常用于配置文件。
与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。
答:
为了实现Spring Boot的安全性,我们使用spring-boot-starter-security依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法。
答:
对于集成Spring Boot和ActiveMQ,我们使用依赖关系。 它只需要很少的配置,并且不需要样板代码。
答:
使用Spring Boot实现分页非常简单。使用Spring Data-JPA可以实现将可分页的传递给存储库方法。
答:
Swagger广泛用于可视化API,使用Swagger UI为前端开发人员提供在线沙箱。Swagger是用于生成RESTful Web服务的可视化表示的工具,规范和完整框架实现。它使文档能够以与服务器相同的速度更新。当通过Swagger正确定义时,消费者可以使用最少量的实现逻辑来理解远程服务并与其进行交互。因此,Swagger消除了调用服务时的猜测。
答:
Spring Profiles允许用户根据配置文件(dev,test,prod 等)来注册bean。
因此,当应用程序在开发中运行时,只有某些 bean可以加载,而在PRODUCTION中,某些其他bean可以加载。假设我们的要求是Swagger文档仅适用于QA环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot使得使用配置文件非常简单。
答:
Spring Boot Batch提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处理作业可以高度可扩展的方式利用框架处理重要大量的信息。
答:
FreeMarker是一个基于Java的模板引擎,最初专注于使用MVC软件架构进行动态网页生成。使用Freemarker的主要优点是表示层和业务层的完全分离。程序员可以处理应用程序代码,而设计人员可以处理html页面设计。最后使用freemarker可以将这些结合起来,给出最终的输出页面。
答:
Spring提供了一种使用ControllerAdvice处理异常的非常有用的方法。 我们通过实现一个ControlerAdvice类,来处理控制器类抛出的所有异常。
答:
使用了下面的一些依赖项
spring-boot-starter-activemq
spring-boot-starter-security
答:
CSRF代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web应用程序上执行不需要的操作。CSRF攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。
这有助于增加更少的依赖关系,并减少版本的冲突。
答:
WebSocket是一种计算机通信协议,通过单个TCP连接提供全双工通信信道。
1、WebSocket是双向的-使用WebSocket客户端或服务器可以发起消息发送。
2、WebSocket是全双工的 -客户端和服务器通信是相互独立的。
3、单个TCP连接 -初始连接使用HTTP,然后将此连接升级到基于套接字的连接。然后这个单一连接用于所有未来的通信。
4、Light-与http相比,WebSocket消息数据交换要轻得多。
答:
在软件开发过程中,跨越应用程序多个点的功能称为交叉问题。这些交叉问题与应用程序的主要业务逻辑不同。因此,将这些横切关注与业务逻辑分开是面向方面编程(AOP)的地方。
答:
Apache Kafka是一个分布式发布-订阅消息系统。它是一个可扩展的,容错的发布-订阅消息系统,它使我们能够构建分布式应用程序。
这是一个Apache顶级项目。Kafka适合离线和在线消息消费。
答:
Spring Boot提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。
但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及50个应用程序的微服务,管理员将不得不击中所有50个应用程序的执行终端。为了帮助我们处理这种情况,我们将使用位于的开源项目。
它建立在Spring Boot Actuator之上,它提供了一个Web UI,使我们能够可视化多个应用程序的度量。
答:
properties和yml,它们的区别主要是书写格式不同。
1)properties
app.user.name = javastack
2)yml
app:
user:
name:
javastack
另外,.yml格式不支持@PropertySource注解导入配置。
答:
1)继承spring-boot-starter-parent项目
2)导入spring-boot-dependencies项目依赖
答:
cn+- javastack +- MyApplication.java |+- customer | +- Customer.java | +- CustomerController.java | +- CustomerService.java | +- CustomerRepository.java |+- order +- Order.java +- OrderController.java +- OrderService.java +- OrderRepository.java
这个目录结构是主流及推荐的做法,而在主入口类上加上@SpringBootApplication注解来开启Spring Boot的各项能力,如自动配置、组件扫描等。
答:
1)打包用命令或者放到容器中运行
2)用Maven/Gradle插件运行
3)直接执行main方法运行
答:
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。
答:
可以实现接口ApplicationRunner或者CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个run方法。
答:
Spring Boot 可以通过@PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量。
答:
Spring Boot支持Java Util Logging, Log4j2, Lockback作为日志框架,如果你使用Starters启动器,Spring Boot将使用Logback 作为默认日志框架。
答:
答:
可以兼容,使用@ImportResource注解导入老Spring项目配置文件。
答:
在生产中使用HTTPS
使用Snyk检查你的依赖关系
升级到最新版本
启用CSRF保护
使用内容安全策略防止XSS攻击
…
答:
配置变更
JDK 版本升级
第三方类库升级
响应式 Spring 编程支持
HTTP/2 支持
配置属性绑定
更多改进与加强…
答:
这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。
Spring Boot有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。
开发人员可以重新加载Spring Boot上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot在发布它的第一个版本时没有这个功能。
这是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。
org.springframework.boot
spring-boot-devtools
true
答:
添加mybatis的starter maven依赖
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.2.0
在mybatis的接口中添加@Mapper注解
在application.yml配置数据源信息
答:
SpringFrame
SpringFramework最重要的特征是依赖注入。所有SpringModules不是依赖注入就是IOC控制反转。
当我们恰当的使用DI或者是IOC的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。
SpringMVC
Spring MVC提供了一种分离式的方法来开发Web应用。通过运用像DispatcherServelet,MoudlAndView和ViewResolver等一些简单的概念,开发Web应用将会变的非常简单。
SpringBoot
Spring和SpringMVC的问题在于需要配置大量的参数。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/views/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <mvc:resources mapping="/webjars/**" location="/webjars/"/>
Spring Boot通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,Spring Boot提供了一些非功能性特征。
答:
启动器是一套方便的依赖没描述符,它可以放在自己的程序中。你可以一站式的获取你所需要的Spring和相关技术,而不需要依赖描述符的通过示例代码搜索和复制黏贴的负载。
例如,如果你想使用Sping和JPA访问数据库,只需要你的项目包含spring-boot-starter-data-jpa依赖项,你就可以完美进行。
问题四 你能否举一个例子来解释更多Staters的内容?
让我们来思考一个Stater的例子-Spring Boot Stater Web。
如果你想开发一个web应用程序或者是公开REST服务的应用程序。Spring Boot Start Web是首选。让我们使用Spring Initializr 创建一个Spring Boot Start Web的快速项目。
Spring Boot Start Web的依赖项
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
下面的截图是添加进我们应用程序的不同的依赖项
依赖项可以被分为
任何经典的Web应用程序都会使用所有这些依赖项。Spring Boot Starter Web预先打包了这些依赖项。
作为一个开发者,我不需要再担心这些依赖项和它们的兼容版本。
答:
Spring Boot 也提供了其它的启动器项目包括,包括用于开发特定类型应用程序的典型依赖项。
spring-boot-starter-web-services - SOAP Web Services
spring-boot-starter-web - Web 和 RESTful 应用程序
spring-boot-starter-test - 单元测试和集成测试
spring-boot-starter-jdbc - 传统的 JDBC
spring-boot-starter-hateoas - 为服务添加 HATEOAS 功能
spring-boot-starter-security - 使用 SpringSecurity 进行身份验证和授权
spring-boot-starter-data-jpa - 带有 Hibeernate 的 Spring Data JPA
spring-boot-starter-data-rest - 使用 Spring Data REST 公布简单的 REST 服务
答:
Spring Boot致力于快速产品就绪应用程序。为此,它提供了一些譬如高速缓存,日志记录,监控和嵌入式服务器等开箱即用的非功能性特征。
spring-boot-starter-actuator-使用一些如监控和跟踪应用的高级功能
spring-boot-starter-undertow, spring-boot-starter-jetty,
spring-boot-starter-tomcat - 选择您的特定嵌入式Servlet容器spring-boot-starter-logging-使用logback进行日志记录
spring-boot-starter-cache-启用Spring Framework的缓存支持
Spring Boot2.0需要Java8或者更新的版本。Java6和Java7已经不再支持。
推荐阅读:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0.0-M1-Release-Notes
答:
Spring Initializr是启动Spring Boot Projects的一个很好的工具。
就像上图中所展示的一样,我们需要做一下几步:
登录Spring Initializr,按照以下方式进行选择:
选择com.in28minutes.springboot为组
选择studet-services为组件
选择下面的依赖项
Web
Actuator
DevTools
点击生GenerateProject
将项目导入Eclipse。文件-导入-现有的Maven项目
答:
不是的。
Spring Initiatlizr让创建Spring Boot项目变的很容易,但是,你也可以通过设置一个maven项目并添加正确的依赖项来开始一个项目。
在我们的Spring 课程中,我们使用两种方法来创建项目。
第一种方法是start spring io
另外一种方法是在项目的标题为“Basic Web Application”处进行手动设置。
手动设置一个maven项目
这里有几个重要的步骤:
在Eclipse中,使用文件 - 新建 Maven 项目来创建一个新项目添加依赖项。
添加maven插件。
添加 Spring Boot 应用程序类。
到这里,准备工作已经做好!
答:
使用Spring Boot开发工具。
把Spring Boot开发工具添加进入你的项目是简单的。
把下面的依赖项添加至你的Spring Boot Project pom.xml中
重启应用程序,然后就可以了。
同样的,如果你想自动装载页面,有可以看看FiveReload
http://www.logicbig.com/tutorials/spring-framework/spring-boot/boot-live-reload/
在我测试的时候,发现了LiveReload漏洞,如果你测试时也发现了,请一定要告诉我们。
答:
思考一下在你的虚拟机上部署应用程序需要些什么。
第一步: 安装 Java
第二部: 安装 Web 或者是应用程序的服务器(Tomat/Wbesphere/Weblogic 等等)
第三部: 部署应用程序war包如果我们想简化这些步骤,应该如何做呢?
让我们来思考如何使服务器成为应用程序的一部分你只需要一个安装了 Java 的虚拟机,就可以直接在上面部署应用程序了, 是不是很爽?
这个想法是嵌入式服务器的起源。
当我们创建一个可以部署的应用程序的时候,我们将会把服务器(例如,tomcat)嵌入到可部署的服务器中。
例如,对于一个Spring Boot应用程序来说,你可以生成一个包含Embedded Tomcat的应用程序
jar。你就可以想运行正常Java应用程序一样来运行web应用程序了。嵌入式服务器就是我们的可执行单元包含服务器的二进制文件(例如,tomcat.jar)。
答:
在源文件夹下,创建一个名为static的文件夹。然后,你可以把你的静态的内容放在这里面。
例如,myapp.js的路径是resources\static\js\myapp.js
你可以参考它在jsp中的使用方法
<csript src="/js/myapp.js"></script>
错误:HAL browser gives me unauthorized error - Full authenticaition is required to access this resource.
该如何来修复这个错误呢?
{
"timestamp": 1488656019562, "status": 401, "error": "Unauthorized", "message": "Full authentication is required to access this resource.", "path": "/beans" }
两种方法:
方法 1:关闭安全验证
application.properties
management.security.enabled:FALSE
方法二:在日志中搜索密码并传递至请求标头中
答:
来自://projects.spring.io/spring- data/
Spring Data的使命是在保证底层数据存储特殊性的前提下,为数据访问提供一个熟悉的,一致性的,基于Spring的编程模型。这使得使用数据访问技术,关系数据库和非关系数据库,map-reduce框架以及基于云的数据服务变得很容易。
为了让它更简单一些,Spring Data提供了不受底层数据源限制的Abstractions接口。
下面来举一个例子
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <csript src="/js/myapp.js"></script> {
"timestamp": 1488656019562, "status": 401, "error": "Unauthorized", "message": "Full authentication is required to access this resource.", "path": "/beans" }management.security.enabled:FALSE interface TodoRepository extends CrudRepository<Todo, Long> {
你可以定义一简单的库,用来插入,更新,删除和检索代办事项,而不需要编写大量的代码。
答:
Spring Data TEST可以用来发布关于Spring数据库的HATEOAS RESTful资源。
下面是一个使用JPA的例子
@RepositoryRestResource(collectionResourceRel = "todos", path = "todos") public interface TodoRepository extends PagingAndSortingRepository<Todo, Long> {
不需要写太多代码,我们可以发布关于Spring数据库的RESTful API。
下面展示的是一些关于TEST服务器的例子
POST
URL:http://localhost:8080/todos
Use Header:Content-Type:Type:application/json
Request Content
代码如下
{
"user": "Jill", "desc": "Learn Hibernate", "done": false }
响应内容
{
"user": "Jill", "desc": "Learn Hibernate", "done": false, "_links": {
"self": {
"href": "http://localhost:8080/todos/1" },"todo": {
"href": "http://localhost:8080/todos/1" } } }
响应包含新创建资源的href。
答:
@RepositoryRestResource(collectionResourceRel = "users", path = "users") public interface UserRestRepository extends PagingAndSortingRepository<User, Long>
path-这个资源要导出的路径段。
collectionResourceRel-生成指向集合资源的链接时使用的rel值。在生成HATEOAS链接时使用。
答:
如果你使用Eclipse IDE,Eclipse maven 插件确保依赖项或者类文件的改变一经添加,就会被编译并在目标文件中准备好!在这之后,就和其它的Java应用程序一样了。
当你启动java应用程序的时候,spring boot自动配置文件就会魔法般的启用了。
当Spring Boot应用程序检测到你正在开发一个web应用程序的时候,它就会启动tomcat。
答:
在 spring-boot-starter-web 移除现有的依赖项,并把下面这些添加进去。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>
答:
推荐阅读:
https://spring.io/guides/gs/convert-jar-to-war/
下面有spring说明文档直接的链接地址:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging
答:
你需要做下面两个步骤:
在一个项目中生成一个war文件。
将它部署到你最喜欢的服务器(websphere或者Weblogic或者Tomcat and so on)。
第一步:这本入门指南应该有所帮助:
https://spring.io/guides/gs/convert-jar-to-war/
第二步:取决于你的服务器。
答:
RequestMapping具有类属性的,可以进行GET,POST,PUT或者其它的注释中具有的请求方法。
GetMapping是GET 请求方法中的一个特例。它只是ResquestMapping的一个延伸,目的是为了提高清晰度。
答:
我们认为Spring Data Rest很适合快速原型制造!在大型应用程序中使用需要谨慎。
通过Spring Data REST你可以把你的数据实体作为RESTful服务直接发布。
当你设计RESTful服务器的时候,最佳实践表明,你的接口应该考虑到两件重要的事情:
1.你的模型范围。
2.你的客户。
通过With Spring Data REST,你不需要再考虑这两个方面,只需要作为 TEST 服务发布实体。
这就是为什么我们建议使用Spring Data Rest在快速原型构造上面,或者作为项目的初始解决方法。对于完整演变项目来说,这并不是一个好的注意。
答:
好消息是你可以定制它。点击链接“转到完整版本”。你可以配置你想要修改的包名称!
答:
这里是完整的指南:
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
答:
简而言之
JPA 是一个规范或者接口
Hibernate是JPA的一个实现
当我们使用JPA的时候,我们使用javax.persistence包中的注释和接口时,不需要使用hibernate的导入包。
我们建议使用JPA注释,因为哦我们没有将其绑定到Hibernate作为实现。后来(我知道-小于百分之一的几率),我们可以使用另一种JPA实现。
答:
在Spring Boot项目中,当你确保下面的依赖项都在类路里面的时候,你可以加载H2控制台。
web 启动器h2jpa数据启动器
一个内部数据内存只在应用程序执行期间存在。这是学习框架的有效方式。
这不是你希望的真是世界应用程序的方式。
在问题“如何连接一个外部数据库?”中,我们解释了如何连接一个你所选择的数据库。
答:
因为Spring Boot是自动配置的。
下面是我们添加的依赖项
spring-boot-stater-data-jpa对于Hibernate和JPA有过渡依赖性。
当Spring Boot在类路径中检测到Hibernate中,将会自动配置它为默认的JPA实现。
答:
这就是Spring Boot自动配置的魔力。
来自:https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html
Spring Boot auto-configuration试图自动配置你已经添加的基于jar依赖项的Spring应用程序。
比如说,如果HSQLDBis存在你的类路径中,并且,数据库连接 bean 还没有手动配置,那么我们可以自动配置一个内存数据库。
进一步的阅读:
http://www.springboottutorial.com/spring-boot-auto-configuration
答:
让我们以MySQL为例来思考这个问题:
第一步-把mysql连接器的依赖项添加至pom.xml
第二步-从pom.xml中移除H2的依赖项
或者至少把它作为测试的范围。
第三步-安装你的MySQL数据库
更多的来看看这里-https://github.com/in28minutes/jpa-with-hibernate#installing-and-setting-up-mysql
第四步-配置你的MySQL数据库连接
配置application.properties
就是这么简单!
答:
在 application.properties里面,列出了所有的默认值
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
找到下面的属性
spring.datasource.name=testdb # Name of the datasource.
如果你使用了H2内部存储数据库,它里面确定了Spring Boot用来安装你的H2数据库的名字。
答:
将会报下面的错误
Cannot determine embedded database driver class for database type NONE
把H2添加至pom.xml中,然后重启你的服务器
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency>
答:
当你从数据库读取内容的时候,你想把事物中的用户描述或者是其它描述设置为只读模式,以便于Hebernate不需要再次检查实体的变化。这是非常高效的。
答:
@Value的问题在于,您可以通过应用程序分配你配置值。更好的操作是采取集中的方法。
你可以使用 @ConfigurationProperties定义一个配置组件。
@Component @ConfigurationProperties("basic") public class BasicConfiguration {
private boolean value; private String message; private int number;
你可以在application.properties中配置参数。
basic.value: true basic.message: Dynamic Message basic.number: 100
答:
企业应用程序的开发是复杂的,你需要混合的环境:
Dev
QA
Stage
Production
在每个环境中,你想要不同的应用程序配置。
配置文件有助于在不同的环境中进行不同的应用程序配置。
Spring和Spring Boot提供了你可以制定的功能。
不同配置文件中,不同环境的配置是什么?
为一个制定的环境设置活动的配置文件。
Spring Boot将会根据特定环境中设置的活动配置文件来选择应用程序的配置。
答:
配置文件不是设别环境的关键。
在下面的例子中,我们将会用到两个配置文件
dev
prod
缺省的应用程序配置在application.properties中。让我们来看下面的例子:
application.properties
basic.value= true basic.message= Dynamic Message basic.number= 100
我们想要为dev文件自定义application.properties属性。我们需要创建一个名为application-dev.properties的文件,并且重写我们想要自定义的属性。
application-dev.properties
basic.message: Dynamic Message in DEV
一旦你特定配置了配置文件,你需要在环境中设定一个活动的配置文件。
有多种方法可以做到这一点:
在VM参数中使用Dspring.profiles.active=prod
在application.properties中使用spring.profiles.active=prod
文章来源:http://www.3xmq.com/article/1522809264295
答:
我们可以像在任何其他库中一样在Maven项目中包含Spring Boot。
但是,最好的方法是从spring-boot-starter-parent 项目继承并声明依赖于Spring Boot启动器。这样做可以让我们的项目重用Spring Boot的默认设置。 继承spring-boot-starter-parent项目非常简单-我们只需要在pom.xml中指定一个 parent 元素:
我们可以在Maven中央仓库找到最新版本的spring-boot-starter-parent。上面的方式很方便但是并不一定符合实际需要。例如公司要求所有项目依赖构建从一个标准BOM开始,我们就不能按上面的方式进行。在这种情况下,我们可以进行如下引用:
答:
如果我们要禁用特定的自动配置,我们可以使用@EnableAutoConfiguration注解的exclude属性来指示它。如下禁用了数据源自动配置DataSourceAutoConfiguration :
如果我们使用@SpringBootApplication注解。 它具有@EnableAutoConfiguration作为元注解 - 我们同样可以配置exclude属性来禁用自动配置:
我们还可以使用spring.autoconfigure.exclude环境属性禁用自动配置。在application.properties (也可以是application.yml)配
置文件设置如下也可以达到同样的目的:
答:
Spring Boot支持外部配置,允许我们在各种环境中运行相同的应用程序。我们可以使用properties文件,YAML文件 ,环境变量,系统属性和命令行选项参数来指定配置属性。 然后,我们可以访问使用这些属性@Value注释,经由绑定对象的@ConfigurationProperties注释或Environment环境抽象类注入。
以下是最常见的外部配置来源:
命令行属性: 命令行选项参数是以双连字符开头的程序参数,例如-server.port=8080 。Spring Boot将所有参数转换为属性,并将它们添加到环境属性集中。
应用程序属性: 应用程序属性是从application.properties文件或其YAML对应文件加载的属性。默认情况下,Spring Boot会在当前目录,类路径根或其config子目录中搜索此文件。
特定于配置文件的属性: 特定于配置文件的属性从application-{profile} .properties文件或其YAML对应文件加载。{profile}占位符是指活性轮廓。这些文件与非特定属性文件位于相同位置,并且优先于非特定属性文件。
答:
在为Spring应用程序运行集成测试时,我们必须有一个ApplicationContext 。
为了简化测试,Spring Boot为测试提供了一个特殊的注释@SpringBootTest 。此批注从其classes属性指示的配置类创建 ApplicationContext。 如果未设置classes属性,Spring Boot将搜索主配置类。
搜索从包含测试的包开始,直到找到使用@SpringBootApplication或@SpringBootConfiguration注释的类。 请注意,如果我们使用JUnit4 ,我们必须用@RunWith(SpringRunner.class) 装饰测试类。
答:
Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查、审计、统计和HTTP追踪等。所有的这些特性可以通过JMX或者HTTP endpoints来获得。
Actuator同时还可以与外部应用监控系统整合,比如Prometheus , Graphite , DataDog , Influx , Wavefront , New Relic等。
这些系统提供了非常好的仪表盘、图标、分析和告警等功能,使得你可以通过统一的接口轻松的监控和管理你的应用。
Actuator 使用 Micrometer 来整合上面提到的外部应用监控系统。这使得只要通过非常小的配置就可以集成任何应用监控系统。
将Spring Boot Actuator集成到一个项目中非常简单。我们需要做的就是在pom.xml文件中包含spring-boot-starter-actuator启动器:
Spring Boot Actuator可以使用HTT或JMX端点公开操作信息。但是,大多数应用程序都使用HTTP ,其中端点的标识和/执行器前缀形成URL路径。 以下是Actuator提供的一些最常见的内置端点:
auditevents: 公开审计事件信息
env: 公开环境属性
health: 显示应用程序运行状况信息
httptrace: 显示HTTP跟踪信息
info: 显示任意应用程序信息
metrics: 显示指标信息
mappings: 显示所有@RequestMapping路径的列表
scheduledtasks: 显示应用程序中的计划任务
threaddump: 执行线程转储
`beans:所有加载的spring bean
更多关于Spring Boot Actuator的信息可查看Spring Boot 2.x中的Actuator 。
请注意:生产使用Actuator务必保护好这些端点,避免未授权的访问请求。
当我们应用根目录时,可以直接映射,将index.html放入下面的位置:
答:
SpringBoot静态资源直接映射为/**,可以通过根目录来访问。/META-INF/resources/webjars/映射为/webjars/,通过访问 /webjar访问。优先级顺序为:META-INF/resources>resources>static>public。
答:
WebMvcConfigurerAdapter实现WebMvcConfigurer接口,常用的可能需要重写的方法有下面几个:
答:
@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。其它的4个@Target、@Retention、@Documented、@Inherited,也重要,但应该不是本题想问的知识点。
答:
等价于以默认属性使用@Configuration,@EnableAutoConfiguration和@ComponentScan。
该面试题答案解析完整文档获取方式:Spring Boot面试题总结